Files
nashel-frontend/.next/static/chunks/app/dashboard/offers/page-48b2cdfdb51a0383.js
T

1 line
16 KiB
JavaScript

(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[233],{25:(e,r,t)=>{Promise.resolve().then(t.bind(t,6776))},7401:(e,r,t)=>{"use strict";t.d(r,{A:()=>l});var a=t(2115);let s=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),i=function(){for(var e=arguments.length,r=Array(e),t=0;t<e;t++)r[t]=arguments[t];return r.filter((e,r,t)=>!!e&&""!==e.trim()&&t.indexOf(e)===r).join(" ").trim()};var o={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let n=(0,a.forwardRef)((e,r)=>{let{color:t="currentColor",size:s=24,strokeWidth:n=2,absoluteStrokeWidth:l,className:c="",children:d,iconNode:u,...f}=e;return(0,a.createElement)("svg",{ref:r,...o,width:s,height:s,stroke:t,strokeWidth:l?24*Number(n)/Number(s):n,className:i("lucide",c),...f},[...u.map(e=>{let[r,t]=e;return(0,a.createElement)(r,t)}),...Array.isArray(d)?d:[d]])}),l=(e,r)=>{let t=(0,a.forwardRef)((t,o)=>{let{className:l,...c}=t;return(0,a.createElement)(n,{ref:o,iconNode:r,className:i("lucide-".concat(s(e)),l),...c})});return t.displayName="".concat(e),t}},4505:(e,r,t)=>{"use strict";t.d(r,{A:()=>a});let a=(0,t(7401).A)("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]])},5686:(e,r,t)=>{"use strict";t.d(r,{A:()=>a});let a=(0,t(7401).A)("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]])},6046:(e,r,t)=>{"use strict";var a=t(6658);t.o(a,"useRouter")&&t.d(r,{useRouter:function(){return a.useRouter}})},6776:(e,r,t)=>{"use strict";t.r(r),t.d(r,{default:()=>w});var a=t(5155),s=t(2115),i=t(9384),o=t(9749),n=t(3312),l=t(814),c=t(8173),d=t.n(c),u=t(6046),f=t(4505),h=t(7401);let p=(0,h.A)("CirclePlus",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M8 12h8",key:"1wcyev"}],["path",{d:"M12 8v8",key:"napkw2"}]]),m=(0,h.A)("Pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]),g=(0,h.A)("CirclePause",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"10",x2:"10",y1:"15",y2:"9",key:"c1nkhi"}],["line",{x1:"14",x2:"14",y1:"15",y2:"9",key:"h65svq"}]]),x=(0,h.A)("CirclePlay",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polygon",{points:"10 8 16 12 10 16 10 8",key:"1cimsy"}]]);var y=t(5686),v=t(2928);function w(){let e=(0,u.useRouter)(),{user:r,isAuth:t}=(0,v.B)(),[c,h]=(0,s.useState)([]),[w,k]=(0,s.useState)(!0);return((0,s.useEffect)(()=>{var a;if(t){if(!(null==r?void 0:null===(a=r.roles)||void 0===a?void 0:a.some(e=>["Master","Company","Candidate","Admin"].includes(e)))){l.oR.error("Чтобы создавать услуги, вам нужно стать исполнителем"),e.push("/dashboard/become-performer");return}(async()=>{try{let e=await (0,i.aT)();h(e||[])}catch(e){console.error(e),l.oR.error("Не удалось загрузить ваши услуги")}finally{k(!1)}})()}},[t,r,e]),w)?(0,a.jsx)("div",{className:"flex justify-center items-center h-48",children:(0,a.jsx)(f.A,{className:"h-8 w-8 animate-spin text-muted-foreground"})}):0===c.length?(0,a.jsx)("div",{className:"container max-w-5xl py-10",children:(0,a.jsxs)("div",{className:"flex flex-col items-center justify-center p-12 text-center bg-card rounded-2xl border shadow-sm",children:[(0,a.jsx)("div",{className:"mb-4 rounded-full bg-primary/10 p-4",children:(0,a.jsx)(p,{className:"h-12 w-12 text-primary"})}),(0,a.jsx)("h2",{className:"text-2xl font-bold mb-3",children:"У вас еще нет услуг"}),(0,a.jsx)("p",{className:"text-muted-foreground mb-8 max-w-md text-lg",children:"Создайте свою первую услугу, чтобы клиенты могли вас найти и предложить заказ."}),(0,a.jsx)(d(),{href:"/dashboard/offers/create",children:(0,a.jsxs)(n.$,{size:"lg",className:"gap-2",children:[(0,a.jsx)(p,{className:"h-5 w-5"}),"Создать первую услугу"]})})]})}):(0,a.jsxs)("div",{className:"container max-w-5xl py-10",children:[(0,a.jsxs)("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4 mb-8 bg-card p-6 rounded-2xl shadow-sm border",children:[(0,a.jsx)("h1",{className:"text-3xl font-bold",children:"Мои услуги"}),(0,a.jsx)(d(),{href:"/dashboard/offers/create",children:(0,a.jsxs)(n.$,{className:"gap-2",children:[(0,a.jsx)(p,{className:"h-4 w-4"}),"Создать услугу"]})})]}),(0,a.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:c.map(e=>(0,a.jsxs)(o.Zp,{className:"flex flex-col transition-all hover:shadow-md ".concat(e.isActive?"border-border":"bg-muted/30 border-dashed"),children:[(0,a.jsxs)(o.aR,{className:"pb-3 relative",children:[(0,a.jsx)(o.ZB,{className:"text-xl font-semibold line-clamp-1 ".concat(!e.isActive&&"text-muted-foreground"),children:e.title}),(0,a.jsx)(o.BT,{children:e.isActive?(0,a.jsxs)("span",{className:"inline-flex items-center text-green-600 dark:text-green-500 text-xs font-medium bg-green-100 dark:bg-green-900/30 px-2 py-0.5 rounded-full",children:[(0,a.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-green-600 dark:bg-green-500 mr-1.5"}),"Активна"]}):(0,a.jsxs)("span",{className:"inline-flex items-center text-muted-foreground text-xs font-medium bg-muted px-2 py-0.5 rounded-full",children:[(0,a.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-muted-foreground mr-1.5"}),"Приостановлена"]})})]}),(0,a.jsxs)(o.Wu,{className:"flex-1 ".concat(!e.isActive&&"opacity-70 grayscale"),children:[(0,a.jsx)("p",{className:"text-sm text-foreground/80 line-clamp-3 mb-4 leading-relaxed",children:e.description}),(0,a.jsxs)("div",{className:"font-semibold text-lg flex items-center gap-1",children:[e.price.amount," ",e.price.currency,(0,a.jsx)("span",{className:"text-sm font-normal text-muted-foreground relative top-0.5",children:0===e.price.type?"фиксированно":1===e.price.type?"в час":"договорная"})]})]}),(0,a.jsxs)(o.wL,{className:"flex gap-2 justify-end bg-muted/20 pt-4 mt-auto border-t",children:[(0,a.jsxs)(n.$,{variant:"outline",size:"sm",className:"group flex items-center gap-0 overflow-hidden px-2 hover:px-3 hover:bg-primary/10 border-transparent hover:border-primary/20 text-muted-foreground hover:text-primary transition-all duration-300 ease-out",children:[(0,a.jsx)(m,{className:"h-4 w-4 shrink-0"}),(0,a.jsx)("span",{className:"max-w-0 overflow-hidden whitespace-nowrap opacity-0 group-hover:max-w-[120px] group-hover:opacity-100 group-hover:ml-2 transition-all duration-300 ease-out",children:"Редактировать"})]}),(0,a.jsxs)(n.$,{variant:"outline",size:"sm",className:"group flex items-center gap-0 overflow-hidden px-2 hover:px-3 hover:bg-orange-500/10 border-transparent hover:border-orange-500/20 text-muted-foreground hover:text-orange-500 transition-all duration-300 ease-out",onClick:()=>l.oR.info("Функция паузы в разработке"),children:[e.isActive?(0,a.jsx)(g,{className:"h-4 w-4 shrink-0"}):(0,a.jsx)(x,{className:"h-4 w-4 shrink-0"}),(0,a.jsx)("span",{className:"max-w-0 overflow-hidden whitespace-nowrap opacity-0 group-hover:max-w-[120px] group-hover:opacity-100 group-hover:ml-2 transition-all duration-300 ease-out",children:e.isActive?"Приостановить":"Активировать"})]}),(0,a.jsxs)(n.$,{variant:"outline",size:"sm",className:"group flex items-center gap-0 overflow-hidden px-2 hover:px-3 hover:bg-destructive/10 border-transparent hover:border-destructive/20 text-muted-foreground hover:text-destructive transition-all duration-300 ease-out",onClick:()=>l.oR.info("Функция удаления в разработке"),children:[(0,a.jsx)(y.A,{className:"h-4 w-4 shrink-0"}),(0,a.jsx)("span",{className:"max-w-0 overflow-hidden whitespace-nowrap opacity-0 group-hover:max-w-[100px] group-hover:opacity-100 group-hover:ml-2 transition-all duration-300 ease-out",children:"Удалить"})]})]})]},e.id))})]})}},3312:(e,r,t)=>{"use strict";t.d(r,{$:()=>c});var a=t(5155),s=t(2115),i=t(2317),o=t(1027),n=t(7549);let l=(0,o.F)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),c=s.forwardRef((e,r)=>{let{className:t,variant:s,size:o,asChild:c=!1,...d}=e,u=c?i.DX:"button";return(0,a.jsx)(u,{className:(0,n.cn)(l({variant:s,size:o,className:t})),ref:r,...d})});c.displayName="Button"},9749:(e,r,t)=>{"use strict";t.d(r,{BT:()=>c,Wu:()=>d,ZB:()=>l,Zp:()=>o,aR:()=>n,wL:()=>u});var a=t(5155),s=t(2115),i=t(7549);let o=s.forwardRef((e,r)=>{let{className:t,...s}=e;return(0,a.jsx)("div",{ref:r,className:(0,i.cn)("rounded-lg border bg-card text-card-foreground shadow-sm",t),...s})});o.displayName="Card";let n=s.forwardRef((e,r)=>{let{className:t,...s}=e;return(0,a.jsx)("div",{ref:r,className:(0,i.cn)("flex flex-col space-y-1.5 p-6",t),...s})});n.displayName="CardHeader";let l=s.forwardRef((e,r)=>{let{className:t,...s}=e;return(0,a.jsx)("h3",{ref:r,className:(0,i.cn)("text-2xl font-semibold leading-none tracking-tight",t),...s})});l.displayName="CardTitle";let c=s.forwardRef((e,r)=>{let{className:t,...s}=e;return(0,a.jsx)("p",{ref:r,className:(0,i.cn)("text-sm text-muted-foreground",t),...s})});c.displayName="CardDescription";let d=s.forwardRef((e,r)=>{let{className:t,...s}=e;return(0,a.jsx)("div",{ref:r,className:(0,i.cn)("p-6 pt-0",t),...s})});d.displayName="CardContent";let u=s.forwardRef((e,r)=>{let{className:t,...s}=e;return(0,a.jsx)("div",{ref:r,className:(0,i.cn)("flex items-center p-6 pt-0",t),...s})});u.displayName="CardFooter"},2928:(e,r,t)=>{"use strict";t.d(r,{B:()=>o});var a=t(9827),s=t(3030),i=t(3705);let o=(0,a.v)((e,r)=>({user:null,isAuth:!1,isLoading:!1,isInitialized:!1,checkAuth:async()=>{if(!(0,s.getCookie)("accessToken")){e({isInitialized:!0,isAuth:!1});return}e({isLoading:!0});try{await r().getProfile(),e({isAuth:!0,isInitialized:!0})}catch(r){console.error("Auth check failed",r),(0,s.deleteCookie)("accessToken"),(0,s.deleteCookie)("refreshToken"),e({user:null,isAuth:!1,isInitialized:!0})}finally{e({isLoading:!1})}},login:async(t,a)=>{e({isLoading:!0});try{let{accessToken:o,refreshToken:n}=(await i.F.post("/auth/login",{phone:t,password:a})).data;(0,s.setCookie)("accessToken",o),(0,s.setCookie)("refreshToken",n),e({isAuth:!0}),await r().getProfile()}finally{e({isLoading:!1})}},register:async r=>{e({isLoading:!0});try{let{confirmPassword:e,...t}=r;await i.F.post("/auth/register",t)}finally{e({isLoading:!1})}},logout:()=>{(0,s.deleteCookie)("accessToken"),(0,s.deleteCookie)("refreshToken"),e({user:null,isAuth:!1}),window.location.href="/auth/login"},getProfile:async()=>{try{let r=await i.F.get("/profile",{params:{_t:Date.now()}});e({user:r.data,isAuth:!0})}catch(e){console.error("Profile load failed",e)}},updateProfile:async t=>{e({isLoading:!0});try{await i.F.put("/profile",t),await r().getProfile()}finally{e({isLoading:!1})}},changePhone:async t=>{e({isLoading:!0});try{await i.F.post("/profile/change-phone",{newPhone:t}),await r().getProfile()}finally{e({isLoading:!1})}},becomePerformer:async()=>{e({isLoading:!0});try{await i.F.post("/profile/become-performer"),await r().getProfile()}finally{e({isLoading:!1})}},becomePerformerFull:async t=>{e({isLoading:!0});try{await i.F.post("/profile/become-performer",{description:t.description,competencies:t.competencies,location:t.location,currentLocation:null,isAlwaysReady:t.workSchedule.isAlwaysReady,workingDays:t.workSchedule.isAlwaysReady?null:JSON.stringify(t.workSchedule.schedulePerDay)}),await r().getProfile()}finally{e({isLoading:!1})}},updateCompetencies:async t=>{e({isLoading:!0});try{await i.F.put("/profile/competencies",{Competencies:t}),await r().getProfile()}finally{e({isLoading:!1})}},uploadAvatar:async t=>{e({isLoading:!0});try{let e=new FormData;e.append("file",t),await i.F.post("/profile/avatar",e,{headers:{"Content-Type":"multipart/form-data"}}),await r().getProfile()}finally{e({isLoading:!1})}},changePassword:async(t,a)=>{e({isLoading:!0});try{var s;let e=null===(s=r().user)||void 0===s?void 0:s.id;if(!e)throw Error("Пользователь не авторизован");await i.F.post("/profile/change-password",{accountId:e,oldPassword:t,newPassword:a})}finally{e({isLoading:!1})}},updateLocation:async(t,a)=>{e({isLoading:!0});try{var s;let e=null===(s=r().user)||void 0===s?void 0:s.id;if(!e)throw Error("Пользователь не авторизован");await i.F.put("/profile/location",{accountId:e,location:t,currentLocation:a}),await r().getProfile()}finally{e({isLoading:!1})}},updateSchedule:async(t,a)=>{e({isLoading:!0});try{var s;let e=null===(s=r().user)||void 0===s?void 0:s.id;if(!e)throw Error("Пользователь не авторизован");let o=t?"[]":JSON.stringify(a||{});await i.F.put("/profile/schedule",{accountId:e,isAlwaysReady:t,workingDaysJson:o}),await r().getProfile()}finally{e({isLoading:!1})}}}))},3705:(e,r,t)=>{"use strict";t.d(r,{F:()=>i});var a=t(2651),s=t(3030);let i=a.A.create({baseURL:"http://127.0.0.1:5000/api",headers:{"Content-Type":"application/json"}});i.interceptors.request.use(e=>{let r=(0,s.getCookie)("accessToken");return r&&e.headers&&(e.headers.Authorization="Bearer ".concat(r)),console.log("\uD83D\uDE80 Sending request to: ".concat(e.baseURL).concat(e.url)),e});let o=!1,n=[],l=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;n.forEach(t=>{e?t.reject(e):t.resolve(r)}),n=[]};i.interceptors.response.use(e=>e,async e=>{var r;let t=e.config;if((null===(r=e.response)||void 0===r?void 0:r.status)===401&&!t._retry){if(o)return new Promise((e,r)=>{n.push({resolve:e,reject:r})}).then(e=>(t.headers.Authorization="Bearer ".concat(e),i(t))).catch(e=>Promise.reject(e));t._retry=!0,o=!0;let e=(0,s.getCookie)("refreshToken");try{let{accessToken:r,refreshToken:o}=(await a.A.post("".concat("http://127.0.0.1:5000/api","/auth/refresh"),{refreshToken:e})).data;return(0,s.setCookie)("accessToken",r),(0,s.setCookie)("refreshToken",o),i.defaults.headers.common.Authorization="Bearer ".concat(r),l(null,r),i(t)}catch(e){return l(e,null),(0,s.deleteCookie)("accessToken"),(0,s.deleteCookie)("refreshToken"),window.location.href="/auth/login",Promise.reject(e)}finally{o=!1}}return Promise.reject(e)})},9384:(e,r,t)=>{"use strict";t.d(r,{aT:()=>i,bW:()=>s,ts:()=>o});var a=t(3705);let s=async()=>(await a.F.get("/catalog/categories")).data,i=async()=>(await a.F.get("/catalog/offers/my")).data,o=async e=>(await a.F.post("/catalog/offers",e)).data},7549:(e,r,t)=>{"use strict";t.d(r,{cn:()=>i,n:()=>o});var a=t(3463),s=t(9795);function i(){for(var e=arguments.length,r=Array(e),t=0;t<e;t++)r[t]=arguments[t];return(0,s.QP)((0,a.$)(r))}function o(e){if(!e)return"—";let r=e.replace(/\D/g,"");if(11===r.length){let e="8"===r[0]?"8":"+7";return"".concat(e," (").concat(r.slice(1,4),") ").concat(r.slice(4,7),"-").concat(r.slice(7,9),"-").concat(r.slice(9,11))}return e}}},e=>{var r=r=>e(e.s=r);e.O(0,[92,173,814,441,517,358],()=>r(25)),_N_E=e.O()}]);