@ynput/ayon-frontend-shared 0.3.2 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js +1 -1
  2. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js.map +1 -1
  3. package/dist/shared/src/api/queries/entities/updateEntity.es.js +125 -120
  4. package/dist/shared/src/api/queries/entities/updateEntity.es.js.map +1 -1
  5. package/dist/shared/src/api/queries/views/getViews.cjs.js +1 -1
  6. package/dist/shared/src/api/queries/views/getViews.cjs.js.map +1 -1
  7. package/dist/shared/src/api/queries/views/getViews.es.js +20 -24
  8. package/dist/shared/src/api/queries/views/getViews.es.js.map +1 -1
  9. package/dist/shared/src/api/queries/views/updateViews.cjs.js +1 -1
  10. package/dist/shared/src/api/queries/views/updateViews.cjs.js.map +1 -1
  11. package/dist/shared/src/api/queries/views/updateViews.es.js +177 -118
  12. package/dist/shared/src/api/queries/views/updateViews.es.js.map +1 -1
  13. package/dist/shared/src/components/LinksManager/LinkManagerItem.cjs.js +1 -1
  14. package/dist/shared/src/components/LinksManager/LinkManagerItem.cjs.js.map +1 -1
  15. package/dist/shared/src/components/LinksManager/LinkManagerItem.es.js +30 -28
  16. package/dist/shared/src/components/LinksManager/LinkManagerItem.es.js.map +1 -1
  17. package/dist/shared/src/components/LinksManager/LinksManager.cjs.js +1 -1
  18. package/dist/shared/src/components/LinksManager/LinksManager.cjs.js.map +1 -1
  19. package/dist/shared/src/components/LinksManager/LinksManager.es.js +74 -56
  20. package/dist/shared/src/components/LinksManager/LinksManager.es.js.map +1 -1
  21. package/dist/shared/src/components/LinksManager/LinksManager.styled.cjs.js +2 -1
  22. package/dist/shared/src/components/LinksManager/LinksManager.styled.cjs.js.map +1 -1
  23. package/dist/shared/src/components/LinksManager/LinksManager.styled.es.js +5 -4
  24. package/dist/shared/src/components/LinksManager/LinksManager.styled.es.js.map +1 -1
  25. package/dist/shared/src/containers/Feed/Feed.cjs.js +1 -1
  26. package/dist/shared/src/containers/Feed/Feed.cjs.js.map +1 -1
  27. package/dist/shared/src/containers/Feed/Feed.es.js +123 -113
  28. package/dist/shared/src/containers/Feed/Feed.es.js.map +1 -1
  29. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js +3 -3
  30. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js.map +1 -1
  31. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js +178 -172
  32. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js.map +1 -1
  33. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js +1 -1
  34. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js.map +1 -1
  35. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js +42 -41
  36. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js.map +1 -1
  37. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.cjs.js +1 -1
  38. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.cjs.js.map +1 -1
  39. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js +26 -26
  40. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js.map +1 -1
  41. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js +1 -1
  42. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js.map +1 -1
  43. package/dist/shared/src/containers/Views/context/ViewsContext.es.js +80 -76
  44. package/dist/shared/src/containers/Views/context/ViewsContext.es.js.map +1 -1
  45. package/dist/shared/src/containers/Views/hooks/useBaseViewMutations.cjs.js +1 -1
  46. package/dist/shared/src/containers/Views/hooks/useBaseViewMutations.cjs.js.map +1 -1
  47. package/dist/shared/src/containers/Views/hooks/useBaseViewMutations.es.js +95 -52
  48. package/dist/shared/src/containers/Views/hooks/useBaseViewMutations.es.js.map +1 -1
  49. package/dist/shared/src/containers/Views/hooks/useViewsMutations.cjs.js +1 -1
  50. package/dist/shared/src/containers/Views/hooks/useViewsMutations.cjs.js.map +1 -1
  51. package/dist/shared/src/containers/Views/hooks/useViewsMutations.es.js +13 -13
  52. package/dist/shared/src/containers/Views/hooks/useViewsMutations.es.js.map +1 -1
  53. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js +1 -1
  54. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js.map +1 -1
  55. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js +55 -38
  56. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js.map +1 -1
  57. package/dist/types/components/LinksManager/LinkManagerItem.d.ts +1 -0
  58. package/dist/types/containers/Views/context/ViewsContext.d.ts +1 -0
  59. package/dist/types/containers/Views/hooks/useBaseViewMutations.d.ts +5 -2
  60. package/dist/types/containers/Views/utils/viewUpdateHelper.d.ts +3 -3
  61. package/package.json +1 -1
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("./getEntity.cjs.js");require("../actions/getActions.cjs.js");require("../activities/getActivities.cjs.js");require("../activities/updateActivities.cjs.js");require("../activities/updateReaction.cjs.js");require("../activities/getMentions.cjs.js");require("../activities/getCategories.cjs.js");require("../addons/getAddons.cjs.js");require("../addons/updateAddons.cjs.js");require("../attributes/getAttributes.cjs.js");require("../attributes/updateAttributes.cjs.js");require("../authentication/getAuthentication.cjs.js");require("../cloud/cloud.cjs.js");require("../config/getConfig.cjs.js");require("../config/updateConfig.cjs.js");const R=require("./getEntityPanel.cjs.js");require("../../base/client.cjs.js");require("../../generated/graphql.cjs.js");require("../../generated/graphqlLinks.cjs.js");require("../../generated/access.cjs.js");require("../../generated/actions.cjs.js");require("../../generated/activityFeed.cjs.js");require("../../generated/addons.cjs.js");require("../../generated/anatomy.cjs.js");require("../../generated/attributes.cjs.js");require("../../generated/authentication.cjs.js");require("../../generated/bundles.cjs.js");require("../../generated/configuration.cjs.js");require("../../generated/desktop.cjs.js");require("../../generated/entityLists.cjs.js");require("../../generated/events.cjs.js");require("../../generated/files.cjs.js");require("../../generated/folders.cjs.js");require("../../generated/inbox.cjs.js");require("../../generated/links.cjs.js");require("../../generated/market.cjs.js");require("../../generated/onboarding.cjs.js");require("../../generated/operations.cjs.js");require("../../generated/products.cjs.js");require("../../generated/projectDashboard.cjs.js");require("../../generated/projects.cjs.js");require("../../generated/reviewables.cjs.js");require("../../generated/services.cjs.js");require("../../generated/system.cjs.js");require("../../generated/tasks.cjs.js");require("../../generated/teams.cjs.js");require("../../generated/thumbnails.cjs.js");require("../../generated/uRIs.cjs.js");require("../../generated/users.cjs.js");require("../../generated/versions.cjs.js");require("../../generated/workfiles.cjs.js");require("../../generated/ynputCloud.cjs.js");require("../../generated/grouping.cjs.js");require("../../generated/views.cjs.js");require("../entityLists/getLists.cjs.js");require("../entityLists/updateLists.cjs.js");require("../entityLists/getListsAttributes.cjs.js");require("../entityLists/updateListsAttributes.cjs.js");require("../entityLists/listFolders.cjs.js");require("../folders/getFolders.cjs.js");require("../grouping/getGrouping.cjs.js");require("../links/updateLinks.cjs.js");require("../links/getLinks.cjs.js");require("../links/getEntityLinks.cjs.js");require("../overview/getOverview.cjs.js");const I=require("../overview/updateOverview.cjs.js");require("../versions/getVersionsProducts.cjs.js");require("../permissions/getPermissions.cjs.js");require("../products/createProduct.cjs.js");require("../project/getProject.cjs.js");require("../project/updateProject.cjs.js");require("../review/getReview.cjs.js");require("../review/updateReview.cjs.js");require("../share/share.cjs.js");require("../system/getSystem.cjs.js");const A=require("../userDashboard/getUserDashboard.cjs.js");require("../users/getUsers.cjs.js");require("../users/updateUsers.cjs.js");require("../users/guests.cjs.js");require("../versions/updateVersions.cjs.js");require("../views/getViews.cjs.js");require("../views/updateViews.cjs.js");require("../watchers/getWatchers.cjs.js");require("../uris/getUris.cjs.js");const B=require("react-toastify"),T=({assignees:k=[],projects:o=[]},{newAssignees:r,taskId:s,data:q,taskData:u},{dispatch:a})=>{let v=!1;return[a(A.dashboardQueries.util.updateQueryData("GetKanban",{projects:o,assignees:k},d=>{const g=d.findIndex(t=>t.id===s);let i={...q};if(q?.attrib?.priority){const{priority:t}=i.attrib;i={...i,priority:t}}if(q?.attrib?.endDate){const{endDate:t}=i.attrib;i={...i,dueDate:t},delete i.attrib.endDate}if(g===-1)u?d.push(u):v=!1;else if(v=!0,!r?.some(e=>k.includes(e))&&r)d.splice(g,1);else{const e={...d[g],...i};d[g]=e}})),v]},K=({operations:k=[],state:o,dispatch:r,entityType:s})=>{const q=k.map(a=>({type:"progress",id:a.id}));let u=w.default.util.selectInvalidatedBy(o,q);if(!u.length)return[];try{return u.map(v=>r(w.default.util.updateQueryData(v.endpointName,v.originalArgs,n=>{for(const d of k){const g=d.id,i=d.data;if(s==="task"){const t=d.meta?.folderId,e=n.find(p=>p.id===t);if(!e)throw new Error("Patching progress view: folder not found");const l=e.tasks?.find(p=>p.id===g);if(!l)throw new Error("Patching progress view: task not found");const m={...l,...i},f={...e,tasks:e.tasks.map(p=>p.id===g?m:p)},h=n.findIndex(p=>p.id===t);n[h]=f}else if(s==="folder"){const t=n.find(f=>f.id===g);if(!t)throw new Error("Patching progress view: folder not found");let e={...i};if(i.name&&t.path){const f=t.path.split("/");f[f.length-1]=i.name,e.path=f.join("/")}const l={...t,...e},m=n.findIndex(f=>f.id===g);n[m]=l}}})))}catch(a){return console.error(a),r(w.default.util.invalidateTags(q)),[]}},S=w.default.injectEndpoints({endpoints:k=>({updateEntity:k.mutation({query:({projectName:o,entityId:r,data:s,entityType:q})=>({url:`/api/projects/${o}/${q}s/${r}`,method:"PATCH",body:s}),async onQueryStarted({projectName:o,entityId:r,data:s,currentAssignees:q,entityType:u},{dispatch:a,queryFulfilled:v,getState:n}){const d=n(),g=[];let i=[];if(u==="task"){const l=n().dashboard?.selectedProjects||[],m=n().dashboard?.tasks.assignees||[],f=n().dashboard?.tasks.assigneesFilter==="me",h=s.assignees,p=f?[n().user?.name]:m,x=[...new Set([...q,...h||[]])].some(c=>p.includes(c)),F=l.some(c=>c===o);if(x&&F){const[c,b]=T({assignees:p,projects:l},{newAssignees:h,taskId:r,data:s},{dispatch:a});b&&g.push(c),b||A.getKanbanTasks({projects:[o],taskIds:[r]},a).then(E=>{let y=E.find(U=>U.id===r);y&&(y={...y,assignees:h},T({assignees:p,projects:l},{newAssignees:h,taskId:r,taskData:y},{dispatch:a}))})}const j=[{type:"task",id:r}];if(h?.length){const c=new Set(q),b=new Set(h),E=[...c].filter(P=>!b.has(P)),y=[...b].filter(P=>!c.has(P)),N=[...new Set([...E,...y])].map(P=>({type:"kanban",id:"user-"+P+"-project-"+o}));j.push(...N),a(A.dashboardQueries.util.invalidateTags([{type:"watchers",id:r}]))}let Q=A.dashboardQueries.util.selectInvalidatedBy(d,j),D=[];for(const c of Q){const[b,E]=T({assignees:c.originalArgs.assignees,projects:c.originalArgs.projects},{newAssignees:h,taskId:r,data:s},{dispatch:a});E?g.push(b):D.push(c)}const O={projects:l,assignees:p};D=D.filter(c=>JSON.stringify(c.originalArgs)!==JSON.stringify(O));const M=Q.map(c=>({type:"kanban",id:JSON.stringify(c.originalArgs)}));i.push(...M)}const t=[{type:"entities",id:r}],e=w.default.util.selectInvalidatedBy(d,t);for(const l of e){let m=a(R.detailsPanelQueries.util.updateQueryData("getEntitiesDetailsPanel",l.originalArgs,f=>{for(const h of f)I.patchDetailsPanelEntity([{entityId:r,data:s,entityType:u}],h)}));g.push(m)}try{await v,i.length&&a(A.dashboardQueries.util.invalidateTags(i))}catch(l){console.error("error updating "+u,l),B.toast.error(l?.error?.data?.detail||"Failed to update task"),g.forEach(m=>m?.undo())}}}),updateEntities:k.mutation({async queryFn({operations:o=[],entityType:r},{dispatch:s,getState:q}){try{const u=q(),a=[];for(const{projectName:e,data:l,id:m,currentAssignees:f=[]}of o){const h=s(S.endpoints.updateEntity.initiate({projectName:e,entityId:m,data:l,entityType:r,currentAssignees:f}));a.push(h)}let v=[];(r==="task"||r==="folder")&&(v=K({operations:o,state:u,dispatch:s,entityType:r}));const n=[],d=o.map(e=>({...e,entityId:e.id}));if((r==="task"||r==="folder")&&(r==="task"&&I.patchOverviewTasks(d,{state:u,dispatch:s},n),r==="folder"&&(I.patchOverviewFolders(d,{state:u,dispatch:s},n),console.log("invalidate overview folders"),s(w.default.util.invalidateTags([{type:"folder",id:"LIST"}])),s(w.default.util.invalidateTags(d.map(e=>({type:"overviewTask",id:e.entityId})))))),(await Promise.allSettled(a)).some(e=>e.value?.error))throw s(w.default.util.invalidateTags(o.map(e=>({type:"kanBanTask",id:e.id})))),v.forEach(e=>e?.undo()),n.forEach(e=>e?.undo()),"Failed to update some tasks";const t=[];return t.length&&s(w.default.util.invalidateTags(t)),{data:o}}catch(u){return console.error(u),{error:u}}},invalidatesTags:(o,r,{operations:s})=>[...s.map(q=>({id:q.id,type:"review"}))]})}),overrideExisting:!0}),{useUpdateEntitiesMutation:C,useUpdateEntityMutation:J}=S;exports.entitiesQueries=S;exports.useUpdateEntitiesMutation=C;exports.useUpdateEntityMutation=J;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("./getEntity.cjs.js");require("../actions/getActions.cjs.js");require("../activities/getActivities.cjs.js");require("../activities/updateActivities.cjs.js");require("../activities/updateReaction.cjs.js");require("../activities/getMentions.cjs.js");require("../activities/getCategories.cjs.js");require("../addons/getAddons.cjs.js");require("../addons/updateAddons.cjs.js");require("../attributes/getAttributes.cjs.js");require("../attributes/updateAttributes.cjs.js");require("../authentication/getAuthentication.cjs.js");require("../cloud/cloud.cjs.js");require("../config/getConfig.cjs.js");require("../config/updateConfig.cjs.js");const N=require("./getEntityPanel.cjs.js");require("../../base/client.cjs.js");require("../../generated/graphql.cjs.js");require("../../generated/graphqlLinks.cjs.js");require("../../generated/access.cjs.js");require("../../generated/actions.cjs.js");require("../../generated/activityFeed.cjs.js");require("../../generated/addons.cjs.js");require("../../generated/anatomy.cjs.js");require("../../generated/attributes.cjs.js");require("../../generated/authentication.cjs.js");require("../../generated/bundles.cjs.js");require("../../generated/configuration.cjs.js");require("../../generated/desktop.cjs.js");require("../../generated/entityLists.cjs.js");require("../../generated/events.cjs.js");require("../../generated/files.cjs.js");require("../../generated/folders.cjs.js");require("../../generated/inbox.cjs.js");require("../../generated/links.cjs.js");require("../../generated/market.cjs.js");require("../../generated/onboarding.cjs.js");require("../../generated/operations.cjs.js");require("../../generated/products.cjs.js");require("../../generated/projectDashboard.cjs.js");require("../../generated/projects.cjs.js");require("../../generated/reviewables.cjs.js");require("../../generated/services.cjs.js");require("../../generated/system.cjs.js");require("../../generated/tasks.cjs.js");require("../../generated/teams.cjs.js");require("../../generated/thumbnails.cjs.js");require("../../generated/uRIs.cjs.js");require("../../generated/users.cjs.js");require("../../generated/versions.cjs.js");require("../../generated/workfiles.cjs.js");require("../../generated/ynputCloud.cjs.js");require("../../generated/grouping.cjs.js");require("../../generated/views.cjs.js");require("../entityLists/getLists.cjs.js");require("../entityLists/updateLists.cjs.js");require("../entityLists/getListsAttributes.cjs.js");require("../entityLists/updateListsAttributes.cjs.js");require("../entityLists/listFolders.cjs.js");require("../folders/getFolders.cjs.js");require("../grouping/getGrouping.cjs.js");require("../links/updateLinks.cjs.js");require("../links/getLinks.cjs.js");require("../links/getEntityLinks.cjs.js");require("../overview/getOverview.cjs.js");const S=require("../overview/updateOverview.cjs.js");require("../versions/getVersionsProducts.cjs.js");require("../permissions/getPermissions.cjs.js");require("../products/createProduct.cjs.js");require("../project/getProject.cjs.js");require("../project/updateProject.cjs.js");require("../review/getReview.cjs.js");require("../review/updateReview.cjs.js");require("../share/share.cjs.js");require("../system/getSystem.cjs.js");const A=require("../userDashboard/getUserDashboard.cjs.js");require("../users/getUsers.cjs.js");require("../users/updateUsers.cjs.js");require("../users/guests.cjs.js");require("../versions/updateVersions.cjs.js");require("../views/getViews.cjs.js");require("../views/updateViews.cjs.js");require("../watchers/getWatchers.cjs.js");require("../uris/getUris.cjs.js");const R=require("react-toastify"),T=({assignees:k=[],projects:u=[]},{newAssignees:e,taskId:s,data:a,taskData:t},{dispatch:i})=>{let v=!1;return[i(A.dashboardQueries.util.updateQueryData("GetKanban",{projects:u,assignees:k},l=>{const f=l.findIndex(n=>n.id===s);let o={...a};if(a?.attrib?.priority){const{priority:n}=o.attrib;o={...o,priority:n}}if(a?.attrib?.endDate){const{endDate:n}=o.attrib;o={...o,dueDate:n},delete o.attrib.endDate}if(f===-1)t?l.push(t):v=!1;else if(v=!0,!e?.some(r=>k.includes(r))&&e)l.splice(f,1);else{const r={...l[f],...o};l[f]=r}})),v]},B=({operations:k=[],state:u,dispatch:e,entityType:s})=>{const a=k.map(i=>({type:"progress",id:i.id}));let t=w.default.util.selectInvalidatedBy(u,a);if(!t.length)return[];try{return t.map(v=>e(w.default.util.updateQueryData(v.endpointName,v.originalArgs,d=>{for(const l of k){const f=l.id,o=l.data;if(s==="task"){const n=l.meta?.folderId,r=d.find(h=>h.id===n);if(!r)throw new Error("Patching progress view: folder not found");const c=r.tasks?.find(h=>h.id===f);if(!c)throw new Error("Patching progress view: task not found");const m={...c,...o},g={...r,tasks:r.tasks.map(h=>h.id===f?m:h)},p=d.findIndex(h=>h.id===n);d[p]=g}else if(s==="folder"){const n=d.find(g=>g.id===f);if(!n)throw new Error("Patching progress view: folder not found");let r={...o};if(o.name&&n.path){const g=n.path.split("/");g[g.length-1]=o.name,r.path=g.join("/")}const c={...n,...r},m=d.findIndex(g=>g.id===f);d[m]=c}}})))}catch(i){return console.error(i),e(w.default.util.invalidateTags(a)),[]}},D=w.default.injectEndpoints({endpoints:k=>({updateEntity:k.mutation({query:({projectName:u,entityId:e,data:s,entityType:a})=>({url:`/api/projects/${u}/${a}s/${e}`,method:"PATCH",body:s}),invalidatesTags:(u,e,{entityId:s,entityType:a})=>{const t=[];return a==="product"&&t.push({type:"product",id:s}),a==="version"&&t.push({type:"version",id:s}),t},async onQueryStarted({projectName:u,entityId:e,data:s,currentAssignees:a,entityType:t},{dispatch:i,queryFulfilled:v,getState:d}){const l=d(),f=[];let o=[];if(t==="task"){const c=d().dashboard?.selectedProjects||[],m=d().dashboard?.tasks.assignees||[],g=d().dashboard?.tasks.assigneesFilter==="me",p=s.assignees,h=g?[d().user?.name]:m,x=[...new Set([...a,...p||[]])].some(q=>h.includes(q)),F=c.some(q=>q===u);if(x&&F){const[q,y]=T({assignees:h,projects:c},{newAssignees:p,taskId:e,data:s},{dispatch:i});y&&f.push(q),y||A.getKanbanTasks({projects:[u],taskIds:[e]},i).then(b=>{let E=b.find(U=>U.id===e);E&&(E={...E,assignees:p},T({assignees:h,projects:c},{newAssignees:p,taskId:e,taskData:E},{dispatch:i}))})}const j=[{type:"task",id:e}];if(p?.length){const q=new Set(a),y=new Set(p),b=[...q].filter(P=>!y.has(P)),E=[...y].filter(P=>!q.has(P)),L=[...new Set([...b,...E])].map(P=>({type:"kanban",id:"user-"+P+"-project-"+u}));j.push(...L),i(A.dashboardQueries.util.invalidateTags([{type:"watchers",id:e}]))}let Q=A.dashboardQueries.util.selectInvalidatedBy(l,j),I=[];for(const q of Q){const[y,b]=T({assignees:q.originalArgs.assignees,projects:q.originalArgs.projects},{newAssignees:p,taskId:e,data:s},{dispatch:i});b?f.push(y):I.push(q)}const O={projects:c,assignees:h};I=I.filter(q=>JSON.stringify(q.originalArgs)!==JSON.stringify(O));const M=Q.map(q=>({type:"kanban",id:JSON.stringify(q.originalArgs)}));o.push(...M)}const n=[{type:"entities",id:e}],r=w.default.util.selectInvalidatedBy(l,n);for(const c of r){let m=i(N.detailsPanelQueries.util.updateQueryData("getEntitiesDetailsPanel",c.originalArgs,g=>{for(const p of g)S.patchDetailsPanelEntity([{entityId:e,data:s,entityType:t}],p)}));f.push(m)}try{await v,o.length&&i(A.dashboardQueries.util.invalidateTags(o))}catch(c){console.error("error updating "+t,c),R.toast.error(c?.error?.data?.detail||"Failed to update task"),f.forEach(m=>m?.undo())}}}),updateEntities:k.mutation({async queryFn({operations:u=[],entityType:e},{dispatch:s,getState:a}){try{const t=a(),i=[];for(const{projectName:r,data:c,id:m,currentAssignees:g=[]}of u){const p=s(D.endpoints.updateEntity.initiate({projectName:r,entityId:m,data:c,entityType:e,currentAssignees:g}));i.push(p)}let v=[];(e==="task"||e==="folder")&&(v=B({operations:u,state:t,dispatch:s,entityType:e}));const d=[],l=u.map(r=>({...r,entityId:r.id}));if((e==="task"||e==="folder")&&(e==="task"&&S.patchOverviewTasks(l,{state:t,dispatch:s},d),e==="folder"&&(S.patchOverviewFolders(l,{state:t,dispatch:s},d),console.log("invalidate overview folders"),s(w.default.util.invalidateTags([{type:"folder",id:"LIST"}])),s(w.default.util.invalidateTags(l.map(r=>({type:"overviewTask",id:r.entityId})))))),(await Promise.allSettled(i)).some(r=>r.value?.error))throw s(w.default.util.invalidateTags(u.map(r=>({type:"kanBanTask",id:r.id})))),v.forEach(r=>r?.undo()),d.forEach(r=>r?.undo()),"Failed to update some tasks";const n=[];return n.length&&s(w.default.util.invalidateTags(n)),{data:u}}catch(t){return console.error(t),{error:t}}},invalidatesTags:(u,e,{operations:s,entityType:a})=>{const t=s.map(i=>({id:i.id,type:"review"}));return a==="product"&&(t.push({type:"product",id:"LIST"},{type:"version",id:"LIST"}),s.forEach(i=>t.push({type:"product",id:i.id}))),a==="version"&&(t.push({type:"version",id:"LIST"},{type:"product",id:"LIST"}),s.forEach(i=>t.push({type:"version",id:i.id}))),t}})}),overrideExisting:!0}),{useUpdateEntitiesMutation:K,useUpdateEntityMutation:C}=D;exports.entitiesQueries=D;exports.useUpdateEntitiesMutation=K;exports.useUpdateEntityMutation=C;
2
2
  //# sourceMappingURL=updateEntity.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"updateEntity.cjs.js","sources":["../../../../../../src/api/queries/entities/updateEntity.ts"],"sourcesContent":["// @ts-nocheck\n\nimport api from './getEntity'\nimport { detailsPanelQueries } from '@shared/api/queries'\nimport { patchDetailsPanelEntity } from '@shared/api'\nimport { toast } from 'react-toastify'\nimport { dashboardQueries, getKanbanTasks } from '@shared/api/queries/userDashboard'\nimport { patchOverviewFolders, patchOverviewTasks } from '@shared/api/queries/overview'\n\nconst patchKanban = (\n { assignees = [], projects = [] },\n { newAssignees, taskId, data, taskData },\n { dispatch },\n) => {\n let kanbanPatched = false\n const patchResult = dispatch(\n dashboardQueries.util.updateQueryData(\n 'GetKanban',\n { projects: projects, assignees: assignees },\n (draft) => {\n const taskIndex = draft.findIndex((task) => task.id === taskId)\n let patchData = { ...data }\n // if the data include attrib.priority it needs to be transformed to just priority\n // this is because priority is a top level field on kanban query\n if (data?.attrib?.priority) {\n const { priority } = patchData.attrib\n patchData = { ...patchData, priority }\n }\n // if the data include attrib.endDate it needs to be transformed to dueDate\n // this is because dueDate is a top level field on kanban query\n // NOTE TO SELF: Lets try to do these transforms after the cache the future.\n if (data?.attrib?.endDate) {\n const { endDate } = patchData.attrib\n patchData = { ...patchData, dueDate: endDate }\n delete patchData.attrib.endDate\n }\n\n if (taskIndex === -1) {\n // task not found, assignee must have just been added\n if (taskData) {\n // add the task to the cache\n draft.push(taskData)\n } else {\n // we don't have the task data, so we can't add it to the cache\n // we might add it later\n kanbanPatched = false\n }\n } else {\n kanbanPatched = true\n // first check that the task assignees still has a intersection with dashAssignees\n const hasSomeAssignees = newAssignees?.some((assignee) => assignees.includes(assignee))\n\n if (!hasSomeAssignees && newAssignees) {\n // remove from cache\n draft.splice(taskIndex, 1)\n } else {\n // task found: update the task in the cache\n const newData = { ...draft[taskIndex], ...patchData }\n draft[taskIndex] = newData\n }\n }\n },\n ),\n )\n\n return [patchResult, kanbanPatched]\n}\n\n// try to patch the progress view if there are queries that need to be updated\nconst patchProgressView = ({ operations = [], state, dispatch, entityType }) => {\n // create invalidation tags for progress view\n const invalidationTags = operations.map((o) => ({ type: 'progress', id: o.id }))\n // find the entries that need to be updated\n let entries = api.util.selectInvalidatedBy(state, invalidationTags)\n // if there are no entries, return\n if (!entries.length) return []\n\n try {\n // patch each entry with updated task data\n const patches = entries.map((entry) =>\n dispatch(\n api.util.updateQueryData(entry.endpointName, entry.originalArgs, (draft) => {\n for (const operation of operations) {\n const entityId = operation.id\n const patch = operation.data\n\n // patch the updated task data\n if (entityType === 'task') {\n const folderId = operation.meta?.folderId\n const folder = draft.find((folder) => folder.id === folderId)\n if (!folder) throw new Error('Patching progress view: folder not found')\n const task = folder.tasks?.find((task) => task.id === entityId)\n if (!task) throw new Error('Patching progress view: task not found')\n // update task\n const newTask = { ...task, ...patch }\n // update folder\n const newFolder = {\n ...folder,\n tasks: folder.tasks.map((t) => (t.id === entityId ? newTask : t)),\n }\n // update query\n const folderIndex = draft.findIndex((f) => f.id === folderId)\n draft[folderIndex] = newFolder\n } else if (entityType === 'folder') {\n const folder = draft.find((folder) => folder.id === entityId)\n if (!folder) throw new Error('Patching progress view: folder not found')\n\n // If name is being updated, also update the path\n let updatedPatch = { ...patch }\n if (patch.name && folder.path) {\n // Construct new path by replacing the last segment with the new name\n const pathParts = folder.path.split('/')\n pathParts[pathParts.length - 1] = patch.name\n updatedPatch.path = pathParts.join('/')\n }\n\n // update folder\n const newFolder = { ...folder, ...updatedPatch }\n // update query\n const folderIndex = draft.findIndex((f) => f.id === entityId)\n draft[folderIndex] = newFolder\n }\n }\n }),\n ),\n )\n return patches\n } catch (error) {\n console.error(error)\n // invalidate the progress view queries instead\n dispatch(api.util.invalidateTags(invalidationTags))\n return []\n }\n}\n\nconst updateEntity = api.injectEndpoints({\n endpoints: (build) => ({\n updateEntity: build.mutation({\n query: ({ projectName, entityId, data, entityType }) => ({\n url: `/api/projects/${projectName}/${entityType}s/${entityId}`,\n method: 'PATCH',\n body: data,\n }),\n async onQueryStarted(\n { projectName, entityId, data, currentAssignees, entityType },\n { dispatch, queryFulfilled, getState },\n ) {\n const state = getState()\n const patchResults = []\n\n let invalidationTagsAfterComplete = []\n // if task, patch the GetKanban query\n if (entityType === 'task') {\n const dashboardProjects = getState().dashboard?.selectedProjects || []\n const dashboardUsers = getState().dashboard?.tasks.assignees || []\n const dashboardAssigneesIsMe = getState().dashboard?.tasks.assigneesFilter === 'me'\n const newAssignees = data.assignees\n\n const cacheUsers = dashboardAssigneesIsMe ? [getState().user?.name] : dashboardUsers\n\n const entityAssignees = [...new Set([...currentAssignees, ...(newAssignees || [])])]\n const hasSomeAssignees = entityAssignees.some((assignee) => cacheUsers.includes(assignee))\n const hasSomeProjects = dashboardProjects.some((project) => project === projectName)\n const currentDashNeedsUpdating = hasSomeAssignees && hasSomeProjects\n\n if (currentDashNeedsUpdating) {\n const [result, wasPatched] = patchKanban(\n { assignees: cacheUsers, projects: dashboardProjects },\n { newAssignees, taskId: entityId, data },\n { dispatch },\n )\n\n if (wasPatched) patchResults.push(result)\n\n if (!wasPatched) {\n // this means the task is not in the current kanban and it needs to be added\n\n // get the new task data\n getKanbanTasks({ projects: [projectName], taskIds: [entityId] }, dispatch).then(\n // use .then so that the rest of the code can run\n (response) => {\n let newTask = response.find((task) => task.id === entityId)\n if (newTask) {\n // add newAssignees as the actual DB hasn't been updated yet\n newTask = { ...newTask, assignees: newAssignees }\n\n patchKanban(\n { assignees: cacheUsers, projects: dashboardProjects },\n { newAssignees, taskId: entityId, taskData: newTask },\n { dispatch },\n )\n }\n },\n )\n }\n }\n\n // always update the kanban if task id matches\n const tags = [{ type: 'task', id: entityId }]\n\n // are we changing the assignees?\n if (newAssignees?.length) {\n const currentAssigneesSet = new Set(currentAssignees)\n const newAssigneesSet = new Set(newAssignees)\n\n const removedAssignees = [...currentAssigneesSet].filter(\n (assignee) => !newAssigneesSet.has(assignee),\n )\n const addedAssignees = [...newAssigneesSet].filter(\n (assignee) => !currentAssigneesSet.has(assignee),\n )\n\n const changedAssignees = [...new Set([...removedAssignees, ...addedAssignees])]\n\n // any query that has those changed assignees, needs to be updated\n // we are changing the assignees\n const assigneesTags = changedAssignees.map((assignee) => ({\n type: 'kanban',\n id: 'user-' + assignee + '-project-' + projectName,\n }))\n\n tags.push(...assigneesTags)\n\n // invalidate the watchers query\n dispatch(\n dashboardQueries.util.invalidateTags([\n {\n type: 'watchers',\n id: entityId,\n },\n ]),\n )\n }\n\n // invalidate any other caches\n let entries = dashboardQueries.util.selectInvalidatedBy(state, tags)\n let entriesToInvalidate = []\n\n // for each entry try to patch the data into the cache first\n for (const entry of entries) {\n const [patchResult, wasPatched] = patchKanban(\n {\n assignees: entry.originalArgs.assignees,\n projects: entry.originalArgs.projects,\n },\n {\n newAssignees,\n taskId: entityId,\n data,\n },\n { dispatch },\n )\n\n if (wasPatched) {\n patchResults.push(patchResult)\n } else {\n // if we couldn't patch, we need to invalidate the cache\n entriesToInvalidate.push(entry)\n }\n }\n\n // filter out current kanban query if we were able to patch it\n const currentKanbanCacheArgs = { projects: dashboardProjects, assignees: cacheUsers }\n entriesToInvalidate = entriesToInvalidate.filter(\n (entry) =>\n JSON.stringify(entry.originalArgs) !== JSON.stringify(currentKanbanCacheArgs),\n )\n\n // create the invalidation tags from originalArgs\n const invalidationTags = entries.map((entry) => ({\n type: 'kanban',\n id: JSON.stringify(entry.originalArgs),\n }))\n\n // invalidate the tags later, once the query is complete\n invalidationTagsAfterComplete.push(...invalidationTags)\n }\n\n // get all details panel caches that would be affected by this update\n const detailsPanelTags = [\n {\n type: 'entities',\n id: entityId,\n },\n ]\n\n const detailsPanelEntries = api.util.selectInvalidatedBy(state, detailsPanelTags)\n\n for (const entry of detailsPanelEntries) {\n // patch any entity details panels in dashboard\n let entityDetailsResult = dispatch(\n detailsPanelQueries.util.updateQueryData(\n 'getEntitiesDetailsPanel',\n entry.originalArgs,\n (draft) => {\n for (const entity of draft) {\n patchDetailsPanelEntity([{ entityId, data, entityType }], entity)\n }\n },\n ),\n )\n\n patchResults.push(entityDetailsResult)\n }\n\n try {\n await queryFulfilled\n\n // now invalidate any tags\n if (invalidationTagsAfterComplete.length) {\n dispatch(dashboardQueries.util.invalidateTags(invalidationTagsAfterComplete))\n }\n } catch (error) {\n console.error('error updating ' + entityType, error)\n toast.error(error?.error?.data?.detail || 'Failed to update task')\n patchResults.forEach((result) => result?.undo())\n }\n },\n }),\n updateEntities: build.mutation({\n async queryFn({ operations = [], entityType }, { dispatch, getState }) {\n try {\n const state = getState()\n const promises = []\n for (const { projectName, data, id, currentAssignees = [] } of operations) {\n const promise = dispatch(\n updateEntity.endpoints.updateEntity.initiate({\n projectName: projectName,\n entityId: id,\n data,\n entityType,\n currentAssignees,\n }),\n )\n promises.push(promise)\n }\n\n let progressPatches = []\n if (entityType === 'task' || entityType === 'folder') {\n // patch the progress page\n progressPatches = patchProgressView({ operations, state, dispatch, entityType })\n }\n\n const overviewPatches = []\n // convert id in operations to entityId\n const operationsWithEntityId = operations.map((o) => ({ ...o, entityId: o.id }))\n if (entityType === 'task' || entityType === 'folder') {\n // patch the overview page\n if (entityType === 'task') {\n patchOverviewTasks(operationsWithEntityId, { state, dispatch }, overviewPatches)\n }\n if (entityType === 'folder') {\n // patch the overview page\n patchOverviewFolders(operationsWithEntityId, { state, dispatch }, overviewPatches)\n console.log('invalidate overview folders')\n // invalidate overview folders query\n dispatch(api.util.invalidateTags([{ type: 'folder', id: 'LIST' }]))\n // invalidate overview tasks with folder as a parent\n dispatch(\n api.util.invalidateTags(\n operationsWithEntityId.map((o) => ({ type: 'overviewTask', id: o.entityId })),\n ),\n )\n }\n }\n\n // check if any of the requests failed and invalidate the tasks cache again to refetch\n const results = await Promise.allSettled(promises)\n\n // did any of the requests fail?\n const someError = results.some((result) => result.value?.error)\n if (someError) {\n dispatch(\n api.util.invalidateTags(operations.map((o) => ({ type: 'kanBanTask', id: o.id }))),\n )\n\n // revert the progress view patches\n progressPatches.forEach((patch) => patch?.undo())\n\n // revert the overview patches\n overviewPatches.forEach((patch) => patch?.undo())\n\n throw 'Failed to update some tasks'\n }\n\n const activityTags = []\n\n if (activityTags.length) {\n dispatch(api.util.invalidateTags(activityTags))\n }\n\n return { data: operations }\n } catch (error) {\n console.error(error)\n return { error }\n }\n },\n invalidatesTags: (result, error, { operations }) => [\n ...operations.map((o) => ({ id: o.id, type: 'review' })),\n ],\n }),\n }),\n overrideExisting: true,\n})\n\nexport const { useUpdateEntitiesMutation, useUpdateEntityMutation } = updateEntity\nexport { updateEntity as entitiesQueries }\n"],"names":["patchKanban","assignees","projects","newAssignees","taskId","data","taskData","dispatch","kanbanPatched","dashboardQueries","draft","taskIndex","task","patchData","priority","endDate","assignee","newData","patchProgressView","operations","state","entityType","invalidationTags","o","entries","api","entry","operation","entityId","patch","folderId","folder","newTask","newFolder","t","folderIndex","f","updatedPatch","pathParts","error","updateEntity","build","projectName","currentAssignees","queryFulfilled","getState","patchResults","invalidationTagsAfterComplete","dashboardProjects","dashboardUsers","dashboardAssigneesIsMe","cacheUsers","hasSomeAssignees","hasSomeProjects","project","result","wasPatched","getKanbanTasks","response","tags","currentAssigneesSet","newAssigneesSet","removedAssignees","addedAssignees","assigneesTags","entriesToInvalidate","patchResult","currentKanbanCacheArgs","detailsPanelTags","detailsPanelEntries","entityDetailsResult","detailsPanelQueries","entity","patchDetailsPanelEntity","toast","promises","id","promise","progressPatches","overviewPatches","operationsWithEntityId","patchOverviewTasks","patchOverviewFolders","activityTags","useUpdateEntitiesMutation","useUpdateEntityMutation"],"mappings":"8nHASMA,EAAc,CAClB,CAAE,UAAAC,EAAY,CAAA,EAAI,SAAAC,EAAW,CAAA,CAAC,EAC9B,CAAE,aAAAC,EAAc,OAAAC,EAAQ,KAAAC,EAAM,SAAAC,GAC9B,CAAE,SAAAC,KACC,CACH,IAAIC,EAAgB,GAmDpB,MAAO,CAlDaD,EAClBE,EAAAA,iBAAiB,KAAK,gBACpB,YACA,CAAE,SAAAP,EAAoB,UAAAD,CAAA,EACrBS,GAAU,CACT,MAAMC,EAAYD,EAAM,UAAWE,GAASA,EAAK,KAAOR,CAAM,EAC9D,IAAIS,EAAY,CAAE,GAAGR,CAAA,EAGrB,GAAIA,GAAM,QAAQ,SAAU,CAC1B,KAAM,CAAE,SAAAS,GAAaD,EAAU,OAC/BA,EAAY,CAAE,GAAGA,EAAW,SAAAC,CAAA,CAC9B,CAIA,GAAIT,GAAM,QAAQ,QAAS,CACzB,KAAM,CAAE,QAAAU,GAAYF,EAAU,OAC9BA,EAAY,CAAE,GAAGA,EAAW,QAASE,CAAA,EACrC,OAAOF,EAAU,OAAO,OAC1B,CAEA,GAAIF,IAAc,GAEZL,EAEFI,EAAM,KAAKJ,CAAQ,EAInBE,EAAgB,WAGlBA,EAAgB,GAIZ,CAFqBL,GAAc,KAAMa,GAAaf,EAAU,SAASe,CAAQ,CAAC,GAE7Db,EAEvBO,EAAM,OAAOC,EAAW,CAAC,MACpB,CAEL,MAAMM,EAAU,CAAE,GAAGP,EAAMC,CAAS,EAAG,GAAGE,CAAA,EAC1CH,EAAMC,CAAS,EAAIM,CACrB,CAEJ,CAAA,CACF,EAGmBT,CAAa,CACpC,EAGMU,EAAoB,CAAC,CAAE,WAAAC,EAAa,CAAA,EAAI,MAAAC,EAAO,SAAAb,EAAU,WAAAc,KAAiB,CAE9E,MAAMC,EAAmBH,EAAW,IAAKI,IAAO,CAAE,KAAM,WAAY,GAAIA,EAAE,EAAA,EAAK,EAE/E,IAAIC,EAAUC,EAAAA,QAAI,KAAK,oBAAoBL,EAAOE,CAAgB,EAElE,GAAI,CAACE,EAAQ,OAAQ,MAAO,CAAA,EAE5B,GAAI,CAiDF,OA/CgBA,EAAQ,IAAKE,GAC3BnB,EACEkB,UAAI,KAAK,gBAAgBC,EAAM,aAAcA,EAAM,aAAehB,GAAU,CAC1E,UAAWiB,KAAaR,EAAY,CAClC,MAAMS,EAAWD,EAAU,GACrBE,EAAQF,EAAU,KAGxB,GAAIN,IAAe,OAAQ,CACzB,MAAMS,EAAWH,EAAU,MAAM,SAC3BI,EAASrB,EAAM,KAAMqB,GAAWA,EAAO,KAAOD,CAAQ,EAC5D,GAAI,CAACC,EAAQ,MAAM,IAAI,MAAM,0CAA0C,EACvE,MAAMnB,EAAOmB,EAAO,OAAO,KAAMnB,GAASA,EAAK,KAAOgB,CAAQ,EAC9D,GAAI,CAAChB,EAAM,MAAM,IAAI,MAAM,wCAAwC,EAEnE,MAAMoB,EAAU,CAAE,GAAGpB,EAAM,GAAGiB,CAAA,EAExBI,EAAY,CAChB,GAAGF,EACH,MAAOA,EAAO,MAAM,IAAKG,GAAOA,EAAE,KAAON,EAAWI,EAAUE,CAAE,CAAA,EAG5DC,EAAczB,EAAM,UAAW0B,GAAMA,EAAE,KAAON,CAAQ,EAC5DpB,EAAMyB,CAAW,EAAIF,CACvB,SAAWZ,IAAe,SAAU,CAClC,MAAMU,EAASrB,EAAM,KAAMqB,GAAWA,EAAO,KAAOH,CAAQ,EAC5D,GAAI,CAACG,EAAQ,MAAM,IAAI,MAAM,0CAA0C,EAGvE,IAAIM,EAAe,CAAE,GAAGR,CAAA,EACxB,GAAIA,EAAM,MAAQE,EAAO,KAAM,CAE7B,MAAMO,EAAYP,EAAO,KAAK,MAAM,GAAG,EACvCO,EAAUA,EAAU,OAAS,CAAC,EAAIT,EAAM,KACxCQ,EAAa,KAAOC,EAAU,KAAK,GAAG,CACxC,CAGA,MAAML,EAAY,CAAE,GAAGF,EAAQ,GAAGM,CAAA,EAE5BF,EAAczB,EAAM,UAAW,GAAM,EAAE,KAAOkB,CAAQ,EAC5DlB,EAAMyB,CAAW,EAAIF,CACvB,CACF,CACF,CAAC,CAAA,CACH,CAGJ,OAASM,EAAO,CACd,eAAQ,MAAMA,CAAK,EAEnBhC,EAASkB,EAAAA,QAAI,KAAK,eAAeH,CAAgB,CAAC,EAC3C,CAAA,CACT,CACF,EAEMkB,EAAef,EAAAA,QAAI,gBAAgB,CACvC,UAAYgB,IAAW,CACrB,aAAcA,EAAM,SAAS,CAC3B,MAAO,CAAC,CAAE,YAAAC,EAAa,SAAAd,EAAU,KAAAvB,EAAM,WAAAgB,MAAkB,CACvD,IAAK,iBAAiBqB,CAAW,IAAIrB,CAAU,KAAKO,CAAQ,GAC5D,OAAQ,QACR,KAAMvB,CAAA,GAER,MAAM,eACJ,CAAE,YAAAqC,EAAa,SAAAd,EAAU,KAAAvB,EAAM,iBAAAsC,EAAkB,WAAAtB,CAAA,EACjD,CAAE,SAAAd,EAAU,eAAAqC,EAAgB,SAAAC,GAC5B,CACA,MAAMzB,EAAQyB,EAAA,EACRC,EAAe,CAAA,EAErB,IAAIC,EAAgC,CAAA,EAEpC,GAAI1B,IAAe,OAAQ,CACzB,MAAM2B,EAAoBH,EAAA,EAAW,WAAW,kBAAoB,CAAA,EAC9DI,EAAiBJ,EAAA,EAAW,WAAW,MAAM,WAAa,CAAA,EAC1DK,EAAyBL,EAAA,EAAW,WAAW,MAAM,kBAAoB,KACzE1C,EAAeE,EAAK,UAEpB8C,EAAaD,EAAyB,CAACL,IAAW,MAAM,IAAI,EAAII,EAGhEG,EADkB,CAAC,GAAG,IAAI,IAAI,CAAC,GAAGT,EAAkB,GAAIxC,GAAgB,CAAA,CAAG,CAAC,CAAC,EAC1C,KAAMa,GAAamC,EAAW,SAASnC,CAAQ,CAAC,EACnFqC,EAAkBL,EAAkB,KAAMM,GAAYA,IAAYZ,CAAW,EAGnF,GAFiCU,GAAoBC,EAEvB,CAC5B,KAAM,CAACE,EAAQC,CAAU,EAAIxD,EAC3B,CAAE,UAAWmD,EAAY,SAAUH,CAAA,EACnC,CAAE,aAAA7C,EAAc,OAAQyB,EAAU,KAAAvB,CAAA,EAClC,CAAE,SAAAE,CAAA,CAAS,EAGTiD,GAAYV,EAAa,KAAKS,CAAM,EAEnCC,GAIHC,iBAAe,CAAE,SAAU,CAACf,CAAW,EAAG,QAAS,CAACd,CAAQ,CAAA,EAAKrB,CAAQ,EAAE,KAExEmD,GAAa,CACZ,IAAI1B,EAAU0B,EAAS,KAAM9C,GAASA,EAAK,KAAOgB,CAAQ,EACtDI,IAEFA,EAAU,CAAE,GAAGA,EAAS,UAAW7B,CAAA,EAEnCH,EACE,CAAE,UAAWmD,EAAY,SAAUH,CAAA,EACnC,CAAE,aAAA7C,EAAc,OAAQyB,EAAU,SAAUI,CAAA,EAC5C,CAAE,SAAAzB,CAAA,CAAS,EAGjB,CAAA,CAGN,CAGA,MAAMoD,EAAO,CAAC,CAAE,KAAM,OAAQ,GAAI/B,EAAU,EAG5C,GAAIzB,GAAc,OAAQ,CACxB,MAAMyD,EAAsB,IAAI,IAAIjB,CAAgB,EAC9CkB,EAAkB,IAAI,IAAI1D,CAAY,EAEtC2D,EAAmB,CAAC,GAAGF,CAAmB,EAAE,OAC/C5C,GAAa,CAAC6C,EAAgB,IAAI7C,CAAQ,CAAA,EAEvC+C,EAAiB,CAAC,GAAGF,CAAe,EAAE,OACzC7C,GAAa,CAAC4C,EAAoB,IAAI5C,CAAQ,CAAA,EAO3CgD,EAJmB,CAAC,GAAG,IAAI,IAAI,CAAC,GAAGF,EAAkB,GAAGC,CAAc,CAAC,CAAC,EAIvC,IAAK/C,IAAc,CACxD,KAAM,SACN,GAAI,QAAUA,EAAW,YAAc0B,CAAA,EACvC,EAEFiB,EAAK,KAAK,GAAGK,CAAa,EAG1BzD,EACEE,EAAAA,iBAAiB,KAAK,eAAe,CACnC,CACE,KAAM,WACN,GAAImB,CAAA,CACN,CACD,CAAA,CAEL,CAGA,IAAIJ,EAAUf,EAAAA,iBAAiB,KAAK,oBAAoBW,EAAOuC,CAAI,EAC/DM,EAAsB,CAAA,EAG1B,UAAWvC,KAASF,EAAS,CAC3B,KAAM,CAAC0C,EAAaV,CAAU,EAAIxD,EAChC,CACE,UAAW0B,EAAM,aAAa,UAC9B,SAAUA,EAAM,aAAa,QAAA,EAE/B,CACE,aAAAvB,EACA,OAAQyB,EACR,KAAAvB,CAAA,EAEF,CAAE,SAAAE,CAAA,CAAS,EAGTiD,EACFV,EAAa,KAAKoB,CAAW,EAG7BD,EAAoB,KAAKvC,CAAK,CAElC,CAGA,MAAMyC,EAAyB,CAAE,SAAUnB,EAAmB,UAAWG,CAAA,EACzEc,EAAsBA,EAAoB,OACvCvC,GACC,KAAK,UAAUA,EAAM,YAAY,IAAM,KAAK,UAAUyC,CAAsB,CAAA,EAIhF,MAAM7C,EAAmBE,EAAQ,IAAKE,IAAW,CAC/C,KAAM,SACN,GAAI,KAAK,UAAUA,EAAM,YAAY,CAAA,EACrC,EAGFqB,EAA8B,KAAK,GAAGzB,CAAgB,CACxD,CAGA,MAAM8C,EAAmB,CACvB,CACE,KAAM,WACN,GAAIxC,CAAA,CACN,EAGIyC,EAAsB5C,EAAAA,QAAI,KAAK,oBAAoBL,EAAOgD,CAAgB,EAEhF,UAAW1C,KAAS2C,EAAqB,CAEvC,IAAIC,EAAsB/D,EACxBgE,EAAAA,oBAAoB,KAAK,gBACvB,0BACA7C,EAAM,aACLhB,GAAU,CACT,UAAW8D,KAAU9D,EACnB+D,EAAAA,wBAAwB,CAAC,CAAE,SAAA7C,EAAU,KAAAvB,EAAM,WAAAgB,CAAA,CAAY,EAAGmD,CAAM,CAEpE,CAAA,CACF,EAGF1B,EAAa,KAAKwB,CAAmB,CACvC,CAEA,GAAI,CACF,MAAM1B,EAGFG,EAA8B,QAChCxC,EAASE,EAAAA,iBAAiB,KAAK,eAAesC,CAA6B,CAAC,CAEhF,OAASR,EAAO,CACd,QAAQ,MAAM,kBAAoBlB,EAAYkB,CAAK,EACnDmC,EAAAA,MAAM,MAAMnC,GAAO,OAAO,MAAM,QAAU,uBAAuB,EACjEO,EAAa,QAASS,GAAWA,GAAQ,MAAM,CACjD,CACF,CAAA,CACD,EACD,eAAgBd,EAAM,SAAS,CAC7B,MAAM,QAAQ,CAAE,WAAAtB,EAAa,CAAA,EAAI,WAAAE,CAAA,EAAc,CAAE,SAAAd,EAAU,SAAAsC,GAAY,CACrE,GAAI,CACF,MAAMzB,EAAQyB,EAAA,EACR8B,EAAW,CAAA,EACjB,SAAW,CAAE,YAAAjC,EAAa,KAAArC,EAAM,GAAAuE,EAAI,iBAAAjC,EAAmB,CAAA,CAAC,IAAOxB,EAAY,CACzE,MAAM0D,EAAUtE,EACdiC,EAAa,UAAU,aAAa,SAAS,CAC3C,YAAAE,EACA,SAAUkC,EACV,KAAAvE,EACA,WAAAgB,EACA,iBAAAsB,CAAA,CACD,CAAA,EAEHgC,EAAS,KAAKE,CAAO,CACvB,CAEA,IAAIC,EAAkB,CAAA,GAClBzD,IAAe,QAAUA,IAAe,YAE1CyD,EAAkB5D,EAAkB,CAAE,WAAAC,EAAY,MAAAC,EAAO,SAAAb,EAAU,WAAAc,EAAY,GAGjF,MAAM0D,EAAkB,CAAA,EAElBC,EAAyB7D,EAAW,IAAKI,IAAO,CAAE,GAAGA,EAAG,SAAUA,EAAE,EAAA,EAAK,EA0B/E,IAzBIF,IAAe,QAAUA,IAAe,YAEtCA,IAAe,QACjB4D,EAAAA,mBAAmBD,EAAwB,CAAE,MAAA5D,EAAO,SAAAb,CAAA,EAAYwE,CAAe,EAE7E1D,IAAe,WAEjB6D,EAAAA,qBAAqBF,EAAwB,CAAE,MAAA5D,EAAO,SAAAb,CAAA,EAAYwE,CAAe,EACjF,QAAQ,IAAI,6BAA6B,EAEzCxE,EAASkB,EAAAA,QAAI,KAAK,eAAe,CAAC,CAAE,KAAM,SAAU,GAAI,MAAA,CAAQ,CAAC,CAAC,EAElElB,EACEkB,EAAAA,QAAI,KAAK,eACPuD,EAAuB,IAAKzD,IAAO,CAAE,KAAM,eAAgB,GAAIA,EAAE,UAAW,CAAA,CAC9E,KAMU,MAAM,QAAQ,WAAWoD,CAAQ,GAGvB,KAAMpB,GAAWA,EAAO,OAAO,KAAK,EAE5D,MAAAhD,EACEkB,EAAAA,QAAI,KAAK,eAAeN,EAAW,IAAKI,IAAO,CAAE,KAAM,aAAc,GAAIA,EAAE,EAAA,EAAK,CAAC,CAAA,EAInFuD,EAAgB,QAASjD,GAAUA,GAAO,MAAM,EAGhDkD,EAAgB,QAASlD,GAAUA,GAAO,MAAM,EAE1C,8BAGR,MAAMsD,EAAe,CAAA,EAErB,OAAIA,EAAa,QACf5E,EAASkB,EAAAA,QAAI,KAAK,eAAe0D,CAAY,CAAC,EAGzC,CAAE,KAAMhE,CAAA,CACjB,OAASoB,EAAO,CACd,eAAQ,MAAMA,CAAK,EACZ,CAAE,MAAAA,CAAA,CACX,CACF,EACA,gBAAiB,CAACgB,EAAQhB,EAAO,CAAE,WAAApB,KAAiB,CAClD,GAAGA,EAAW,IAAKI,IAAO,CAAE,GAAIA,EAAE,GAAI,KAAM,UAAW,CAAA,CACzD,CACD,CAAA,GAEH,iBAAkB,EACpB,CAAC,EAEY,CAAE,0BAAA6D,EAA2B,wBAAAC,GAA4B7C"}
