@focus-reactive/payload-plugin-comments 1.1.0 → 1.2.0
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/README.md +8 -6
- package/dist/api/mutations/useAddCommentMutation.d.ts +18 -0
- package/dist/api/mutations/useAddCommentMutation.d.ts.map +1 -0
- package/dist/api/mutations/useAddCommentMutation.js +52 -0
- package/dist/api/mutations/useAddCommentMutation.js.map +1 -0
- package/dist/api/mutations/useDeleteCommentMutation.d.ts +11 -0
- package/dist/api/mutations/useDeleteCommentMutation.d.ts.map +1 -0
- package/dist/api/mutations/useDeleteCommentMutation.js +31 -0
- package/dist/api/mutations/useDeleteCommentMutation.js.map +1 -0
- package/dist/api/mutations/useResolveCommentMutation.d.ts +13 -0
- package/dist/api/mutations/useResolveCommentMutation.d.ts.map +1 -0
- package/dist/api/mutations/useResolveCommentMutation.js +41 -0
- package/dist/api/mutations/useResolveCommentMutation.js.map +1 -0
- package/dist/api/queries/useCommentsQuery.d.ts +3 -0
- package/dist/api/queries/useCommentsQuery.d.ts.map +1 -0
- package/dist/api/queries/useCommentsQuery.js +40 -0
- package/dist/api/queries/useCommentsQuery.js.map +1 -0
- package/dist/api/queries/useDocumentTitlesQuery.d.ts +3 -0
- package/dist/api/queries/useDocumentTitlesQuery.d.ts.map +1 -0
- package/dist/api/queries/useDocumentTitlesQuery.js +32 -0
- package/dist/api/queries/useDocumentTitlesQuery.js.map +1 -0
- package/dist/api/queries/useFieldLabelsQuery.d.ts +3 -0
- package/dist/api/queries/useFieldLabelsQuery.d.ts.map +1 -0
- package/dist/api/queries/useFieldLabelsQuery.js +23 -0
- package/dist/api/queries/useFieldLabelsQuery.js.map +1 -0
- package/dist/api/queries/useMentionableUsersQuery.d.ts +2 -0
- package/dist/api/queries/useMentionableUsersQuery.d.ts.map +1 -0
- package/dist/api/queries/useMentionableUsersQuery.js +25 -0
- package/dist/api/queries/useMentionableUsersQuery.js.map +1 -0
- package/dist/api/queryKeys.d.ts +23 -0
- package/dist/api/queryKeys.d.ts.map +1 -0
- package/dist/api/queryKeys.js +40 -0
- package/dist/api/queryKeys.js.map +1 -0
- package/dist/components/CommentEditor/ActionPanel.d.ts +1 -1
- package/dist/components/CommentEditor/ActionPanel.d.ts.map +1 -1
- package/dist/components/CommentEditor/ActionPanel.js +18 -3
- package/dist/components/CommentEditor/ActionPanel.js.map +1 -1
- package/dist/components/CommentEditor/index.d.ts.map +1 -1
- package/dist/components/CommentEditor/index.js +5 -3
- package/dist/components/CommentEditor/index.js.map +1 -1
- package/dist/components/CommentItem/StrikethoroughOverlay/clamp.d.ts +2 -0
- package/dist/components/CommentItem/StrikethoroughOverlay/clamp.d.ts.map +1 -0
- package/dist/components/CommentItem/StrikethoroughOverlay/clamp.js +7 -0
- package/dist/components/CommentItem/StrikethoroughOverlay/clamp.js.map +1 -0
- package/dist/components/CommentItem/StrikethoroughOverlay/index.d.ts +8 -0
- package/dist/components/CommentItem/StrikethoroughOverlay/index.d.ts.map +1 -0
- package/dist/components/CommentItem/StrikethoroughOverlay/index.js +24 -0
- package/dist/components/CommentItem/StrikethoroughOverlay/index.js.map +1 -0
- package/dist/components/CommentItem/StrikethoroughOverlay/measureLineRects.d.ts +3 -0
- package/dist/components/CommentItem/StrikethoroughOverlay/measureLineRects.d.ts.map +1 -0
- package/dist/components/CommentItem/StrikethoroughOverlay/measureLineRects.js +29 -0
- package/dist/components/CommentItem/StrikethoroughOverlay/measureLineRects.js.map +1 -0
- package/dist/components/CommentItem/StrikethoroughOverlay/useStrikethroughAnimation.d.ts +7 -0
- package/dist/components/CommentItem/StrikethoroughOverlay/useStrikethroughAnimation.d.ts.map +1 -0
- package/dist/components/CommentItem/StrikethoroughOverlay/useStrikethroughAnimation.js +114 -0
- package/dist/components/CommentItem/StrikethoroughOverlay/useStrikethroughAnimation.js.map +1 -0
- package/dist/components/CommentItem/index.d.ts.map +1 -1
- package/dist/components/CommentItem/index.js +37 -18
- package/dist/components/CommentItem/index.js.map +1 -1
- package/dist/components/CommentsDrawer/components/Header.d.ts.map +1 -1
- package/dist/components/CommentsDrawer/components/Header.js +4 -33
- package/dist/components/CommentsDrawer/components/Header.js.map +1 -1
- package/dist/components/CommentsHeaderButton/index.js +2 -2
- package/dist/components/CommentsHeaderButton/index.js.map +1 -1
- package/dist/components/CommentsPanel/components/CollapsibleGroup.d.ts +7 -2
- package/dist/components/CommentsPanel/components/CollapsibleGroup.d.ts.map +1 -1
- package/dist/components/CommentsPanel/components/CollapsibleGroup.js +7 -2
- package/dist/components/CommentsPanel/components/CollapsibleGroup.js.map +1 -1
- package/dist/components/CommentsPanel/components/DocumentView.d.ts.map +1 -1
- package/dist/components/CommentsPanel/components/DocumentView.js +11 -9
- package/dist/components/CommentsPanel/components/DocumentView.js.map +1 -1
- package/dist/components/CommentsPanel/components/FieldGroupSection.d.ts.map +1 -1
- package/dist/components/CommentsPanel/components/FieldGroupSection.js +44 -22
- package/dist/components/CommentsPanel/components/FieldGroupSection.js.map +1 -1
- package/dist/components/CommentsPanel/components/GlobalDocumentView.d.ts.map +1 -1
- package/dist/components/CommentsPanel/components/GlobalDocumentView.js +3 -9
- package/dist/components/CommentsPanel/components/GlobalDocumentView.js.map +1 -1
- package/dist/components/CommentsPanel/components/GlobalView.d.ts.map +1 -1
- package/dist/components/CommentsPanel/components/GlobalView.js +38 -41
- package/dist/components/CommentsPanel/components/GlobalView.js.map +1 -1
- package/dist/components/CommentsPanel/hooks/useCollapseState.d.ts +1 -1
- package/dist/components/CommentsPanel/hooks/useCollapseState.d.ts.map +1 -1
- package/dist/components/CommentsPanel/hooks/useCollapseState.js +4 -1
- package/dist/components/CommentsPanel/hooks/useCollapseState.js.map +1 -1
- package/dist/components/CommentsPanel/index.d.ts.map +1 -1
- package/dist/components/CommentsPanel/index.js +14 -11
- package/dist/components/CommentsPanel/index.js.map +1 -1
- package/dist/components/FieldCommentLabel/hooks/useFieldBreadcrumb.d.ts +2 -0
- package/dist/components/FieldCommentLabel/hooks/useFieldBreadcrumb.d.ts.map +1 -0
- package/dist/components/FieldCommentLabel/hooks/useFieldBreadcrumb.js +52 -0
- package/dist/components/FieldCommentLabel/hooks/useFieldBreadcrumb.js.map +1 -0
- package/dist/components/FieldCommentLabel/index.d.ts +1 -1
- package/dist/components/FieldCommentLabel/index.d.ts.map +1 -1
- package/dist/components/FieldCommentLabel/index.js +54 -41
- package/dist/components/FieldCommentLabel/index.js.map +1 -1
- package/dist/components/FieldCommentLabel/types.d.ts +1 -1
- package/dist/components/FieldCommentLabel/types.d.ts.map +1 -1
- package/dist/components/FieldCommentLabel/utils/exludeComments.js +2 -2
- package/dist/components/FieldCommentLabel/utils/exludeComments.js.map +1 -1
- package/dist/components/IconButton/index.d.ts +2 -2
- package/dist/components/IconButton/index.d.ts.map +1 -1
- package/dist/components/IconButton/index.js +11 -1
- package/dist/components/IconButton/index.js.map +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +3 -4
- package/dist/constants.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +6 -2
- package/dist/plugin.js.map +1 -1
- package/dist/providers/CommentsDrawerProvider/index.d.ts +8 -0
- package/dist/providers/CommentsDrawerProvider/index.d.ts.map +1 -1
- package/dist/providers/CommentsDrawerProvider/index.js +22 -6
- package/dist/providers/CommentsDrawerProvider/index.js.map +1 -1
- package/dist/providers/CommentsProvider/index.d.ts +7 -17
- package/dist/providers/CommentsProvider/index.d.ts.map +1 -1
- package/dist/providers/CommentsProvider/index.js +105 -196
- package/dist/providers/CommentsProvider/index.js.map +1 -1
- package/dist/providers/CommentsProviderWrapper/index.d.ts +1 -1
- package/dist/providers/CommentsProviderWrapper/index.d.ts.map +1 -1
- package/dist/providers/CommentsProviderWrapper/index.js +11 -1
- package/dist/providers/CommentsProviderWrapper/index.js.map +1 -1
- package/dist/services/findAllComments.d.ts +4 -1
- package/dist/services/findAllComments.d.ts.map +1 -1
- package/dist/services/findAllComments.js +36 -10
- package/dist/services/findAllComments.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/translations/en.d.ts.map +1 -1
- package/dist/translations/en.js +3 -7
- package/dist/translations/en.js.map +1 -1
- package/dist/translations/types.d.ts +2 -6
- package/dist/translations/types.d.ts.map +1 -1
- package/dist/types/general.d.ts +0 -2
- package/dist/types/general.d.ts.map +1 -1
- package/dist/types/index.d.ts +3 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/query.d.ts +11 -0
- package/dist/types/query.d.ts.map +1 -0
- package/dist/types/query.js +1 -0
- package/dist/types/query.js.map +1 -0
- package/dist/utils/query/toQueryContext.d.ts +3 -0
- package/dist/utils/query/toQueryContext.d.ts.map +1 -0
- package/dist/utils/query/toQueryContext.js +20 -0
- package/dist/utils/query/toQueryContext.js.map +1 -0
- package/package.json +3 -6
- package/dist/components/CommentsPanel/constants.d.ts +0 -3
- package/dist/components/CommentsPanel/constants.d.ts.map +0 -1
- package/dist/components/CommentsPanel/constants.js +0 -9
- package/dist/components/CommentsPanel/constants.js.map +0 -1
- package/dist/components/CommentsPanel/utils/filterComments.d.ts +0 -9
- package/dist/components/CommentsPanel/utils/filterComments.d.ts.map +0 -1
- package/dist/components/CommentsPanel/utils/filterComments.js +0 -17
- package/dist/components/CommentsPanel/utils/filterComments.js.map +0 -1
- package/dist/components/FieldCommentLabel/AddCommentPopup.d.ts +0 -8
- package/dist/components/FieldCommentLabel/AddCommentPopup.d.ts.map +0 -1
- package/dist/components/FieldCommentLabel/AddCommentPopup.js +0 -50
- package/dist/components/FieldCommentLabel/AddCommentPopup.js.map +0 -1
- package/dist/providers/GlobalCommentsLoader/GlobalCommentsHydrator.d.ts +0 -13
- package/dist/providers/GlobalCommentsLoader/GlobalCommentsHydrator.d.ts.map +0 -1
- package/dist/providers/GlobalCommentsLoader/GlobalCommentsHydrator.js +0 -22
- package/dist/providers/GlobalCommentsLoader/GlobalCommentsHydrator.js.map +0 -1
- package/dist/providers/GlobalCommentsLoader/index.d.ts +0 -10
- package/dist/providers/GlobalCommentsLoader/index.d.ts.map +0 -1
- package/dist/providers/GlobalCommentsLoader/index.js +0 -31
- package/dist/providers/GlobalCommentsLoader/index.js.map +0 -1
- package/dist/services/syncAllCommentsData.d.ts +0 -12
- package/dist/services/syncAllCommentsData.d.ts.map +0 -1
- package/dist/services/syncAllCommentsData.js +0 -48
- package/dist/services/syncAllCommentsData.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CollapsibleGroup.d.ts","sourceRoot":"","sources":["../../../../src/components/CommentsPanel/components/CollapsibleGroup.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"CollapsibleGroup.d.ts","sourceRoot":"","sources":["../../../../src/components/CommentsPanel/components/CollapsibleGroup.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAM5E,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,EAAE,YAAY,GAAG,UAAU,GAAG,OAAO,CAAC;IAC3C,GAAG,CAAC,EAAE,SAAS,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAAC;CAChD;AAgCD,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,qBAAqB,2CA8BhG"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useImperativeHandle } from "react";
|
|
3
4
|
import { ChevronDown } from "lucide-react";
|
|
4
5
|
import { cva } from "class-variance-authority";
|
|
5
6
|
import { useCollapseState } from "../hooks/useCollapseState";
|
|
@@ -33,8 +34,12 @@ const collapsibleGroupVariants = {
|
|
|
33
34
|
}
|
|
34
35
|
})
|
|
35
36
|
};
|
|
36
|
-
function CollapsibleGroup({ groupKey, label, children, level }) {
|
|
37
|
-
const [isCollapsed, toggle] = useCollapseState(groupKey);
|
|
37
|
+
function CollapsibleGroup({ groupKey, label, children, level, ref }) {
|
|
38
|
+
const [isCollapsed, toggle, open] = useCollapseState(groupKey);
|
|
39
|
+
useImperativeHandle(ref, () => ({
|
|
40
|
+
open,
|
|
41
|
+
toggle
|
|
42
|
+
}));
|
|
38
43
|
return /* @__PURE__ */ jsxs("div", { children: [
|
|
39
44
|
/* @__PURE__ */ jsxs(
|
|
40
45
|
"div",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/CommentsPanel/components/CollapsibleGroup.tsx"],"sourcesContent":["\"use client\";\n\nimport type
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/CommentsPanel/components/CollapsibleGroup.tsx"],"sourcesContent":["\"use client\";\n\nimport { useImperativeHandle, type ReactNode, type RefObject } from \"react\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cva } from \"class-variance-authority\";\nimport { useCollapseState } from \"../hooks/useCollapseState\";\nimport { cn } from \"../../../utils/general/cn\";\n\nexport interface CollapsibleGroupHandle {\n open: () => void;\n toggle: () => void;\n}\n\ninterface CollapsibleGroupProps {\n groupKey: string;\n label: string;\n children: ReactNode;\n level: \"collection\" | \"document\" | \"field\";\n ref?: RefObject<CollapsibleGroupHandle | null>;\n}\n\nconst collapsibleGroupVariants = {\n wrapper: cva(\"flex w-full items-center gap-2 cursor-pointer select-none\", {\n variants: {\n level: {\n collection: \"py-2\",\n document: \"py-2\",\n field: \"py-1.5\",\n },\n },\n }),\n label: cva(\"flex-1 truncate\", {\n variants: {\n level: {\n collection: \"text-[14px] font-semibold text-(--theme-text)\",\n document: \"text-[13px] font-semibold text-(--theme-text)\",\n field: \"text-[12px] font-medium text-(--theme-elevation-600)\",\n },\n },\n }),\n childWrapper: cva(\"\", {\n variants: {\n level: {\n collection: \"border-l-2 border-(--theme-elevation-100) pl-3\",\n document: \"border-l-2 border-(--theme-elevation-100) pl-3\",\n field: \"\",\n },\n },\n }),\n};\n\nexport function CollapsibleGroup({ groupKey, label, children, level, ref }: CollapsibleGroupProps) {\n const [isCollapsed, toggle, open] = useCollapseState(groupKey);\n\n useImperativeHandle(ref, () => ({\n open,\n toggle,\n }));\n\n return (\n <div>\n <div\n role=\"button\"\n tabIndex={0}\n onClick={toggle}\n onKeyDown={(e) => (e.key === \"Enter\" || e.key === \" \") && toggle()}\n aria-expanded={!isCollapsed}\n className={collapsibleGroupVariants.wrapper({ level })}>\n <span className={collapsibleGroupVariants.label({ level })}>{label}</span>\n\n <ChevronDown\n className={cn(\n \"shrink-0 w-4 h-4 text-(--theme-elevation-450) transition-transform duration-150\",\n isCollapsed && \"-rotate-90\",\n )}\n />\n </div>\n\n {!isCollapsed && <div className={collapsibleGroupVariants.childWrapper({ level })}>{children}</div>}\n </div>\n );\n}\n"],"mappings":";AA6DM,SAOE,KAPF;AA3DN,SAAS,2BAA2D;AACpE,SAAS,mBAAmB;AAC5B,SAAS,WAAW;AACpB,SAAS,wBAAwB;AACjC,SAAS,UAAU;AAenB,MAAM,2BAA2B;AAAA,EAC/B,SAAS,IAAI,6DAA6D;AAAA,IACxE,UAAU;AAAA,MACR,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF,CAAC;AAAA,EACD,OAAO,IAAI,mBAAmB;AAAA,IAC5B,UAAU;AAAA,MACR,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF,CAAC;AAAA,EACD,cAAc,IAAI,IAAI;AAAA,IACpB,UAAU;AAAA,MACR,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,SAAS,iBAAiB,EAAE,UAAU,OAAO,UAAU,OAAO,IAAI,GAA0B;AACjG,QAAM,CAAC,aAAa,QAAQ,IAAI,IAAI,iBAAiB,QAAQ;AAE7D,sBAAoB,KAAK,OAAO;AAAA,IAC9B;AAAA,IACA;AAAA,EACF,EAAE;AAEF,SACE,qBAAC,SACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,UAAU;AAAA,QACV,SAAS;AAAA,QACT,WAAW,CAAC,OAAO,EAAE,QAAQ,WAAW,EAAE,QAAQ,QAAQ,OAAO;AAAA,QACjE,iBAAe,CAAC;AAAA,QAChB,WAAW,yBAAyB,QAAQ,EAAE,MAAM,CAAC;AAAA,QACrD;AAAA,8BAAC,UAAK,WAAW,yBAAyB,MAAM,EAAE,MAAM,CAAC,GAAI,iBAAM;AAAA,UAEnE;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,eAAe;AAAA,cACjB;AAAA;AAAA,UACF;AAAA;AAAA;AAAA,IACF;AAAA,IAEC,CAAC,eAAe,oBAAC,SAAI,WAAW,yBAAyB,aAAa,EAAE,MAAM,CAAC,GAAI,UAAS;AAAA,KAC/F;AAEJ;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentView.d.ts","sourceRoot":"","sources":["../../../../src/components/CommentsPanel/components/DocumentView.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DocumentView.d.ts","sourceRoot":"","sources":["../../../../src/components/CommentsPanel/components/DocumentView.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAK9C,UAAU,KAAK;IACb,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,2CAelE"}
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx
|
|
3
|
-
import { useTranslation } from "@payloadcms/ui";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
3
|
import { useComments } from "../../../providers/CommentsProvider";
|
|
5
4
|
import { groupCommentsByFieldPath } from "../utils/groupCommentsByFieldPath";
|
|
6
|
-
import { FILTER_NO_COMMENTS_KEYS } from "../constants";
|
|
7
5
|
import { FieldGroupSection } from "./FieldGroupSection";
|
|
8
6
|
function DocumentView({ comments, userId, className }) {
|
|
9
|
-
const {
|
|
10
|
-
const { filter } = useComments();
|
|
7
|
+
const { collectionSlug, documentId } = useComments();
|
|
11
8
|
const fields = groupCommentsByFieldPath(comments);
|
|
12
|
-
return /* @__PURE__ */
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
return /* @__PURE__ */ jsx("div", { className, children: /* @__PURE__ */ jsx(
|
|
10
|
+
FieldGroupSection,
|
|
11
|
+
{
|
|
12
|
+
fields,
|
|
13
|
+
userId,
|
|
14
|
+
collectionSlug: collectionSlug ?? void 0,
|
|
15
|
+
documentId: documentId ?? void 0
|
|
16
|
+
}
|
|
17
|
+
) });
|
|
16
18
|
}
|
|
17
19
|
export {
|
|
18
20
|
DocumentView
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/CommentsPanel/components/DocumentView.tsx"],"sourcesContent":["\"use client\";\n\nimport
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/CommentsPanel/components/DocumentView.tsx"],"sourcesContent":["\"use client\";\n\nimport type { Comment } from \"../../../types\";\nimport { useComments } from \"../../../providers/CommentsProvider\";\nimport { groupCommentsByFieldPath } from \"../utils/groupCommentsByFieldPath\";\nimport { FieldGroupSection } from \"./FieldGroupSection\";\n\ninterface Props {\n comments: Comment[];\n userId: number | null;\n className: string;\n}\n\nexport function DocumentView({ comments, userId, className }: Props) {\n const { collectionSlug, documentId } = useComments();\n\n const fields = groupCommentsByFieldPath(comments);\n\n return (\n <div className={className}>\n <FieldGroupSection\n fields={fields}\n userId={userId}\n collectionSlug={collectionSlug ?? undefined}\n documentId={documentId ?? undefined}\n />\n </div>\n );\n}\n"],"mappings":";AAoBM;AAjBN,SAAS,mBAAmB;AAC5B,SAAS,gCAAgC;AACzC,SAAS,yBAAyB;AAQ3B,SAAS,aAAa,EAAE,UAAU,QAAQ,UAAU,GAAU;AACnE,QAAM,EAAE,gBAAgB,WAAW,IAAI,YAAY;AAEnD,QAAM,SAAS,yBAAyB,QAAQ;AAEhD,SACE,oBAAC,SAAI,WACH;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,gBAAgB,kBAAkB;AAAA,MAClC,YAAY,cAAc;AAAA;AAAA,EAC5B,GACF;AAEJ;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldGroupSection.d.ts","sourceRoot":"","sources":["../../../../src/components/CommentsPanel/components/FieldGroupSection.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FieldGroupSection.d.ts","sourceRoot":"","sources":["../../../../src/components/CommentsPanel/components/FieldGroupSection.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAWtD,UAAU,KAAK;IACb,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACtC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,KAAK,2CA8ElG"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useRef, useEffect } from "react";
|
|
3
4
|
import { useTranslation } from "@payloadcms/ui";
|
|
4
5
|
import { CollapsibleGroup } from "./CollapsibleGroup";
|
|
5
6
|
import { CommentItem } from "../../CommentItem";
|
|
@@ -7,11 +8,27 @@ import { createCollapsibleGroupKey } from "../utils/createCollapsibleGroupKey";
|
|
|
7
8
|
import { resolveFieldLabel } from "../utils/resolveFieldLabel";
|
|
8
9
|
import { useComments } from "../../../providers/CommentsProvider";
|
|
9
10
|
import { CommentEditor } from "../../CommentEditor";
|
|
11
|
+
import { useCommentsDrawer } from "../../../providers/CommentsDrawerProvider";
|
|
12
|
+
import { useFieldLabelsQuery } from "../../../api/queries/useFieldLabelsQuery";
|
|
10
13
|
function FieldGroupSection({ fields, userId, collectionSlug, documentId, globalSlug }) {
|
|
11
14
|
const { t } = useTranslation();
|
|
12
|
-
const {
|
|
15
|
+
const { queryContext } = useComments();
|
|
16
|
+
const { data: fieldLabelRegistry = {} } = useFieldLabelsQuery(queryContext);
|
|
17
|
+
const { pendingField } = useCommentsDrawer();
|
|
18
|
+
const editorRef = useRef(null);
|
|
19
|
+
const pendingFieldCollapsibleGroup = useRef(null);
|
|
13
20
|
const generalComments = fields.get(null) ?? [];
|
|
14
21
|
const fieldEntries = [...fields.entries()].filter((entry) => entry[0] !== null);
|
|
22
|
+
const allEntries = [
|
|
23
|
+
...fieldEntries,
|
|
24
|
+
...pendingField && !fields.has(pendingField.path) ? [[pendingField.path, []]] : []
|
|
25
|
+
];
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
if (!pendingField) return;
|
|
28
|
+
pendingFieldCollapsibleGroup.current?.open();
|
|
29
|
+
const id = setTimeout(() => editorRef.current?.focus(), 300);
|
|
30
|
+
return () => clearTimeout(id);
|
|
31
|
+
}, [pendingField]);
|
|
15
32
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
16
33
|
/* @__PURE__ */ jsx(
|
|
17
34
|
CollapsibleGroup,
|
|
@@ -33,27 +50,32 @@ function FieldGroupSection({ fields, userId, collectionSlug, documentId, globalS
|
|
|
33
50
|
] })
|
|
34
51
|
}
|
|
35
52
|
),
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
{
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
allEntries.map(([fieldPath, fieldComments]) => {
|
|
54
|
+
const isPending = pendingField?.path === fieldPath;
|
|
55
|
+
return /* @__PURE__ */ jsx(
|
|
56
|
+
CollapsibleGroup,
|
|
57
|
+
{
|
|
58
|
+
ref: isPending ? pendingFieldCollapsibleGroup : void 0,
|
|
59
|
+
groupKey: createCollapsibleGroupKey({ collectionSlug, documentId, globalSlug, fieldPath }),
|
|
60
|
+
label: isPending ? pendingField.label : resolveFieldLabel({ registry: fieldLabelRegistry, collectionSlug, documentId, globalSlug, fieldPath }),
|
|
61
|
+
level: "field",
|
|
62
|
+
children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", "data-field-path": fieldPath, children: [
|
|
63
|
+
fieldComments.map((comment) => /* @__PURE__ */ jsx(CommentItem, { comment, currentUserId: userId }, comment.id)),
|
|
64
|
+
/* @__PURE__ */ jsx(
|
|
65
|
+
CommentEditor,
|
|
66
|
+
{
|
|
67
|
+
ref: isPending ? editorRef : void 0,
|
|
68
|
+
fieldPath,
|
|
69
|
+
collectionSlug,
|
|
70
|
+
documentId,
|
|
71
|
+
globalSlug
|
|
72
|
+
}
|
|
73
|
+
)
|
|
74
|
+
] })
|
|
75
|
+
},
|
|
76
|
+
fieldPath
|
|
77
|
+
);
|
|
78
|
+
})
|
|
57
79
|
] });
|
|
58
80
|
}
|
|
59
81
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/CommentsPanel/components/FieldGroupSection.tsx"],"sourcesContent":["\"use client\";\n\nimport { useTranslation } from \"@payloadcms/ui\";\nimport type { Comment } from \"../../../types/comment\";\nimport { CollapsibleGroup } from \"./CollapsibleGroup\";\nimport { CommentItem } from \"../../CommentItem\";\nimport { createCollapsibleGroupKey } from \"../utils/createCollapsibleGroupKey\";\nimport { resolveFieldLabel } from \"../utils/resolveFieldLabel\";\nimport { useComments } from \"../../../providers/CommentsProvider\";\nimport { CommentEditor } from \"../../CommentEditor\";\n\ninterface Props {\n fields: Map<string | null, Comment[]>;\n userId: number | null;\n collectionSlug?: string;\n documentId?: number;\n globalSlug?: string;\n}\n\nexport function FieldGroupSection({ fields, userId, collectionSlug, documentId, globalSlug }: Props) {\n const { t } = useTranslation();\n const {
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/CommentsPanel/components/FieldGroupSection.tsx"],"sourcesContent":["\"use client\";\n\nimport { useRef, useEffect } from \"react\";\nimport { useTranslation } from \"@payloadcms/ui\";\nimport type { Comment } from \"../../../types/comment\";\nimport { CollapsibleGroup, type CollapsibleGroupHandle } from \"./CollapsibleGroup\";\nimport { CommentItem } from \"../../CommentItem\";\nimport { createCollapsibleGroupKey } from \"../utils/createCollapsibleGroupKey\";\nimport { resolveFieldLabel } from \"../utils/resolveFieldLabel\";\nimport { useComments } from \"../../../providers/CommentsProvider\";\nimport { CommentEditor } from \"../../CommentEditor\";\nimport type { CommentEditorHandle } from \"../../CommentEditor\";\nimport { useCommentsDrawer } from \"../../../providers/CommentsDrawerProvider\";\nimport { useFieldLabelsQuery } from \"../../../api/queries/useFieldLabelsQuery\";\n\ninterface Props {\n fields: Map<string | null, Comment[]>;\n userId: number | null;\n collectionSlug?: string;\n documentId?: number;\n globalSlug?: string;\n}\n\nexport function FieldGroupSection({ fields, userId, collectionSlug, documentId, globalSlug }: Props) {\n const { t } = useTranslation();\n const { queryContext } = useComments();\n const { data: fieldLabelRegistry = {} } = useFieldLabelsQuery(queryContext);\n const { pendingField } = useCommentsDrawer();\n const editorRef = useRef<CommentEditorHandle | null>(null);\n const pendingFieldCollapsibleGroup = useRef<CollapsibleGroupHandle | null>(null);\n\n const generalComments = fields.get(null) ?? [];\n const fieldEntries = [...fields.entries()].filter((entry): entry is [string, Comment[]] => entry[0] !== null);\n\n const allEntries: [string, Comment[]][] = [\n ...fieldEntries,\n ...(pendingField && !fields.has(pendingField.path) ? [[pendingField.path, []] as [string, Comment[]]] : []),\n ];\n\n useEffect(() => {\n if (!pendingField) return;\n\n pendingFieldCollapsibleGroup.current?.open();\n\n const id = setTimeout(() => editorRef.current?.focus(), 300);\n\n return () => clearTimeout(id);\n }, [pendingField]);\n\n return (\n <>\n <CollapsibleGroup\n groupKey={createCollapsibleGroupKey({ collectionSlug, documentId, globalSlug, fieldPath: null })}\n label={t(\"comments:general\" as never)}\n level=\"field\">\n <div className=\"flex flex-col gap-3\">\n {generalComments.map((comment) => (\n <CommentItem key={comment.id} comment={comment} currentUserId={userId} />\n ))}\n\n <CommentEditor\n fieldPath={null}\n collectionSlug={collectionSlug}\n documentId={documentId}\n globalSlug={globalSlug}\n />\n </div>\n </CollapsibleGroup>\n\n {allEntries.map(([fieldPath, fieldComments]) => {\n const isPending = pendingField?.path === fieldPath;\n\n return (\n <CollapsibleGroup\n key={fieldPath}\n ref={isPending ? pendingFieldCollapsibleGroup : undefined}\n groupKey={createCollapsibleGroupKey({ collectionSlug, documentId, globalSlug, fieldPath })}\n label={\n isPending ?\n pendingField.label\n : resolveFieldLabel({ registry: fieldLabelRegistry, collectionSlug, documentId, globalSlug, fieldPath })\n }\n level=\"field\">\n <div className=\"flex flex-col gap-3\" data-field-path={fieldPath}>\n {fieldComments.map((comment) => (\n <CommentItem key={comment.id} comment={comment} currentUserId={userId} />\n ))}\n\n <CommentEditor\n ref={isPending ? editorRef : undefined}\n fieldPath={fieldPath}\n collectionSlug={collectionSlug}\n documentId={documentId}\n globalSlug={globalSlug}\n />\n </div>\n </CollapsibleGroup>\n );\n })}\n </>\n );\n}\n"],"mappings":";AAkDI,mBAOQ,KAFJ,YALJ;AAhDJ,SAAS,QAAQ,iBAAiB;AAClC,SAAS,sBAAsB;AAE/B,SAAS,wBAAqD;AAC9D,SAAS,mBAAmB;AAC5B,SAAS,iCAAiC;AAC1C,SAAS,yBAAyB;AAClC,SAAS,mBAAmB;AAC5B,SAAS,qBAAqB;AAE9B,SAAS,yBAAyB;AAClC,SAAS,2BAA2B;AAU7B,SAAS,kBAAkB,EAAE,QAAQ,QAAQ,gBAAgB,YAAY,WAAW,GAAU;AACnG,QAAM,EAAE,EAAE,IAAI,eAAe;AAC7B,QAAM,EAAE,aAAa,IAAI,YAAY;AACrC,QAAM,EAAE,MAAM,qBAAqB,CAAC,EAAE,IAAI,oBAAoB,YAAY;AAC1E,QAAM,EAAE,aAAa,IAAI,kBAAkB;AAC3C,QAAM,YAAY,OAAmC,IAAI;AACzD,QAAM,+BAA+B,OAAsC,IAAI;AAE/E,QAAM,kBAAkB,OAAO,IAAI,IAAI,KAAK,CAAC;AAC7C,QAAM,eAAe,CAAC,GAAG,OAAO,QAAQ,CAAC,EAAE,OAAO,CAAC,UAAwC,MAAM,CAAC,MAAM,IAAI;AAE5G,QAAM,aAAoC;AAAA,IACxC,GAAG;AAAA,IACH,GAAI,gBAAgB,CAAC,OAAO,IAAI,aAAa,IAAI,IAAI,CAAC,CAAC,aAAa,MAAM,CAAC,CAAC,CAAwB,IAAI,CAAC;AAAA,EAC3G;AAEA,YAAU,MAAM;AACd,QAAI,CAAC,aAAc;AAEnB,iCAA6B,SAAS,KAAK;AAE3C,UAAM,KAAK,WAAW,MAAM,UAAU,SAAS,MAAM,GAAG,GAAG;AAE3D,WAAO,MAAM,aAAa,EAAE;AAAA,EAC9B,GAAG,CAAC,YAAY,CAAC;AAEjB,SACE,iCACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,UAAU,0BAA0B,EAAE,gBAAgB,YAAY,YAAY,WAAW,KAAK,CAAC;AAAA,QAC/F,OAAO,EAAE,kBAA2B;AAAA,QACpC,OAAM;AAAA,QACN,+BAAC,SAAI,WAAU,uBACZ;AAAA,0BAAgB,IAAI,CAAC,YACpB,oBAAC,eAA6B,SAAkB,eAAe,UAA7C,QAAQ,EAA6C,CACxE;AAAA,UAED;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,cACX;AAAA,cACA;AAAA,cACA;AAAA;AAAA,UACF;AAAA,WACF;AAAA;AAAA,IACF;AAAA,IAEC,WAAW,IAAI,CAAC,CAAC,WAAW,aAAa,MAAM;AAC9C,YAAM,YAAY,cAAc,SAAS;AAEzC,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,KAAK,YAAY,+BAA+B;AAAA,UAChD,UAAU,0BAA0B,EAAE,gBAAgB,YAAY,YAAY,UAAU,CAAC;AAAA,UACzF,OACE,YACE,aAAa,QACb,kBAAkB,EAAE,UAAU,oBAAoB,gBAAgB,YAAY,YAAY,UAAU,CAAC;AAAA,UAEzG,OAAM;AAAA,UACN,+BAAC,SAAI,WAAU,uBAAsB,mBAAiB,WACnD;AAAA,0BAAc,IAAI,CAAC,YAClB,oBAAC,eAA6B,SAAkB,eAAe,UAA7C,QAAQ,EAA6C,CACxE;AAAA,YAED;AAAA,cAAC;AAAA;AAAA,gBACC,KAAK,YAAY,YAAY;AAAA,gBAC7B;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA,YACF;AAAA,aACF;AAAA;AAAA,QArBK;AAAA,MAsBP;AAAA,IAEJ,CAAC;AAAA,KACH;AAEJ;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GlobalDocumentView.d.ts","sourceRoot":"","sources":["../../../../src/components/CommentsPanel/components/GlobalDocumentView.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GlobalDocumentView.d.ts","sourceRoot":"","sources":["../../../../src/components/CommentsPanel/components/GlobalDocumentView.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAK9C,UAAU,KAAK;IACb,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,2CAUxE"}
|
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx
|
|
3
|
-
import { useTranslation } from "@payloadcms/ui";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
3
|
import { useComments } from "../../../providers/CommentsProvider";
|
|
5
4
|
import { groupCommentsByFieldPath } from "../utils/groupCommentsByFieldPath";
|
|
6
|
-
import { FILTER_NO_COMMENTS_KEYS } from "../constants";
|
|
7
5
|
import { FieldGroupSection } from "./FieldGroupSection";
|
|
8
6
|
function GlobalDocumentView({ comments, userId, className }) {
|
|
9
|
-
const {
|
|
10
|
-
const { filter } = useComments();
|
|
7
|
+
const { globalSlug } = useComments();
|
|
11
8
|
const fields = groupCommentsByFieldPath(comments);
|
|
12
|
-
return /* @__PURE__ */
|
|
13
|
-
comments.length === 0 && /* @__PURE__ */ jsx("p", { className: "text-(--theme-elevation-450) text-[13px] text-center py-6 m-0", children: t(FILTER_NO_COMMENTS_KEYS[filter]) }),
|
|
14
|
-
/* @__PURE__ */ jsx(FieldGroupSection, { fields, userId })
|
|
15
|
-
] });
|
|
9
|
+
return /* @__PURE__ */ jsx("div", { className, children: /* @__PURE__ */ jsx(FieldGroupSection, { fields, userId, globalSlug: globalSlug ?? void 0 }) });
|
|
16
10
|
}
|
|
17
11
|
export {
|
|
18
12
|
GlobalDocumentView
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/CommentsPanel/components/GlobalDocumentView.tsx"],"sourcesContent":["\"use client\";\n\nimport
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/CommentsPanel/components/GlobalDocumentView.tsx"],"sourcesContent":["\"use client\";\n\nimport type { Comment } from \"../../../types\";\nimport { useComments } from \"../../../providers/CommentsProvider\";\nimport { groupCommentsByFieldPath } from \"../utils/groupCommentsByFieldPath\";\nimport { FieldGroupSection } from \"./FieldGroupSection\";\n\ninterface Props {\n comments: Comment[];\n userId: number | null;\n className: string;\n}\n\nexport function GlobalDocumentView({ comments, userId, className }: Props) {\n const { globalSlug } = useComments();\n\n const fields = groupCommentsByFieldPath(comments);\n\n return (\n <div className={className}>\n <FieldGroupSection fields={fields} userId={userId} globalSlug={globalSlug ?? undefined} />\n </div>\n );\n}\n"],"mappings":";AAoBM;AAjBN,SAAS,mBAAmB;AAC5B,SAAS,gCAAgC;AACzC,SAAS,yBAAyB;AAQ3B,SAAS,mBAAmB,EAAE,UAAU,QAAQ,UAAU,GAAU;AACzE,QAAM,EAAE,WAAW,IAAI,YAAY;AAEnC,QAAM,SAAS,yBAAyB,QAAQ;AAEhD,SACE,oBAAC,SAAI,WACH,8BAAC,qBAAkB,QAAgB,QAAgB,YAAY,cAAc,QAAW,GAC1F;AAEJ;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GlobalView.d.ts","sourceRoot":"","sources":["../../../../src/components/CommentsPanel/components/GlobalView.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAStD,UAAU,KAAK;IACb,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"GlobalView.d.ts","sourceRoot":"","sources":["../../../../src/components/CommentsPanel/components/GlobalView.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAStD,UAAU,KAAK;IACb,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,2CAkDhE"}
|
|
@@ -1,60 +1,57 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx
|
|
3
|
-
import { useLocale
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useLocale } from "@payloadcms/ui";
|
|
4
4
|
import { useComments } from "../../../providers/CommentsProvider";
|
|
5
|
+
import { useDocumentTitlesQuery } from "../../../api/queries/useDocumentTitlesQuery";
|
|
5
6
|
import { groupCommentsGlobally } from "../utils/groupCommentsGlobally";
|
|
6
7
|
import { resolveEntityLabel } from "../utils/resolveEntityLabel";
|
|
7
8
|
import { CollapsibleGroup } from "./CollapsibleGroup";
|
|
8
|
-
import { FILTER_NO_COMMENTS_KEYS } from "../constants";
|
|
9
9
|
import { FieldGroupSection } from "./FieldGroupSection";
|
|
10
10
|
import { createCollapsibleGroupKey } from "../utils/createCollapsibleGroupKey";
|
|
11
11
|
function GlobalView({ comments, userId, className }) {
|
|
12
|
-
const {
|
|
13
|
-
const { documentTitles
|
|
12
|
+
const { collectionLabels, globalLabels, queryContext } = useComments();
|
|
13
|
+
const { data: documentTitles = {} } = useDocumentTitlesQuery(queryContext);
|
|
14
14
|
const { code: locale } = useLocale();
|
|
15
15
|
const groupedComments = groupCommentsGlobally(comments);
|
|
16
|
-
return /* @__PURE__ */
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
if (entry.type === "collection") {
|
|
20
|
-
const { slug: slug2, docs } = entry;
|
|
21
|
-
return /* @__PURE__ */ jsx(
|
|
22
|
-
CollapsibleGroup,
|
|
23
|
-
{
|
|
24
|
-
groupKey: slug2,
|
|
25
|
-
label: resolveEntityLabel(collectionLabels[slug2], locale, slug2),
|
|
26
|
-
level: "collection",
|
|
27
|
-
children: [...docs.entries()].map(([docId, fields2]) => {
|
|
28
|
-
const title = documentTitles[slug2]?.[String(docId)] ?? String(docId);
|
|
29
|
-
const documentId = Number(docId);
|
|
30
|
-
return /* @__PURE__ */ jsx(
|
|
31
|
-
CollapsibleGroup,
|
|
32
|
-
{
|
|
33
|
-
groupKey: createCollapsibleGroupKey({ collectionSlug: slug2, documentId }),
|
|
34
|
-
label: title,
|
|
35
|
-
level: "document",
|
|
36
|
-
children: /* @__PURE__ */ jsx(FieldGroupSection, { fields: fields2, userId, collectionSlug: slug2, documentId })
|
|
37
|
-
},
|
|
38
|
-
docId
|
|
39
|
-
);
|
|
40
|
-
})
|
|
41
|
-
},
|
|
42
|
-
slug2
|
|
43
|
-
);
|
|
44
|
-
}
|
|
45
|
-
const { slug, fields } = entry;
|
|
16
|
+
return /* @__PURE__ */ jsx("div", { className, children: groupedComments.map((entry) => {
|
|
17
|
+
if (entry.type === "collection") {
|
|
18
|
+
const { slug: slug2, docs } = entry;
|
|
46
19
|
return /* @__PURE__ */ jsx(
|
|
47
20
|
CollapsibleGroup,
|
|
48
21
|
{
|
|
49
|
-
groupKey:
|
|
50
|
-
label: resolveEntityLabel(
|
|
22
|
+
groupKey: slug2,
|
|
23
|
+
label: resolveEntityLabel(collectionLabels[slug2], locale, slug2),
|
|
51
24
|
level: "collection",
|
|
52
|
-
children:
|
|
25
|
+
children: [...docs.entries()].map(([docId, fields2]) => {
|
|
26
|
+
const title = documentTitles[slug2]?.[String(docId)] ?? String(docId);
|
|
27
|
+
const documentId = Number(docId);
|
|
28
|
+
return /* @__PURE__ */ jsx(
|
|
29
|
+
CollapsibleGroup,
|
|
30
|
+
{
|
|
31
|
+
groupKey: createCollapsibleGroupKey({ collectionSlug: slug2, documentId }),
|
|
32
|
+
label: title,
|
|
33
|
+
level: "document",
|
|
34
|
+
children: /* @__PURE__ */ jsx(FieldGroupSection, { fields: fields2, userId, collectionSlug: slug2, documentId })
|
|
35
|
+
},
|
|
36
|
+
docId
|
|
37
|
+
);
|
|
38
|
+
})
|
|
53
39
|
},
|
|
54
|
-
|
|
40
|
+
slug2
|
|
55
41
|
);
|
|
56
|
-
}
|
|
57
|
-
|
|
42
|
+
}
|
|
43
|
+
const { slug, fields } = entry;
|
|
44
|
+
return /* @__PURE__ */ jsx(
|
|
45
|
+
CollapsibleGroup,
|
|
46
|
+
{
|
|
47
|
+
groupKey: slug,
|
|
48
|
+
label: resolveEntityLabel(globalLabels[slug], locale, slug),
|
|
49
|
+
level: "collection",
|
|
50
|
+
children: /* @__PURE__ */ jsx(FieldGroupSection, { fields, userId, globalSlug: slug })
|
|
51
|
+
},
|
|
52
|
+
slug
|
|
53
|
+
);
|
|
54
|
+
}) });
|
|
58
55
|
}
|
|
59
56
|
export {
|
|
60
57
|
GlobalView
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/CommentsPanel/components/GlobalView.tsx"],"sourcesContent":["\"use client\";\n\nimport { useLocale
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/CommentsPanel/components/GlobalView.tsx"],"sourcesContent":["\"use client\";\n\nimport { useLocale } from \"@payloadcms/ui\";\nimport type { Comment } from \"../../../types/comment\";\nimport { useComments } from \"../../../providers/CommentsProvider\";\nimport { useDocumentTitlesQuery } from \"../../../api/queries/useDocumentTitlesQuery\";\nimport { groupCommentsGlobally } from \"../utils/groupCommentsGlobally\";\nimport { resolveEntityLabel } from \"../utils/resolveEntityLabel\";\nimport { CollapsibleGroup } from \"./CollapsibleGroup\";\nimport { FieldGroupSection } from \"./FieldGroupSection\";\nimport { createCollapsibleGroupKey } from \"../utils/createCollapsibleGroupKey\";\n\ninterface Props {\n comments: Comment[];\n userId: number | null;\n className: string;\n}\n\nexport function GlobalView({ comments, userId, className }: Props) {\n const { collectionLabels, globalLabels, queryContext } = useComments();\n const { data: documentTitles = {} } = useDocumentTitlesQuery(queryContext);\n const { code: locale } = useLocale();\n const groupedComments = groupCommentsGlobally(comments);\n\n return (\n <div className={className}>\n {groupedComments.map((entry) => {\n if (entry.type === \"collection\") {\n const { slug, docs } = entry;\n\n return (\n <CollapsibleGroup\n key={slug}\n groupKey={slug}\n label={resolveEntityLabel(collectionLabels[slug], locale, slug)}\n level=\"collection\">\n {[...docs.entries()].map(([docId, fields]) => {\n const title = documentTitles[slug]?.[String(docId)] ?? String(docId);\n const documentId = Number(docId);\n\n return (\n <CollapsibleGroup\n key={docId}\n groupKey={createCollapsibleGroupKey({ collectionSlug: slug, documentId })}\n label={title}\n level=\"document\">\n <FieldGroupSection fields={fields} userId={userId} collectionSlug={slug} documentId={documentId} />\n </CollapsibleGroup>\n );\n })}\n </CollapsibleGroup>\n );\n }\n\n const { slug, fields } = entry;\n\n return (\n <CollapsibleGroup\n key={slug}\n groupKey={slug}\n label={resolveEntityLabel(globalLabels[slug], locale, slug)}\n level=\"collection\">\n <FieldGroupSection fields={fields} userId={userId} globalSlug={slug} />\n </CollapsibleGroup>\n );\n })}\n </div>\n );\n}\n"],"mappings":";AA8CoB;AA5CpB,SAAS,iBAAiB;AAE1B,SAAS,mBAAmB;AAC5B,SAAS,8BAA8B;AACvC,SAAS,6BAA6B;AACtC,SAAS,0BAA0B;AACnC,SAAS,wBAAwB;AACjC,SAAS,yBAAyB;AAClC,SAAS,iCAAiC;AAQnC,SAAS,WAAW,EAAE,UAAU,QAAQ,UAAU,GAAU;AACjE,QAAM,EAAE,kBAAkB,cAAc,aAAa,IAAI,YAAY;AACrE,QAAM,EAAE,MAAM,iBAAiB,CAAC,EAAE,IAAI,uBAAuB,YAAY;AACzE,QAAM,EAAE,MAAM,OAAO,IAAI,UAAU;AACnC,QAAM,kBAAkB,sBAAsB,QAAQ;AAEtD,SACE,oBAAC,SAAI,WACF,0BAAgB,IAAI,CAAC,UAAU;AAC9B,QAAI,MAAM,SAAS,cAAc;AAC/B,YAAM,EAAE,MAAAA,OAAM,KAAK,IAAI;AAEvB,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,UAAUA;AAAA,UACV,OAAO,mBAAmB,iBAAiBA,KAAI,GAAG,QAAQA,KAAI;AAAA,UAC9D,OAAM;AAAA,UACL,WAAC,GAAG,KAAK,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,OAAOC,OAAM,MAAM;AAC5C,kBAAM,QAAQ,eAAeD,KAAI,IAAI,OAAO,KAAK,CAAC,KAAK,OAAO,KAAK;AACnE,kBAAM,aAAa,OAAO,KAAK;AAE/B,mBACE;AAAA,cAAC;AAAA;AAAA,gBAEC,UAAU,0BAA0B,EAAE,gBAAgBA,OAAM,WAAW,CAAC;AAAA,gBACxE,OAAO;AAAA,gBACP,OAAM;AAAA,gBACN,8BAAC,qBAAkB,QAAQC,SAAQ,QAAgB,gBAAgBD,OAAM,YAAwB;AAAA;AAAA,cAJ5F;AAAA,YAKP;AAAA,UAEJ,CAAC;AAAA;AAAA,QAjBIA;AAAA,MAkBP;AAAA,IAEJ;AAEA,UAAM,EAAE,MAAM,OAAO,IAAI;AAEzB,WACE;AAAA,MAAC;AAAA;AAAA,QAEC,UAAU;AAAA,QACV,OAAO,mBAAmB,aAAa,IAAI,GAAG,QAAQ,IAAI;AAAA,QAC1D,OAAM;AAAA,QACN,8BAAC,qBAAkB,QAAgB,QAAgB,YAAY,MAAM;AAAA;AAAA,MAJhE;AAAA,IAKP;AAAA,EAEJ,CAAC,GACH;AAEJ;","names":["slug","fields"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function useCollapseState(groupKey: string): [isCollapsed: boolean, toggle: () => void];
|
|
1
|
+
export declare function useCollapseState(groupKey: string): [isCollapsed: boolean, toggle: () => void, open: () => void];
|
|
2
2
|
//# sourceMappingURL=useCollapseState.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCollapseState.d.ts","sourceRoot":"","sources":["../../../../src/components/CommentsPanel/hooks/useCollapseState.ts"],"names":[],"mappings":"AAoBA,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"useCollapseState.d.ts","sourceRoot":"","sources":["../../../../src/components/CommentsPanel/hooks/useCollapseState.ts"],"names":[],"mappings":"AAoBA,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,CAkC/G"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/CommentsPanel/hooks/useCollapseState.ts"],"sourcesContent":["\"use client\";\n\nimport { useState, useEffect } from \"react\";\n\nconst STORAGE_KEY = \"payload-comments-collapsed\";\n\nfunction readStorage(): Record<string, boolean> {\n try {\n return JSON.parse(localStorage.getItem(STORAGE_KEY) ?? \"{}\");\n } catch {\n return {};\n }\n}\n\nfunction writeStorage(data: Record<string, boolean>) {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(data));\n } catch {}\n}\n\nexport function useCollapseState(groupKey: string): [isCollapsed: boolean, toggle: () => void] {\n const [isCollapsed, setIsCollapsed] = useState(() => {\n const stored = readStorage();\n\n return stored[groupKey] === true;\n });\n\n useEffect(() => {\n const stored = readStorage();\n\n setIsCollapsed(stored[groupKey] === true);\n }, [groupKey]);\n\n const toggle = () => {\n setIsCollapsed((prev) => {\n const next = !prev;\n const stored = readStorage();\n\n if (next) {\n stored[groupKey] = true;\n } else {\n delete stored[groupKey];\n }\n\n writeStorage(stored);\n return next;\n });\n };\n\n return [isCollapsed, toggle];\n}\n"],"mappings":";AAEA,SAAS,UAAU,iBAAiB;AAEpC,MAAM,cAAc;AAEpB,SAAS,cAAuC;AAC9C,MAAI;AACF,WAAO,KAAK,MAAM,aAAa,QAAQ,WAAW,KAAK,IAAI;AAAA,EAC7D,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEA,SAAS,aAAa,MAA+B;AACnD,MAAI;AACF,iBAAa,QAAQ,aAAa,KAAK,UAAU,IAAI,CAAC;AAAA,EACxD,QAAQ;AAAA,EAAC;AACX;AAEO,SAAS,iBAAiB,
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/CommentsPanel/hooks/useCollapseState.ts"],"sourcesContent":["\"use client\";\n\nimport { useState, useEffect } from \"react\";\n\nconst STORAGE_KEY = \"payload-comments-collapsed\";\n\nfunction readStorage(): Record<string, boolean> {\n try {\n return JSON.parse(localStorage.getItem(STORAGE_KEY) ?? \"{}\");\n } catch {\n return {};\n }\n}\n\nfunction writeStorage(data: Record<string, boolean>) {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(data));\n } catch {}\n}\n\nexport function useCollapseState(groupKey: string): [isCollapsed: boolean, toggle: () => void, open: () => void] {\n const [isCollapsed, setIsCollapsed] = useState(() => {\n const stored = readStorage();\n\n return stored[groupKey] === true;\n });\n\n useEffect(() => {\n const stored = readStorage();\n\n setIsCollapsed(stored[groupKey] === true);\n }, [groupKey]);\n\n const toggle = () => {\n setIsCollapsed((prev) => {\n const next = !prev;\n const stored = readStorage();\n\n if (next) {\n stored[groupKey] = true;\n } else {\n delete stored[groupKey];\n }\n\n writeStorage(stored);\n return next;\n });\n };\n\n const open = () => {\n setIsCollapsed(false);\n };\n\n return [isCollapsed, toggle, open];\n}\n"],"mappings":";AAEA,SAAS,UAAU,iBAAiB;AAEpC,MAAM,cAAc;AAEpB,SAAS,cAAuC;AAC9C,MAAI;AACF,WAAO,KAAK,MAAM,aAAa,QAAQ,WAAW,KAAK,IAAI;AAAA,EAC7D,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEA,SAAS,aAAa,MAA+B;AACnD,MAAI;AACF,iBAAa,QAAQ,aAAa,KAAK,UAAU,IAAI,CAAC;AAAA,EACxD,QAAQ;AAAA,EAAC;AACX;AAEO,SAAS,iBAAiB,UAAgF;AAC/G,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,MAAM;AACnD,UAAM,SAAS,YAAY;AAE3B,WAAO,OAAO,QAAQ,MAAM;AAAA,EAC9B,CAAC;AAED,YAAU,MAAM;AACd,UAAM,SAAS,YAAY;AAE3B,mBAAe,OAAO,QAAQ,MAAM,IAAI;AAAA,EAC1C,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,SAAS,MAAM;AACnB,mBAAe,CAAC,SAAS;AACvB,YAAM,OAAO,CAAC;AACd,YAAM,SAAS,YAAY;AAE3B,UAAI,MAAM;AACR,eAAO,QAAQ,IAAI;AAAA,MACrB,OAAO;AACL,eAAO,OAAO,QAAQ;AAAA,MACxB;AAEA,mBAAa,MAAM;AACnB,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,QAAM,OAAO,MAAM;AACjB,mBAAe,KAAK;AAAA,EACtB;AAEA,SAAO,CAAC,aAAa,QAAQ,IAAI;AACnC;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/CommentsPanel/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/CommentsPanel/index.tsx"],"names":[],"mappings":"AAYA,UAAU,KAAK;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,aAAa,kBAAmB,KAAK,4CA8BjD,CAAC"}
|
|
@@ -1,30 +1,33 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
|
-
import { useAuth } from "@payloadcms/ui";
|
|
3
|
+
import { useAuth, useLocale, useTranslation } from "@payloadcms/ui";
|
|
4
4
|
import { cn } from "../../utils/general/cn";
|
|
5
5
|
import { useComments } from "../../providers/CommentsProvider";
|
|
6
|
-
import {
|
|
6
|
+
import { useCommentsQuery } from "../../api/queries/useCommentsQuery";
|
|
7
7
|
import { DocumentView } from "./components/DocumentView";
|
|
8
8
|
import { GlobalView } from "./components/GlobalView";
|
|
9
9
|
import { GlobalDocumentView } from "./components/GlobalDocumentView";
|
|
10
10
|
import { useScrollToTargetFieldGroup } from "./hooks/useScrollToTargetFieldGroup";
|
|
11
|
+
import { filterCommentsByLocale } from "../../utils/comment/filterCommentsByLocale";
|
|
11
12
|
const CommentsPanel = ({ className }) => {
|
|
12
13
|
const { user } = useAuth();
|
|
13
|
-
const {
|
|
14
|
+
const { t } = useTranslation();
|
|
15
|
+
const { code: currentLocale } = useLocale();
|
|
16
|
+
const { mode, queryContext } = useComments();
|
|
17
|
+
const { data: allComments = [], isLoading } = useCommentsQuery(queryContext);
|
|
14
18
|
const userId = user?.id ?? null;
|
|
15
|
-
const
|
|
16
|
-
comments: visibleComments,
|
|
17
|
-
filter,
|
|
18
|
-
currentUserId: userId ?? void 0
|
|
19
|
-
});
|
|
19
|
+
const visibleComments = filterCommentsByLocale(allComments, currentLocale);
|
|
20
20
|
useScrollToTargetFieldGroup();
|
|
21
|
+
if (isLoading && allComments.length === 0) {
|
|
22
|
+
return /* @__PURE__ */ jsx("div", { className: cn(className, "text-(--theme-elevation-450) text-[13px] text-center py-6 m-0"), children: t("comments:loadingComments") });
|
|
23
|
+
}
|
|
21
24
|
if (mode === "document") {
|
|
22
|
-
return /* @__PURE__ */ jsx(DocumentView, { comments:
|
|
25
|
+
return /* @__PURE__ */ jsx(DocumentView, { comments: visibleComments, userId, className: cn(className) });
|
|
23
26
|
}
|
|
24
27
|
if (mode === "global-document") {
|
|
25
|
-
return /* @__PURE__ */ jsx(GlobalDocumentView, { comments:
|
|
28
|
+
return /* @__PURE__ */ jsx(GlobalDocumentView, { comments: visibleComments, userId, className: cn(className) });
|
|
26
29
|
}
|
|
27
|
-
return /* @__PURE__ */ jsx(GlobalView, { comments:
|
|
30
|
+
return /* @__PURE__ */ jsx(GlobalView, { comments: visibleComments, userId, className: cn(className) });
|
|
28
31
|
};
|
|
29
32
|
export {
|
|
30
33
|
CommentsPanel
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/CommentsPanel/index.tsx"],"sourcesContent":["\"use client\";\n\nimport { useAuth } from \"@payloadcms/ui\";\nimport { cn } from \"../../utils/general/cn\";\nimport { useComments } from \"../../providers/CommentsProvider\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/components/CommentsPanel/index.tsx"],"sourcesContent":["\"use client\";\n\nimport { useAuth, useLocale, useTranslation } from \"@payloadcms/ui\";\nimport { cn } from \"../../utils/general/cn\";\nimport { useComments } from \"../../providers/CommentsProvider\";\nimport { useCommentsQuery } from \"../../api/queries/useCommentsQuery\";\nimport { DocumentView } from \"./components/DocumentView\";\nimport { GlobalView } from \"./components/GlobalView\";\nimport { GlobalDocumentView } from \"./components/GlobalDocumentView\";\nimport { useScrollToTargetFieldGroup } from \"./hooks/useScrollToTargetFieldGroup\";\nimport { filterCommentsByLocale } from \"../../utils/comment/filterCommentsByLocale\";\n\ninterface Props {\n className: string;\n}\n\nexport const CommentsPanel = ({ className }: Props) => {\n const { user } = useAuth();\n const { t } = useTranslation();\n const { code: currentLocale } = useLocale();\n\n const { mode, queryContext } = useComments();\n const { data: allComments = [], isLoading } = useCommentsQuery(queryContext);\n\n const userId = (user?.id as number) ?? null;\n const visibleComments = filterCommentsByLocale(allComments, currentLocale);\n\n useScrollToTargetFieldGroup();\n\n if (isLoading && allComments.length === 0) {\n return (\n <div className={cn(className, \"text-(--theme-elevation-450) text-[13px] text-center py-6 m-0\")}>\n {t(\"comments:loadingComments\" as never)}\n </div>\n );\n }\n\n if (mode === \"document\") {\n return <DocumentView comments={visibleComments} userId={userId} className={cn(className)} />;\n }\n\n if (mode === \"global-document\") {\n return <GlobalDocumentView comments={visibleComments} userId={userId} className={cn(className)} />;\n }\n\n return <GlobalView comments={visibleComments} userId={userId} className={cn(className)} />;\n};\n"],"mappings":";AA+BM;AA7BN,SAAS,SAAS,WAAW,sBAAsB;AACnD,SAAS,UAAU;AACnB,SAAS,mBAAmB;AAC5B,SAAS,wBAAwB;AACjC,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB;AAC3B,SAAS,0BAA0B;AACnC,SAAS,mCAAmC;AAC5C,SAAS,8BAA8B;AAMhC,MAAM,gBAAgB,CAAC,EAAE,UAAU,MAAa;AACrD,QAAM,EAAE,KAAK,IAAI,QAAQ;AACzB,QAAM,EAAE,EAAE,IAAI,eAAe;AAC7B,QAAM,EAAE,MAAM,cAAc,IAAI,UAAU;AAE1C,QAAM,EAAE,MAAM,aAAa,IAAI,YAAY;AAC3C,QAAM,EAAE,MAAM,cAAc,CAAC,GAAG,UAAU,IAAI,iBAAiB,YAAY;AAE3E,QAAM,SAAU,MAAM,MAAiB;AACvC,QAAM,kBAAkB,uBAAuB,aAAa,aAAa;AAEzE,8BAA4B;AAE5B,MAAI,aAAa,YAAY,WAAW,GAAG;AACzC,WACE,oBAAC,SAAI,WAAW,GAAG,WAAW,+DAA+D,GAC1F,YAAE,0BAAmC,GACxC;AAAA,EAEJ;AAEA,MAAI,SAAS,YAAY;AACvB,WAAO,oBAAC,gBAAa,UAAU,iBAAiB,QAAgB,WAAW,GAAG,SAAS,GAAG;AAAA,EAC5F;AAEA,MAAI,SAAS,mBAAmB;AAC9B,WAAO,oBAAC,sBAAmB,UAAU,iBAAiB,QAAgB,WAAW,GAAG,SAAS,GAAG;AAAA,EAClG;AAEA,SAAO,oBAAC,cAAW,UAAU,iBAAiB,QAAgB,WAAW,GAAG,SAAS,GAAG;AAC1F;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFieldBreadcrumb.d.ts","sourceRoot":"","sources":["../../../../src/components/FieldCommentLabel/hooks/useFieldBreadcrumb.ts"],"names":[],"mappings":"AAoDA,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACpC,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACzC,UAAU,EAAE,MAAM,GAAG,IAAI,UAa1B"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useConfig } from "@payloadcms/ui";
|
|
3
|
+
import { findFieldByName, getLabelString } from "../../../services/fieldLabels/utils/schemaUtils";
|
|
4
|
+
function buildBreadcrumb(positionPath, leafLabel, schemaFields) {
|
|
5
|
+
const segments = positionPath.split(".");
|
|
6
|
+
const parts = [];
|
|
7
|
+
let currentFields = schemaFields;
|
|
8
|
+
for (let i = 0; i < segments.length; i++) {
|
|
9
|
+
const seg = segments[i] ?? "";
|
|
10
|
+
const isLast = i === segments.length - 1;
|
|
11
|
+
if (/^\d+$/.test(seg)) {
|
|
12
|
+
parts.push(`#${parseInt(seg, 10) + 1}`);
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
if (isLast) {
|
|
16
|
+
parts.push(leafLabel);
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
const field = findFieldByName(currentFields, seg);
|
|
20
|
+
if (!field) {
|
|
21
|
+
parts.push(seg);
|
|
22
|
+
currentFields = [];
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
parts.push(getLabelString(field));
|
|
26
|
+
if (field.type === "array") {
|
|
27
|
+
currentFields = field.fields;
|
|
28
|
+
} else if (field.type === "blocks") {
|
|
29
|
+
currentFields = field.blocks.flatMap((b) => b.fields);
|
|
30
|
+
} else if (field.type === "group") {
|
|
31
|
+
currentFields = field.fields;
|
|
32
|
+
} else if (field.type === "tabs") {
|
|
33
|
+
currentFields = field.tabs.flatMap((t) => t.fields ?? []);
|
|
34
|
+
} else if (field.type === "collapsible" || field.type === "row") {
|
|
35
|
+
currentFields = field.fields;
|
|
36
|
+
} else {
|
|
37
|
+
currentFields = [];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return parts.join(" > ");
|
|
41
|
+
}
|
|
42
|
+
function useFieldBreadcrumb(positionPath, leafLabel, collectionSlug, globalSlug) {
|
|
43
|
+
const { config } = useConfig();
|
|
44
|
+
if (!positionPath || !leafLabel) return leafLabel ?? positionPath ?? "";
|
|
45
|
+
if (!positionPath.includes(".")) return leafLabel;
|
|
46
|
+
const schemaFields = collectionSlug ? config.collections.find((c) => c.slug === collectionSlug)?.fields ?? [] : config.globals?.find((g) => g.slug === globalSlug)?.fields ?? [];
|
|
47
|
+
return buildBreadcrumb(positionPath, leafLabel, schemaFields);
|
|
48
|
+
}
|
|
49
|
+
export {
|
|
50
|
+
useFieldBreadcrumb
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=useFieldBreadcrumb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/FieldCommentLabel/hooks/useFieldBreadcrumb.ts"],"sourcesContent":["\"use client\";\n\nimport { useConfig } from \"@payloadcms/ui\";\nimport type { ArrayField, BlocksField, CollapsibleField, Field, GroupField, RowField, TabsField } from \"payload\";\nimport { findFieldByName, getLabelString } from \"../../../services/fieldLabels/utils/schemaUtils\";\n\nfunction buildBreadcrumb(positionPath: string, leafLabel: string, schemaFields: Field[]) {\n const segments = positionPath.split(\".\");\n const parts: string[] = [];\n let currentFields = schemaFields;\n\n for (let i = 0; i < segments.length; i++) {\n const seg = segments[i] ?? \"\";\n const isLast = i === segments.length - 1;\n\n if (/^\\d+$/.test(seg)) {\n parts.push(`#${parseInt(seg, 10) + 1}`);\n continue;\n }\n\n if (isLast) {\n parts.push(leafLabel);\n break;\n }\n\n const field = findFieldByName(currentFields, seg);\n if (!field) {\n parts.push(seg);\n currentFields = [];\n continue;\n }\n\n parts.push(getLabelString(field));\n\n if (field.type === \"array\") {\n currentFields = (field as ArrayField).fields;\n } else if (field.type === \"blocks\") {\n currentFields = (field as BlocksField).blocks.flatMap((b) => b.fields);\n } else if (field.type === \"group\") {\n currentFields = (field as GroupField).fields;\n } else if (field.type === \"tabs\") {\n currentFields = (field as TabsField).tabs.flatMap((t) => t.fields ?? []);\n } else if (field.type === \"collapsible\" || field.type === \"row\") {\n currentFields = (field as CollapsibleField | RowField).fields;\n } else {\n currentFields = [];\n }\n }\n\n return parts.join(\" > \");\n}\n\nexport function useFieldBreadcrumb(\n positionPath: string | undefined,\n leafLabel: string | null | undefined,\n collectionSlug: string | null | undefined,\n globalSlug: string | null,\n) {\n const { config } = useConfig();\n\n if (!positionPath || !leafLabel) return leafLabel ?? positionPath ?? \"\";\n if (!positionPath.includes(\".\")) return leafLabel;\n\n const schemaFields =\n collectionSlug ?\n (config.collections.find((c) => c.slug === collectionSlug)?.fields ?? [])\n : (config.globals?.find((g) => g.slug === globalSlug)?.fields ?? []);\n\n return buildBreadcrumb(positionPath, leafLabel, schemaFields as Field[]);\n}\n"],"mappings":";AAEA,SAAS,iBAAiB;AAE1B,SAAS,iBAAiB,sBAAsB;AAEhD,SAAS,gBAAgB,cAAsB,WAAmB,cAAuB;AACvF,QAAM,WAAW,aAAa,MAAM,GAAG;AACvC,QAAM,QAAkB,CAAC;AACzB,MAAI,gBAAgB;AAEpB,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,UAAM,MAAM,SAAS,CAAC,KAAK;AAC3B,UAAM,SAAS,MAAM,SAAS,SAAS;AAEvC,QAAI,QAAQ,KAAK,GAAG,GAAG;AACrB,YAAM,KAAK,IAAI,SAAS,KAAK,EAAE,IAAI,CAAC,EAAE;AACtC;AAAA,IACF;AAEA,QAAI,QAAQ;AACV,YAAM,KAAK,SAAS;AACpB;AAAA,IACF;AAEA,UAAM,QAAQ,gBAAgB,eAAe,GAAG;AAChD,QAAI,CAAC,OAAO;AACV,YAAM,KAAK,GAAG;AACd,sBAAgB,CAAC;AACjB;AAAA,IACF;AAEA,UAAM,KAAK,eAAe,KAAK,CAAC;AAEhC,QAAI,MAAM,SAAS,SAAS;AAC1B,sBAAiB,MAAqB;AAAA,IACxC,WAAW,MAAM,SAAS,UAAU;AAClC,sBAAiB,MAAsB,OAAO,QAAQ,CAAC,MAAM,EAAE,MAAM;AAAA,IACvE,WAAW,MAAM,SAAS,SAAS;AACjC,sBAAiB,MAAqB;AAAA,IACxC,WAAW,MAAM,SAAS,QAAQ;AAChC,sBAAiB,MAAoB,KAAK,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAAA,IACzE,WAAW,MAAM,SAAS,iBAAiB,MAAM,SAAS,OAAO;AAC/D,sBAAiB,MAAsC;AAAA,IACzD,OAAO;AACL,sBAAgB,CAAC;AAAA,IACnB;AAAA,EACF;AAEA,SAAO,MAAM,KAAK,KAAK;AACzB;AAEO,SAAS,mBACd,cACA,WACA,gBACA,YACA;AACA,QAAM,EAAE,OAAO,IAAI,UAAU;AAE7B,MAAI,CAAC,gBAAgB,CAAC,UAAW,QAAO,aAAa,gBAAgB;AACrE,MAAI,CAAC,aAAa,SAAS,GAAG,EAAG,QAAO;AAExC,QAAM,eACJ,iBACG,OAAO,YAAY,KAAK,CAAC,MAAM,EAAE,SAAS,cAAc,GAAG,UAAU,CAAC,IACtE,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,SAAS,UAAU,GAAG,UAAU,CAAC;AAEpE,SAAO,gBAAgB,cAAc,WAAW,YAAuB;AACzE;","names":[]}
|
|
@@ -6,6 +6,6 @@ interface Props extends FieldLabelClientProps {
|
|
|
6
6
|
required?: boolean;
|
|
7
7
|
};
|
|
8
8
|
}
|
|
9
|
-
export declare function FieldCommentLabel({ field, htmlFor, path: fieldPath }: Props): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export declare function FieldCommentLabel({ field, htmlFor, path: fieldPath }: Props): import("react/jsx-runtime").JSX.Element | null;
|
|
10
10
|
export {};
|
|
11
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FieldCommentLabel/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FieldCommentLabel/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAYrC,UAAU,KAAM,SAAQ,qBAAqB;IAC3C,KAAK,EAAE,qBAAqB,CAAC,OAAO,CAAC,GAAG;QACtC,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAED,wBAAgB,iBAAiB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,KAAK,kDAsE3E"}
|