@ynput/ayon-frontend-shared 0.3.34 → 0.3.35
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.
- package/dist/_virtual/index.cjs22.js +1 -1
- package/dist/_virtual/index.cjs23.js +1 -1
- package/dist/_virtual/index.cjs24.js +1 -1
- package/dist/_virtual/index.es22.js +3 -3
- package/dist/_virtual/index.es23.js +5 -5
- package/dist/_virtual/index.es24.js +5 -5
- package/dist/node_modules/parse-numeric-range/index.cjs.js +1 -1
- package/dist/node_modules/parse-numeric-range/index.es.js +1 -1
- package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
- package/dist/node_modules/rehype/node_modules/vfile/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype/node_modules/vfile/lib/index.es.js +1 -1
- package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
- package/dist/shared/node_modules/react-is/index.cjs.js +1 -1
- package/dist/shared/node_modules/react-is/index.es.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/FeedWrapper.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/FeedWrapper.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/FeedWrapper.es.js +7 -7
- package/dist/shared/src/containers/DetailsPanel/containers/FeedWrapper.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/Feed.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/Feed.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/Feed.es.js +7 -10
- package/dist/shared/src/containers/Feed/Feed.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.es.js +9 -5
- package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js +2 -2
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js +207 -233
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.styled.cjs.js +5 -10
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.styled.es.js +12 -17
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.styled.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/VersionReviewPill.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/VersionReviewPill.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/VersionReviewPill.es.js +16 -22
- package/dist/shared/src/containers/Feed/components/CommentInput/VersionReviewPill.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/types.cjs.js +2 -0
- package/dist/shared/src/containers/Feed/components/CommentInput/types.cjs.js.map +1 -0
- package/dist/shared/src/containers/Feed/components/CommentInput/types.es.js +18 -0
- package/dist/shared/src/containers/Feed/components/CommentInput/types.es.js.map +1 -0
- package/dist/shared/src/containers/Feed/hooks/useCommentMutations.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/hooks/useCommentMutations.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +67 -64
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +13 -11
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
- package/dist/types/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.d.ts +1 -1
- package/dist/types/containers/Feed/components/CommentInput/CommentInput.d.ts +1 -16
- package/dist/types/containers/Feed/components/CommentInput/VersionReviewPill.d.ts +1 -2
- package/dist/types/containers/Feed/components/CommentInput/index.d.ts +2 -0
- package/dist/types/containers/Feed/components/CommentInput/types.d.ts +16 -0
- package/dist/types/containers/Feed/hooks/useCommentMutations.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,27 +1,21 @@
|
|
|
1
1
|
import { j as o } from "../../../../../../_virtual/jsx-runtime.es.js";
|
|
2
|
-
import { useState as
|
|
3
|
-
import { LastOwnVersionReview as
|
|
4
|
-
import { REFRESH_INTERVAL_MS as
|
|
5
|
-
import { Icon as
|
|
6
|
-
import { getIconForFeedback as
|
|
7
|
-
import { clsx as
|
|
8
|
-
const
|
|
9
|
-
const [
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
p
|
|
14
|
-
);
|
|
15
|
-
return () => clearInterval(m);
|
|
2
|
+
import { useState as m, useEffect as i, useMemo as a } from "react";
|
|
3
|
+
import { LastOwnVersionReview as u } from "./CommentInput.styled.es.js";
|
|
4
|
+
import { REFRESH_INTERVAL_MS as f, getFuzzyDate as p } from "../ActivityDate.es.js";
|
|
5
|
+
import { Icon as d } from "@ynput/ayon-react-components";
|
|
6
|
+
import { getIconForFeedback as l, getVerbForFeedback as F } from "../ActivityVersionReview/ActivityVersionReview.es.js";
|
|
7
|
+
import { clsx as w } from "clsx";
|
|
8
|
+
const k = ({ lastOwnVersionReview: e }) => {
|
|
9
|
+
const [n, c] = m(/* @__PURE__ */ new Date());
|
|
10
|
+
i(() => {
|
|
11
|
+
const s = setInterval(() => c(/* @__PURE__ */ new Date()), f);
|
|
12
|
+
return () => clearInterval(s);
|
|
16
13
|
}, []);
|
|
17
|
-
const t = a(() => e?.activityData?.feedback, [e]), r = a(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
);
|
|
21
|
-
return /* @__PURE__ */ o.jsxs(f, { className: x(t, n ? "separate" : ""), children: [
|
|
22
|
-
/* @__PURE__ */ o.jsx(l, { icon: F(t) }),
|
|
14
|
+
const t = a(() => e?.activityData?.feedback, [e]), r = a(() => e?.createdAt ? p(new Date(e?.createdAt)).toLowerCase() : "", [e?.createdAt, n]);
|
|
15
|
+
return /* @__PURE__ */ o.jsxs(u, { className: w(t), children: [
|
|
16
|
+
/* @__PURE__ */ o.jsx(d, { icon: l(t) }),
|
|
23
17
|
"You last ",
|
|
24
|
-
|
|
18
|
+
F(t),
|
|
25
19
|
" ",
|
|
26
20
|
r,
|
|
27
21
|
" ",
|
|
@@ -29,6 +23,6 @@ const v = ({ separate: n, lastOwnVersionReview: e }) => {
|
|
|
29
23
|
] });
|
|
30
24
|
};
|
|
31
25
|
export {
|
|
32
|
-
|
|
26
|
+
k as VersionReviewPill
|
|
33
27
|
};
|
|
34
28
|
//# sourceMappingURL=VersionReviewPill.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VersionReviewPill.es.js","sources":["../../../../../../../src/containers/Feed/components/CommentInput/VersionReviewPill.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from
|
|
1
|
+
{"version":3,"file":"VersionReviewPill.es.js","sources":["../../../../../../../src/containers/Feed/components/CommentInput/VersionReviewPill.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\n\nimport * as Styled from './CommentInput.styled'\nimport { getFuzzyDate, REFRESH_INTERVAL_MS } from '../ActivityDate'\nimport { Icon } from '@ynput/ayon-react-components'\nimport {\n getIconForFeedback,\n getVerbForFeedback,\n} from '../ActivityVersionReview/ActivityVersionReview'\nimport { FeedActivity } from '@shared/api'\nimport { clsx } from 'clsx'\n\ntype Props = {\n lastOwnVersionReview: FeedActivity\n}\n\nexport const VersionReviewPill = ({ lastOwnVersionReview }: Props) => {\n // used to update the time since last guest review\n const [now, setNow] = useState(new Date())\n\n useEffect(() => {\n const interval = setInterval(() => setNow(new Date()), REFRESH_INTERVAL_MS)\n\n return () => clearInterval(interval)\n }, [])\n\n const lastOwnVersionReviewFeedback = useMemo(() => {\n return lastOwnVersionReview?.activityData?.feedback\n }, [lastOwnVersionReview])\n\n const lastOwnVersionReviewDate = useMemo(() => {\n if (!lastOwnVersionReview?.createdAt) return ''\n return getFuzzyDate(new Date(lastOwnVersionReview?.createdAt)).toLowerCase()\n }, [lastOwnVersionReview?.createdAt, now])\n\n return (\n <Styled.LastOwnVersionReview className={clsx(lastOwnVersionReviewFeedback)}>\n <Icon icon={getIconForFeedback(lastOwnVersionReviewFeedback)} />\n You last {getVerbForFeedback(lastOwnVersionReviewFeedback)} {lastOwnVersionReviewDate}{' '}\n {lastOwnVersionReviewDate === 'just now' ? '' : 'ago'}\n </Styled.LastOwnVersionReview>\n )\n}\n"],"names":["VersionReviewPill","lastOwnVersionReview","now","setNow","useState","useEffect","interval","REFRESH_INTERVAL_MS","lastOwnVersionReviewFeedback","useMemo","lastOwnVersionReviewDate","getFuzzyDate","Styled.LastOwnVersionReview","clsx","jsx","Icon","getIconForFeedback","getVerbForFeedback"],"mappings":";;;;;;;AAgBO,MAAMA,IAAoB,CAAC,EAAE,sBAAAC,QAAkC;AAEpE,QAAM,CAACC,GAAKC,CAAM,IAAIC,EAAS,oBAAI,MAAM;AAEzC,EAAAC,EAAU,MAAM;AACd,UAAMC,IAAW,YAAY,MAAMH,sBAAW,KAAA,CAAM,GAAGI,CAAmB;AAE1E,WAAO,MAAM,cAAcD,CAAQ;AAAA,EACrC,GAAG,CAAA,CAAE;AAEL,QAAME,IAA+BC,EAAQ,MACpCR,GAAsB,cAAc,UAC1C,CAACA,CAAoB,CAAC,GAEnBS,IAA2BD,EAAQ,MAClCR,GAAsB,YACpBU,EAAa,IAAI,KAAKV,GAAsB,SAAS,CAAC,EAAE,YAAA,IADlB,IAE5C,CAACA,GAAsB,WAAWC,CAAG,CAAC;AAEzC,gCACGU,GAAA,EAA4B,WAAWC,EAAKL,CAA4B,GACvE,UAAA;AAAA,IAAAM,gBAAAA,EAAAA,IAACC,GAAA,EAAK,MAAMC,EAAmBR,CAA4B,EAAA,CAAG;AAAA,IAAE;AAAA,IACtDS,EAAmBT,CAA4B;AAAA,IAAE;AAAA,IAAEE;AAAA,IAA0B;AAAA,IACtFA,MAA6B,aAAa,KAAK;AAAA,EAAA,GAClD;AAEJ;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var t=(e=>(e.APPROVE="approve",e.REQUEST_CHANGES="request_changes",e))(t||{});const i={"@@@":{id:"task"},"@@":{id:"version"},"@":{id:"user",isCircle:!0}};exports.VersionReviewFeedback=t;exports.mentionTypeOptions=i;
|
|
2
|
+
//# sourceMappingURL=types.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.cjs.js","sources":["../../../../../../../src/containers/Feed/components/CommentInput/types.ts"],"sourcesContent":["export enum VersionReviewFeedback {\n APPROVE = 'approve',\n REQUEST_CHANGES = 'request_changes',\n}\n\nexport const mentionTypeOptions = {\n '@@@': {\n id: 'task',\n },\n '@@': {\n id: 'version',\n },\n '@': {\n id: 'user',\n isCircle: true,\n },\n}\n"],"names":["VersionReviewFeedback","mentionTypeOptions"],"mappings":"gFAAO,IAAKA,GAAAA,IACVA,EAAA,QAAU,UACVA,EAAA,gBAAkB,kBAFRA,IAAAA,GAAA,CAAA,CAAA,EAKL,MAAMC,EAAqB,CAChC,MAAO,CACL,GAAI,MAAA,EAEN,KAAM,CACJ,GAAI,SAAA,EAEN,IAAK,CACH,GAAI,OACJ,SAAU,EAAA,CAEd"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
var t = /* @__PURE__ */ ((r) => (r.APPROVE = "approve", r.REQUEST_CHANGES = "request_changes", r))(t || {});
|
|
2
|
+
const e = {
|
|
3
|
+
"@@@": {
|
|
4
|
+
id: "task"
|
|
5
|
+
},
|
|
6
|
+
"@@": {
|
|
7
|
+
id: "version"
|
|
8
|
+
},
|
|
9
|
+
"@": {
|
|
10
|
+
id: "user",
|
|
11
|
+
isCircle: !0
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
export {
|
|
15
|
+
t as VersionReviewFeedback,
|
|
16
|
+
e as mentionTypeOptions
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=types.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.es.js","sources":["../../../../../../../src/containers/Feed/components/CommentInput/types.ts"],"sourcesContent":["export enum VersionReviewFeedback {\n APPROVE = 'approve',\n REQUEST_CHANGES = 'request_changes',\n}\n\nexport const mentionTypeOptions = {\n '@@@': {\n id: 'task',\n },\n '@@': {\n id: 'version',\n },\n '@': {\n id: 'user',\n isCircle: true,\n },\n}\n"],"names":["VersionReviewFeedback","mentionTypeOptions"],"mappings":"AAAO,IAAKA,sBAAAA,OACVA,EAAA,UAAU,WACVA,EAAA,kBAAkB,mBAFRA,IAAAA,KAAA,CAAA,CAAA;AAKL,MAAMC,IAAqB;AAAA,EAChC,OAAO;AAAA,IACL,IAAI;AAAA,EAAA;AAAA,EAEN,MAAM;AAAA,IACJ,IAAI;AAAA,EAAA;AAAA,EAEN,KAAK;AAAA,IACH,IAAI;AAAA,IACJ,UAAU;AAAA,EAAA;AAEd;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCommentMutations.cjs.js","sources":["../../../../../../src/containers/Feed/hooks/useCommentMutations.ts"],"sourcesContent":["import { getEntityId } from '@shared/util'\nimport { formatISO } from 'date-fns'\nimport { toast } from 'react-toastify'\nimport { useFeedContext } from '../context/FeedContext'\nimport { SavedAnnotationMetadata } from '..'\nimport { VersionReviewFeedback } from '../components/CommentInput/CommentInput'\nimport { getVerbForFeedbackBody } from '../components/ActivityVersionReview/ActivityVersionReview'\n\n// Type definitions\ninterface Entity {\n id: string\n subTitle?: string\n}\n\ninterface File {\n id: string\n [key: string]: any\n}\n\nexport interface Activity {\n activityId: string\n entityId: string\n body: string\n files: File[]\n [key: string]: any\n}\n\ninterface CommentPatch {\n body: string\n activityType: string\n activityId: string\n entityId: string\n referenceType: string\n authorName: string\n authorFullName?: string\n createdAt: string\n files: File[]\n activityData: any\n reactions: any[]\n origin: {\n id: string\n type: string\n name?: string\n }\n author: {\n active: boolean\n deleted: boolean\n }\n}\n\ninterface CommentMutationsProps {\n projectName: string\n entityType: string\n entities: Entity[]\n filter: any\n entityListId?: string\n}\n\ninterface CommentPayload {\n entityId: string\n newId: string\n subTitle?: string\n value: string\n files?: File[]\n data?: any\n}\n\n// does the body have a checklist anywhere in it\n// * [ ] or * [x]\nexport const bodyHasChecklist = (body: string): boolean => {\n return body.includes('* [ ]') || body.includes('* [x]')\n}\n\nconst useCommentMutations = ({\n projectName,\n entityType,\n entities = [],\n filter,\n entityListId,\n}: CommentMutationsProps) => {\n const {\n createEntityActivity,\n updateActivity,\n deleteActivity,\n isUpdatingActivity,\n userName,\n userFullName,\n activityTypes,\n } = useFeedContext()\n const entityIds = entities.map((entity) => entity.id)\n\n const createPatch = ({\n entityId,\n newId,\n subTitle,\n value,\n files = [],\n data = {},\n }: CommentPayload): CommentPatch => {\n const patch: CommentPatch = {\n body: value,\n activityType: 'comment',\n activityId: newId,\n entityId: entityId,\n referenceType: 'origin',\n authorName: userName,\n authorFullName: userFullName,\n createdAt: formatISO(new Date()),\n files: files,\n reactions: [],\n activityData: data,\n origin: {\n id: '8090c2dafcc811eeaf820242c0a80002',\n type: entityType,\n name: subTitle,\n },\n author: {\n active: true,\n deleted: false,\n },\n }\n\n return patch\n }\n\n const submitComment = async (\n value: string,\n files: File[] = [],\n data: any = {},\n ): Promise<void> => {\n // map over all the entities and create a new comment for each\n let patchId: string | null = null\n const promises = entities.map(({ id: entityId, subTitle }) => {\n const newId = getEntityId()\n if (!patchId) patchId = newId\n const fileIds = files.map((file) => file.id)\n\n const commentData = entityListId ? { ...data, entityList: entityListId } : data\n\n const newComment = {\n body: value,\n activityType: 'comment',\n id: newId,\n files: fileIds,\n data: commentData,\n }\n\n // filter out files which are transparent versions of an annotation\n const optimisticFiles = files.filter(\n ({ id }) =>\n !data.annotations?.some(\n (annotation: SavedAnnotationMetadata) => annotation.transparent === id,\n ),\n )\n\n // create a new patch for optimistic update\n const patch = createPatch({ entityId, newId, subTitle, value, files: optimisticFiles, data })\n\n // we only need these args to update the cache of the original query\n const argsForCachingMatching = { entityIds, activityTypes }\n\n return createEntityActivity({\n projectName,\n entityType,\n entityId,\n data: newComment,\n patch,\n filter,\n ...argsForCachingMatching,\n })\n })\n\n await Promise.all(promises)\n }\n\n const updateComment = async (\n activity: Activity,\n value: string,\n files: File[] = [],\n data: any = {},\n ): Promise<void> => {\n const fileIds = files.map((file) => file.id)\n\n const updatedActivity = {\n body: value,\n files: fileIds,\n data,\n }\n\n const patch = {\n ...activity,\n ...updatedActivity,\n files,\n }\n\n // we only need these args to update the cache of the original query\n const argsForCachingMatching = { entityType, entityIds, activityTypes }\n\n try {\n await updateActivity({\n projectName,\n data: updatedActivity,\n activityId: activity.activityId,\n entityId: activity.entityId,\n patch,\n filter,\n ...argsForCachingMatching,\n })\n } catch (error: any) {\n console.error(error)\n toast.error(error?.data?.detail)\n // so higher level can detect the error\n throw error\n }\n }\n\n const deleteComment = async (id: string, entityId: string, refs: any[] = []): Promise<void> => {\n // we only need these args to update the cache of the original query\n const argsForCachingMatching = { entityType, entityIds, activityTypes }\n\n if (!id) return\n\n try {\n await deleteActivity({\n projectName,\n activityId: id,\n entityId,\n filter,\n patch: { activityId: id },\n refs,\n ...argsForCachingMatching,\n })\n } catch (error) {\n // error is handled in the mutation\n }\n }\n\n const submitReview = async (\n feedback: VersionReviewFeedback\n ): Promise<void> => {\n // map over all the entities and create a new comment for each\n let patchId: string | null = null\n const promises = entities.map(({ id: entityId, subTitle }) => {\n const newId = getEntityId()\n if (!patchId) patchId = newId\n\n const data = { feedback, entityList: entityListId }\n const newReview = {\n body: getVerbForFeedbackBody(feedback, entityType),\n activityType: 'version.review',\n id: newId,\n data,\n }\n\n // create a new patch for optimistic update\n const patch = createPatch({ entityId, newId, subTitle, value: '', data })\n\n return createEntityActivity({\n projectName,\n entityType,\n entityId,\n data: newReview,\n patch,\n filter,\n })\n })\n\n await Promise.all(promises)\n }\n\n return {\n submitComment,\n updateComment,\n deleteComment,\n submitReview,\n isSaving: isUpdatingActivity,\n }\n}\n\nexport default useCommentMutations\n"],"names":["useCommentMutations","projectName","entityType","entities","filter","entityListId","createEntityActivity","updateActivity","deleteActivity","isUpdatingActivity","userName","userFullName","activityTypes","useFeedContext","entityIds","entity","createPatch","entityId","newId","subTitle","value","files","data","formatISO","promises","getEntityId","fileIds","file","commentData","newComment","optimisticFiles","id","annotation","patch","activity","updatedActivity","argsForCachingMatching","error","toast","refs","feedback","newReview","getVerbForFeedbackBody"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useCommentMutations.cjs.js","sources":["../../../../../../src/containers/Feed/hooks/useCommentMutations.ts"],"sourcesContent":["import { getEntityId } from '@shared/util'\nimport { formatISO } from 'date-fns'\nimport { toast } from 'react-toastify'\nimport { useFeedContext } from '../context/FeedContext'\nimport { SavedAnnotationMetadata } from '..'\nimport { VersionReviewFeedback } from '../components/CommentInput/types'\nimport { getVerbForFeedbackBody } from '../components/ActivityVersionReview/ActivityVersionReview'\n\n// Type definitions\ninterface Entity {\n id: string\n subTitle?: string\n}\n\ninterface File {\n id: string\n [key: string]: any\n}\n\nexport interface Activity {\n activityId: string\n entityId: string\n body: string\n files: File[]\n [key: string]: any\n}\n\ninterface CommentPatch {\n body: string\n activityType: string\n activityId: string\n entityId: string\n referenceType: string\n authorName: string\n authorFullName?: string\n createdAt: string\n files: File[]\n activityData: any\n reactions: any[]\n origin: {\n id: string\n type: string\n name?: string\n }\n author: {\n active: boolean\n deleted: boolean\n }\n}\n\ninterface CommentMutationsProps {\n projectName: string\n entityType: string\n entities: Entity[]\n filter: any\n entityListId?: string\n}\n\ninterface CommentPayload {\n entityId: string\n newId: string\n subTitle?: string\n value: string\n files?: File[]\n data?: any\n}\n\n// does the body have a checklist anywhere in it\n// * [ ] or * [x]\nexport const bodyHasChecklist = (body: string): boolean => {\n return body.includes('* [ ]') || body.includes('* [x]')\n}\n\nconst useCommentMutations = ({\n projectName,\n entityType,\n entities = [],\n filter,\n entityListId,\n}: CommentMutationsProps) => {\n const {\n createEntityActivity,\n updateActivity,\n deleteActivity,\n isUpdatingActivity,\n userName,\n userFullName,\n activityTypes,\n } = useFeedContext()\n const entityIds = entities.map((entity) => entity.id)\n\n const createPatch = ({\n entityId,\n newId,\n subTitle,\n value,\n files = [],\n data = {},\n }: CommentPayload): CommentPatch => {\n const patch: CommentPatch = {\n body: value,\n activityType: 'comment',\n activityId: newId,\n entityId: entityId,\n referenceType: 'origin',\n authorName: userName,\n authorFullName: userFullName,\n createdAt: formatISO(new Date()),\n files: files,\n reactions: [],\n activityData: data,\n origin: {\n id: '8090c2dafcc811eeaf820242c0a80002',\n type: entityType,\n name: subTitle,\n },\n author: {\n active: true,\n deleted: false,\n },\n }\n\n return patch\n }\n\n const submitComment = async (\n value: string,\n files: File[] = [],\n data: any = {},\n ): Promise<void> => {\n // map over all the entities and create a new comment for each\n let patchId: string | null = null\n const promises = entities.map(({ id: entityId, subTitle }) => {\n const newId = getEntityId()\n if (!patchId) patchId = newId\n const fileIds = files.map((file) => file.id)\n\n const commentData = entityListId ? { ...data, entityList: entityListId } : data\n\n const newComment = {\n body: value,\n activityType: 'comment',\n id: newId,\n files: fileIds,\n data: commentData,\n }\n\n // filter out files which are transparent versions of an annotation\n const optimisticFiles = files.filter(\n ({ id }) =>\n !data.annotations?.some(\n (annotation: SavedAnnotationMetadata) => annotation.transparent === id,\n ),\n )\n\n // create a new patch for optimistic update\n const patch = createPatch({ entityId, newId, subTitle, value, files: optimisticFiles, data })\n\n // we only need these args to update the cache of the original query\n const argsForCachingMatching = { entityIds, activityTypes }\n\n return createEntityActivity({\n projectName,\n entityType,\n entityId,\n data: newComment,\n patch,\n filter,\n ...argsForCachingMatching,\n })\n })\n\n await Promise.all(promises)\n }\n\n const updateComment = async (\n activity: Activity,\n value: string,\n files: File[] = [],\n data: any = {},\n ): Promise<void> => {\n const fileIds = files.map((file) => file.id)\n\n const updatedActivity = {\n body: value,\n files: fileIds,\n data,\n }\n\n const patch = {\n ...activity,\n ...updatedActivity,\n files,\n }\n\n // we only need these args to update the cache of the original query\n const argsForCachingMatching = { entityType, entityIds, activityTypes }\n\n try {\n await updateActivity({\n projectName,\n data: updatedActivity,\n activityId: activity.activityId,\n entityId: activity.entityId,\n patch,\n filter,\n ...argsForCachingMatching,\n })\n } catch (error: any) {\n console.error(error)\n toast.error(error?.data?.detail)\n // so higher level can detect the error\n throw error\n }\n }\n\n const deleteComment = async (id: string, entityId: string, refs: any[] = []): Promise<void> => {\n // we only need these args to update the cache of the original query\n const argsForCachingMatching = { entityType, entityIds, activityTypes }\n\n if (!id) return\n\n try {\n await deleteActivity({\n projectName,\n activityId: id,\n entityId,\n filter,\n patch: { activityId: id },\n refs,\n ...argsForCachingMatching,\n })\n } catch (error) {\n // error is handled in the mutation\n }\n }\n\n const submitReview = async (feedback: VersionReviewFeedback): Promise<void> => {\n // map over all the entities and create a new comment for each\n let patchId: string | null = null\n const promises = entities.map(({ id: entityId, subTitle }) => {\n const newId = getEntityId()\n if (!patchId) patchId = newId\n\n const data = { feedback, entityList: entityListId }\n const newReview = {\n body: getVerbForFeedbackBody(feedback, entityType),\n activityType: 'version.review',\n id: newId,\n data,\n }\n\n // create a new patch for optimistic update\n const patch = createPatch({ entityId, newId, subTitle, value: '', data })\n\n return createEntityActivity({\n projectName,\n entityType,\n entityId,\n data: newReview,\n patch,\n filter,\n })\n })\n\n await Promise.all(promises)\n }\n\n return {\n submitComment,\n updateComment,\n deleteComment,\n submitReview,\n isSaving: isUpdatingActivity,\n }\n}\n\nexport default useCommentMutations\n"],"names":["useCommentMutations","projectName","entityType","entities","filter","entityListId","createEntityActivity","updateActivity","deleteActivity","isUpdatingActivity","userName","userFullName","activityTypes","useFeedContext","entityIds","entity","createPatch","entityId","newId","subTitle","value","files","data","formatISO","promises","getEntityId","fileIds","file","commentData","newComment","optimisticFiles","id","annotation","patch","activity","updatedActivity","argsForCachingMatching","error","toast","refs","feedback","newReview","getVerbForFeedbackBody"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCommentMutations.es.js","sources":["../../../../../../src/containers/Feed/hooks/useCommentMutations.ts"],"sourcesContent":["import { getEntityId } from '@shared/util'\nimport { formatISO } from 'date-fns'\nimport { toast } from 'react-toastify'\nimport { useFeedContext } from '../context/FeedContext'\nimport { SavedAnnotationMetadata } from '..'\nimport { VersionReviewFeedback } from '../components/CommentInput/CommentInput'\nimport { getVerbForFeedbackBody } from '../components/ActivityVersionReview/ActivityVersionReview'\n\n// Type definitions\ninterface Entity {\n id: string\n subTitle?: string\n}\n\ninterface File {\n id: string\n [key: string]: any\n}\n\nexport interface Activity {\n activityId: string\n entityId: string\n body: string\n files: File[]\n [key: string]: any\n}\n\ninterface CommentPatch {\n body: string\n activityType: string\n activityId: string\n entityId: string\n referenceType: string\n authorName: string\n authorFullName?: string\n createdAt: string\n files: File[]\n activityData: any\n reactions: any[]\n origin: {\n id: string\n type: string\n name?: string\n }\n author: {\n active: boolean\n deleted: boolean\n }\n}\n\ninterface CommentMutationsProps {\n projectName: string\n entityType: string\n entities: Entity[]\n filter: any\n entityListId?: string\n}\n\ninterface CommentPayload {\n entityId: string\n newId: string\n subTitle?: string\n value: string\n files?: File[]\n data?: any\n}\n\n// does the body have a checklist anywhere in it\n// * [ ] or * [x]\nexport const bodyHasChecklist = (body: string): boolean => {\n return body.includes('* [ ]') || body.includes('* [x]')\n}\n\nconst useCommentMutations = ({\n projectName,\n entityType,\n entities = [],\n filter,\n entityListId,\n}: CommentMutationsProps) => {\n const {\n createEntityActivity,\n updateActivity,\n deleteActivity,\n isUpdatingActivity,\n userName,\n userFullName,\n activityTypes,\n } = useFeedContext()\n const entityIds = entities.map((entity) => entity.id)\n\n const createPatch = ({\n entityId,\n newId,\n subTitle,\n value,\n files = [],\n data = {},\n }: CommentPayload): CommentPatch => {\n const patch: CommentPatch = {\n body: value,\n activityType: 'comment',\n activityId: newId,\n entityId: entityId,\n referenceType: 'origin',\n authorName: userName,\n authorFullName: userFullName,\n createdAt: formatISO(new Date()),\n files: files,\n reactions: [],\n activityData: data,\n origin: {\n id: '8090c2dafcc811eeaf820242c0a80002',\n type: entityType,\n name: subTitle,\n },\n author: {\n active: true,\n deleted: false,\n },\n }\n\n return patch\n }\n\n const submitComment = async (\n value: string,\n files: File[] = [],\n data: any = {},\n ): Promise<void> => {\n // map over all the entities and create a new comment for each\n let patchId: string | null = null\n const promises = entities.map(({ id: entityId, subTitle }) => {\n const newId = getEntityId()\n if (!patchId) patchId = newId\n const fileIds = files.map((file) => file.id)\n\n const commentData = entityListId ? { ...data, entityList: entityListId } : data\n\n const newComment = {\n body: value,\n activityType: 'comment',\n id: newId,\n files: fileIds,\n data: commentData,\n }\n\n // filter out files which are transparent versions of an annotation\n const optimisticFiles = files.filter(\n ({ id }) =>\n !data.annotations?.some(\n (annotation: SavedAnnotationMetadata) => annotation.transparent === id,\n ),\n )\n\n // create a new patch for optimistic update\n const patch = createPatch({ entityId, newId, subTitle, value, files: optimisticFiles, data })\n\n // we only need these args to update the cache of the original query\n const argsForCachingMatching = { entityIds, activityTypes }\n\n return createEntityActivity({\n projectName,\n entityType,\n entityId,\n data: newComment,\n patch,\n filter,\n ...argsForCachingMatching,\n })\n })\n\n await Promise.all(promises)\n }\n\n const updateComment = async (\n activity: Activity,\n value: string,\n files: File[] = [],\n data: any = {},\n ): Promise<void> => {\n const fileIds = files.map((file) => file.id)\n\n const updatedActivity = {\n body: value,\n files: fileIds,\n data,\n }\n\n const patch = {\n ...activity,\n ...updatedActivity,\n files,\n }\n\n // we only need these args to update the cache of the original query\n const argsForCachingMatching = { entityType, entityIds, activityTypes }\n\n try {\n await updateActivity({\n projectName,\n data: updatedActivity,\n activityId: activity.activityId,\n entityId: activity.entityId,\n patch,\n filter,\n ...argsForCachingMatching,\n })\n } catch (error: any) {\n console.error(error)\n toast.error(error?.data?.detail)\n // so higher level can detect the error\n throw error\n }\n }\n\n const deleteComment = async (id: string, entityId: string, refs: any[] = []): Promise<void> => {\n // we only need these args to update the cache of the original query\n const argsForCachingMatching = { entityType, entityIds, activityTypes }\n\n if (!id) return\n\n try {\n await deleteActivity({\n projectName,\n activityId: id,\n entityId,\n filter,\n patch: { activityId: id },\n refs,\n ...argsForCachingMatching,\n })\n } catch (error) {\n // error is handled in the mutation\n }\n }\n\n const submitReview = async (\n feedback: VersionReviewFeedback\n ): Promise<void> => {\n // map over all the entities and create a new comment for each\n let patchId: string | null = null\n const promises = entities.map(({ id: entityId, subTitle }) => {\n const newId = getEntityId()\n if (!patchId) patchId = newId\n\n const data = { feedback, entityList: entityListId }\n const newReview = {\n body: getVerbForFeedbackBody(feedback, entityType),\n activityType: 'version.review',\n id: newId,\n data,\n }\n\n // create a new patch for optimistic update\n const patch = createPatch({ entityId, newId, subTitle, value: '', data })\n\n return createEntityActivity({\n projectName,\n entityType,\n entityId,\n data: newReview,\n patch,\n filter,\n })\n })\n\n await Promise.all(promises)\n }\n\n return {\n submitComment,\n updateComment,\n deleteComment,\n submitReview,\n isSaving: isUpdatingActivity,\n }\n}\n\nexport default useCommentMutations\n"],"names":["useCommentMutations","projectName","entityType","entities","filter","entityListId","createEntityActivity","updateActivity","deleteActivity","isUpdatingActivity","userName","userFullName","activityTypes","useFeedContext","entityIds","entity","createPatch","entityId","newId","subTitle","value","files","data","formatISO","promises","getEntityId","fileIds","file","commentData","newComment","optimisticFiles","id","annotation","patch","activity","updatedActivity","argsForCachingMatching","error","toast","refs","feedback","newReview","getVerbForFeedbackBody"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useCommentMutations.es.js","sources":["../../../../../../src/containers/Feed/hooks/useCommentMutations.ts"],"sourcesContent":["import { getEntityId } from '@shared/util'\nimport { formatISO } from 'date-fns'\nimport { toast } from 'react-toastify'\nimport { useFeedContext } from '../context/FeedContext'\nimport { SavedAnnotationMetadata } from '..'\nimport { VersionReviewFeedback } from '../components/CommentInput/types'\nimport { getVerbForFeedbackBody } from '../components/ActivityVersionReview/ActivityVersionReview'\n\n// Type definitions\ninterface Entity {\n id: string\n subTitle?: string\n}\n\ninterface File {\n id: string\n [key: string]: any\n}\n\nexport interface Activity {\n activityId: string\n entityId: string\n body: string\n files: File[]\n [key: string]: any\n}\n\ninterface CommentPatch {\n body: string\n activityType: string\n activityId: string\n entityId: string\n referenceType: string\n authorName: string\n authorFullName?: string\n createdAt: string\n files: File[]\n activityData: any\n reactions: any[]\n origin: {\n id: string\n type: string\n name?: string\n }\n author: {\n active: boolean\n deleted: boolean\n }\n}\n\ninterface CommentMutationsProps {\n projectName: string\n entityType: string\n entities: Entity[]\n filter: any\n entityListId?: string\n}\n\ninterface CommentPayload {\n entityId: string\n newId: string\n subTitle?: string\n value: string\n files?: File[]\n data?: any\n}\n\n// does the body have a checklist anywhere in it\n// * [ ] or * [x]\nexport const bodyHasChecklist = (body: string): boolean => {\n return body.includes('* [ ]') || body.includes('* [x]')\n}\n\nconst useCommentMutations = ({\n projectName,\n entityType,\n entities = [],\n filter,\n entityListId,\n}: CommentMutationsProps) => {\n const {\n createEntityActivity,\n updateActivity,\n deleteActivity,\n isUpdatingActivity,\n userName,\n userFullName,\n activityTypes,\n } = useFeedContext()\n const entityIds = entities.map((entity) => entity.id)\n\n const createPatch = ({\n entityId,\n newId,\n subTitle,\n value,\n files = [],\n data = {},\n }: CommentPayload): CommentPatch => {\n const patch: CommentPatch = {\n body: value,\n activityType: 'comment',\n activityId: newId,\n entityId: entityId,\n referenceType: 'origin',\n authorName: userName,\n authorFullName: userFullName,\n createdAt: formatISO(new Date()),\n files: files,\n reactions: [],\n activityData: data,\n origin: {\n id: '8090c2dafcc811eeaf820242c0a80002',\n type: entityType,\n name: subTitle,\n },\n author: {\n active: true,\n deleted: false,\n },\n }\n\n return patch\n }\n\n const submitComment = async (\n value: string,\n files: File[] = [],\n data: any = {},\n ): Promise<void> => {\n // map over all the entities and create a new comment for each\n let patchId: string | null = null\n const promises = entities.map(({ id: entityId, subTitle }) => {\n const newId = getEntityId()\n if (!patchId) patchId = newId\n const fileIds = files.map((file) => file.id)\n\n const commentData = entityListId ? { ...data, entityList: entityListId } : data\n\n const newComment = {\n body: value,\n activityType: 'comment',\n id: newId,\n files: fileIds,\n data: commentData,\n }\n\n // filter out files which are transparent versions of an annotation\n const optimisticFiles = files.filter(\n ({ id }) =>\n !data.annotations?.some(\n (annotation: SavedAnnotationMetadata) => annotation.transparent === id,\n ),\n )\n\n // create a new patch for optimistic update\n const patch = createPatch({ entityId, newId, subTitle, value, files: optimisticFiles, data })\n\n // we only need these args to update the cache of the original query\n const argsForCachingMatching = { entityIds, activityTypes }\n\n return createEntityActivity({\n projectName,\n entityType,\n entityId,\n data: newComment,\n patch,\n filter,\n ...argsForCachingMatching,\n })\n })\n\n await Promise.all(promises)\n }\n\n const updateComment = async (\n activity: Activity,\n value: string,\n files: File[] = [],\n data: any = {},\n ): Promise<void> => {\n const fileIds = files.map((file) => file.id)\n\n const updatedActivity = {\n body: value,\n files: fileIds,\n data,\n }\n\n const patch = {\n ...activity,\n ...updatedActivity,\n files,\n }\n\n // we only need these args to update the cache of the original query\n const argsForCachingMatching = { entityType, entityIds, activityTypes }\n\n try {\n await updateActivity({\n projectName,\n data: updatedActivity,\n activityId: activity.activityId,\n entityId: activity.entityId,\n patch,\n filter,\n ...argsForCachingMatching,\n })\n } catch (error: any) {\n console.error(error)\n toast.error(error?.data?.detail)\n // so higher level can detect the error\n throw error\n }\n }\n\n const deleteComment = async (id: string, entityId: string, refs: any[] = []): Promise<void> => {\n // we only need these args to update the cache of the original query\n const argsForCachingMatching = { entityType, entityIds, activityTypes }\n\n if (!id) return\n\n try {\n await deleteActivity({\n projectName,\n activityId: id,\n entityId,\n filter,\n patch: { activityId: id },\n refs,\n ...argsForCachingMatching,\n })\n } catch (error) {\n // error is handled in the mutation\n }\n }\n\n const submitReview = async (feedback: VersionReviewFeedback): Promise<void> => {\n // map over all the entities and create a new comment for each\n let patchId: string | null = null\n const promises = entities.map(({ id: entityId, subTitle }) => {\n const newId = getEntityId()\n if (!patchId) patchId = newId\n\n const data = { feedback, entityList: entityListId }\n const newReview = {\n body: getVerbForFeedbackBody(feedback, entityType),\n activityType: 'version.review',\n id: newId,\n data,\n }\n\n // create a new patch for optimistic update\n const patch = createPatch({ entityId, newId, subTitle, value: '', data })\n\n return createEntityActivity({\n projectName,\n entityType,\n entityId,\n data: newReview,\n patch,\n filter,\n })\n })\n\n await Promise.all(promises)\n }\n\n return {\n submitComment,\n updateComment,\n deleteComment,\n submitReview,\n isSaving: isUpdatingActivity,\n }\n}\n\nexport default useCommentMutations\n"],"names":["useCommentMutations","projectName","entityType","entities","filter","entityListId","createEntityActivity","updateActivity","deleteActivity","isUpdatingActivity","userName","userFullName","activityTypes","useFeedContext","entityIds","entity","createPatch","entityId","newId","subTitle","value","files","data","formatISO","promises","getEntityId","fileIds","file","commentData","newComment","optimisticFiles","id","annotation","patch","activity","updatedActivity","argsForCachingMatching","error","toast","refs","feedback","newReview","getVerbForFeedbackBody"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const E=require("./useGetEntityTypeData.cjs.js"),P=require("react");require("@ynput/ayon-react-components");require("../../../components/SearchFilter/filterDates.cjs.js");require("date-fns");require("short-uuid");require("react-toastify");require("lodash");require("uuid");require("../../../util/pubsub.cjs.js");require("../context/CellEditingContext.cjs.js");require("../../../../../_virtual/jsx-runtime.cjs.js");require("../context/SelectionCellsContext.cjs.js");require("../context/ProjectTableQueriesContext.cjs.js");require("../context/ProjectTableContext.cjs.js");require("../../../context/RemoteModulesContext.cjs.js");require("../../../../../_virtual/runtime.cjs.js");require("../../../../../_virtual/semver.cjs.js");require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/dataImport.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/projectFolders.cjs.js");require("../../../api/generated/reviewables.cjs.js");require("../../../api/generated/services.cjs.js");require("../../../api/generated/system.cjs.js");require("../../../api/generated/tasks.cjs.js");require("../../../api/generated/teams.cjs.js");require("../../../api/generated/thumbnails.cjs.js");require("../../../api/generated/uRIs.cjs.js");require("../../../api/generated/users.cjs.js");require("../../../api/generated/versions.cjs.js");require("../../../api/generated/workfiles.cjs.js");require("../../../api/generated/ynputCloud.cjs.js");require("../../../api/generated/grouping.cjs.js");require("../../../api/generated/views.cjs.js");require("../../../api/queries/actions/getActions.cjs.js");require("../../../api/queries/activities/getActivities.cjs.js");require("../../../api/queries/activities/updateActivities.cjs.js");require("../../../api/queries/activities/updateReaction.cjs.js");require("../../../api/queries/activities/getMentions.cjs.js");require("../../../api/queries/activities/getCategories.cjs.js");require("../../../api/queries/addons/getAddons.cjs.js");require("../../../api/queries/addons/updateAddons.cjs.js");require("../../../api/queries/attributes/getAttributes.cjs.js");require("../../../api/queries/attributes/updateAttributes.cjs.js");require("../../../api/queries/authentication/getAuthentication.cjs.js");require("../../../api/queries/cloud/cloud.cjs.js");require("../../../api/queries/columnStats/metricTargets.cjs.js");require("../../../api/queries/config/getConfig.cjs.js");require("../../../api/queries/config/updateConfig.cjs.js");require("../../../api/queries/entities/getEntity.cjs.js");require("../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../api/queries/overview/getOverview.cjs.js");require("../../../api/queries/overview/updateOverview.cjs.js");require("../../../api/queries/versions/getVersionsProducts.cjs.js");require("../../../api/queries/links/getEntityLinks.cjs.js");require("../../../api/queries/entities/updateEntity.cjs.js");require("../../../api/queries/entityLists/getLists.cjs.js");require("../../../api/queries/entityLists/updateLists.cjs.js");require("../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../api/queries/entityLists/listItemsColumnStats.cjs.js");require("../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../api/queries/entityLists/listFolders.cjs.js");require("../../../api/queries/folders/getFolders.cjs.js");require("../../../api/queries/folders/getFolderDeleteInfo.cjs.js");require("../../../api/queries/grouping/getGrouping.cjs.js");require("../../../api/queries/links/updateLinks.cjs.js");require("../../../api/queries/links/getLinks.cjs.js");require("../../../api/queries/permissions/getPermissions.cjs.js");require("../../../api/queries/products/createProduct.cjs.js");require("../../../api/queries/products/getFolderProducts.cjs.js");require("../../../api/queries/project/getProject.cjs.js");require("../../../api/queries/project/updateProject.cjs.js");require("../../../api/queries/projectFolders/projectFolders.cjs.js");require("../../../api/queries/review/getReview.cjs.js");require("../../../api/queries/review/updateReview.cjs.js");require("../../../api/queries/share/share.cjs.js");require("../../../api/queries/system/getSystem.cjs.js");require("../../../api/queries/tasks/getTasks.cjs.js");require("../../../api/queries/tasks/updateTasks.cjs.js");require("../../../api/queries/teams/getTeams.cjs.js");require("../../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../../api/queries/users/getUsers.cjs.js");require("../../../api/queries/users/updateUsers.cjs.js");require("../../../api/queries/users/guests.cjs.js");require("../../../api/queries/versions/updateVersions.cjs.js");require("../../../api/queries/views/getViews.cjs.js");require("../../../api/queries/views/updateViews.cjs.js");require("../../../api/queries/watchers/getWatchers.cjs.js");require("../../../api/queries/uris/getUris.cjs.js");require("react-redux");require("custom-protocol-check");require("../components/GroupSettingsFallback.cjs.js");require("../../../context/PowerpackContextInstance.cjs.js");require("../../../context/UriContext.cjs.js");require("../../../context/DetailsPanelContextInstance.cjs.js");require("../../../context/SubtasksModulesContextInstance.cjs.js");require("../../../context/ThumbnailUploaderContext.cjs.js");require("../../../context/SettingsPanelContext.cjs.js");require("../../../context/pip/PiPProvider.cjs.js");require("react-dom");require("../../../context/pip/PiPWrapper.cjs.js");require("../../../context/AddonProjectContext.cjs.js");require("../../../context/AddonContext.cjs.js");require("../../../context/MoveEntityContext.cjs.js");require("../../../context/MenuContext.cjs.js");require("../../../context/WebsocketContext.cjs.js");require("../../../context/GlobalContext.cjs.js");const O=require("../../../context/ProjectContext.cjs.js");require("../../../context/ProjectFoldersContext.cjs.js");require("../context/ClipboardContext.cjs.js");require("@tanstack/react-table");require("../context/ColumnSettingsContext.cjs.js");require("../context/SelectedRowsContext.cjs.js");require("../context/DetailsPanelEntityContext.cjs.js");;/* empty css */require("clsx");require("../../ContextMenu/ContextMenuContext.cjs.js");require("../../Feed/context/FeedContext.cjs.js");require("../../Feed/components/Tooltips/UserTooltipItem.cjs.js");require("../../Feed/components/Tooltips/UserTooltip/UserTooltip.styled.cjs.js");require("../../Feed/components/Tooltips/TeamTooltip/TeamTooltip.styled.cjs.js");require("../../Feed/components/Tooltips/EntityTooltip/EntityTooltip.styled.cjs.js");require("../../Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js");require("../../Feed/components/FileUploadPreview/Mimes/TextMime.cjs.js");require("react-markdown");require("remark-emoji");require("remark-gfm");require("remark-directive");require("remark-directive-rehype");require("../../Feed/components/CommentInput/CommentInput.cjs.js");require("../../Feed/components/ReactionContainer/Reactions.styled.cjs.js");require("../../Feed/components/FilesGrid/FilesGrid.styled.cjs.js");require("../../Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js");require("../../Feed/components/CommentInput/quillToMarkdown.cjs.js");require("../../Feed/components/ActivityComment/ActivityComment.styled.cjs.js");require("../../Feed/components/ActivityCheckbox/ActivityCheckbox.styled.cjs.js");require("../../../components/AddonLoadingScreen/AddonLoadingScreen.cjs.js");require("../../../../../node_modules/match-sorter/dist/match-sorter.esm.cjs.js");require("../../../components/AccessSearchInput/AccessSearchInput.styled.cjs.js");require("../../../components/AccessUser/AccessUser.cjs.js");require("../../../components/AttributeEditor/AttributeEditor.cjs.js");require("../../../components/AttributeEditor/attributeTypeMap.cjs.js");require("../../../components/Badge/Badge.cjs.js");require("../../../components/Chips/Chips.cjs.js");require("../../../components/DateRangePicker/DateRangePicker.styled.cjs.js");require("../../../components/LinksManager/CellEditingDialog.cjs.js");require("../../../../../_virtual/index.cjs.js");require("../../../../../node_modules/refractor/lib/common.cjs.js");require("../../../../../node_modules/refractor/lib/all.cjs.js");;/* empty css */require("../../../components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js");require("../../../components/DetailsPanelDetails/DetailsPanelDetails.cjs.js");require("react-quill-ayon");require("../../../components/DetailsPanelDetails/BorderedSection.cjs.js");require("../../../components/QuillListStyles/QuillListStyles.cjs.js");require("../../../components/DetailsPanelDetails/DescriptionSection.styles.cjs.js");require("rehype-raw");require("../../../components/DetailsPanelDetails/hooks/useMentionSystem.cjs.js");require("../../Feed/components/CommentInput/modules/index.cjs.js");require("../../../components/DetailsPanelDetails/DetailsSection.cjs.js");require("../../../components/DetailsPanelDetails/FieldLabel.cjs.js");require("../../../components/DoneCheckbox/DoneCheckbox.cjs.js");require("../../../components/EarlyPreview/EarlyPreview.cjs.js");require("../../../components/EmptyPlaceholder/EmptyPlaceholder.cjs.js");require("../../../components/EmptyPlaceholder/EmptyPlaceholderFlex.styled.cjs.js");require("@dnd-kit/core");require("@dnd-kit/sortable");require("../../../components/EnumEditor/EnumEditor.styled.cjs.js");require("../../../components/EntityPanelUploader/EntityPanelUploader.styled.cjs.js");require("axios");require("../../../components/ReviewablesList/ReviewablesList.styled.cjs.js");require("../../../components/ReviewablesList/ReviewablesUpload.styled.cjs.js");require("../../../components/EntityPath/EntityPath.styled.cjs.js");require("../../../components/EntityPath/SegmentProvider.cjs.js");require("../../../components/FeaturedVersionOrder/FeaturedVersionOrder.cjs.js");require("../../../components/Feedback/FeedbackContextInstance.cjs.js");require("../../../components/Feedback/SupportBubble.cjs.js");require("../../../components/FileThumbnail/FileThumbnail.cjs.js");require("../../../components/LegacyBadge/LegacyBadge.cjs.js");require("../../../components/LinksManager/LinksManager.styled.cjs.js");require("../../EntityPickerDialog/EntityPickerDialog.cjs.js");require("../../../components/Powerpack/PowerpackButton.cjs.js");require("../../../components/Powerpack/FreeTrialLink.cjs.js");require("../../../components/Powerpack/PowerpackDialog.styled.cjs.js");require("../../../components/Powerpack/CTAButton.cjs.js");require("../../../components/Powerpack/RequiredAddonVersion.cjs.js");require("../../../components/ProjectTableSettings/ProjectTableSettings.cjs.js");require("../../../components/SizeSlider/SizeSlider.cjs.js");require("react-router-dom");require("../../Slicer/components/Slicer.cjs.js");require("../../Slicer/context/SlicerContext.cjs.js");require("../../Slicer/hooks/useTableDataBySlice.cjs.js");require("../../../components/ReviewableCard/ReviewableCard.cjs.js");require("../../../components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js");require("../../../components/SettingsPanel/SettingsPanel.cjs.js");require("../../../components/SettingsPanel/SettingsPanelItemTemplate.cjs.js");require("../../../components/ShareOptionIcon/ShareOptionIcon.cjs.js");require("../../../components/SimpleFormDialog/SimpleFormDialog.cjs.js");require("../../../components/StyledLink/StyledLink.cjs.js");require("../../../components/TableGridSwitch/TableGridSwitch.cjs.js");require("../../../components/Thumbnail/Thumbnail.styled.cjs.js");require("../../../components/Thumbnail/StackedThumbnails.cjs.js");require("../../../components/ThumbnailSimple/ThumbnailSimple.cjs.js");require("../../../components/VersionUploader/components/UploadVersionDialog.cjs.js");require("../../../components/VersionUploader/context/VersionUploadContext.cjs.js");require("../../../components/Watchers/Watchers.cjs.js");require("../../../components/Menu/Menu.styled.cjs.js");require("../../../components/Menu/MenuItem.cjs.js");require("../../../components/ReviewablesSelector/ReviewablesSelector.cjs.js");require("../../../components/ColumnHeaderMenuUI.cjs.js");require("../../Feed/components/ActivityReference/ActivityReference.styled.cjs.js");require("../../Feed/components/ActivityStatus/ActivityStatus.cjs.js");require("../../Feed/components/ActivityHeader/ActivityHeader.styled.cjs.js");require("../../Feed/components/ActivityDate.cjs.js");require("../../Feed/components/ActivityCategorySelect/CategoryTag.cjs.js");require("../../Feed/components/ActivityStatusChange/ActivityStatusChange.styled.cjs.js");require("../../Feed/components/ActivityAssigneeChange/ActivityAssigneeChange.styled.cjs.js");require("../../Feed/components/ActivityVersions/ActivityVersions.styled.cjs.js");require("../../Feed/components/ActivityGroup/ActivityGroup.styled.cjs.js");require("../../Feed/components/ActivityVersionReview/ActivityVersionReview.styled.cjs.js");require("../../Feed/components/ActivityCategorySelect/ActivityCategorySelect.cjs.js");require("../../Feed/components/ActivityCategorySelect/CategoryDropdownItem.cjs.js");require("../../Feed/Feed.styled.cjs.js");require("../../DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js");require("@tanstack/react-virtual");require("../widgets/CollapsedWidget.cjs.js");require("../widgets/DateWidget.cjs.js");require("../widgets/EnumWidget.cjs.js");require("../widgets/EnumCellValue.cjs.js");require("../widgets/TextWidget.cjs.js");require("../widgets/MarkdownWidget.cjs.js");require("../widgets/BooleanWidget.cjs.js");require("../widgets/CellWidget.cjs.js");require("../widgets/EntityNameWidget.cjs.js");require("../widgets/GroupHeaderWidget.cjs.js");require("../widgets/ThumbnailWidget.cjs.js");require("../widgets/EmptyWidget.cjs.js");require("../widgets/ErrorWidget.cjs.js");require("../ProjectTreeTable.styled.cjs.js");require("../components/SelectionCell.cjs.js");require("../components/RowSelectionHeader.cjs.js");require("../widgets/LoadMoreWidget.cjs.js");require("../components/HeaderActionButton.cjs.js");require("../components/TableFooterRow.cjs.js");require("../context/ProjectDataContext.cjs.js");require("../../DetailsPanel/DetailsPanel.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelTabs/DetailsPanelTabs.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js");require("../../../components/PlayableIcon/PlayableIcon.cjs.js");require("../../DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js");require("../../DetailsPanel/components/DetailsPanelMoreMenu/components/ShareDialog.cjs.js");require("../../DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.styled.cjs.js");require("../../Actions/Actions.styled.cjs.js");require("../../Actions/ActionsDropdown/ActionsDropdown.cjs.js");require("../../Actions/ActionIcon.cjs.js");require("../../Views/ViewsMenu/ViewsMenu.cjs.js");require("../../Views/context/ViewsContextInstance.cjs.js");require("../../Views/Views.styled.cjs.js");require("../../Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js");require("../../ListTable/ListTableRow.cjs.js");require("../../ListTable/ListTable.styled.cjs.js");require("../components/DeleteConfirmContent.cjs.js");const U=require("../utils/linksToTableData.cjs.js"),D="next-page",f="_ungrouped",I="__",m=e=>e?Array.isArray(e)?e.map(q=>q.toString()):[e.toString()]:[],x=(e,q,s)=>{if(!s)return{value:q,label:q};const i=s.find(t=>t.value===q);return i?{value:i.value,label:i.label||i.value,color:i.color,icon:i.icon,count:i.count,img:e==="assignees"?`/api/users/${i.value}/avatar`:void 0}:{value:q,label:q}},c="_GROUP_",h=e=>`${c}${e}`,S=e=>e.startsWith(c)?e.slice(c.length):null,N=e=>e.startsWith(c),W=(e,q,s=[])=>{const i=e.id.replace("attrib.","");return i==="status"?q?.statuses?.map(t=>t.name)||[]:i==="taskType"?q?.taskTypes?.map(t=>t.name)||[]:i==="folderType"?q?.folderTypes?.map(t=>t.name)||[]:e.id.startsWith("attrib.")?s.find(t=>t.name===i)?.data.enum?.map(t=>t.value.toString())||[]:[]},C=(e,q,s,i,t)=>{const d=t(s,e.taskType);return{id:e.id+I+q,entityId:e.id,entityType:s,parentId:e.folderId,folderId:e.folderId,name:e.name||"",label:e.label||e.name||"",icon:d?.icon||null,color:d?.color||null,status:e.status,assignees:e.assignees,tags:e.tags,img:null,subRows:[],subType:e.taskType||null,attrib:e.attrib,ownAttrib:e.ownAttrib,parents:e.parents||[],folder:e.parents?.[e.parents.length-1]||void 0,createdAt:e.createdAt,updatedAt:e.updatedAt,hasReviewables:e.hasReviewables||!1,links:U.linksToTableData(e.links,s,{folderTypes:i?.folderTypes||[],productTypes:Object.values(i.productTypes)||[],taskTypes:i?.taskTypes||[]}),subtasks:e.subtasks||[]}},$=({entities:e,entityType:q,groups:s=[],attribFields:i,showEmpty:t,groupRowFunc:d})=>{const g=O.useProjectContext(),A=E.useGetEntityTypeData({projectInfo:g}),b=P.useCallback((n,l)=>{const p=d?d(n):C(n,l,q,g,A);return{...p,id:n.id+I+l,subRows:p.subRows||[]}},[d,A,q,g]);return n=>{const l=new Map;for(const o of s){const r=o.value?.toString(),a=h(r),u=x(n.id,r,s);l.set(r,{id:a,name:r,entityType:"group",subRows:[],label:u.label,group:u,links:{}})}const p=c+"."+f,_=()=>{let o=l.get(p);return o||(o={id:p,name:"Ungrouped",entityType:"group",subRows:[],label:"Ungrouped",group:{value:p,label:"Ungrouped"},links:{}},l.set(p,o)),o};for(const[o,r]of e){if(r.entityType!==q)continue;let a=[];if(n.id.startsWith("attrib.")){const u=n.id.split(".")[1];a=m(r.attrib?.[u])}else n.id==="folderType"&&"folder"in r?a=m(r.folder?.folderType):a=m(r[n.id]);a.length===0&&_().subRows?.push(b(r,f));for(const u of a){const v=l.get(u);v?v.subRows?.push(b(r,u)):_().subRows?.push(b(r,f))}if("groups"in r&&Array.isArray(r.groups)){for(const u of r.groups)if(u.hasNextPage&&l.has(u.value)){const R=l.get(u.value);R&&R.subRows?.push({id:`${u.value}-next-page`,name:"Load more tasks...",entityType:D,subRows:[],label:`Next page for ${u.value}`,group:{value:u.value,label:u.value},links:{}})}}}const T=Array.from(l.values()),G=W(n,g,i),y=n.desc?-1:1;T.sort((o,r)=>{if(o.group?.value===p)return 1;if(r.group?.value===p)return-1;if(G.length){const a=G.indexOf(o.group?.value||""),u=G.indexOf(r.group?.value||"");return a!==-1&&u!==-1?(a-u)*y:a!==-1?-1:u!==-1?1:(o.group?.label?.localeCompare(r.group?.label||"")||0)*y}else return(o.group?.label?.localeCompare(r.group?.label||"")||0)*y});const w=T.filter(o=>o.group?.count&&o.group.count>0);return t?T:w}};exports.GROUP_BY_ID=c;exports.NEXT_PAGE_ID=D;exports.ROW_ID_SEPARATOR=I;exports.UNGROUPED_VALUE=f;exports.buildGroupId=h;exports.default=$;exports.isGroupId=N;exports.parseGroupId=S;
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const E=require("./useGetEntityTypeData.cjs.js"),P=require("react");require("@ynput/ayon-react-components");require("../../../components/SearchFilter/filterDates.cjs.js");require("date-fns");require("short-uuid");require("react-toastify");require("lodash");require("uuid");require("../../../util/pubsub.cjs.js");require("../context/CellEditingContext.cjs.js");require("../../../../../_virtual/jsx-runtime.cjs.js");require("../context/SelectionCellsContext.cjs.js");require("../context/ProjectTableQueriesContext.cjs.js");require("../context/ProjectTableContext.cjs.js");require("../../../context/RemoteModulesContext.cjs.js");require("../../../../../_virtual/runtime.cjs.js");require("../../../../../_virtual/semver.cjs.js");require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/dataImport.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/projectFolders.cjs.js");require("../../../api/generated/reviewables.cjs.js");require("../../../api/generated/services.cjs.js");require("../../../api/generated/system.cjs.js");require("../../../api/generated/tasks.cjs.js");require("../../../api/generated/teams.cjs.js");require("../../../api/generated/thumbnails.cjs.js");require("../../../api/generated/uRIs.cjs.js");require("../../../api/generated/users.cjs.js");require("../../../api/generated/versions.cjs.js");require("../../../api/generated/workfiles.cjs.js");require("../../../api/generated/ynputCloud.cjs.js");require("../../../api/generated/grouping.cjs.js");require("../../../api/generated/views.cjs.js");require("../../../api/queries/actions/getActions.cjs.js");require("../../../api/queries/activities/getActivities.cjs.js");require("../../../api/queries/activities/updateActivities.cjs.js");require("../../../api/queries/activities/updateReaction.cjs.js");require("../../../api/queries/activities/getMentions.cjs.js");require("../../../api/queries/activities/getCategories.cjs.js");require("../../../api/queries/addons/getAddons.cjs.js");require("../../../api/queries/addons/updateAddons.cjs.js");require("../../../api/queries/attributes/getAttributes.cjs.js");require("../../../api/queries/attributes/updateAttributes.cjs.js");require("../../../api/queries/authentication/getAuthentication.cjs.js");require("../../../api/queries/cloud/cloud.cjs.js");require("../../../api/queries/columnStats/metricTargets.cjs.js");require("../../../api/queries/config/getConfig.cjs.js");require("../../../api/queries/config/updateConfig.cjs.js");require("../../../api/queries/entities/getEntity.cjs.js");require("../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../api/queries/overview/getOverview.cjs.js");require("../../../api/queries/overview/updateOverview.cjs.js");require("../../../api/queries/versions/getVersionsProducts.cjs.js");require("../../../api/queries/links/getEntityLinks.cjs.js");require("../../../api/queries/entities/updateEntity.cjs.js");require("../../../api/queries/entityLists/getLists.cjs.js");require("../../../api/queries/entityLists/updateLists.cjs.js");require("../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../api/queries/entityLists/listItemsColumnStats.cjs.js");require("../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../api/queries/entityLists/listFolders.cjs.js");require("../../../api/queries/folders/getFolders.cjs.js");require("../../../api/queries/folders/getFolderDeleteInfo.cjs.js");require("../../../api/queries/grouping/getGrouping.cjs.js");require("../../../api/queries/links/updateLinks.cjs.js");require("../../../api/queries/links/getLinks.cjs.js");require("../../../api/queries/permissions/getPermissions.cjs.js");require("../../../api/queries/products/createProduct.cjs.js");require("../../../api/queries/products/getFolderProducts.cjs.js");require("../../../api/queries/project/getProject.cjs.js");require("../../../api/queries/project/updateProject.cjs.js");require("../../../api/queries/projectFolders/projectFolders.cjs.js");require("../../../api/queries/review/getReview.cjs.js");require("../../../api/queries/review/updateReview.cjs.js");require("../../../api/queries/share/share.cjs.js");require("../../../api/queries/system/getSystem.cjs.js");require("../../../api/queries/tasks/getTasks.cjs.js");require("../../../api/queries/tasks/updateTasks.cjs.js");require("../../../api/queries/teams/getTeams.cjs.js");require("../../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../../api/queries/users/getUsers.cjs.js");require("../../../api/queries/users/updateUsers.cjs.js");require("../../../api/queries/users/guests.cjs.js");require("../../../api/queries/versions/updateVersions.cjs.js");require("../../../api/queries/views/getViews.cjs.js");require("../../../api/queries/views/updateViews.cjs.js");require("../../../api/queries/watchers/getWatchers.cjs.js");require("../../../api/queries/uris/getUris.cjs.js");require("react-redux");require("custom-protocol-check");require("../components/GroupSettingsFallback.cjs.js");require("../../../context/PowerpackContextInstance.cjs.js");require("../../../context/UriContext.cjs.js");require("../../../context/DetailsPanelContextInstance.cjs.js");require("../../../context/SubtasksModulesContextInstance.cjs.js");require("../../../context/ThumbnailUploaderContext.cjs.js");require("../../../context/SettingsPanelContext.cjs.js");require("../../../context/pip/PiPProvider.cjs.js");require("react-dom");require("../../../context/pip/PiPWrapper.cjs.js");require("../../../context/AddonProjectContext.cjs.js");require("../../../context/AddonContext.cjs.js");require("../../../context/MoveEntityContext.cjs.js");require("../../../context/MenuContext.cjs.js");require("../../../context/WebsocketContext.cjs.js");require("../../../context/GlobalContext.cjs.js");const U=require("../../../context/ProjectContext.cjs.js");require("../../../context/ProjectFoldersContext.cjs.js");require("../context/ClipboardContext.cjs.js");require("@tanstack/react-table");require("../context/ColumnSettingsContext.cjs.js");require("../context/SelectedRowsContext.cjs.js");require("../context/DetailsPanelEntityContext.cjs.js");;/* empty css */require("clsx");require("../../ContextMenu/ContextMenuContext.cjs.js");require("../../Feed/context/FeedContext.cjs.js");require("../../Feed/components/Tooltips/UserTooltipItem.cjs.js");require("../../Feed/components/Tooltips/UserTooltip/UserTooltip.styled.cjs.js");require("../../Feed/components/Tooltips/TeamTooltip/TeamTooltip.styled.cjs.js");require("../../Feed/components/Tooltips/EntityTooltip/EntityTooltip.styled.cjs.js");require("../../Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js");require("../../Feed/components/FileUploadPreview/Mimes/TextMime.cjs.js");require("react-markdown");require("remark-emoji");require("remark-gfm");require("remark-directive");require("remark-directive-rehype");require("../../Feed/components/CommentInput/CommentInput.cjs.js");require("../../Feed/components/ReactionContainer/Reactions.styled.cjs.js");require("../../Feed/components/FilesGrid/FilesGrid.styled.cjs.js");require("../../Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js");require("../../Feed/components/CommentInput/quillToMarkdown.cjs.js");require("../../Feed/components/ActivityComment/ActivityComment.styled.cjs.js");require("../../Feed/components/ActivityCheckbox/ActivityCheckbox.styled.cjs.js");require("../../../components/AddonLoadingScreen/AddonLoadingScreen.cjs.js");require("../../../../../node_modules/match-sorter/dist/match-sorter.esm.cjs.js");require("../../../components/AccessSearchInput/AccessSearchInput.styled.cjs.js");require("../../../components/AccessUser/AccessUser.cjs.js");require("../../../components/AttributeEditor/AttributeEditor.cjs.js");require("../../../components/AttributeEditor/attributeTypeMap.cjs.js");require("../../../components/Badge/Badge.cjs.js");require("../../../components/Chips/Chips.cjs.js");require("../../../components/DateRangePicker/DateRangePicker.styled.cjs.js");require("../../../components/LinksManager/CellEditingDialog.cjs.js");require("../../../../../_virtual/index.cjs.js");require("../../../../../node_modules/refractor/lib/common.cjs.js");require("../../../../../node_modules/refractor/lib/all.cjs.js");;/* empty css */require("../../../components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js");require("../../../components/DetailsPanelDetails/DetailsPanelDetails.cjs.js");require("react-quill-ayon");require("../../../components/DetailsPanelDetails/BorderedSection.cjs.js");require("../../../components/QuillListStyles/QuillListStyles.cjs.js");require("../../../components/DetailsPanelDetails/DescriptionSection.styles.cjs.js");require("rehype-raw");require("../../../components/DetailsPanelDetails/hooks/useMentionSystem.cjs.js");require("../../Feed/components/CommentInput/modules/index.cjs.js");require("../../../components/DetailsPanelDetails/DetailsSection.cjs.js");require("../../../components/DetailsPanelDetails/FieldLabel.cjs.js");require("../../../components/DoneCheckbox/DoneCheckbox.cjs.js");require("../../../components/EarlyPreview/EarlyPreview.cjs.js");require("../../../components/EmptyPlaceholder/EmptyPlaceholder.cjs.js");require("../../../components/EmptyPlaceholder/EmptyPlaceholderFlex.styled.cjs.js");require("@dnd-kit/core");require("@dnd-kit/sortable");require("../../../components/EnumEditor/EnumEditor.styled.cjs.js");require("../../../components/EntityPanelUploader/EntityPanelUploader.styled.cjs.js");require("axios");require("../../../components/ReviewablesList/ReviewablesList.styled.cjs.js");require("../../../components/ReviewablesList/ReviewablesUpload.styled.cjs.js");require("../../../components/EntityPath/EntityPath.styled.cjs.js");require("../../../components/EntityPath/SegmentProvider.cjs.js");require("../../../components/FeaturedVersionOrder/FeaturedVersionOrder.cjs.js");require("../../../components/Feedback/FeedbackContextInstance.cjs.js");require("../../../components/Feedback/SupportBubble.cjs.js");require("../../../components/FileThumbnail/FileThumbnail.cjs.js");require("../../../components/LegacyBadge/LegacyBadge.cjs.js");require("../../../components/LinksManager/LinksManager.styled.cjs.js");require("../../EntityPickerDialog/EntityPickerDialog.cjs.js");require("../../../components/Powerpack/PowerpackButton.cjs.js");require("../../../components/Powerpack/FreeTrialLink.cjs.js");require("../../../components/Powerpack/PowerpackDialog.styled.cjs.js");require("../../../components/Powerpack/CTAButton.cjs.js");require("../../../components/Powerpack/RequiredAddonVersion.cjs.js");require("../../../components/ProjectTableSettings/ProjectTableSettings.cjs.js");require("../../../components/SizeSlider/SizeSlider.cjs.js");require("react-router-dom");require("../../Slicer/components/Slicer.cjs.js");require("../../Slicer/context/SlicerContext.cjs.js");require("../../Slicer/hooks/useTableDataBySlice.cjs.js");require("../../../components/ReviewableCard/ReviewableCard.cjs.js");require("../../../components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js");require("../../../components/SettingsPanel/SettingsPanel.cjs.js");require("../../../components/SettingsPanel/SettingsPanelItemTemplate.cjs.js");require("../../../components/ShareOptionIcon/ShareOptionIcon.cjs.js");require("../../../components/SimpleFormDialog/SimpleFormDialog.cjs.js");require("../../../components/StyledLink/StyledLink.cjs.js");require("../../../components/TableGridSwitch/TableGridSwitch.cjs.js");require("../../../components/Thumbnail/Thumbnail.styled.cjs.js");require("../../../components/Thumbnail/StackedThumbnails.cjs.js");require("../../../components/ThumbnailSimple/ThumbnailSimple.cjs.js");require("../../../components/VersionUploader/components/UploadVersionDialog.cjs.js");require("../../../components/VersionUploader/context/VersionUploadContext.cjs.js");require("../../../components/Watchers/Watchers.cjs.js");require("../../../components/Menu/Menu.styled.cjs.js");require("../../../components/Menu/MenuItem.cjs.js");require("../../../components/ReviewablesSelector/ReviewablesSelector.cjs.js");require("../../../components/ColumnHeaderMenuUI.cjs.js");require("../../Feed/components/ActivityReference/ActivityReference.styled.cjs.js");require("../../Feed/components/ActivityStatus/ActivityStatus.cjs.js");require("../../Feed/components/ActivityHeader/ActivityHeader.styled.cjs.js");require("../../Feed/components/ActivityDate.cjs.js");require("../../Feed/components/ActivityCategorySelect/CategoryTag.cjs.js");require("../../Feed/components/ActivityStatusChange/ActivityStatusChange.styled.cjs.js");require("../../Feed/components/ActivityAssigneeChange/ActivityAssigneeChange.styled.cjs.js");require("../../Feed/components/ActivityVersions/ActivityVersions.styled.cjs.js");require("../../Feed/components/ActivityGroup/ActivityGroup.styled.cjs.js");require("../../Feed/components/ActivityVersionReview/ActivityVersionReview.styled.cjs.js");require("../../Feed/components/ActivityCategorySelect/ActivityCategorySelect.cjs.js");require("../../Feed/components/ActivityCategorySelect/CategoryDropdownItem.cjs.js");require("../../Feed/Feed.styled.cjs.js");require("../../DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js");require("@tanstack/react-virtual");require("../widgets/CollapsedWidget.cjs.js");require("../widgets/DateWidget.cjs.js");require("../widgets/EnumWidget.cjs.js");require("../widgets/EnumCellValue.cjs.js");require("../widgets/TextWidget.cjs.js");require("../widgets/MarkdownWidget.cjs.js");require("../widgets/BooleanWidget.cjs.js");require("../widgets/CellWidget.cjs.js");require("../widgets/EntityNameWidget.cjs.js");require("../widgets/GroupHeaderWidget.cjs.js");require("../widgets/ThumbnailWidget.cjs.js");require("../widgets/EmptyWidget.cjs.js");require("../widgets/ErrorWidget.cjs.js");require("../ProjectTreeTable.styled.cjs.js");require("../components/SelectionCell.cjs.js");require("../components/RowSelectionHeader.cjs.js");require("../widgets/LoadMoreWidget.cjs.js");require("../components/HeaderActionButton.cjs.js");require("../components/TableFooterRow.cjs.js");require("../context/ProjectDataContext.cjs.js");require("../../DetailsPanel/DetailsPanel.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelTabs/DetailsPanelTabs.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js");require("../../../components/PlayableIcon/PlayableIcon.cjs.js");require("../../DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js");require("../../DetailsPanel/components/DetailsPanelMoreMenu/components/ShareDialog.cjs.js");require("../../DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.styled.cjs.js");require("../../Actions/Actions.styled.cjs.js");require("../../Actions/ActionsDropdown/ActionsDropdown.cjs.js");require("../../Actions/ActionIcon.cjs.js");require("../../Views/ViewsMenu/ViewsMenu.cjs.js");require("../../Views/context/ViewsContextInstance.cjs.js");require("../../Views/Views.styled.cjs.js");require("../../Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js");require("../../ListTable/ListTableRow.cjs.js");require("../../ListTable/ListTable.styled.cjs.js");require("../components/DeleteConfirmContent.cjs.js");const O=require("../utils/linksToTableData.cjs.js"),D="next-page",p="_ungrouped",_="__",I=e=>e?Array.isArray(e)?e.map(q=>q.toString()):[e.toString()]:[],x=(e,q,n)=>{if(!n)return{value:q,label:q};const i=n.find(o=>o.value===q);return i?{value:i.value,label:i.label||i.value,color:i.color,icon:i.icon,count:i.count,img:e==="assignees"?`/api/users/${i.value}/avatar`:void 0}:{value:q,label:q}},c="_GROUP_",A=e=>`${c}${e}`,S=e=>e.startsWith(c)?e.slice(c.length):null,N=e=>e.startsWith(c),W=(e,q,n=[])=>{const i=e.id.replace("attrib.","");return i==="status"?q?.statuses?.map(o=>o.name)||[]:i==="taskType"?q?.taskTypes?.map(o=>o.name)||[]:i==="folderType"?q?.folderTypes?.map(o=>o.name)||[]:e.id.startsWith("attrib.")?n.find(o=>o.name===i)?.data.enum?.map(o=>o.value.toString())||[]:[]},C=(e,q,n,i,o)=>{const d=o(n,e.taskType);return{id:e.id+_+q,entityId:e.id,entityType:n,parentId:e.folderId,folderId:e.folderId,name:e.name||"",label:e.label||e.name||"",icon:d?.icon||null,color:d?.color||null,status:e.status,assignees:e.assignees,tags:e.tags,img:null,subRows:[],subType:e.taskType||null,attrib:e.attrib,ownAttrib:e.ownAttrib,parents:e.parents||[],folder:e.parents?.[e.parents.length-1]||void 0,createdAt:e.createdAt,updatedAt:e.updatedAt,hasReviewables:e.hasReviewables||!1,links:O.linksToTableData(e.links,n,{folderTypes:i?.folderTypes||[],productTypes:Object.values(i.productTypes)||[],taskTypes:i?.taskTypes||[]}),subtasks:e.subtasks||[]}},$=({entities:e,entityType:q,groups:n=[],attribFields:i,showEmpty:o,groupRowFunc:d})=>{const g=U.useProjectContext(),h=E.useGetEntityTypeData({projectInfo:g}),f=P.useCallback((s,l)=>{const b=d?d(s):C(s,l,q,g,h);return{...b,id:s.id+_+l,subRows:b.subRows||[]}},[d,h,q,g]);return s=>{const l=new Map;for(const t of n){const r=t.value?.toString(),a=A(r),u=x(s.id,r,n);l.set(r,{id:a,name:r,entityType:"group",subRows:[],label:u.label,group:u,links:{}})}const b=A(p),T=()=>{let t=l.get(p);return t||(t={id:b,name:"Ungrouped",entityType:"group",subRows:[],label:"Ungrouped",group:{value:p,label:"Ungrouped"},links:{}},l.set(p,t)),t};(s.id==="tags"||s.id==="assignees"||s.id.startsWith("attrib."))&&T();for(const[t,r]of e){if(r.entityType!==q)continue;let a=[];if(s.id.startsWith("attrib.")){const u=s.id.split(".")[1];a=I(r.attrib?.[u])}else s.id==="folderType"&&"folder"in r?a=I(r.folder?.folderType):a=I(r[s.id]);a.length===0&&T().subRows?.push(f(r,p));for(const u of a){const y=l.get(u);y?y.subRows?.push(f(r,u)):T().subRows?.push(f(r,p))}if("groups"in r&&Array.isArray(r.groups)){for(const u of r.groups)if(u.hasNextPage&&l.has(u.value)){const m=l.get(u.value);m&&m.subRows?.push({id:`${u.value}-next-page`,name:"Load more tasks...",entityType:D,subRows:[],label:`Next page for ${u.value}`,group:{value:u.value,label:u.value},links:{}})}}}const v=Array.from(l.values()),G=W(s,g,i),R=s.desc?-1:1;v.sort((t,r)=>{if(t.group?.value===p)return 1;if(r.group?.value===p)return-1;if(G.length){const a=G.indexOf(t.group?.value||""),u=G.indexOf(r.group?.value||"");return a!==-1&&u!==-1?(a-u)*R:a!==-1?-1:u!==-1?1:(t.group?.label?.localeCompare(r.group?.label||"")||0)*R}else return(t.group?.label?.localeCompare(r.group?.label||"")||0)*R});const w=v.filter(t=>(t.group?.count??0)>0||(t.subRows?.length??0)>0||t.group?.value===p);return o?v:w}};exports.GROUP_BY_ID=c;exports.NEXT_PAGE_ID=D;exports.ROW_ID_SEPARATOR=_;exports.UNGROUPED_VALUE=p;exports.buildGroupId=A;exports.default=$;exports.isGroupId=N;exports.parseGroupId=S;
|
|
2
2
|
//# sourceMappingURL=useBuildGroupByTableData.cjs.js.map
|
package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBuildGroupByTableData.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.ts"],"sourcesContent":["// based on the groupBy field we take a flat list of items and group them\n// each group is a root node with subItems as the grouped items\n// any leftover items that do not match the groupBy field are added as a separate group (\"Ungrouped\")\n\nimport { EntityGroup } from '@shared/api'\nimport { TableGroupBy } from '../context'\nimport { EditorTaskNode, EntitiesMap, EntityMap, ProjectTableAttribute, TableRow } from '../types'\nimport { useGetEntityTypeData } from './useGetEntityTypeData'\nimport { useCallback } from 'react'\nimport { linksToTableData } from '../utils'\nimport { ProjectModelWithProducts, useProjectContext } from '@shared/context'\nexport type GroupByEntityType = 'task' | 'folder' | 'version' | 'product'\n\nexport type GroupData = {\n value: string\n label: string\n color?: string\n icon?: string\n img?: string\n count?: number\n}\n\nexport const NEXT_PAGE_ID = 'next-page'\nexport const UNGROUPED_VALUE = '_ungrouped'\nexport const ROW_ID_SEPARATOR = '__'\n\nconst valueToStringArray = (value?: any): string[] =>\n value ? (Array.isArray(value) ? value.map((v) => v.toString()) : [value.toString()]) : []\n\n// get group label, color and icon\nconst getGroupData = (groupById: string, groupValue: string, groups?: EntityGroup[]): GroupData => {\n if (!groups)\n return {\n value: groupValue,\n label: groupValue,\n }\n\n const group = groups.find((g) => g.value === groupValue)\n if (!group) {\n return {\n value: groupValue,\n label: groupValue,\n }\n } else {\n return {\n value: group.value,\n label: group.label || group.value,\n color: group.color,\n icon: group.icon,\n count: group.count,\n img: groupById === 'assignees' ? `/api/users/${group.value}/avatar` : undefined,\n }\n }\n}\n\nexport const GROUP_BY_ID = '_GROUP_'\nexport const buildGroupId = (value: string) => `${GROUP_BY_ID}${value}`\nexport const parseGroupId = (groupId: string): string | null => {\n if (!groupId.startsWith(GROUP_BY_ID)) return null\n return groupId.slice(GROUP_BY_ID.length) // +1 for the underscore\n}\nexport const isGroupId = (id: string): boolean => id.startsWith(GROUP_BY_ID)\n\ntype BuildGroupByTableProps = {\n entities: EntitiesMap\n entityType: string\n groups?: EntityGroup[]\n attribFields: ProjectTableAttribute[]\n showEmpty?: boolean\n groupRowFunc?: (node: any) => TableRow\n}\n\n// get sorting ids based on the groupBy field\nconst getSortingIds = (\n groupBy: TableGroupBy,\n project?: ProjectModelWithProducts,\n attribFields: ProjectTableAttribute[] = [],\n): string[] => {\n const attributeId = groupBy.id.replace('attrib.', '')\n\n // for status, taskType, folderType use project data order\n if (attributeId === 'status') {\n return project?.statuses?.map((s) => s.name) || []\n } else if (attributeId === 'taskType') {\n return project?.taskTypes?.map((t) => t.name) || []\n } else if (attributeId === 'folderType') {\n return project?.folderTypes?.map((f) => f.name) || []\n } else if (groupBy.id.startsWith('attrib.')) {\n // for other enum attributes, use the enum values order\n return (\n attribFields\n .find((field) => field.name === attributeId)\n ?.data.enum?.map((e) => e.value.toString()) || []\n )\n } else return []\n}\n\nconst defaultEntityToGroupRow = (\n task: EditorTaskNode,\n group: string | undefined,\n entityType: string,\n project: ProjectModelWithProducts,\n getEntityTypeData: ReturnType<typeof useGetEntityTypeData>,\n): TableRow & { subRows: TableRow[] } => {\n const typeData = getEntityTypeData(entityType, task.taskType)\n return {\n id: task.id + ROW_ID_SEPARATOR + group, // unique id for the task in the folder\n entityId: task.id,\n entityType: entityType,\n parentId: task.folderId,\n folderId: task.folderId,\n name: task.name || '',\n label: task.label || task.name || '',\n icon: typeData?.icon || null,\n color: typeData?.color || null,\n status: task.status,\n assignees: task.assignees,\n tags: task.tags,\n img: null,\n subRows: [],\n subType: task.taskType || null,\n attrib: task.attrib,\n ownAttrib: task.ownAttrib,\n parents: task.parents || [],\n folder: task.parents?.[task.parents.length - 1] || undefined,\n createdAt: task.createdAt,\n updatedAt: task.updatedAt,\n hasReviewables: task.hasReviewables || false,\n links: linksToTableData(task.links, entityType, {\n folderTypes: project?.folderTypes || [],\n productTypes: Object.values(project.productTypes) || [],\n taskTypes: project?.taskTypes || [],\n }),\n subtasks: task.subtasks || [],\n }\n}\n\nconst useBuildGroupByTableData = ({\n entities,\n entityType,\n groups = [],\n attribFields,\n showEmpty,\n groupRowFunc, // for versions etc\n}: BuildGroupByTableProps) => {\n const project = useProjectContext()\n const getEntityTypeData = useGetEntityTypeData({ projectInfo: project })\n\n const entityToGroupRow = useCallback(\n (task: EditorTaskNode, group?: string): TableRow & { subRows: TableRow[] } => {\n // Use provided groupRowFunc or fall back to default\n const baseRow = groupRowFunc\n ? groupRowFunc(task)\n : defaultEntityToGroupRow(task, group, entityType, project, getEntityTypeData)\n\n // Ensure group-specific fields are set\n return {\n ...baseRow,\n id: task.id + ROW_ID_SEPARATOR + group, // unique id for the task in the group\n subRows: baseRow.subRows || [],\n }\n },\n [groupRowFunc, getEntityTypeData, entityType, project],\n )\n\n const buildGroupByTableData = (groupBy: TableGroupBy): TableRow[] => {\n const groupsMap = new Map<string, TableRow>()\n\n for (const group of groups) {\n const groupValue = group.value?.toString() as string\n const groupId = buildGroupId(groupValue)\n const groupData = getGroupData(groupBy.id, groupValue, groups)\n groupsMap.set(groupValue, {\n id: groupId,\n name: groupValue,\n entityType: 'group',\n subRows: [],\n label: groupData.label,\n group: groupData,\n links: {},\n })\n }\n\n const ungroupedId = GROUP_BY_ID + '.' + UNGROUPED_VALUE // unique id for ungrouped group\n // gets the \"Ungrouped\" group, creating it if it doesn't exist\n const getUnGroupedGroup = () => {\n let ungroupedGroup = groupsMap.get(ungroupedId)\n if (!ungroupedGroup) {\n ungroupedGroup = {\n id: ungroupedId,\n name: 'Ungrouped',\n entityType: 'group',\n subRows: [],\n label: 'Ungrouped',\n group: { value: ungroupedId, label: 'Ungrouped' },\n links: {},\n }\n // create ungrouped group if it doesn't exist\n groupsMap.set(ungroupedId, ungroupedGroup)\n }\n return ungroupedGroup\n }\n\n for (const [id, entity] of entities) {\n // if the entity is not of the specified type, skip it\n if (entity.entityType !== entityType) continue\n // add entities to specific group\n let groupValues: string[] = []\n if (groupBy.id.startsWith('attrib.')) {\n // for attribute based grouping, get the value of the attribute\n const attributeId = groupBy.id.split('.')[1]\n groupValues = valueToStringArray(entity.attrib?.[attributeId])\n } else if (groupBy.id === 'folderType' && 'folder' in entity) {\n // folderType is nested under folder for task entities (from TaskPropsFragment)\n groupValues = valueToStringArray(\n (entity as EditorTaskNode & { folder?: { folderType?: string } }).folder?.folderType,\n )\n } else {\n groupValues = valueToStringArray(entity[groupBy.id as keyof EntityMap])\n }\n\n // if there are no values, add to \"Ungrouped\" group\n if (groupValues.length === 0) {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows?.push(entityToGroupRow(entity as EditorTaskNode, UNGROUPED_VALUE))\n }\n // for each group value, find it's group and add the entity to it\n // if we can't find the group, add it to \"Ungrouped\"\n for (const groupValue of groupValues) {\n const groupRow = groupsMap.get(groupValue)\n if (groupRow) {\n groupRow.subRows?.push(entityToGroupRow(entity as EditorTaskNode, groupValue))\n } else {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows?.push(entityToGroupRow(entity as EditorTaskNode, UNGROUPED_VALUE))\n }\n }\n\n // for groups metadata on entity, check if there is a next page\n if ('groups' in entity && Array.isArray(entity.groups)) {\n for (const group of entity.groups) {\n const hasNextPageGroup = group.hasNextPage\n if (hasNextPageGroup && groupsMap.has(group.value)) {\n // add a next page row to the group\n const groupRow = groupsMap.get(group.value)\n if (groupRow) {\n groupRow.subRows?.push({\n id: `${group.value}-next-page`,\n name: `Load more tasks...`,\n entityType: NEXT_PAGE_ID,\n subRows: [],\n label: `Next page for ${group.value}`,\n group: { value: group.value, label: group.value },\n links: {},\n })\n }\n }\n }\n }\n }\n\n const groupsList = Array.from(groupsMap.values())\n\n const attribSortingIds = getSortingIds(groupBy, project, attribFields)\n\n // sort the groups by their label\n // if the group is an attribute with enum values, sort by the enum values\n const sortDirection = groupBy.desc ? -1 : 1\n groupsList.sort((a, b) => {\n if (a.group?.value === ungroupedId) return 1 // \"Ungrouped\" should always be last\n if (b.group?.value === ungroupedId) return -1 // \"Ungrouped\" should always be last\n if (attribSortingIds.length) {\n // sort by index of the enum value\n const indexA = attribSortingIds.indexOf(a.group?.value || '')\n const indexB = attribSortingIds.indexOf(b.group?.value || '')\n if (indexA !== -1 && indexB !== -1) {\n return (indexA - indexB) * sortDirection\n }\n if (indexA !== -1) return -1 // a is in the enum, b is not\n if (indexB !== -1) return 1 // b is in the enum, a is not\n // if both are not in the enum, sort by label\n return (a.group?.label?.localeCompare(b.group?.label || '') || 0) * sortDirection\n } else {\n // for other groupings, sort by the group label\n return (a.group?.label?.localeCompare(b.group?.label || '') || 0) * sortDirection\n }\n })\n\n // filter out empty groups\n const nonEmptyGroups = groupsList.filter((group) => group.group?.count && group.group.count > 0)\n\n return showEmpty ? groupsList : nonEmptyGroups\n }\n\n return buildGroupByTableData\n}\n\nexport default useBuildGroupByTableData\n"],"names":["NEXT_PAGE_ID","UNGROUPED_VALUE","ROW_ID_SEPARATOR","valueToStringArray","value","v","getGroupData","groupById","groupValue","groups","group","g","GROUP_BY_ID","buildGroupId","parseGroupId","groupId","isGroupId","id","getSortingIds","groupBy","project","attribFields","attributeId","s","f","field","e","defaultEntityToGroupRow","task","entityType","getEntityTypeData","typeData","linksToTableData","useBuildGroupByTableData","entities","showEmpty","groupRowFunc","useProjectContext","useGetEntityTypeData","entityToGroupRow","useCallback","baseRow","groupsMap","groupData","ungroupedId","getUnGroupedGroup","ungroupedGroup","entity","groupValues","groupRow","groupsList","attribSortingIds","sortDirection","a","b","indexA","indexB","nonEmptyGroups"],"mappings":"87gBAsBaA,EAAe,YACfC,EAAkB,aAClBC,EAAmB,KAE1BC,EAAsBC,GAC1BA,EAAS,MAAM,QAAQA,CAAK,EAAIA,EAAM,IAAKC,GAAMA,EAAE,UAAU,EAAI,CAACD,EAAM,SAAA,CAAU,EAAK,CAAA,EAGnFE,EAAe,CAACC,EAAmBC,EAAoBC,IAAsC,CACjG,GAAI,CAACA,EACH,MAAO,CACL,MAAOD,EACP,MAAOA,CAAA,EAGX,MAAME,EAAQD,EAAO,KAAME,GAAMA,EAAE,QAAUH,CAAU,EACvD,OAAKE,EAMI,CACL,MAAOA,EAAM,MACb,MAAOA,EAAM,OAASA,EAAM,MAC5B,MAAOA,EAAM,MACb,KAAMA,EAAM,KACZ,MAAOA,EAAM,MACb,IAAKH,IAAc,YAAc,cAAcG,EAAM,KAAK,UAAY,MAAA,EAXjE,CACL,MAAOF,EACP,MAAOA,CAAA,CAYb,EAEaI,EAAc,UACdC,EAAgBT,GAAkB,GAAGQ,CAAW,GAAGR,CAAK,GACxDU,EAAgBC,GACtBA,EAAQ,WAAWH,CAAW,EAC5BG,EAAQ,MAAMH,EAAY,MAAM,EADM,KAGlCI,EAAaC,GAAwBA,EAAG,WAAWL,CAAW,EAYrEM,EAAgB,CACpBC,EACAC,EACAC,EAAwC,CAAA,IAC3B,CACb,MAAMC,EAAcH,EAAQ,GAAG,QAAQ,UAAW,EAAE,EAGpD,OAAIG,IAAgB,SACXF,GAAS,UAAU,IAAKG,GAAMA,EAAE,IAAI,GAAK,CAAA,EACvCD,IAAgB,WAClBF,GAAS,WAAW,IAAK,GAAM,EAAE,IAAI,GAAK,CAAA,EACxCE,IAAgB,aAClBF,GAAS,aAAa,IAAKI,GAAMA,EAAE,IAAI,GAAK,CAAA,EAC1CL,EAAQ,GAAG,WAAW,SAAS,EAGtCE,EACG,KAAMI,GAAUA,EAAM,OAASH,CAAW,GACzC,KAAK,MAAM,IAAKI,GAAMA,EAAE,MAAM,SAAA,CAAU,GAAK,CAAA,EAEvC,CAAA,CAChB,EAEMC,EAA0B,CAC9BC,EACAlB,EACAmB,EACAT,EACAU,IACuC,CACvC,MAAMC,EAAWD,EAAkBD,EAAYD,EAAK,QAAQ,EAC5D,MAAO,CACL,GAAIA,EAAK,GAAK1B,EAAmBQ,EACjC,SAAUkB,EAAK,GACf,WAAAC,EACA,SAAUD,EAAK,SACf,SAAUA,EAAK,SACf,KAAMA,EAAK,MAAQ,GACnB,MAAOA,EAAK,OAASA,EAAK,MAAQ,GAClC,KAAMG,GAAU,MAAQ,KACxB,MAAOA,GAAU,OAAS,KAC1B,OAAQH,EAAK,OACb,UAAWA,EAAK,UAChB,KAAMA,EAAK,KACX,IAAK,KACL,QAAS,CAAA,EACT,QAASA,EAAK,UAAY,KAC1B,OAAQA,EAAK,OACb,UAAWA,EAAK,UAChB,QAASA,EAAK,SAAW,CAAA,EACzB,OAAQA,EAAK,UAAUA,EAAK,QAAQ,OAAS,CAAC,GAAK,OACnD,UAAWA,EAAK,UAChB,UAAWA,EAAK,UAChB,eAAgBA,EAAK,gBAAkB,GACvC,MAAOI,EAAAA,iBAAiBJ,EAAK,MAAOC,EAAY,CAC9C,YAAaT,GAAS,aAAe,CAAA,EACrC,aAAc,OAAO,OAAOA,EAAQ,YAAY,GAAK,CAAA,EACrD,UAAWA,GAAS,WAAa,CAAA,CAAC,CACnC,EACD,SAAUQ,EAAK,UAAY,CAAA,CAAC,CAEhC,EAEMK,EAA2B,CAAC,CAChC,SAAAC,EACA,WAAAL,EACA,OAAApB,EAAS,CAAA,EACT,aAAAY,EACA,UAAAc,EACA,aAAAC,CACF,IAA8B,CAC5B,MAAMhB,EAAUiB,EAAAA,kBAAA,EACVP,EAAoBQ,EAAAA,qBAAqB,CAAE,YAAalB,EAAS,EAEjEmB,EAAmBC,EAAAA,YACvB,CAACZ,EAAsBlB,IAAuD,CAE5E,MAAM+B,EAAUL,EACZA,EAAaR,CAAI,EACjBD,EAAwBC,EAAMlB,EAAOmB,EAAYT,EAASU,CAAiB,EAG/E,MAAO,CACL,GAAGW,EACH,GAAIb,EAAK,GAAK1B,EAAmBQ,EACjC,QAAS+B,EAAQ,SAAW,CAAA,CAAC,CAEjC,EACA,CAACL,EAAcN,EAAmBD,EAAYT,CAAO,CAAA,EAoIvD,OAjI+BD,GAAsC,CACnE,MAAMuB,MAAgB,IAEtB,UAAWhC,KAASD,EAAQ,CAC1B,MAAMD,EAAaE,EAAM,OAAO,SAAA,EAC1BK,EAAUF,EAAaL,CAAU,EACjCmC,EAAYrC,EAAaa,EAAQ,GAAIX,EAAYC,CAAM,EAC7DiC,EAAU,IAAIlC,EAAY,CACxB,GAAIO,EACJ,KAAMP,EACN,WAAY,QACZ,QAAS,CAAA,EACT,MAAOmC,EAAU,MACjB,MAAOA,EACP,MAAO,CAAA,CAAC,CACT,CACH,CAEA,MAAMC,EAAchC,EAAc,IAAMX,EAElC4C,EAAoB,IAAM,CAC9B,IAAIC,EAAiBJ,EAAU,IAAIE,CAAW,EAC9C,OAAKE,IACHA,EAAiB,CACf,GAAIF,EACJ,KAAM,YACN,WAAY,QACZ,QAAS,CAAA,EACT,MAAO,YACP,MAAO,CAAE,MAAOA,EAAa,MAAO,WAAA,EACpC,MAAO,CAAA,CAAC,EAGVF,EAAU,IAAIE,EAAaE,CAAc,GAEpCA,CACT,EAEA,SAAW,CAAC7B,EAAI8B,CAAM,IAAKb,EAAU,CAEnC,GAAIa,EAAO,aAAelB,EAAY,SAEtC,IAAImB,EAAwB,CAAA,EAC5B,GAAI7B,EAAQ,GAAG,WAAW,SAAS,EAAG,CAEpC,MAAMG,EAAcH,EAAQ,GAAG,MAAM,GAAG,EAAE,CAAC,EAC3C6B,EAAc7C,EAAmB4C,EAAO,SAASzB,CAAW,CAAC,CAC/D,MAAWH,EAAQ,KAAO,cAAgB,WAAY4B,EAEpDC,EAAc7C,EACX4C,EAAiE,QAAQ,UAAA,EAG5EC,EAAc7C,EAAmB4C,EAAO5B,EAAQ,EAAqB,CAAC,EAIpE6B,EAAY,SAAW,GACFH,EAAA,EACR,SAAS,KAAKN,EAAiBQ,EAA0B9C,CAAe,CAAC,EAI1F,UAAWO,KAAcwC,EAAa,CACpC,MAAMC,EAAWP,EAAU,IAAIlC,CAAU,EACrCyC,EACFA,EAAS,SAAS,KAAKV,EAAiBQ,EAA0BvC,CAAU,CAAC,EAEtDqC,EAAA,EACR,SAAS,KAAKN,EAAiBQ,EAA0B9C,CAAe,CAAC,CAE5F,CAGA,GAAI,WAAY8C,GAAU,MAAM,QAAQA,EAAO,MAAM,GACnD,UAAWrC,KAASqC,EAAO,OAEzB,GADyBrC,EAAM,aACPgC,EAAU,IAAIhC,EAAM,KAAK,EAAG,CAElD,MAAMuC,EAAWP,EAAU,IAAIhC,EAAM,KAAK,EACtCuC,GACFA,EAAS,SAAS,KAAK,CACrB,GAAI,GAAGvC,EAAM,KAAK,aAClB,KAAM,qBACN,WAAYV,EACZ,QAAS,CAAA,EACT,MAAO,iBAAiBU,EAAM,KAAK,GACnC,MAAO,CAAE,MAAOA,EAAM,MAAO,MAAOA,EAAM,KAAA,EAC1C,MAAO,CAAA,CAAC,CACT,CAEL,EAGN,CAEA,MAAMwC,EAAa,MAAM,KAAKR,EAAU,QAAQ,EAE1CS,EAAmBjC,EAAcC,EAASC,EAASC,CAAY,EAI/D+B,EAAgBjC,EAAQ,KAAO,GAAK,EAC1C+B,EAAW,KAAK,CAACG,EAAGC,IAAM,CACxB,GAAID,EAAE,OAAO,QAAUT,EAAa,MAAO,GAC3C,GAAIU,EAAE,OAAO,QAAUV,EAAa,MAAO,GAC3C,GAAIO,EAAiB,OAAQ,CAE3B,MAAMI,EAASJ,EAAiB,QAAQE,EAAE,OAAO,OAAS,EAAE,EACtDG,EAASL,EAAiB,QAAQG,EAAE,OAAO,OAAS,EAAE,EAC5D,OAAIC,IAAW,IAAMC,IAAW,IACtBD,EAASC,GAAUJ,EAEzBG,IAAW,GAAW,GACtBC,IAAW,GAAW,GAElBH,EAAE,OAAO,OAAO,cAAcC,EAAE,OAAO,OAAS,EAAE,GAAK,GAAKF,CACtE,KAEE,QAAQC,EAAE,OAAO,OAAO,cAAcC,EAAE,OAAO,OAAS,EAAE,GAAK,GAAKF,CAExE,CAAC,EAGD,MAAMK,EAAiBP,EAAW,OAAQxC,GAAUA,EAAM,OAAO,OAASA,EAAM,MAAM,MAAQ,CAAC,EAE/F,OAAOyB,EAAYe,EAAaO,CAClC,CAGF"}
|
|
1
|
+
{"version":3,"file":"useBuildGroupByTableData.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.ts"],"sourcesContent":["// based on the groupBy field we take a flat list of items and group them\n// each group is a root node with subItems as the grouped items\n// any leftover items that do not match the groupBy field are added as a separate group (\"Ungrouped\")\n\nimport { EntityGroup } from '@shared/api'\nimport { TableGroupBy } from '../context'\nimport { EditorTaskNode, EntitiesMap, EntityMap, ProjectTableAttribute, TableRow } from '../types'\nimport { useGetEntityTypeData } from './useGetEntityTypeData'\nimport { useCallback } from 'react'\nimport { linksToTableData } from '../utils'\nimport { ProjectModelWithProducts, useProjectContext } from '@shared/context'\nexport type GroupByEntityType = 'task' | 'folder' | 'version' | 'product'\n\nexport type GroupData = {\n value: string\n label: string\n color?: string\n icon?: string\n img?: string\n count?: number\n}\n\nexport const NEXT_PAGE_ID = 'next-page'\nexport const UNGROUPED_VALUE = '_ungrouped'\nexport const ROW_ID_SEPARATOR = '__'\n\nconst valueToStringArray = (value?: any): string[] =>\n value ? (Array.isArray(value) ? value.map((v) => v.toString()) : [value.toString()]) : []\n\n// get group label, color and icon\nconst getGroupData = (groupById: string, groupValue: string, groups?: EntityGroup[]): GroupData => {\n if (!groups)\n return {\n value: groupValue,\n label: groupValue,\n }\n\n const group = groups.find((g) => g.value === groupValue)\n if (!group) {\n return {\n value: groupValue,\n label: groupValue,\n }\n } else {\n return {\n value: group.value,\n label: group.label || group.value,\n color: group.color,\n icon: group.icon,\n count: group.count,\n img: groupById === 'assignees' ? `/api/users/${group.value}/avatar` : undefined,\n }\n }\n}\n\nexport const GROUP_BY_ID = '_GROUP_'\nexport const buildGroupId = (value: string) => `${GROUP_BY_ID}${value}`\nexport const parseGroupId = (groupId: string): string | null => {\n if (!groupId.startsWith(GROUP_BY_ID)) return null\n return groupId.slice(GROUP_BY_ID.length) // +1 for the underscore\n}\nexport const isGroupId = (id: string): boolean => id.startsWith(GROUP_BY_ID)\n\ntype BuildGroupByTableProps = {\n entities: EntitiesMap\n entityType: string\n groups?: EntityGroup[]\n attribFields: ProjectTableAttribute[]\n showEmpty?: boolean\n groupRowFunc?: (node: any) => TableRow\n}\n\n// get sorting ids based on the groupBy field\nconst getSortingIds = (\n groupBy: TableGroupBy,\n project?: ProjectModelWithProducts,\n attribFields: ProjectTableAttribute[] = [],\n): string[] => {\n const attributeId = groupBy.id.replace('attrib.', '')\n\n // for status, taskType, folderType use project data order\n if (attributeId === 'status') {\n return project?.statuses?.map((s) => s.name) || []\n } else if (attributeId === 'taskType') {\n return project?.taskTypes?.map((t) => t.name) || []\n } else if (attributeId === 'folderType') {\n return project?.folderTypes?.map((f) => f.name) || []\n } else if (groupBy.id.startsWith('attrib.')) {\n // for other enum attributes, use the enum values order\n return (\n attribFields\n .find((field) => field.name === attributeId)\n ?.data.enum?.map((e) => e.value.toString()) || []\n )\n } else return []\n}\n\nconst defaultEntityToGroupRow = (\n task: EditorTaskNode,\n group: string | undefined,\n entityType: string,\n project: ProjectModelWithProducts,\n getEntityTypeData: ReturnType<typeof useGetEntityTypeData>,\n): TableRow & { subRows: TableRow[] } => {\n const typeData = getEntityTypeData(entityType, task.taskType)\n return {\n id: task.id + ROW_ID_SEPARATOR + group, // unique id for the task in the folder\n entityId: task.id,\n entityType: entityType,\n parentId: task.folderId,\n folderId: task.folderId,\n name: task.name || '',\n label: task.label || task.name || '',\n icon: typeData?.icon || null,\n color: typeData?.color || null,\n status: task.status,\n assignees: task.assignees,\n tags: task.tags,\n img: null,\n subRows: [],\n subType: task.taskType || null,\n attrib: task.attrib,\n ownAttrib: task.ownAttrib,\n parents: task.parents || [],\n folder: task.parents?.[task.parents.length - 1] || undefined,\n createdAt: task.createdAt,\n updatedAt: task.updatedAt,\n hasReviewables: task.hasReviewables || false,\n links: linksToTableData(task.links, entityType, {\n folderTypes: project?.folderTypes || [],\n productTypes: Object.values(project.productTypes) || [],\n taskTypes: project?.taskTypes || [],\n }),\n subtasks: task.subtasks || [],\n }\n}\n\nconst useBuildGroupByTableData = ({\n entities,\n entityType,\n groups = [],\n attribFields,\n showEmpty,\n groupRowFunc, // for versions etc\n}: BuildGroupByTableProps) => {\n const project = useProjectContext()\n const getEntityTypeData = useGetEntityTypeData({ projectInfo: project })\n\n const entityToGroupRow = useCallback(\n (task: EditorTaskNode, group?: string): TableRow & { subRows: TableRow[] } => {\n // Use provided groupRowFunc or fall back to default\n const baseRow = groupRowFunc\n ? groupRowFunc(task)\n : defaultEntityToGroupRow(task, group, entityType, project, getEntityTypeData)\n\n // Ensure group-specific fields are set\n return {\n ...baseRow,\n id: task.id + ROW_ID_SEPARATOR + group, // unique id for the task in the group\n subRows: baseRow.subRows || [],\n }\n },\n [groupRowFunc, getEntityTypeData, entityType, project],\n )\n\n const buildGroupByTableData = (groupBy: TableGroupBy): TableRow[] => {\n const groupsMap = new Map<string, TableRow>()\n\n for (const group of groups) {\n const groupValue = group.value?.toString() as string\n const groupId = buildGroupId(groupValue)\n const groupData = getGroupData(groupBy.id, groupValue, groups)\n groupsMap.set(groupValue, {\n id: groupId,\n name: groupValue,\n entityType: 'group',\n subRows: [],\n label: groupData.label,\n group: groupData,\n links: {},\n })\n }\n\n const ungroupedId = buildGroupId(UNGROUPED_VALUE)\n // gets the \"Ungrouped\" group, creating it if it doesn't exist\n const getUnGroupedGroup = () => {\n let ungroupedGroup = groupsMap.get(UNGROUPED_VALUE)\n if (!ungroupedGroup) {\n ungroupedGroup = {\n id: ungroupedId,\n name: 'Ungrouped',\n entityType: 'group',\n subRows: [],\n label: 'Ungrouped',\n group: { value: UNGROUPED_VALUE, label: 'Ungrouped' },\n links: {},\n }\n // create ungrouped group if it doesn't exist\n groupsMap.set(UNGROUPED_VALUE, ungroupedGroup)\n }\n return ungroupedGroup\n }\n\n const canHaveUngrouped =\n groupBy.id === 'tags' || groupBy.id === 'assignees' || groupBy.id.startsWith('attrib.')\n if (canHaveUngrouped) getUnGroupedGroup()\n\n for (const [id, entity] of entities) {\n // if the entity is not of the specified type, skip it\n if (entity.entityType !== entityType) continue\n // add entities to specific group\n let groupValues: string[] = []\n if (groupBy.id.startsWith('attrib.')) {\n // for attribute based grouping, get the value of the attribute\n const attributeId = groupBy.id.split('.')[1]\n groupValues = valueToStringArray(entity.attrib?.[attributeId])\n } else if (groupBy.id === 'folderType' && 'folder' in entity) {\n // folderType is nested under folder for task entities (from TaskPropsFragment)\n groupValues = valueToStringArray(\n (entity as EditorTaskNode & { folder?: { folderType?: string } }).folder?.folderType,\n )\n } else {\n groupValues = valueToStringArray(entity[groupBy.id as keyof EntityMap])\n }\n\n // if there are no values, add to \"Ungrouped\" group\n if (groupValues.length === 0) {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows?.push(entityToGroupRow(entity as EditorTaskNode, UNGROUPED_VALUE))\n }\n // for each group value, find it's group and add the entity to it\n // if we can't find the group, add it to \"Ungrouped\"\n for (const groupValue of groupValues) {\n const groupRow = groupsMap.get(groupValue)\n if (groupRow) {\n groupRow.subRows?.push(entityToGroupRow(entity as EditorTaskNode, groupValue))\n } else {\n const ungroupedGroup = getUnGroupedGroup()\n ungroupedGroup.subRows?.push(entityToGroupRow(entity as EditorTaskNode, UNGROUPED_VALUE))\n }\n }\n\n // for groups metadata on entity, check if there is a next page\n if ('groups' in entity && Array.isArray(entity.groups)) {\n for (const group of entity.groups) {\n const hasNextPageGroup = group.hasNextPage\n if (hasNextPageGroup && groupsMap.has(group.value)) {\n // add a next page row to the group\n const groupRow = groupsMap.get(group.value)\n if (groupRow) {\n groupRow.subRows?.push({\n id: `${group.value}-next-page`,\n name: `Load more tasks...`,\n entityType: NEXT_PAGE_ID,\n subRows: [],\n label: `Next page for ${group.value}`,\n group: { value: group.value, label: group.value },\n links: {},\n })\n }\n }\n }\n }\n }\n\n const groupsList = Array.from(groupsMap.values())\n\n const attribSortingIds = getSortingIds(groupBy, project, attribFields)\n\n // sort the groups by their label\n // if the group is an attribute with enum values, sort by the enum values\n const sortDirection = groupBy.desc ? -1 : 1\n groupsList.sort((a, b) => {\n if (a.group?.value === UNGROUPED_VALUE) return 1 // \"Ungrouped\" should always be last\n if (b.group?.value === UNGROUPED_VALUE) return -1 // \"Ungrouped\" should always be last\n if (attribSortingIds.length) {\n // sort by index of the enum value\n const indexA = attribSortingIds.indexOf(a.group?.value || '')\n const indexB = attribSortingIds.indexOf(b.group?.value || '')\n if (indexA !== -1 && indexB !== -1) {\n return (indexA - indexB) * sortDirection\n }\n if (indexA !== -1) return -1 // a is in the enum, b is not\n if (indexB !== -1) return 1 // b is in the enum, a is not\n // if both are not in the enum, sort by label\n return (a.group?.label?.localeCompare(b.group?.label || '') || 0) * sortDirection\n } else {\n // for other groupings, sort by the group label\n return (a.group?.label?.localeCompare(b.group?.label || '') || 0) * sortDirection\n }\n })\n\n // filter out empty groups — Ungrouped has no server count, keep it reachable\n const nonEmptyGroups = groupsList.filter(\n (group) =>\n (group.group?.count ?? 0) > 0 ||\n (group.subRows?.length ?? 0) > 0 ||\n group.group?.value === UNGROUPED_VALUE,\n )\n\n return showEmpty ? groupsList : nonEmptyGroups\n }\n\n return buildGroupByTableData\n}\n\nexport default useBuildGroupByTableData\n"],"names":["NEXT_PAGE_ID","UNGROUPED_VALUE","ROW_ID_SEPARATOR","valueToStringArray","value","v","getGroupData","groupById","groupValue","groups","group","g","GROUP_BY_ID","buildGroupId","parseGroupId","groupId","isGroupId","id","getSortingIds","groupBy","project","attribFields","attributeId","s","t","f","field","e","defaultEntityToGroupRow","task","entityType","getEntityTypeData","typeData","linksToTableData","useBuildGroupByTableData","entities","showEmpty","groupRowFunc","useProjectContext","useGetEntityTypeData","entityToGroupRow","useCallback","baseRow","groupsMap","groupData","ungroupedId","getUnGroupedGroup","ungroupedGroup","entity","groupValues","groupRow","groupsList","attribSortingIds","sortDirection","a","b","indexA","indexB","nonEmptyGroups"],"mappings":"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"}
|