1
+ {"version":3,"file":"updateEntity.cjs.js","sources":["../../../../../../src/api/queries/entities/updateEntity.ts"],"sourcesContent":["// @ts-nocheck\n\nimport api from './getEntity'\nimport { detailsPanelQueries } from '@shared/api/queries'\nimport { patchDetailsPanelEntity } from '@shared/api'\nimport { toast } from 'react-toastify'\nimport { dashboardQueries, getKanbanTasks } from '@shared/api/queries/userDashboard'\nimport { patchOverviewFolders, patchOverviewTasks } from '@shared/api/queries/overview'\n\nconst patchKanban = (\n { assignees = [], projects = [] },\n { newAssignees, taskId, data, taskData },\n { dispatch },\n) => {\n let kanbanPatched = false\n const patchResult = dispatch(\n dashboardQueries.util.updateQueryData(\n 'GetKanban',\n { projects: projects, assignees: assignees },\n (draft) => {\n const taskIndex = draft.findIndex((task) => task.id === taskId)\n let patchData = { ...data }\n // if the data include attrib.priority it needs to be transformed to just priority\n // this is because priority is a top level field on kanban query\n if (data?.attrib?.priority) {\n const { priority } = patchData.attrib\n patchData = { ...patchData, priority }\n }\n // if the data include attrib.endDate it needs to be transformed to dueDate\n // this is because dueDate is a top level field on kanban query\n // NOTE TO SELF: Lets try to do these transforms after the cache the future.\n if (data?.attrib?.endDate) {\n const { endDate } = patchData.attrib\n patchData = { ...patchData, dueDate: endDate }\n delete patchData.attrib.endDate\n }\n\n if (taskIndex === -1) {\n // task not found, assignee must have just been added\n if (taskData) {\n // add the task to the cache\n draft.push(taskData)\n } else {\n // we don't have the task data, so we can't add it to the cache\n // we might add it later\n kanbanPatched = false\n }\n } else {\n kanbanPatched = true\n // first check that the task assignees still has a intersection with dashAssignees\n const hasSomeAssignees = newAssignees?.some((assignee) => assignees.includes(assignee))\n\n if (!hasSomeAssignees && newAssignees) {\n // remove from cache\n draft.splice(taskIndex, 1)\n } else {\n // task found: update the task in the cache\n const newData = { ...draft[taskIndex], ...patchData }\n draft[taskIndex] = newData\n }\n }\n },\n ),\n )\n\n return [patchResult, kanbanPatched]\n}\n\n// try to patch the progress view if there are queries that need to be updated\nconst patchProgressView = ({ operations = [], state, dispatch, entityType }) => {\n // create invalidation tags for progress view\n const invalidationTags = operations.map((o) => ({ type: 'progress', id: o.id }))\n // find the entries that need to be updated\n let entries = api.util.selectInvalidatedBy(state, invalidationTags)\n // if there are no entries, return\n if (!entries.length) return []\n\n try {\n // patch each entry with updated task data\n const patches = entries.map((entry) =>\n dispatch(\n api.util.updateQueryData(entry.endpointName, entry.originalArgs, (draft) => {\n for (const operation of operations) {\n const entityId = operation.id\n const patch = operation.data\n\n // patch the updated task data\n if (entityType === 'task') {\n const folderId = operation.meta?.folderId\n const folder = draft.find((folder) => folder.id === folderId)\n if (!folder) throw new Error('Patching progress view: folder not found')\n const task = folder.tasks?.find((task) => task.id === entityId)\n if (!task) throw new Error('Patching progress view: task not found')\n // update task\n const newTask = { ...task, ...patch }\n // update folder\n const newFolder = {\n ...folder,\n tasks: folder.tasks.map((t) => (t.id === entityId ? newTask : t)),\n }\n // update query\n const folderIndex = draft.findIndex((f) => f.id === folderId)\n draft[folderIndex] = newFolder\n } else if (entityType === 'folder') {\n const folder = draft.find((folder) => folder.id === entityId)\n if (!folder) throw new Error('Patching progress view: folder not found')\n\n // If name is being updated, also update the path\n let updatedPatch = { ...patch }\n if (patch.name && folder.path) {\n // Construct new path by replacing the last segment with the new name\n const pathParts = folder.path.split('/')\n pathParts[pathParts.length - 1] = patch.name\n updatedPatch.path = pathParts.join('/')\n }\n\n // update folder\n const newFolder = { ...folder, ...updatedPatch }\n // update query\n const folderIndex = draft.findIndex((f) => f.id === entityId)\n draft[folderIndex] = newFolder\n }\n }\n }),\n ),\n )\n return patches\n } catch (error) {\n console.error(error)\n // invalidate the progress view queries instead\n dispatch(api.util.invalidateTags(invalidationTags))\n return []\n }\n}\n\nconst updateEntity = api.injectEndpoints({\n endpoints: (build) => ({\n updateEntity: build.mutation({\n query: ({ projectName, entityId, data, entityType }) => ({\n url: `/api/projects/${projectName}/${entityType}s/${entityId}`,\n method: 'PATCH',\n body: data,\n }),\n invalidatesTags: (result, error, { entityId, entityType }) => {\n const tags = []\n if (entityType === 'product') {\n tags.push({ type: 'product', id: entityId })\n }\n if (entityType === 'version') {\n tags.push({ type: 'version', id: entityId })\n }\n return tags\n },\n async onQueryStarted(\n { projectName, entityId, data, currentAssignees, entityType },\n { dispatch, queryFulfilled, getState },\n ) {\n const state = getState()\n const patchResults = []\n\n let invalidationTagsAfterComplete = []\n // if task, patch the GetKanban query\n if (entityType === 'task') {\n const dashboardProjects = getState().dashboard?.selectedProjects || []\n const dashboardUsers = getState().dashboard?.tasks.assignees || []\n const dashboardAssigneesIsMe = getState().dashboard?.tasks.assigneesFilter === 'me'\n const newAssignees = data.assignees\n\n const cacheUsers = dashboardAssigneesIsMe ? [getState().user?.name] : dashboardUsers\n\n const entityAssignees = [...new Set([...currentAssignees, ...(newAssignees || [])])]\n const hasSomeAssignees = entityAssignees.some((assignee) => cacheUsers.includes(assignee))\n const hasSomeProjects = dashboardProjects.some((project) => project === projectName)\n const currentDashNeedsUpdating = hasSomeAssignees && hasSomeProjects\n\n if (currentDashNeedsUpdating) {\n const [result, wasPatched] = patchKanban(\n { assignees: cacheUsers, projects: dashboardProjects },\n { newAssignees, taskId: entityId, data },\n { dispatch },\n )\n\n if (wasPatched) patchResults.push(result)\n\n if (!wasPatched) {\n // this means the task is not in the current kanban and it needs to be added\n\n // get the new task data\n getKanbanTasks({ projects: [projectName], taskIds: [entityId] }, dispatch).then(\n // use .then so that the rest of the code can run\n (response) => {\n let newTask = response.find((task) => task.id === entityId)\n if (newTask) {\n // add newAssignees as the actual DB hasn't been updated yet\n newTask = { ...newTask, assignees: newAssignees }\n\n patchKanban(\n { assignees: cacheUsers, projects: dashboardProjects },\n { newAssignees, taskId: entityId, taskData: newTask },\n { dispatch },\n )\n }\n },\n )\n }\n }\n\n // always update the kanban if task id matches\n const tags = [{ type: 'task', id: entityId }]\n\n // are we changing the assignees?\n if (newAssignees?.length) {\n const currentAssigneesSet = new Set(currentAssignees)\n const newAssigneesSet = new Set(newAssignees)\n\n const removedAssignees = [...currentAssigneesSet].filter(\n (assignee) => !newAssigneesSet.has(assignee),\n )\n const addedAssignees = [...newAssigneesSet].filter(\n (assignee) => !currentAssigneesSet.has(assignee),\n )\n\n const changedAssignees = [...new Set([...removedAssignees, ...addedAssignees])]\n\n // any query that has those changed assignees, needs to be updated\n // we are changing the assignees\n const assigneesTags = changedAssignees.map((assignee) => ({\n type: 'kanban',\n id: 'user-' + assignee + '-project-' + projectName,\n }))\n\n tags.push(...assigneesTags)\n\n // invalidate the watchers query\n dispatch(\n dashboardQueries.util.invalidateTags([\n {\n type: 'watchers',\n id: entityId,\n },\n ]),\n )\n }\n\n // invalidate any other caches\n let entries = dashboardQueries.util.selectInvalidatedBy(state, tags)\n let entriesToInvalidate = []\n\n // for each entry try to patch the data into the cache first\n for (const entry of entries) {\n const [patchResult, wasPatched] = patchKanban(\n {\n assignees: entry.originalArgs.assignees,\n projects: entry.originalArgs.projects,\n },\n {\n newAssignees,\n taskId: entityId,\n data,\n },\n { dispatch },\n )\n\n if (wasPatched) {\n patchResults.push(patchResult)\n } else {\n // if we couldn't patch, we need to invalidate the cache\n entriesToInvalidate.push(entry)\n }\n }\n\n // filter out current kanban query if we were able to patch it\n const currentKanbanCacheArgs = { projects: dashboardProjects, assignees: cacheUsers }\n entriesToInvalidate = entriesToInvalidate.filter(\n (entry) =>\n JSON.stringify(entry.originalArgs) !== JSON.stringify(currentKanbanCacheArgs),\n )\n\n // create the invalidation tags from originalArgs\n const invalidationTags = entries.map((entry) => ({\n type: 'kanban',\n id: JSON.stringify(entry.originalArgs),\n }))\n\n // invalidate the tags later, once the query is complete\n invalidationTagsAfterComplete.push(...invalidationTags)\n }\n\n // get all details panel caches that would be affected by this update\n const detailsPanelTags = [\n {\n type: 'entities',\n id: entityId,\n },\n ]\n\n const detailsPanelEntries = api.util.selectInvalidatedBy(state, detailsPanelTags)\n\n for (const entry of detailsPanelEntries) {\n // patch any entity details panels in dashboard\n let entityDetailsResult = dispatch(\n detailsPanelQueries.util.updateQueryData(\n 'getEntitiesDetailsPanel',\n entry.originalArgs,\n (draft) => {\n for (const entity of draft) {\n patchDetailsPanelEntity([{ entityId, data, entityType }], entity)\n }\n },\n ),\n )\n\n patchResults.push(entityDetailsResult)\n }\n\n try {\n await queryFulfilled\n\n // now invalidate any tags\n if (invalidationTagsAfterComplete.length) {\n dispatch(dashboardQueries.util.invalidateTags(invalidationTagsAfterComplete))\n }\n } catch (error) {\n console.error('error updating ' + entityType, error)\n toast.error(error?.error?.data?.detail || 'Failed to update task')\n patchResults.forEach((result) => result?.undo())\n }\n },\n }),\n updateEntities: build.mutation({\n async queryFn({ operations = [], entityType }, { dispatch, getState }) {\n try {\n const state = getState()\n const promises = []\n for (const { projectName, data, id, currentAssignees = [] } of operations) {\n const promise = dispatch(\n updateEntity.endpoints.updateEntity.initiate({\n projectName: projectName,\n entityId: id,\n data,\n entityType,\n currentAssignees,\n }),\n )\n promises.push(promise)\n }\n\n let progressPatches = []\n if (entityType === 'task' || entityType === 'folder') {\n // patch the progress page\n progressPatches = patchProgressView({ operations, state, dispatch, entityType })\n }\n\n const overviewPatches = []\n // convert id in operations to entityId\n const operationsWithEntityId = operations.map((o) => ({ ...o, entityId: o.id }))\n if (entityType === 'task' || entityType === 'folder') {\n // patch the overview page\n if (entityType === 'task') {\n patchOverviewTasks(operationsWithEntityId, { state, dispatch }, overviewPatches)\n }\n if (entityType === 'folder') {\n // patch the overview page\n patchOverviewFolders(operationsWithEntityId, { state, dispatch }, overviewPatches)\n console.log('invalidate overview folders')\n // invalidate overview folders query\n dispatch(api.util.invalidateTags([{ type: 'folder', id: 'LIST' }]))\n // invalidate overview tasks with folder as a parent\n dispatch(\n api.util.invalidateTags(\n operationsWithEntityId.map((o) => ({ type: 'overviewTask', id: o.entityId })),\n ),\n )\n }\n }\n\n // check if any of the requests failed and invalidate the tasks cache again to refetch\n const results = await Promise.allSettled(promises)\n\n // did any of the requests fail?\n const someError = results.some((result) => result.value?.error)\n if (someError) {\n dispatch(\n api.util.invalidateTags(operations.map((o) => ({ type: 'kanBanTask', id: o.id }))),\n )\n\n // revert the progress view patches\n progressPatches.forEach((patch) => patch?.undo())\n\n // revert the overview patches\n overviewPatches.forEach((patch) => patch?.undo())\n\n throw 'Failed to update some tasks'\n }\n\n const activityTags = []\n\n if (activityTags.length) {\n dispatch(api.util.invalidateTags(activityTags))\n }\n\n return { data: operations }\n } catch (error) {\n console.error(error)\n return { error }\n }\n },\n invalidatesTags: (result, error, { operations, entityType }) => {\n const tags = operations.map((o) => ({ id: o.id, type: 'review' }))\n\n if (entityType === 'product') {\n tags.push({ type: 'product', id: 'LIST' }, { type: 'version', id: 'LIST' })\n operations.forEach((o) => tags.push({ type: 'product', id: o.id }))\n }\n if (entityType === 'version') {\n tags.push({ type: 'version', id: 'LIST' }, { type: 'product', id: 'LIST' })\n operations.forEach((o) => tags.push({ type: 'version', id: o.id }))\n }\n\n return tags\n },\n }),\n }),\n overrideExisting: true,\n})\n\nexport const { useUpdateEntitiesMutation, useUpdateEntityMutation } = updateEntity\nexport { updateEntity as entitiesQueries }\n"],"names":["patchKanban","assignees","projects","newAssignees","taskId","data","taskData","dispatch","kanbanPatched","dashboardQueries","draft","taskIndex","task","patchData","priority","endDate","assignee","newData","patchProgressView","operations","state","entityType","invalidationTags","o","entries","api","entry","operation","entityId","patch","folderId","folder","newTask","newFolder","t","folderIndex","f","updatedPatch","pathParts","error","updateEntity","build","projectName","result","tags","currentAssignees","queryFulfilled","getState","patchResults","invalidationTagsAfterComplete","dashboardProjects","dashboardUsers","dashboardAssigneesIsMe","cacheUsers","hasSomeAssignees","hasSomeProjects","project","wasPatched","getKanbanTasks","response","currentAssigneesSet","newAssigneesSet","removedAssignees","addedAssignees","assigneesTags","entriesToInvalidate","patchResult","currentKanbanCacheArgs","detailsPanelTags","detailsPanelEntries","entityDetailsResult","detailsPanelQueries","entity","patchDetailsPanelEntity","toast","promises","id","promise","progressPatches","overviewPatches","operationsWithEntityId","patchOverviewTasks","patchOverviewFolders","activityTags","useUpdateEntitiesMutation","useUpdateEntityMutation"],"mappings":"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"}
@@ -13,7 +13,7 @@ import "../authentication/getAuthentication.es.js";
13
13
  import "../cloud/cloud.es.js";
