Nicholai 1378bff909 updated the following components to use the API instead of hardcoded data:
### 1. __artists-grid.tsx__ (Main Artist Browsing)

- Uses  hook from
- Fetches from  endpoint
- Includes loading states, error handling, and filtering
- __Impact:__ Primary artist browsing experience now fully API-driven

### 2. __artist-portfolio.tsx__ (Individual Artist Pages)

- Uses  hook
- Fetches from  endpoint
- Fixed all TypeScript errors (changed image ID from number to string)
- Added loading/error states
- __Impact:__ Artist detail pages now fully API-driven

### 3. __booking-form.tsx__ (Artist Selection Dropdown)

- Uses  hook for artist selection
- Updated to use API data structure ( array, , etc.)
- Added loading state for dropdown
- __Impact:__ Booking flow now uses real artist data

## ⚠️ REMAINING (Decorative/Marketing Components)

Two complex components still use hardcoded :

### 4. __artists-section.tsx__ (Homepage Hero - 348 lines)

- Homepage marketing section with complex parallax scrolling
- Uses hardcoded artist data for visual cards
- __Non-blocking:__ This is a decorative homepage element

### 5. __artists-page-section.tsx__ (Artists Page Section - 413 lines)

- Full-page artists showcase with parallax effects
- Uses hardcoded artist data for visual layout
- __Non-blocking:__ Alternative to artists-grid.tsx (which IS using API)

##
2025-10-06 04:44:08 -06:00

1 line
11 KiB
JavaScript

