PageSourceSearch

https://app.teetsh.com/assets/TreeEditorPage-DSKx5mk_.js

js teetsh.com collected 2026-09-24 12:29:33 UTC 15,228 bytes, 1 lines download raw bytes

1import{f as Y,H as J,w as o,v as e,y as M,r as m,F as Ce,C as Ne,a as xe,E as W,aI as Ie,N as de,c3 as Te}from"./vendor-CdGuzAAs.js";import{u as Le}from"./useCurriculumV2Enabled-Bq-bUYR7.js";import{r as X,e9 as Z,iL as ke,p as ae,cV as Se,W as we,cf as H,bH as le,aq as ce,m as ze,B as y,e as L,et as Ee,n as Ae,M as V,g as Pe,A as Be,dv as Fe,bi as De,E as ue,D as Oe,c1 as $e,S as Ge,z as oe,aj as Me,ak as We}from"./index-B8Vs6AEm.js";import{T as qe}from"./index-CFi6cG13.js";import{u as Re}from"./useCurriculum-DrufpC3w.js";import{A as Ue,u as _e,G as je,N as Ke}from"./index-D8uF_EbL.js";import{N as se}from"./NodeTypeIconBadge-RjAJnUX7.js";import{A as Qe}from"./ArrowDown-2GJKGnUs.js";import{C as Ve,b as He}from"./curriculumTree.utils-DBDVOtmT.js";import"./useCurriculumList-Clyij_BD.js";import"./index-DdMPar4Q.js";import"./sortable.esm-BMduPUxe.js";import"./core.esm-BRqV95A6.js";import"./index-BqHvhRRH.js";import"./Folder-Vq8w6tdo.js";import"./index-DcS92Rd1.js";import"./Domain-ZSCQKv9z.js";import"./Skills-BcXSlss0.js";import"./Objective-BvHlpcTp.js";import"./Rocket-65ENcBlw.js";(function(){try{var n=typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},i=new Error().stack;i&&(n._sentryDebugIds=n._sentryDebugIds||{},n._sentryDebugIds[i]="c3e86b3e-4dea-4afc-9fd5-ac0431d39e92",n._sentryDebugIdIdentifier="sentry-dbid-c3e86b3e-4dea-4afc-9fd5-ac0431d39e92")}catch{}})();function Ye(){const n=Y(),{mutateAsync:i,isPending:s}=J({mutationFn:({curriculumId:t,...l})=>X(`/curriculums/${t}/nodes`,{method:"POST",body:l}).then(d=>d),onSuccess:(t,{curriculumId:l})=>{n.invalidateQueries({queryKey:[Z,l]})}});return{createNode:i,isPending:s}}function Je(){const n=Y(),{mutateAsync:i,isPending:s}=J({mutationFn:({curriculumId:t,nodeId:l,...d})=>X(`/curriculums/${t}/nodes/${l}`,{method:"PATCH",body:d}).then(p=>p),onSuccess:(t,{curriculumId:l})=>{n.invalidateQueries({queryKey:[Z,l]})}});return{updateNode:i,isPending:s}}function Xe(){const n=Y(),{mutateAsync:i,isPending:s}=J({mutationFn:({curriculumId:t,nodeId:l})=>X(`/curriculums/${t}/nodes/${l}`,{method:"DELETE"}),onSuccess:(t,{curriculumId:l})=>{n.invalidateQueries({queryKey:[Z,l]})}});return{deleteNode:i,isPending:s}}function Ze(){const n=Y(),{mutateAsync:i,isPending:s}=J({mutationFn:({curriculumId:t,items:l})=>X(`/curriculums/${t}/nodes/reorder`,{method:"POST",body:l}),onSuccess:(t,{curriculumId:l})=>{n.invalidateQueries({queryKey:[Z,l]})}});return{reorderNodes:i,isPending:s}}function et({value:n,onChange:i}){const{close:s}=Se();return e("div",{className:"p-3",children:e(we,{palette:"teetsh",intensity:"moderate",value:n,onChange:t=>{i(t),s?.()},layout:"grid"})})}function tt({value:n,onChange:i}){return o(ae,{placement:"bottom-start",portal:!0,children:[e(ae.Span,{"aria-label":"Choisir une couleur",children:e(ke,{color:n})}),e(ae.Panel,{size:"auto",disableMargins:!0,children:e(et,{value:n,onChange:i})})]})}function nt({isOpen:n,onClose:i,onSubmit:s,config:t,isPending:l=!1,node:d,initialTypeId:p}){const{t:u}=M(["curriculum"]),k=!!d,[v,F]=m.useState(d?.name??""),[q,E]=m.useState(d?.code??""),[A,R]=m.useState(d?.typeId??p??t.nodeTypes[0]?.id??""),[g,ee]=m.useState(d?.gradeLevelIds??[]),[x,D]=m.useState(d?.tags??[]),[O,U]=m.useState(""),[C,S]=m.useState(Ue[0]),P=t.nodeTypes.find(r=>r.id===A)?.hasCode??!1;function _(r){ee(N=>N.includes(r)?N.filter(Q=>Q!==r):[...N,r])}function w(){const r=O.trim();r&&(D(N=>[...N,{name:r,color:C}]),U(""))}function b(r){D(N=>N.filter((Q,ie)=>ie!==r))}function te(){v.trim()&&s({name:v.trim(),code:P?q.trim():"",typeId:A,gradeLevelIds:g,tags:x})}const j=t.nodeTypes.length>1,K=t.gradeLevels.length>0,ne=j&&K;return o(L,{isOpen:n,onClose:i,title:u(k?"curriculum:node.edit.title":"curriculum:node.add.titleGeneric"),size:"lg",children:[e(L.Body,{children:o("div",{className:"flex flex-col gap-4",children:[o("div",{children:[e("label",{className:"text-sm font-medium text-neutral-intense mb-1 block",children:u("curriculum:node.nameLabel")}),e(H,{value:v,onChange:r=>F(r.target.value),placeholder:u("curriculum:node.namePlaceholder"),fill:!0,autoFocus:!0,"data-testid":"node-name-input"})]}),P&&o("div",{"data-testid":"node-code-field",children:[e("label",{className:"text-sm font-medium text-neutral-intense mb-1 block",children:u("curriculum:node.codeLabel")}),e(H,{value:q,onChange:r=>E(r.target.value),placeholder:u("curriculum:node.codePlaceholder"),fill:!0,"data-testid":"node-code-input"})]}),ne?o("div",{className:"flex gap-8",children:[o("div",{className:"flex-1",children:[e("p",{className:"text-sm font-medium text-neutral-intense mb-2",children:u("curriculum:node.typeLabel")}),e("div",{className:"flex flex-col gap-2",children:t.nodeTypes.map(r=>e(le,{id:`node-type-${r.id}
1`,name:"node-type",size:"sm",label:r.name,checked:A===r.id,onChange:()=>R(r.id)},r.id))})]}),o("div",{className:"flex-1",children:[e("p",{className:"text-sm font-medium text-neutral-intense mb-2",children:u("curriculum:node.associatedLevels")}),e("div",{className:"flex flex-col gap-2",children:t.gradeLevels.map(r=>e(ce,{size:"sm",label:r.name,checked:g.includes(r.id),onChange:()=>_(r.id)},r.id))})]})]}):o(Ce,{children:[j&&o("div",{children:[e("p",{className:"text-sm font-medium text-neutral-intense mb-2",children:u("curriculum:node.typeLabel")}),e("div",{className:"flex flex-col gap-2",children:t.nodeTypes.map(r=>e(le,{id:`node-type-${r.id}`,name:"node-type",size:"sm",label:r.name,checked:A===r.id,onChange:()=>R(r.id)},r.id))})]}),K&&o("div",{children:[e("p",{className:"text-sm font-medium text-neutral-intense mb-2",children:u("curriculum:node.associatedLevels")}),e("div",{className:"flex flex-col gap-2",children:t.gradeLevels.map(r=>e(ce,{size:"sm",label:r.name,checked:g.includes(r.id),onChange:()=>_(r.id)},r.id))})]})]}),o("div",{children:[e("p",{className:"text-sm font-medium text-neutral-intense mb-2",children:u("curriculum:node.tagsLabel")}),x.length>0&&e("div",{className:"flex flex-wrap gap-1.5 mb-3",children:x.map((r,N)=>e(ze,{color:`${r.color}-quiet`,size:"sm",onClose:()=>b(N),children:r.name},`${r.name}-${N}`))}),o("div",{className:"flex items-center gap-2",children:[e(tt,{value:C,onChange:S}),e(H,{value:O,onChange:r=>U(r.target.value),placeholder:u("curriculum:node.tagPlaceholder"),className:"flex-1",onKeyDown:r=>{r.key==="Enter"&&(r.preventDefault(),w())},"data-testid":"tag-name-input"}),e(y,{variant:"outlined",onClick:w,disabled:!O.trim(),type:"button",children:u("curriculum:actions.add")})]})]})]})}),o(L.Footer,{children:[e(y,{variant:"outlined",onClick:i,children:u("curriculum:actions.cancel")}),e(y,{intent:"primary",onClick:te,loading:l,disabled:l||!v.trim(),children:u(k?"curriculum:actions.save":"curriculum:actions.add")})]})]})}function it({isOpen:n,onClose:i,onConfirm:s,isPending:t,nodeName:l}){const{t:d}=M(["curriculum"]);return o(L,{isOpen:n,onClose:i,size:"sm",children:[e(L.Body,{children:o("div",{className:"flex flex-col items-center gap-3 py-2 text-center",children:[e(Ee,{className:"size-10 text-danger-moderate"}),e("p",{className:"font-bold text-base text-neutral-intense",children:d("curriculum:deleteNode.title",{nodeName:l})}),e("p",{className:"text-sm text-neutral-moderate",children:d("curriculum:deleteNode.description")})]})}),o(L.Footer,{children:[e(y,{variant:"outlined",onClick:i,disabled:t,children:d("curriculum:actions.cancel")}),e(y,{intent:"danger",onClick:s,loading:t,disabled:t,children:d("curriculum:actions.delete")})]})]})}function at({nodeTypes:n,onSelect:i,label:s,small:t=!1}){const{t:l}=M(["curriculum"]),d=s??l("curriculum:actions.add");return o(V,{placement:"bottom-start",children:[e(V.Button,{size:t?"sm":"md",variant:"outlined",rightIcon:Ae,"data-testid":"add-node-dropdown",children:d}),e(V.Items,{size:"auto",children:n.map(p=>e(V.Item,{variant:"option",text:o("div",{className:"flex items-center gap-2",children:[e(se,{icon:p.icon,color:p.color,size:"sm"}),e("span",{children:p.name})]}),onClick:()=>i(p),"data-testid":`add-node-type-${p.id}`},p.id))})]})}function rt({nodeId:n,isFirst:i,isLast:s,onAddChild:t,onEdit:l,onDelete:d,onDuplicate:p,onMoveUp:u,onMoveDown:k}){const{t:v}=M(["curriculum"]);return e("div",{role:"presentation",onClick:F=>F.stopPropagation(),className:"flex items-center",children:o($e,{variant:"minimal",className:"actions",children:[e(Pe,{label:v("curriculum:actions.addChild"),children:e(y,{variant:"minimal",onClick:()=>t(n),icon:Be,"data-testid":"action-add-child"})}),e(y,{variant:"minimal",onClick:()=>u(n),disabled:i,icon:Fe,"aria-label":v("curriculum:actions.moveUp")}),e(y,{variant:"minimal",onClick:()=>k(n),disabled:s,icon:Qe,"aria-label":v("curriculum:actions.moveDown")}),e(y,{variant:"minimal",onClick:()=>p(n),icon:De,"aria-label":v("curriculum:actions.duplicate")}),e(y,{variant:"minimal",onClick:()=>l(n),icon:ue}),e(y,{variant:"minimal",intent:"danger",icon:Oe,onClick:()=>d(n),"aria-label":"delete-button"})]})})}const B=xe({step:"closed",name:"",gradeLevels:[]}),st=()=>Ne(B),dt=()=>{const n=W(B);return(i,s)=>n({step:"name",name:i,gradeLevels:s})},lt=()=>{const n=W(B);return()=>n({step:"closed",name:"",gradeLevels:[]})},ct=()=>{const n=W(B);return i=>n(s=>({...s,step:i}))},ot=()=>{const n=W(B);return i=>n(s=>({...s,name:i}))},ut=()=>{const n=W(B);return i=>n(s=>({...s,gradeLevels:i}))};function re(n,i){for(const s of n){if(s.children.some(l=>l.id===i))return s.children;const t=re(s.children,i);if(t)return t}return null}function me(n,i,s,t,l){return n.map((d,p)=>{const u=i.nodeTypes.find(v=>v.id===d.typeId);return{id:d.id,label:d.name,iconElement:u?e(se,{icon:u.icon,color:u.color,size:"sm"}):void 0,hasCaret:d.children.length>0,isExpanded:s.has(d.id),nodeData:d,badge:He(d,i,t),secondaryLabel:e(rt,{nodeId:d.id,isFirst:p===0,isLast:p===n.length-1,...l}),childNodes:d.children.length>0&&s.has(d.id)?me(d.children,i,s,t,l):void 0}})}function Pt(){const{t:n}=M(["curriculum"]),{referentialId:i}=Ie(),s=Le(),{data:t,isLoading:l,isError:d}=Re(i),{createNode:p,isPending:u}=Ye(),{updateNode:k,isPending:v}=Je(),{deleteNode:F,isPending:q}=Xe(),{reorderNodes:E}=Ze(),{updateCurriculum:A,isPending:R}=_e(),g=st(),ee=dt(),x=lt(),D=ct(),O=ot(),U=ut(),[C,S]=m.useState({isOpen:!1}),[$,P]=m.useState(null),[_,w]=m.useState(new Set),b=t?.curriculum.config??{nodeTypes:[],gradeLevels:[],gradeGroups:[]},te=m.useCallback(a=>{const c=t?.nodeById.get(a),h=c?b.nodeTypes.findIndex(I=>I.id===c.typeId):-1,f=b.nodeTypes[h+1]?.id??b.nodeTypes[0]?.id;w(I=>I.has(a)?I:new Set([...I,a])),S({isOpen:!0,parentId:a,initialTypeId:f})},[b.nodeTypes,t?.nodeById]),j=m.useCallback(a=>{const c=t?.nodeById.get(a);c&&S({isOpen:!0,node:c})},[t?.nodeById]),K=m.useCallback(a=>{const c=t?.nodeById.get(a);c&&P(c)}
1,[t?.nodeById]),ne=m.useCallback(a=>{if(!t||!i)return;const c=t.nodeById.get(a);if(!c)return;const h=c.parentId?re(t.tree,a):t.tree;if(!h)return;const f=h.findIndex(T=>T.id===a);if(f<=0)return;const I=h.map((T,z)=>({id:T.id,parentId:T.parentId,position:z===f?f-1:z===f-1?f:z}));E({curriculumId:i,items:I})},[t,i,E]),r=m.useCallback(a=>{if(!t||!i)return;const c=t.nodeById.get(a);if(!c)return;const h=c.parentId?re(t.tree,a):t.tree;if(!h)return;const f=h.findIndex(T=>T.id===a);if(f<0||f>=h.length-1)return;const I=h.map((T,z)=>({id:T.id,parentId:T.parentId,position:z===f?f+1:z===f+1?f:z}));E({curriculumId:i,items:I})},[t,i,E]),N=m.useCallback(a=>{if(!t||!i)return;const c=t.nodeById.get(a);c&&p({curriculumId:i,parentId:c.parentId??void 0,typeId:c.typeId,name:c.name,code:c.code??void 0,gradeLevelIds:c.gradeLevelIds,tags:c.tags})},[t,i,p]),Q=m.useCallback(a=>{S({isOpen:!0,parentId:null,initialTypeId:a})},[]),ie=m.useCallback(a=>{a.hasCaret&&w(c=>{const h=new Set(c);return h.has(a.id)?h.delete(a.id):h.add(a.id),h})},[]),pe=m.useCallback(a=>{w(c=>new Set([...c,a.id]))},[]),he=m.useCallback(a=>{w(c=>{const h=new Set(c);return h.delete(a.id),h})},[]);async function ge(a){if(i)try{C.node?await k({curriculumId:i,nodeId:C.node.id,name:a.name,code:a.code||void 0,typeId:a.typeId,gradeLevelIds:a.gradeLevelIds,tags:a.tags}):await p({curriculumId:i,parentId:C.parentId,typeId:a.typeId,name:a.name,code:a.code||void 0,gradeLevelIds:a.gradeLevelIds,tags:a.tags}),S({isOpen:!1})}catch{}}async function fe(){if(!(!i||!$))try{await F({curriculumId:i,nodeId:$.id}),P(null)}catch{}}if(!s)return e(de,{to:"/settings/curriculums",replace:!0});if(l)return e(Ge,{});if(d||!t)return e(oe,{error:new Error("Failed to load curriculum"),link:"/settings/curriculums",textLink:n("curriculum:backToReferentiels"),subject:n("curriculum:errorSubject")});if(t.curriculum.isOfficial)return e(de,{to:"/settings/curriculums",replace:!0});const{curriculum:G}=t,ye={onAddChild:te,onEdit:j,onDelete:K,onDuplicate:N,onMoveUp:ne,onMoveDown:r},ve=n("curriculum:node.allLevels"),be=me(t.tree,b,_,ve,ye);return o(Te,{fallback:({error:a})=>e(oe,{error:a,link:"/settings/curriculums",textLink:n("curriculum:backToReferentiels"),subject:n("curriculum:errorSubject")}),children:[o("div",{children:[o("div",{className:"flex items-center justify-between mb-4",children:[e(We,{icon:Me,variant:"minimal",to:"/settings/curriculums",children:n("curriculum:backToReferentiels")}),e(y,{variant:"outlined",icon:ue,onClick:()=>ee(G.name,b.gradeLevels),"aria-label":n("curriculum:legend.editElements")})]}),e("h1",{className:"mb-6",children:G.name}),e("div",{className:"mb-4",children:n("curriculum:legend.elements")}),e("div",{className:"mb-4 ml-1 flex items-center gap-x-4",children:b.nodeTypes.map(a=>o("div",{className:"flex items-center gap-2",children:[e(se,{icon:a.icon,color:a.color,size:"sm"}),e("span",{children:a.name})]},a.id))}),t.tree.length===0?e("div",{className:"text-sm text-neutral-moderate py-8 text-center",children:n("curriculum:emptyTree")}):e(qe,{nodes:be,RenderLabelComponent:Ve,onNodeClick:ie,onNodeExpand:pe,onNodeCollapse:he}),b.nodeTypes.length>0&&e("div",{className:"mt-3",children:e(at,{nodeTypes:b.nodeTypes,onSelect:a=>Q(a.id),small:!0})})]}),o(L,{isOpen:g.step==="name",onClose:x,title:n("curriculum:addProgram.nameTitle"),size:"md",children:[e(L.Body,{children:o("div",{className:"flex flex-col gap-2",children:[e("label",{className:"text-sm font-medium text-neutral-intense",children:n("curriculum:addProgram.nameLabel")}),e(H,{value:g.name,onChange:a=>O(a.target.value),placeholder:n("curriculum:addProgram.namePlaceholder"),fill:!0,autoFocus:!0})]})}),o(L.Footer,{children:[e(y,{variant:"outlined",onClick:x,children:n("curriculum:actions.cancel")}),e(y,{intent:"primary",onClick:()=>D("gradeLevels"),disabled:!g.name.trim(),children:n("curriculum:actions.next")})]})]}),e(je,{isOpen:g.step==="gradeLevels",onClose:x,onSubmit:a=>{U(a),D("nodeTypes")},initialGradeLevels:g.gradeLevels},g.step==="gradeLevels"?"open":"closed"),e(Ke,{isOpen:g.step==="nodeTypes",onClose:x,curriculum:G,onNext:async a=>
1{try{await A({id:G.id,name:g.name.trim(),config:{nodeTypes:a,gradeLevels:g.gradeLevels,gradeGroups:b.gradeGroups}}),x()}catch{}},isPending:R},g.step==="nodeTypes"?G.id:"closed"),e(nt,{isOpen:C.isOpen,onClose:()=>S({isOpen:!1}),onSubmit:ge,config:b,isPending:u||v,node:C.node,initialTypeId:C.initialTypeId},`${C.node?.id??"new"}-${C.initialTypeId??""}-${C.parentId??"root"}`),e(it,{isOpen:!!$,nodeName:$?.name??"",onClose:()=>P(null),onConfirm:fe,isPending:q})]})}export{Pt as TreeEditorPage};

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.