14
14
  import "../config/getConfig.es.js";
15
15
  import "../config/updateConfig.es.js";
16
- import { detailsPanelQueries as B } from "./getEntityPanel.es.js";
16
+ import { detailsPanelQueries as O } from "./getEntityPanel.es.js";
17
17
  import "../../base/client.es.js";
18
18
  import "../../generated/graphql.es.js";
19
19
  import "../../generated/graphqlLinks.es.js";
@@ -63,7 +63,7 @@ import "../links/updateLinks.es.js";
63
63
  import "../links/getLinks.es.js";
64
64
  import "../links/getEntityLinks.es.js";
65
65
  import "../overview/getOverview.es.js";
66
- import { patchOverviewTasks as K, patchOverviewFolders as C, patchDetailsPanelEntity as J } from "../overview/updateOverview.es.js";
66
+ import { patchOverviewTasks as B, patchOverviewFolders as K, patchDetailsPanelEntity as C } from "../overview/updateOverview.es.js";
67
67
  import "../versions/getVersionsProducts.es.js";
68
68
  import "../permissions/getPermissions.es.js";
69
69
  import "../products/createProduct.es.js";
@@ -73,7 +73,7 @@ import "../review/getReview.es.js";
73
73
  import "../review/updateReview.es.js";
74
74
  import "../share/share.es.js";
