PageSourceSearch

https://taskudos.net/assets/CategoriesPage-BzbIAE-h.js

js taskudos.net collected 2026-10-02 01:06:15 UTC 11,136 bytes, 1 lines download raw bytes

1import{j as e}from"./data-vendor-BbRRaOei.js";import{a as u,m as q}from"./react-vendor-CTMQ6zmr.js";import{t as K,c as I,f as J,m as B,L as H,k as T,s as w}from"./index-D9-csJG3.js";import{D,C as Q}from"./colors-DGAPE9IX.js";import{u as E}from"./i18n-vendor-BcG5Fkkq.js";import{u as V}from"./useGuestLimitModal-C7VtPVR4.js";import{GuestLimitModal as W}from"./GuestLimitModal-BRPMI3uX.js";import{aq as X,af as Z,T as $,aJ as ee,P as L,aK as se}from"./ui-vendor-B6XsRz8N.js";import{b as te,a as re,c as ae,d as oe}from"./useCategories-Cu6zRpPM.js";import"./swipe-vendor-Du95hpjX.js";import"./tw-merge-C6Cmh_M-.js";import"./firebase-auth-D9FSLi8g.js";import"./firebase-functions-w4CkjSCL.js";import"./firebase-app-DUOH9wz5.js";import"./firebase-firestore-Ql9DxvAQ.js";import"./firebase-storage-BoKl8lfL.js";import"./dnd-vendor-CBnHgLcf.js";import"./animation-vendor-C5eF-vcf.js";import"./api-Crdv-87I.js";function ie({category:s,ownerType:i,ownerId:p,onSubmit:l,onCancel:f,isLoading:c}){const{t:r}=E(),[o,m]=u.useState((s==null?void 0:s.name)||""),[g,a]=u.useState((s==null?void 0:s.color)||D),{isGuest:d,isExpired:C,canCreateCategory:k,incrementCategoryCount:y}=K(),x=V(),h=k(),N=n=>{if(n.preventDefault(),!!o.trim())if(s)l({name:o.trim(),color:g});else{if(d){if(C){x.open("expired");return}if(!h.allowed){x.open("category");return}y()}const v={name:o.trim(),color:g};i==="group"?v.teamId=p:v.userId=p,l(v)}};return e.jsxs("form",{onSubmit:N,className:"space-y-4",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"category-name",className:"block text-sm font-medium text-surface-700 mb-1",children:[r("categories.categoryName")," ",e.jsx("span",{className:"text-error",children:"*"})]}),e.jsx("input",{id:"category-name",type:"text",value:o,onChange:n=>m(n.target.value),placeholder:r("categories.categoryNamePlaceholder"),className:"input-field-sm dark:border-surface-600 bg-background",required:!0,maxLength:50,autoFocus:!0})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-surface-700 mb-2",children:r("categories.color")}),e.jsx("div",{className:"flex flex-wrap gap-2",children:Q.map(n=>e.jsx("button",{type:"button",onClick:()=>a(n.value),className:I("w-8 h-8 rounded-full border-2 transition-all",g===n.value?"border-surface-800 scale-110":"border-transparent hover:scale-105"),style:{backgroundColor:n.value},"aria-label":n.label,title:n.label},n.value))})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-surface-700 mb-1",children:r("categories.preview")}),e.jsx("span",{className:"inline-block px-3 py-1 rounded-full text-sm font-medium text-white",style:{backgroundColor:g},children:o||r("categories.categoryName")})]}),e.jsxs("div",{className:"flex justify-end gap-2 pt-2",children:[e.jsx("button",{type:"button",onClick:f,className:"px-4 py-2 text-surface-700 bg-surface-100 rounded-lg hover:bg-surface-200 transition-colors min-h-touch",disabled:c,children:r("common.cancel")}),e.jsx("button",{type:"submit",className:"px-4 py-2 text-white bg-primary-600 rounded-lg hover:bg-primary-700 transition-colors min-h-touch disabled:opacity-50",disabled:c||!o.trim()||!s&&d&&!h.allowed,children:r(c?"taskForm.saving":s?"categories.update":"common.create")})]}),e.jsx(W,{isOpen:x.isOpen,onClose:x.close,limitType:x.limitType,currentCount:h.currentCount,maxCount:h.maxCount})]})}function M({categories:s,title:i,emptyMessage:p,onEdit:l,onDelete:f}){const{t:c}=E(),r=p||c("categories.noCategories"),[o,m]=u.useState(null),g=a=>{o===a.id?(f(a),m(null)):m(a.id)};return e.jsxs("div",{className:"bg-surface-50 rounded-lg shadow",children:[e.jsxs("div",{className:"px-4 py-3 border-b border-surface-200",children:[e.jsx("h3",{className:"font-semibold text-foreground",children:i}),e.jsx("p",{className:"text-sm text-surface-500",children:c("categories.itemCount",{count:s.length})})]}),s.length===0?e.jsx("div",{className:"p-4 text-center text-surface-500",children:r}):e.jsx("ul",{className:"divide-y divide-surface-200 dark:divide-surface-700",children:s.map(a=>e.jsxs("li",{className:"flex items-center justify-between px-4 py-3 hover:bg-surface-50 dark:hover:bg-surface-700",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"w-4 h-4 rounded-full flex-shrink-0",style:{backgroundColor:a.color||D}}),e.jsx("span",{className:"font-medium text-foreground",children:a.name})]}),e.jsx("div",{className:"flex items-center gap-1",children:o===a.id?e.jsxs(e.Fragment,{children:[e.jsx("button",{onClick:()=>m(null),className:"px-2 py-1 text-sm text-surface-600 hover:bg-surface-100 dar
1k:hover:bg-surface-600 rounded",children:c("common.cancel")}),e.jsx("button",{onClick:()=>g(a),className:"px-2 py-1 text-sm text-white bg-error hover:bg-error/90 rounded",children:c("categories.confirmDelete")})]}):e.jsxs(e.Fragment,{children:[e.jsx("button",{onClick:()=>l(a),className:"p-2 text-surface-500 hover:text-surface-700 dark:hover:text-surface-200 hover:bg-surface-100 dark:hover:bg-surface-600 rounded-lg transition-colors","aria-label":c("common.edit"),children:e.jsx(X,{size:18})}),e.jsx("button",{onClick:()=>g(a),className:"p-2 text-surface-500 hover:text-error hover:bg-error/10 rounded-lg transition-colors","aria-label":c("common.delete"),children:e.jsx(Z,{size:18})})]})})]},a.id))})]})}function F(s){return s.teamId?"group":"personal"}const le=[{value:"all",key:"pages.categories.filterAll"},{value:"personal",key:"pages.categories.filterPersonal"},{value:"group",key:"pages.categories.filterGroup"}];function Te(){const{t:s}=E(),{user:i}=J(),[p]=q(),{selectedGroupId:l,setSelectedGroupId:f}=B(),[c,r]=u.useState(!1),[o,m]=u.useState(null),[g,a]=u.useState("personal"),[d,C]=u.useState("all");u.useEffect(()=>{const t=p.get("groupId");t&&(C("group"),t!==l&&f(t))},[p,l,f]);const k=u.useMemo(()=>{const t=[];return i!=null&&i.uid&&t.push({ownerType:"personal",ownerId:i.uid}),l&&t.push({ownerType:"group",ownerId:l}),t},[i==null?void 0:i.uid,l]),{data:y=[],isLoading:x,error:h}=te(k),N=re(),n=ae(),v=oe(),P=u.useMemo(()=>{const t=y.filter(j=>F(j)==="personal"),b=y.filter(j=>F(j)==="group");return{personal:t,team:b}},[y]),S=t=>{a(t),m(null),r(!0)},G=t=>{a(F(t)),m(t),r(!0)},O=async t=>{try{await v.mutateAsync(t.id),T(s("pages.categories.deleteSuccess"))}catch{w(s("pages.categories.deleteFailed"))}},z=async t=>{try{if(o)await n.mutateAsync({id:o.id,input:t}),T(s("pages.categories.updateSuccess"));else{const b=t,j=b.teamId||b.userId;if(!j||j.trim()===""){b.teamId!==void 0?w(s("pages.categories.selectGroup")):w(s("pages.categories.invalidUserId"));return}await N.mutateAsync(b),T(s("pages.categories.createSuccess"))}r(!1),m(null)}catch{w(s(o?"pages.categories.updateFailed":"pages.categories.createFailed"))}},A=()=>{r(!1),m(null)},R=u.useCallback(()=>{let t="personal";d==="group"&&l&&(t="group"),S(t)},[d,l]);if(x)return e.jsx(H,{fullScreen:!0,message:s("pages.categories.loading")});if(h)return e.jsx("div",{className:"text-center py-8",children:e.jsx("p",{className:"text-error",children:s("pages.categories.error")})});const _=t=>{switch(t){case"personal":return(i==null?void 0:i.uid)||"";case"group":return l||"";default:return""}},U=d==="all"||d==="personal",Y=(d==="all"||d==="group")&&l;return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx($,{className:"text-primary-600",size:24,"aria-hidden":"true"}),e.jsx("h1",{className:"text-2xl font-bold text-foreground",children:s("pages.categories.title")})]}),e.jsxs("div",{className:"flex items-center gap-2",role:"group","aria-label":s("pages.categories.scopeFilter"),children:[e.jsx(ee,{size:16,className:"text-surface-500","aria-hidden":"true"}),e.jsx("div",{className:"flex rounded-lg border border-surface-200 overflow-hidden",children:le.map(t=>e.jsx("button",{onClick:()=>C(t.value),className:I("px-3 py-2 text-sm min-w-touch-sm min-h-touch-sm","transition-colors duration-150","focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-inset",d===t.value?"bg-primary-600 text-white font-medium":"bg-surface-50 text-surface-600 hover:bg-surface-100 dark:hover:bg-surface-700"),"aria-pressed":d===t.value,"aria-label":s("pages.categories.showCategoryFilter",{label:s(t.key)}),children:s(t.key)},t.value))})]})]}),c&&e.jsx("div",{className:"fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4",children:e.jsxs("div",{className:"bg-surface-100 rounded-lg border border-surface-200 shadow-xl w-full max-w-md p-6",children:[e.jsx("h2",{className:"text-lg font-semibold mb-4 text-foreground",children:s(o?"pages.categories.edit
1Category":"pages.categories.createCategory")}),e.jsx(ie,{category:o||void 0,ownerType:g,ownerId:_(g),onSubmit:z,onCancel:A,isLoading:N.isPending||n.isPending})]})}),U&&e.jsxs("div",{"data-testid":"personal-categories-section",children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("h2",{className:"text-lg font-semibold text-surface-700",children:s("pages.categories.personalCategories")}),e.jsxs("button",{onClick:()=>S("personal"),className:"flex items-center gap-1 px-3 py-2 text-sm text-primary-600 hover:bg-primary-500/10 rounded-lg transition-colors min-h-touch-sm","aria-label":s("pages.categories.addPersonalCategory"),children:[e.jsx(L,{size:16,"aria-hidden":"true"}),s("pages.categories.add")]})]}),e.jsx(M,{categories:P.personal,title:s("pages.categories.myCategories"),emptyMessage:s("pages.categories.noPersonalCategories"),onEdit:G,onDelete:O})]}),Y&&e.jsxs("div",{"data-testid":"group-categories-section",children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("h2",{className:"text-lg font-semibold text-surface-700",children:s("pages.categories.groupCategories")}),e.jsxs("button",{onClick:()=>S("group"),className:"flex items-center gap-1 px-3 py-2 text-sm text-primary-600 hover:bg-primary-500/10 rounded-lg transition-colors min-h-touch-sm","aria-label":s("pages.categories.addGroupCategory"),children:[e.jsx(L,{size:16,"aria-hidden":"true"}),s("pages.categories.add")]})]}),e.jsx(M,{categories:P.team,title:s("pages.categories.groupSharedCategories"),emptyMessage:s("pages.categories.noGroupCategories"),onEdit:G,onDelete:O})]}),e.jsxs("div",{className:"bg-primary-500/10 border border-primary-200 rounded-lg p-4 text-sm text-primary-800",children:[e.jsx("p",{className:"font-medium mb-1",children:s("pages.categories.aboutTitle")}),e.jsxs("ul",{className:"list-disc list-inside space-y-1 text-primary-700",children:[e.jsx("li",{children:s("pages.categories.aboutPersonal")}),e.jsx("li",{children:s("pages.categories.aboutGroup")})]})]}),e.jsx("button",{onClick:R,className:I("fixed bottom-20 right-4 z-50","flex items-center justify-center","w-14 h-14 rounded-full","bg-primary-600 hover:bg-primary-700","text-white shadow-lg","transition-all duration-200","focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2"),"aria-label":s("pages.categories.addCategory"),children:e.jsx(se,{size:24})})]})}export{Te as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.