(()=>{var e={};e.id=8098,e.ids=[8098],e.modules={72934:e=>{"use strict";e.exports=require("next/dist/client/components/action-async-storage.external.js")},54580:e=>{"use strict";e.exports=require("next/dist/client/components/request-async-storage.external.js")},45869:e=>{"use strict";e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},20399:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},55315:e=>{"use strict";e.exports=require("path")},17360:e=>{"use strict";e.exports=require("url")},14201:(e,t,r)=>{"use strict";r.r(t),r.d(t,{GlobalError:()=>s.a,__next_app__:()=>p,originalPathname:()=>u,pages:()=>c,routeModule:()=>m,tree:()=>d}),r(54766),r(40656),r(40509),r(70546);var a=r(30170),n=r(45002),i=r(83876),s=r.n(i),o=r(66299),l={};for(let e in o)0>["default","tree","pages","GlobalError","originalPathname","__next_app__","routeModule"].indexOf(e)&&(l[e]=()=>o[e]);r.d(t,l);let d=["",{children:["auth",{children:["signin",{children:["__PAGE__",{},{page:[()=>Promise.resolve().then(r.bind(r,54766)),"/home/Nicholai/Documents/Dev/united_v03/united-tattoo/united-tattoo/app/auth/signin/page.tsx"]}]},{}]},{metadata:{icon:[async e=>(await Promise.resolve().then(r.bind(r,57481))).default(e)],apple:[],openGraph:[],twitter:[],manifest:void 0}}]},{layout:[()=>Promise.resolve().then(r.bind(r,40656)),"/home/Nicholai/Documents/Dev/united_v03/united-tattoo/united-tattoo/app/layout.tsx"],error:[()=>Promise.resolve().then(r.bind(r,40509)),"/home/Nicholai/Documents/Dev/united_v03/united-tattoo/united-tattoo/app/error.tsx"],"not-found":[()=>Promise.resolve().then(r.bind(r,70546)),"/home/Nicholai/Documents/Dev/united_v03/united-tattoo/united-tattoo/app/not-found.tsx"],metadata:{icon:[async e=>(await Promise.resolve().then(r.bind(r,57481))).default(e)],apple:[],openGraph:[],twitter:[],manifest:void 0}}],c=["/home/Nicholai/Documents/Dev/united_v03/united-tattoo/united-tattoo/app/auth/signin/page.tsx"],u="/auth/signin/page",p={require:r,loadChunk:()=>Promise.resolve()},m=new a.AppPageRouteModule({definition:{kind:n.x.APP_PAGE,page:"/auth/signin/page",pathname:"/auth/signin",bundlePath:"",filename:"",appPaths:[]},userland:{loaderTree:d}})},55437:(e,t,r)=>{Promise.resolve().then(r.bind(r,86544))},86544:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>m});var a=r(97247),n=r(19898),i=r(28964),s=r(34178),o=r(58053),l=r(27757),d=r(70170),c=r(22394),u=r(2502),p=r(8749);function m(){let[e,t]=(0,i.useState)(!1),[r,m]=(0,i.useState)(null),f=(0,s.useSearchParams)(),x=(0,s.useRouter)(),g=f.get("error"),h=f.get("callbackUrl")||"/admin",v=async e=>{e.preventDefault(),t(!0),m(null);let r=new FormData(e.currentTarget),a=r.get("email"),i=r.get("password");try{let e=await (0,n.signIn)("credentials",{email:a,password:i,redirect:!1});e?.error?m("Invalid email or password. Please try again."):e?.ok&&(x.push(h),x.refresh())}catch(e){m("An error occurred during sign in. Please try again.")}finally{t(!1)}};return a.jsx("div",{className:"min-h-screen flex items-center justify-center bg-gray-50 py-12 px-4 sm:px-6 lg:px-8",children:(0,a.jsxs)(l.Zb,{className:"w-full max-w-md",children:[(0,a.jsxs)(l.Ol,{className:"text-center",children:[a.jsx(l.ll,{className:"text-2xl font-bold",children:"Sign In"}),a.jsx(l.SZ,{children:"Access the United Tattoo Studio admin dashboard"})]}),(0,a.jsxs)(l.aY,{className:"space-y-6",children:[(r||g)&&a.jsx(u.bZ,{variant:"destructive",children:a.jsx(u.X,{children:r||("CredentialsSignin"===g?"Invalid email or password. Please try again.":"An error occurred during sign in. Please try again.")})}),(0,a.jsxs)("form",{onSubmit:v,className:"space-y-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[a.jsx(c._,{htmlFor:"email",children:"Email"}),a.jsx(d.I,{id:"email",name:"email",type:"email",placeholder:"nicholai@biohazardvfx.com",required:!0,disabled:e})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[a.jsx(c._,{htmlFor:"password",children:"Password"}),a.jsx(d.I,{id:"password",name:"password",type:"password",placeholder:"Enter your password",required:!0,disabled:e})]}),a.jsx(o.z,{type:"submit",className:"w-full",disabled:e,children:e?(0,a.jsxs)(a.Fragment,{children:[a.jsx(p.Z,{className:"mr-2 h-4 w-4 animate-spin"}),"Signing in..."]}):"Sign In"})]}),(0,a.jsxs)("div",{className:"text-center text-sm text-gray-500",children:[a.jsx("p",{children:"For development testing:"}),(0,a.jsxs)("p",{className:"text-xs mt-1",children:["Use any email/password combination.",a.jsx("br",{}),"Admin: nicholai@biohazardvfx.com"]})]})]})]})})}},2502:(e,t,r)=>{"use strict";r.d(t,{Cd:()=>l,X:()=>d,bZ:()=>o});var a=r(97247);r(28964);var n=r(87972),i=r(25008);let s=(0,n.j)("relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",{variants:{variant:{default:"bg-card text-card-foreground",destructive:"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90"}},defaultVariants:{variant:"default"}});function o({className:e,variant:t,...r}){return a.jsx("div",{"data-slot":"alert",role:"alert",className:(0,i.cn)(s({variant:t}),e),...r})}function l({className:e,...t}){return a.jsx("div",{"data-slot":"alert-title",className:(0,i.cn)("col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight",e),...t})}function d({className:e,...t}){return a.jsx("div",{"data-slot":"alert-description",className:(0,i.cn)("text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",e),...t})}},27757:(e,t,r)=>{"use strict";r.d(t,{Ol:()=>s,SZ:()=>l,Zb:()=>i,aY:()=>d,eW:()=>c,ll:()=>o});var a=r(97247);r(28964);var n=r(25008);function i({className:e,...t}){return a.jsx("div",{"data-slot":"card",className:(0,n.cn)("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",e),...t})}function s({className:e,...t}){return a.jsx("div",{"data-slot":"card-header",className:(0,n.cn)("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",e),...t})}function o({className:e,...t}){return a.jsx("div",{"data-slot":"card-title",className:(0,n.cn)("leading-none font-semibold",e),...t})}function l({className:e,...t}){return a.jsx("div",{"data-slot":"card-description",className:(0,n.cn)("text-muted-foreground text-sm",e),...t})}function d({className:e,...t}){return a.jsx("div",{"data-slot":"card-content",className:(0,n.cn)("px-6",e),...t})}function c({className:e,...t}){return a.jsx("div",{"data-slot":"card-footer",className:(0,n.cn)("flex items-center px-6 [.border-t]:pt-6",e),...t})}},70170:(e,t,r)=>{"use strict";r.d(t,{I:()=>i});var a=r(97247);r(28964);var n=r(25008);function i({className:e,type:t,...r}){return a.jsx("input",{type:t,"data-slot":"input",className:(0,n.cn)("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",e),...r})}},22394:(e,t,r)=>{"use strict";r.d(t,{_:()=>s});var a=r(97247);r(28964);var n=r(94056),i=r(25008);function s({className:e,...t}){return a.jsx(n.f,{"data-slot":"label",className:(0,i.cn)("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",e),...t})}},8749:(e,t,r)=>{"use strict";r.d(t,{Z:()=>a});let a=(0,r(26323).Z)("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]])},54766:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>a});let a=(0,r(45347).createProxy)(String.raw`/home/Nicholai/Documents/Dev/united_v03/united-tattoo/united-tattoo/app/auth/signin/page.tsx#default`)},54203:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"ReflectAdapter",{enumerable:!0,get:function(){return r}});class r{static get(e,t,r){let a=Reflect.get(e,t,r);return"function"==typeof a?a.bind(e):a}static set(e,t,r,a){return Reflect.set(e,t,r,a)}static has(e,t){return Reflect.has(e,t)}static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}}},94056:(e,t,r)=>{"use strict";r.d(t,{f:()=>p});var a=r(28964);function n(e,t){if("function"==typeof e)return e(t);null!=e&&(e.current=t)}r(46817);var i=r(97247),s=a.forwardRef((e,t)=>{let{children:r,...n}=e,s=a.Children.toArray(r),l=s.find(d);if(l){let e=l.props.children,r=s.map(t=>t!==l?t:a.Children.count(e)>1?a.Children.only(null):a.isValidElement(e)?e.props.children:null);return(0,i.jsx)(o,{...n,ref:t,children:a.isValidElement(e)?a.cloneElement(e,void 0,r):null})}return(0,i.jsx)(o,{...n,ref:t,children:r})});s.displayName="Slot";var o=a.forwardRef((e,t)=>{let{children:r,...i}=e;if(a.isValidElement(r)){let e=function(e){let t=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning;return r?e.ref:(r=(t=Object.getOwnPropertyDescriptor(e,"ref")?.get)&&"isReactWarning"in t&&t.isReactWarning)?e.props.ref:e.props.ref||e.ref}(r);return a.cloneElement(r,{...function(e,t){let r={...t};for(let a in t){let n=e[a],i=t[a];/^on[A-Z]/.test(a)?n&&i?r[a]=(...e)=>{i(...e),n(...e)}:n&&(r[a]=n):"style"===a?r[a]={...n,...i}:"className"===a&&(r[a]=[n,i].filter(Boolean).join(" "))}return{...e,...r}}(i,r.props),ref:t?function(...e){return t=>{let r=!1,a=e.map(e=>{let a=n(e,t);return r||"function"!=typeof a||(r=!0),a});if(r)return()=>{for(let t=0;t<a.length;t++){let r=a[t];"function"==typeof r?r():n(e[t],null)}}}}(t,e):e})}return a.Children.count(r)>1?a.Children.only(null):null});o.displayName="SlotClone";var l=({children:e})=>(0,i.jsx)(i.Fragment,{children:e});function d(e){return a.isValidElement(e)&&e.type===l}var c=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","span","svg","ul"].reduce((e,t)=>{let r=a.forwardRef((e,r)=>{let{asChild:a,...n}=e,o=a?s:t;return"undefined"!=typeof window&&(window[Symbol.for("radix-ui")]=!0),(0,i.jsx)(o,{...n,ref:r})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{}),u=a.forwardRef((e,t)=>(0,i.jsx)(c.label,{...e,ref:t,onMouseDown:t=>{t.target.closest("button, input, select, textarea")||(e.onMouseDown?.(t),!t.defaultPrevented&&t.detail>1&&t.preventDefault())}}));u.displayName="Label";var p=u}};var t=require("../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),a=t.X(0,[9379,1488,1511,4106],()=>r(14201));module.exports=a})();