75
75
  import "../system/getSystem.es.js";
76
- import { getKanbanTasks as M, dashboardQueries as D } from "../userDashboard/getUserDashboard.es.js";
76
+ import { getKanbanTasks as J, dashboardQueries as I } from "../userDashboard/getUserDashboard.es.js";
77
77
  import "../users/getUsers.es.js";
78
78
  import "../users/updateUsers.es.js";
79
79
  import "../users/guests.es.js";
@@ -82,218 +82,223 @@ import "../views/getViews.es.js";
82
82
  import "../views/updateViews.es.js";
83
83
  import "../watchers/getWatchers.es.js";
84
84
  import "../uris/getUris.es.js";
85
- import { toast as $ } from "react-toastify";
86
- const j = ({ assignees: A = [], projects: a = [] }, { newAssignees: e, taskId: s, data: c, taskData: p }, { dispatch: r }) => {
85
+ import { toast as M } from "react-toastify";
86
+ const T = ({ assignees: A = [], projects: p = [] }, { newAssignees: t, taskId: s, data: o, taskData: i }, { dispatch: r }) => {
87
87
  let v = !1;
88
88
  return [r(
89
- D.util.updateQueryData(
89
+ I.util.updateQueryData(
90
90
  "GetKanban",
91
- { projects: a, assignees: A },
92
- (d) => {
93
- const u = d.findIndex((i) => i.id === s);
94
- let o = { ...c };
95
- if (c?.attrib?.priority) {
96
- const { priority: i } = o.attrib;
97
- o = { ...o, priority: i };
91
+ { projects: p, assignees: A },
92
+ (c) => {
93
+ const u = c.findIndex((n) => n.id === s);
94
+ let a = { ...o };
95
+ if (o?.attrib?.priority) {
96
+ const { priority: n } = a.attrib;
97
+ a = { ...a, priority: n };
98
98
  }
99
- if (c?.attrib?.endDate) {
100
- const { endDate: i } = o.attrib;
101
- o = { ...o, dueDate: i }, delete o.attrib.endDate;
99
+ if (o?.attrib?.endDate) {
100
+ const { endDate: n } = a.attrib;
101
+ a = { ...a, dueDate: n }, delete a.attrib.endDate;
102
102
  }
103
103
  if (u === -1)
104
- p ? d.push(p) : v = !1;
105
- else if (v = !0, !e?.some((t) => A.includes(t)) && e)
106
- d.splice(u, 1);
104
+ i ? c.push(i) : v = !1;
105
+ else if (v = !0, !t?.some((e) => A.includes(e)) && t)
106
+ c.splice(u, 1);
107
107
  else {
108
- const t = { ...d[u], ...o };
109
- d[u] = t;
108
+ const e = { ...c[u], ...a };
109
+ c[u] = e;
110
110
  }
111
111
  }
112
112
  )
113
113
  ), v];
114
- }, q = ({ operations: A = [], state: a, dispatch: e, entityType: s }) => {
115
- const c = A.map((r) => ({ type: "progress", id: r.id }));
116
- let p = k.util.selectInvalidatedBy(a, c);
117
- if (!p.length) return [];
114
+ }, $ = ({ operations: A = [], state: p, dispatch: t, entityType: s }) => {
115
+ const o = A.map((r) => ({ type: "progress", id: r.id }));
116
+ let i = k.util.selectInvalidatedBy(p, o);
117
+ if (!i.length) return [];
118
118
  try {
119
- return p.map(
120
- (v) => e(
121
- k.util.updateQueryData(v.endpointName, v.originalArgs, (n) => {
122
- for (const d of A) {
123
- const u = d.id, o = d.data;
119
+ return i.map(
120
+ (v) => t(
121
+ k.util.updateQueryData(v.endpointName, v.originalArgs, (d) => {
122
+ for (const c of A) {
123
+ const u = c.id, a = c.data;
124
124
  if (s === "task") {
125
- const i = d.meta?.folderId, t = n.find((h) => h.id === i);
126
- if (!t) throw new Error("Patching progress view: folder not found");
127
- const m = t.tasks?.find((h) => h.id === u);
128
- if (!m) throw new Error("Patching progress view: task not found");
129
- const w = { ...m, ...o }, g = {
130
- ...t,
131
- tasks: t.tasks.map((h) => h.id === u ? w : h)
132
- }, f = n.findIndex((h) => h.id === i);
133
- n[f] = g;
125
+ const n = c.meta?.folderId, e = d.find((h) => h.id === n);
126
+ if (!e) throw new Error("Patching progress view: folder not found");
127
+ const l = e.tasks?.find((h) => h.id === u);
128
+ if (!l) throw new Error("Patching progress view: task not found");
129
+ const w = { ...l, ...a }, g = {
130
+ ...e,
131
+ tasks: e.tasks.map((h) => h.id === u ? w : h)
132
+ }, f = d.findIndex((h) => h.id === n);
133
+ d[f] = g;
134
134
  } else if (s === "folder") {
135
- const i = n.find((g) => g.id === u);
136
- if (!i) throw new Error("Patching progress view: folder not found");
137
- let t = { ...o };
138
- if (o.name && i.path) {
139
- const g = i.path.split("/");
140
- g[g.length - 1] = o.name, t.path = g.join("/");
135
+ const n = d.find((g) => g.id === u);
136
+ if (!n) throw new Error("Patching progress view: folder not found");
137
+ let e = { ...a };
138
+ if (a.name && n.path) {
139
+ const g = n.path.split("/");
140
+ g[g.length - 1] = a.name, e.path = g.join("/");
141
141
  }
142
- const m = { ...i, ...t }, w = n.findIndex((g) => g.id === u);
143
- n[w] = m;
142
+ const l = { ...n, ...e }, w = d.findIndex((g) => g.id === u);
143
+ d[w] = l;
144
144
  }
145
145
  }
146
146
  })
147
147
  )
148
148
  );
149
149
  } catch (r) {
150
- return console.error(r), e(k.util.invalidateTags(c)), [];
150
+ return console.error(r), t(k.util.invalidateTags(o)), [];
151
151
  }
152
152
  }, Q = k.injectEndpoints({
153
153
  endpoints: (A) => ({
154
154
  updateEntity: A.mutation({
155
- query: ({ projectName: a, entityId: e, data: s, entityType: c }) => ({
156
- url: `/api/projects/${a}/${c}s/${e}`,
155
+ query: ({ projectName: p, entityId: t, data: s, entityType: o }) => ({
156
+ url: `/api/projects/${p}/${o}s/${t}`,
157
157
  method: "PATCH",
158
158
  body: s
159
159
  }),
160
- async onQueryStarted({ projectName: a, entityId: e, data: s, currentAssignees: c, entityType: p }, { dispatch: r, queryFulfilled: v, getState: n }) {
161
- const d = n(), u = [];
162
- let o = [];
163
- if (p === "task") {
164
- const m = n().dashboard?.selectedProjects || [], w = n().dashboard?.tasks.assignees || [], g = n().dashboard?.tasks.assigneesFilter === "me", f = s.assignees, h = g ? [n().user?.name] : w, F = [.../* @__PURE__ */ new Set([...c, ...f || []])].some((l) => h.includes(l)), R = m.some((l) => l === a);
160
+ invalidatesTags: (p, t, { entityId: s, entityType: o }) => {
161
+ const i = [];
162
+ return o === "product" && i.push({ type: "product", id: s }), o === "version" && i.push({ type: "version", id: s }), i;
163
+ },
164
+ async onQueryStarted({ projectName: p, entityId: t, data: s, currentAssignees: o, entityType: i }, { dispatch: r, queryFulfilled: v, getState: d }) {
165
+ const c = d(), u = [];
166
+ let a = [];
167
+ if (i === "task") {
168
+ const l = d().dashboard?.selectedProjects || [], w = d().dashboard?.tasks.assignees || [], g = d().dashboard?.tasks.assigneesFilter === "me", f = s.assignees, h = g ? [d().user?.name] : w, F = [.../* @__PURE__ */ new Set([...o, ...f || []])].some((m) => h.includes(m)), R = l.some((m) => m === p);
165
169
  if (F && R) {
166
- const [l, P] = j(
167
- { assignees: h, projects: m },
168
- { newAssignees: f, taskId: e, data: s },
170
+ const [m, E] = T(
171
+ { assignees: h, projects: l },
172
+ { newAssignees: f, taskId: t, data: s },
169
173
  { dispatch: r }
170
174
  );
171
- P && u.push(l), P || M({ projects: [a], taskIds: [e] }, r).then(
175
+ E && u.push(m), E || J({ projects: [p], taskIds: [t] }, r).then(
172
176
  // use .then so that the rest of the code can run
173
- (b) => {
174
- let E = b.find((x) => x.id === e);
175
- E && (E = { ...E, assignees: f }, j(
176
- { assignees: h, projects: m },
177
- { newAssignees: f, taskId: e, taskData: E },
177
+ (P) => {
178
+ let y = P.find((x) => x.id === t);
179
+ y && (y = { ...y, assignees: f }, T(
180
+ { assignees: h, projects: l },
181
+ { newAssignees: f, taskId: t, taskData: y },
178
182
  { dispatch: r }
179
183
  ));
180
184
  }
181
185
  );
182
186
  }
183
- const T = [{ type: "task", id: e }];
187
+ const D = [{ type: "task", id: t }];
184
188
  if (f?.length) {
185
- const l = new Set(c), P = new Set(f), b = [...l].filter(
186
- (y) => !P.has(y)
187
- ), E = [...P].filter(
188
- (y) => !l.has(y)
189
- ), O = [.../* @__PURE__ */ new Set([...b, ...E])].map((y) => ({
189
+ const m = new Set(o), E = new Set(f), P = [...m].filter(
190
+ (b) => !E.has(b)
191
+ ), y = [...E].filter(
192
+ (b) => !m.has(b)
193
+ ), N = [.../* @__PURE__ */ new Set([...P, ...y])].map((b) => ({
190
194
  type: "kanban",
191
- id: "user-" + y + "-project-" + a
195
+ id: "user-" + b + "-project-" + p
192
196
  }));
193
- T.push(...O), r(
194
- D.util.invalidateTags([
197
+ D.push(...N), r(
198
+ I.util.invalidateTags([
195
199
  {
196
200
  type: "watchers",
197
- id: e
201
+ id: t
198
202
  }
199
203
  ])
200
204
  );
201
205
  }
202
- let S = D.util.selectInvalidatedBy(d, T), I = [];
203
- for (const l of S) {
204
- const [P, b] = j(
206
+ let j = I.util.selectInvalidatedBy(c, D), S = [];
207
+ for (const m of j) {
208
+ const [E, P] = T(
205
209
  {
206
- assignees: l.originalArgs.assignees,
207
- projects: l.originalArgs.projects
210
+ assignees: m.originalArgs.assignees,
211
+ projects: m.originalArgs.projects
208
212
  },
209
213
  {
210
214
  newAssignees: f,
211
- taskId: e,
215
+ taskId: t,
212
216
  data: s
213
217
  },
214
218
  { dispatch: r }
215
219
  );
216
- b ? u.push(P) : I.push(l);
220
+ P ? u.push(E) : S.push(m);
217
221
  }
218
- const U = { projects: m, assignees: h };
219
- I = I.filter(
220
- (l) => JSON.stringify(l.originalArgs) !== JSON.stringify(U)
222
+ const U = { projects: l, assignees: h };
223
+ S = S.filter(
224
+ (m) => JSON.stringify(m.originalArgs) !== JSON.stringify(U)
221
225
  );
222
- const N = S.map((l) => ({
226
+ const L = j.map((m) => ({
223
227
  type: "kanban",
224
- id: JSON.stringify(l.originalArgs)
228
+ id: JSON.stringify(m.originalArgs)
225
229
  }));
226
- o.push(...N);
230
+ a.push(...L);
227
231
  }
228
- const i = [
232
+ const n = [
229
233
  {
230
234
  type: "entities",
231
- id: e
235
+ id: t
232
236
  }
233
- ], t = k.util.selectInvalidatedBy(d, i);
234
- for (const m of t) {
237
+ ], e = k.util.selectInvalidatedBy(c, n);
238
+ for (const l of e) {
235
239
  let w = r(
236
- B.util.updateQueryData(
240
+ O.util.updateQueryData(
237
241
  "getEntitiesDetailsPanel",
238
- m.originalArgs,
242
+ l.originalArgs,
239
243
  (g) => {
240
244
  for (const f of g)
241
- J([{ entityId: e, data: s, entityType: p }], f);
245
+ C([{ entityId: t, data: s, entityType: i }], f);
242
246
  }
243
247
  )
244
248
  );
245
249
  u.push(w);
246
250
  }
247
251
  try {
248
- await v, o.length && r(D.util.invalidateTags(o));
249
- } catch (m) {
250
- console.error("error updating " + p, m), $.error(m?.error?.data?.detail || "Failed to update task"), u.forEach((w) => w?.undo());
252
+ await v, a.length && r(I.util.invalidateTags(a));
253
+ } catch (l) {
254
+ console.error("error updating " + i, l), M.error(l?.error?.data?.detail || "Failed to update task"), u.forEach((w) => w?.undo());
251
255
  }
252
256
  }
253
257
  }),
254
258
  updateEntities: A.mutation({
255
- async queryFn({ operations: a = [], entityType: e }, { dispatch: s, getState: c }) {
259
+ async queryFn({ operations: p = [], entityType: t }, { dispatch: s, getState: o }) {
256
260
  try {
257
- const p = c(), r = [];
258
- for (const { projectName: t, data: m, id: w, currentAssignees: g = [] } of a) {
261
+ const i = o(), r = [];
262
+ for (const { projectName: e, data: l, id: w, currentAssignees: g = [] } of p) {
259
263
  const f = s(
260
264
  Q.endpoints.updateEntity.initiate({
261
- projectName: t,
265
+ projectName: e,
262
266
  entityId: w,
263
- data: m,
264
- entityType: e,
267
+ data: l,
268
+ entityType: t,
265
269
  currentAssignees: g
266
270
  })
267
271
  );
268
272
  r.push(f);
269
273
  }
270
274
  let v = [];
271
- (e === "task" || e === "folder") && (v = q({ operations: a, state: p, dispatch: s, entityType: e }));
272
- const n = [], d = a.map((t) => ({ ...t, entityId: t.id }));
273
- if ((e === "task" || e === "folder") && (e === "task" && K(d, { state: p, dispatch: s }, n), e === "folder" && (C(d, { state: p, dispatch: s }, n), console.log("invalidate overview folders"), s(k.util.invalidateTags([{ type: "folder", id: "LIST" }])), s(
275
+ (t === "task" || t === "folder") && (v = $({ operations: p, state: i, dispatch: s, entityType: t }));
276
+ const d = [], c = p.map((e) => ({ ...e, entityId: e.id }));
277
+ if ((t === "task" || t === "folder") && (t === "task" && B(c, { state: i, dispatch: s }, d), t === "folder" && (K(c, { state: i, dispatch: s }, d), console.log("invalidate overview folders"), s(k.util.invalidateTags([{ type: "folder", id: "LIST" }])), s(
274
278
  k.util.invalidateTags(
275
- d.map((t) => ({ type: "overviewTask", id: t.entityId }))
279
+ c.map((e) => ({ type: "overviewTask", id: e.entityId }))
276
280
  )
277
- ))), (await Promise.allSettled(r)).some((t) => t.value?.error))
281
+ ))), (await Promise.allSettled(r)).some((e) => e.value?.error))
278
282
  throw s(
279
- k.util.invalidateTags(a.map((t) => ({ type: "kanBanTask", id: t.id })))
280
- ), v.forEach((t) => t?.undo()), n.forEach((t) => t?.undo()), "Failed to update some tasks";
281
- const i = [];
282
- return i.length && s(k.util.invalidateTags(i)), { data: a };
283
- } catch (p) {
284
- return console.error(p), { error: p };
283
+ k.util.invalidateTags(p.map((e) => ({ type: "kanBanTask", id: e.id })))
284
+ ), v.forEach((e) => e?.undo()), d.forEach((e) => e?.undo()), "Failed to update some tasks";
285
+ const n = [];
286
+ return n.length && s(k.util.invalidateTags(n)), { data: p };
287
+ } catch (i) {
288
+ return console.error(i), { error: i };
285
289
  }
286
290
  },
287
- invalidatesTags: (a, e, { operations: s }) => [
288
- ...s.map((c) => ({ id: c.id, type: "review" }))
289
- ]
291
+ invalidatesTags: (p, t, { operations: s, entityType: o }) => {
292
+ const i = s.map((r) => ({ id: r.id, type: "review" }));
293
+ return o === "product" && (i.push({ type: "product", id: "LIST" }, { type: "version", id: "LIST" }), s.forEach((r) => i.push({ type: "product", id: r.id }))), o === "version" && (i.push({ type: "version", id: "LIST" }, { type: "product", id: "LIST" }), s.forEach((r) => i.push({ type: "version", id: r.id }))), i;
294
+ }
290
295
  })
291
296
  }),
292
297
  overrideExisting: !0
293
- }), { useUpdateEntitiesMutation: be, useUpdateEntityMutation: ye } = Q;
298
+ }), { useUpdateEntitiesMutation: Pe, useUpdateEntityMutation: be } = Q;
294
299
  export {
295
300
  Q as entitiesQueries,
296
- be as useUpdateEntitiesMutation,
297
- ye as useUpdateEntityMutation
301
+ Pe as useUpdateEntitiesMutation,
302
+ be as useUpdateEntityMutation
298
303
  };
299
304
  //# sourceMappingURL=updateEntity.es.js.map