@gv-sh/specgen-user
Version:
[](https://github.com/gv-sh/specgen-user)
2 lines • 9.48 kB
JavaScript
/*! For license information please see 378.2e6f47d4.chunk.js.LICENSE.txt */
;(self.webpackChunk_gv_sh_specgen_user=self.webpackChunk_gv_sh_specgen_user||[]).push([[378],{5378:(e,t,a)=>{a.r(t),a.d(t,{default:()=>d});var r=a(9950),s=a(9294),n=a(7413);const o=(0,a(6230).A)("folder-open",[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]]);var c=a(5939),l=a(90),i=a(4414);const d=e=>{let{onCategorySelect:t}=e;const[a,d]=(0,r.useState)([]),[u,g]=(0,r.useState)(null),[h,m]=(0,r.useState)(!0),[f,p]=(0,r.useState)(null),[y,v]=(0,r.useState)({}),[x,w]=(0,r.useState)([]);(0,r.useEffect)((()=>{(async()=>{try{m(!0);const e=((await(0,s.jE)()).data||[]).filter((e=>"Show"===e.visibility));d(e),p(null)}catch(e){console.error("Error loading categories:",e),p("Failed to load categories. Please try again later.")}finally{m(!1)}})()}),[]),(0,r.useEffect)((()=>{(async()=>{if(!a.length)return;const e={},t=[];for(const n of a)try{const a=((await(0,s.nM)(n.id)).data||[]).length;e[n.id]=a,a>0&&t.push(n)}catch(r){console.error("Error fetching parameters for ".concat(n.id,":"),r),e[n.id]=0}v(e),w(t)})()}),[a]);const A=(0,r.useCallback)((e=>{g(e),t&&"function"===typeof t&&t([e])}),[t]);return h?(0,i.jsx)("div",{className:"flex justify-center items-center h-full py-4",children:(0,i.jsx)("div",{className:"h-4 w-4 animate-spin rounded-full border-2 border-primary/100 border-t-primary"})}):f?(0,i.jsx)(n.Fc,{variant:"destructive",children:(0,i.jsx)(n.TN,{children:f})}):0===x.length?(0,i.jsx)(n.Fc,{children:(0,i.jsx)(n.TN,{children:"No categories with parameters available."})}):(0,i.jsxs)("div",{className:"flex flex-col h-full space-y-4",children:[(0,i.jsx)("div",{children:(0,i.jsx)("h2",{className:"text-sm font-medium text-foreground pt-3",children:"Select Category"})}),(0,i.jsx)("div",{className:"flex-grow overflow-auto",children:(0,i.jsx)("div",{className:"space-y-1",children:x.map((e=>{const t=(null===u||void 0===u?void 0:u.id)===e.id,a=y[e.id]||0;return(0,i.jsxs)("button",{className:(0,l.cn)("flex w-full items-center justify-between px-3 py-2 text-sm rounded-md",t?"bg-primary text-accent-foreground":"hover:bg-primary/100 hover:text-accent-foreground"),onClick:()=>A(e),title:e.description||"No description available",children:[(0,i.jsxs)("div",{className:"flex items-center gap-2",children:[t?(0,i.jsx)(o,{className:"h-4 w-4"}):(0,i.jsx)(c.A,{className:"h-4 w-4"}),(0,i.jsx)("span",{children:e.name})]}),(0,i.jsx)("span",{className:"inline-flex items-center justify-center h-5 min-w-[20px] px-1.5 text-xs font-medium rounded-full bg-muted text-muted-foreground",children:a})]},e.id)}))})})]})}},5939:(e,t,a)=>{a.d(t,{A:()=>r});const r=(0,a(6230).A)("folder",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]])},7413:(e,t,a)=>{a.d(t,{Fc:()=>u,TN:()=>g});var r=a(9379),s=a(3986),n=a(9950),o=a(90),c=a(4414);const l=["className","variant"],i=["className","children"],d=["className"],u=n.forwardRef(((e,t)=>{let{className:a,variant:n="default"}=e,i=(0,s.A)(e,l);return(0,c.jsx)("div",(0,r.A)({ref:t,role:"alert",className:(0,o.cn)("relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground",{"bg-destructive/15 text-destructive border-destructive/50":"destructive"===n,"bg-muted border-border":"default"===n},a)},i))}));u.displayName="Alert";n.forwardRef(((e,t)=>{let{className:a,children:n}=e,l=(0,s.A)(e,i);return(0,c.jsx)("h5",(0,r.A)((0,r.A)({ref:t,className:(0,o.cn)("mb-1 font-medium leading-none tracking-tight",a)},l),{},{children:n}))})).displayName="AlertTitle";const g=n.forwardRef(((e,t)=>{let{className:a}=e,n=(0,s.A)(e,d);return(0,c.jsx)("div",(0,r.A)({ref:t,className:(0,o.cn)("text-sm [&_p]:leading-relaxed",a)},n))}));g.displayName="AlertDescription"},9294:(e,t,a)=>{a.d(t,{jE:()=>d,nM:()=>u,B8:()=>m,lX:()=>g});var r=a(9379),s=a(6910);const n={API_URL:"/api",PORT:{NODE_ENV:"production",PUBLIC_URL:"",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,FAST_REFRESH:!0,REACT_APP_API_URL:"/api"}.PORT||3002,TIMEOUT:5e3};console.log("Using API URL:",n.API_URL);const o=n;const c=new class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:50;this.cache=new Map,this.maxSize=e}get(e){if(this.cache.has(e)){const{value:t,expiry:a}=this.cache.get(e);if(!a||a>Date.now())return t;this.cache.delete(e)}}set(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(this.cache.size>=this.maxSize){const e=this.cache.keys().next().value;this.cache.delete(e)}const r=a?Date.now()+a:null;this.cache.set(e,{value:t,expiry:r})}clear(){this.cache.clear()}},l="".concat(o.API_URL,"/api");console.log("API Base URL:",l);const i=s.A.create({baseURL:l,headers:{"Content-Type":"application/json"}}),d=async()=>{try{const e="categories",t=c.get(e);if(t)return console.log("Using cached categories data"),t;const a=await i.get("/categories");return c.set(e,a.data,3e5),a.data}catch(e){throw console.error("Error fetching categories:",e),e}},u=async e=>{try{const t="parameters_".concat(e),a=c.get(t);if(a)return console.log("Using cached parameters data for category ".concat(e)),a;const r=await i.get("/parameters?categoryId=".concat(e));return c.set(t,r.data,3e5),r.data}catch(t){throw console.error("Error fetching parameters for category ".concat(e,":"),t),t}},g=async function(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"combined",s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;try{const t="request-".concat(Date.now());if(!e||0===Object.keys(e).length)return{success:!1,error:"No parameters provided for generation"};const o={parameterValues:e,contentType:a};s&&(o.year=parseInt(s,10)),n&&(o.title=n),console.log("Generation payload:",JSON.stringify(o,null,2));const c=await i.post("/generate",o),l={id:t,title:c.data.title||n||"Untitled Story",createdAt:(new Date).toISOString(),content:c.data.content,imageData:c.data.imageData?"data:image/png;base64,".concat(c.data.imageData):null,parameterValues:e,metadata:c.data.metadata,year:c.data.year||s||null};return h(l),(0,r.A)((0,r.A)({},c.data),{},{success:!0,generatedStory:l})}catch(c){var o;return console.error("Content generation error:",c),c.response?{success:!1,error:(null===(o=c.response.data)||void 0===o?void 0:o.error)||"Server error: ".concat(c.response.status)}:c.request?{success:!1,error:"No response from server. Please check your connection."}:{success:!1,error:c.message||"Failed to generate content. Please try again."}}},h=e=>{try{const a=localStorage.getItem("specgen-history");let s=a?JSON.parse(a):[];s=[e,...s],s.length>10&&(s=s.slice(0,10)),s=s.map((e=>(0,r.A)((0,r.A)({},e),{},{imageData:e.imageData?"stored-externally":null})));try{localStorage.setItem("specgen-history",JSON.stringify(s)),console.log("Saved story to history:",e.id)}catch(t){"QuotaExceededError"===t.name&&(localStorage.removeItem("specgen-cached-stories"),s=s.slice(0,5),localStorage.setItem("specgen-history",JSON.stringify(s)),console.warn("Storage quota nearly exceeded, reduced history size"))}}catch(a){console.error("Error saving to generation history:",a)}},m=async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};try{const t=await i.get("/content");if(t.data&&t.data.success){let a=t.data.data||[];if(a=a.filter((e=>e.content)),e.year&&(a=a.filter((t=>{var a;return t.year===parseInt(e.year,10)||(null===(a=t.year)||void 0===a?void 0:a.toString())===e.year}))),e.search){const t=e.search.toLowerCase();a=a.filter((e=>e.title&&e.title.toLowerCase().includes(t)||e.content&&e.content.toLowerCase().includes(t)))}return"oldest"===e.sort?a.sort(((e,t)=>new Date(e.createdAt)-new Date(t.createdAt))):a.sort(((e,t)=>new Date(t.createdAt)-new Date(e.createdAt))),{success:!0,data:a}}return f(e)}catch(t){return console.error("Error fetching stories from API:",t),f(e)}},f=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};try{const t=localStorage.getItem("specgen-history"),a=(t?JSON.parse(t):[]).map((e=>({id:e.id||"gen-".concat(Date.now()+Math.random()),title:e.title||y(e.content),content:e.content||"",imageData:p(e.imageData),createdAt:e.timestamp||e.createdAt||(new Date).toISOString(),year:e.year||null,parameterValues:e.parameterValues||{},metadata:e.metadata||{}})));console.log("Fallback: Using localStorage for stories");let r=[...a];if(e.year&&(r=r.filter((t=>t.year===parseInt(e.year,10)))),e.search){const t=e.search.toLowerCase();r=r.filter((e=>e.title&&e.title.toLowerCase().includes(t)||e.content&&e.content.toLowerCase().includes(t)))}return"oldest"===e.sort?r.sort(((e,t)=>new Date(e.createdAt)-new Date(t.createdAt))):r.sort(((e,t)=>new Date(t.createdAt)-new Date(e.createdAt))),{success:!0,data:r}}catch(t){return console.error("Error in localStorage fallback:",t),{success:!1,error:"Failed to fetch stories",data:[]}}},p=e=>e&&"string"===typeof e?e.startsWith("data:image")?e:"data:image/png;base64,".concat(e):null,y=e=>{if(!e)return"Untitled Story";if(e.includes("**Title:")){const t=e.match(/\*\*Title:(.*?)\*\*/);if(t&&t[1])return t[1].trim()}const t=e.split(/[.!?]|\n/)[0].trim();return t.length<=40?t:t.substring(0,37)+"..."}}}]);