@focus-reactive/payload-plugin-comments 1.1.1 → 1.3.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.
Files changed (163) hide show
  1. package/dist/api/mutations/useAddCommentMutation.d.ts +18 -0
  2. package/dist/api/mutations/useAddCommentMutation.d.ts.map +1 -0
  3. package/dist/api/mutations/useAddCommentMutation.js +52 -0
  4. package/dist/api/mutations/useAddCommentMutation.js.map +1 -0
  5. package/dist/api/mutations/useDeleteCommentMutation.d.ts +11 -0
  6. package/dist/api/mutations/useDeleteCommentMutation.d.ts.map +1 -0
  7. package/dist/api/mutations/useDeleteCommentMutation.js +31 -0
  8. package/dist/api/mutations/useDeleteCommentMutation.js.map +1 -0
  9. package/dist/api/mutations/useResolveCommentMutation.d.ts +13 -0
  10. package/dist/api/mutations/useResolveCommentMutation.d.ts.map +1 -0
  11. package/dist/api/mutations/useResolveCommentMutation.js +41 -0
  12. package/dist/api/mutations/useResolveCommentMutation.js.map +1 -0
  13. package/dist/api/queries/useCommentsQuery.d.ts +3 -0
  14. package/dist/api/queries/useCommentsQuery.d.ts.map +1 -0
  15. package/dist/api/queries/useCommentsQuery.js +40 -0
  16. package/dist/api/queries/useCommentsQuery.js.map +1 -0
  17. package/dist/api/queries/useDocumentTitlesQuery.d.ts +3 -0
  18. package/dist/api/queries/useDocumentTitlesQuery.d.ts.map +1 -0
  19. package/dist/api/queries/useDocumentTitlesQuery.js +32 -0
  20. package/dist/api/queries/useDocumentTitlesQuery.js.map +1 -0
  21. package/dist/api/queries/useFieldLabelsQuery.d.ts +3 -0
  22. package/dist/api/queries/useFieldLabelsQuery.d.ts.map +1 -0
  23. package/dist/api/queries/useFieldLabelsQuery.js +23 -0
  24. package/dist/api/queries/useFieldLabelsQuery.js.map +1 -0
  25. package/dist/api/queries/useMentionableUsersQuery.d.ts +2 -0
  26. package/dist/api/queries/useMentionableUsersQuery.d.ts.map +1 -0
  27. package/dist/api/queries/useMentionableUsersQuery.js +25 -0
  28. package/dist/api/queries/useMentionableUsersQuery.js.map +1 -0
  29. package/dist/api/queryKeys.d.ts +23 -0
  30. package/dist/api/queryKeys.d.ts.map +1 -0
  31. package/dist/api/queryKeys.js +40 -0
  32. package/dist/api/queryKeys.js.map +1 -0
  33. package/dist/components/CommentEditor/index.d.ts.map +1 -1
  34. package/dist/components/CommentEditor/index.js +5 -3
  35. package/dist/components/CommentEditor/index.js.map +1 -1
  36. package/dist/components/CommentItem/StrikethoroughOverlay/clamp.d.ts +2 -0
  37. package/dist/components/CommentItem/StrikethoroughOverlay/clamp.d.ts.map +1 -0
  38. package/dist/components/CommentItem/StrikethoroughOverlay/clamp.js +7 -0
  39. package/dist/components/CommentItem/StrikethoroughOverlay/clamp.js.map +1 -0
  40. package/dist/components/CommentItem/StrikethoroughOverlay/index.d.ts +8 -0
  41. package/dist/components/CommentItem/StrikethoroughOverlay/index.d.ts.map +1 -0
  42. package/dist/components/CommentItem/StrikethoroughOverlay/index.js +24 -0
  43. package/dist/components/CommentItem/StrikethoroughOverlay/index.js.map +1 -0
  44. package/dist/components/CommentItem/StrikethoroughOverlay/measureLineRects.d.ts +3 -0
  45. package/dist/components/CommentItem/StrikethoroughOverlay/measureLineRects.d.ts.map +1 -0
  46. package/dist/components/CommentItem/StrikethoroughOverlay/measureLineRects.js +29 -0
  47. package/dist/components/CommentItem/StrikethoroughOverlay/measureLineRects.js.map +1 -0
  48. package/dist/components/CommentItem/StrikethoroughOverlay/useStrikethroughAnimation.d.ts +7 -0
  49. package/dist/components/CommentItem/StrikethoroughOverlay/useStrikethroughAnimation.d.ts.map +1 -0
  50. package/dist/components/CommentItem/StrikethoroughOverlay/useStrikethroughAnimation.js +114 -0
  51. package/dist/components/CommentItem/StrikethoroughOverlay/useStrikethroughAnimation.js.map +1 -0
  52. package/dist/components/CommentItem/index.d.ts.map +1 -1
  53. package/dist/components/CommentItem/index.js +37 -18
  54. package/dist/components/CommentItem/index.js.map +1 -1
  55. package/dist/components/CommentsDrawer/components/Header.d.ts.map +1 -1
  56. package/dist/components/CommentsDrawer/components/Header.js +4 -33
  57. package/dist/components/CommentsDrawer/components/Header.js.map +1 -1
  58. package/dist/components/CommentsHeaderButton/index.js +2 -2
  59. package/dist/components/CommentsHeaderButton/index.js.map +1 -1
  60. package/dist/components/CommentsPanel/components/CollapsibleGroup.d.ts +8 -2
  61. package/dist/components/CommentsPanel/components/CollapsibleGroup.d.ts.map +1 -1
  62. package/dist/components/CommentsPanel/components/CollapsibleGroup.js +8 -3
  63. package/dist/components/CommentsPanel/components/CollapsibleGroup.js.map +1 -1
  64. package/dist/components/CommentsPanel/components/DocumentView.d.ts.map +1 -1
  65. package/dist/components/CommentsPanel/components/DocumentView.js +11 -17
  66. package/dist/components/CommentsPanel/components/DocumentView.js.map +1 -1
  67. package/dist/components/CommentsPanel/components/FieldGroupSection.d.ts.map +1 -1
  68. package/dist/components/CommentsPanel/components/FieldGroupSection.js +46 -22
  69. package/dist/components/CommentsPanel/components/FieldGroupSection.js.map +1 -1
  70. package/dist/components/CommentsPanel/components/GlobalDocumentView.d.ts.map +1 -1
  71. package/dist/components/CommentsPanel/components/GlobalDocumentView.js +3 -9
  72. package/dist/components/CommentsPanel/components/GlobalDocumentView.js.map +1 -1
  73. package/dist/components/CommentsPanel/components/GlobalView.d.ts.map +1 -1
  74. package/dist/components/CommentsPanel/components/GlobalView.js +38 -41
  75. package/dist/components/CommentsPanel/components/GlobalView.js.map +1 -1
  76. package/dist/components/CommentsPanel/hooks/useCollapseState.d.ts +1 -1
  77. package/dist/components/CommentsPanel/hooks/useCollapseState.d.ts.map +1 -1
  78. package/dist/components/CommentsPanel/hooks/useCollapseState.js +4 -1
  79. package/dist/components/CommentsPanel/hooks/useCollapseState.js.map +1 -1
  80. package/dist/components/CommentsPanel/hooks/useScrollToTargetFieldGroup.d.ts.map +1 -1
  81. package/dist/components/CommentsPanel/hooks/useScrollToTargetFieldGroup.js +6 -7
  82. package/dist/components/CommentsPanel/hooks/useScrollToTargetFieldGroup.js.map +1 -1
  83. package/dist/components/CommentsPanel/index.d.ts.map +1 -1
  84. package/dist/components/CommentsPanel/index.js +14 -11
  85. package/dist/components/CommentsPanel/index.js.map +1 -1
  86. package/dist/components/FieldCommentLabel/hooks/useFieldBreadcrumb.d.ts +2 -0
  87. package/dist/components/FieldCommentLabel/hooks/useFieldBreadcrumb.d.ts.map +1 -0
  88. package/dist/components/FieldCommentLabel/hooks/useFieldBreadcrumb.js +52 -0
  89. package/dist/components/FieldCommentLabel/hooks/useFieldBreadcrumb.js.map +1 -0
  90. package/dist/components/FieldCommentLabel/index.d.ts.map +1 -1
  91. package/dist/components/FieldCommentLabel/index.js +53 -41
  92. package/dist/components/FieldCommentLabel/index.js.map +1 -1
  93. package/dist/components/FieldCommentLabel/utils/exludeComments.js +2 -2
  94. package/dist/components/FieldCommentLabel/utils/exludeComments.js.map +1 -1
  95. package/dist/constants.d.ts +2 -0
  96. package/dist/constants.d.ts.map +1 -1
  97. package/dist/constants.js +5 -4
  98. package/dist/constants.js.map +1 -1
  99. package/dist/plugin.d.ts.map +1 -1
  100. package/dist/plugin.js +6 -2
  101. package/dist/plugin.js.map +1 -1
  102. package/dist/providers/CommentsDrawerProvider/index.d.ts +8 -0
  103. package/dist/providers/CommentsDrawerProvider/index.d.ts.map +1 -1
  104. package/dist/providers/CommentsDrawerProvider/index.js +22 -6
  105. package/dist/providers/CommentsDrawerProvider/index.js.map +1 -1
  106. package/dist/providers/CommentsProvider/index.d.ts +7 -17
  107. package/dist/providers/CommentsProvider/index.d.ts.map +1 -1
  108. package/dist/providers/CommentsProvider/index.js +105 -196
  109. package/dist/providers/CommentsProvider/index.js.map +1 -1
  110. package/dist/providers/CommentsProviderWrapper/index.d.ts +1 -1
  111. package/dist/providers/CommentsProviderWrapper/index.d.ts.map +1 -1
  112. package/dist/providers/CommentsProviderWrapper/index.js +11 -1
  113. package/dist/providers/CommentsProviderWrapper/index.js.map +1 -1
  114. package/dist/services/findAllComments.d.ts +4 -1
  115. package/dist/services/findAllComments.d.ts.map +1 -1
  116. package/dist/services/findAllComments.js +36 -10
  117. package/dist/services/findAllComments.js.map +1 -1
  118. package/dist/styles.css +1 -1
  119. package/dist/translations/en.d.ts.map +1 -1
  120. package/dist/translations/en.js +3 -7
  121. package/dist/translations/en.js.map +1 -1
  122. package/dist/translations/types.d.ts +2 -6
  123. package/dist/translations/types.d.ts.map +1 -1
  124. package/dist/types/general.d.ts +0 -2
  125. package/dist/types/general.d.ts.map +1 -1
  126. package/dist/types/index.d.ts +3 -2
  127. package/dist/types/index.d.ts.map +1 -1
  128. package/dist/types/query.d.ts +11 -0
  129. package/dist/types/query.d.ts.map +1 -0
  130. package/dist/types/query.js +1 -0
  131. package/dist/types/query.js.map +1 -0
  132. package/dist/utils/comment/filterCommentsByLocale.d.ts.map +1 -1
  133. package/dist/utils/comment/filterCommentsByLocale.js +0 -1
  134. package/dist/utils/comment/filterCommentsByLocale.js.map +1 -1
  135. package/dist/utils/query/toQueryContext.d.ts +3 -0
  136. package/dist/utils/query/toQueryContext.d.ts.map +1 -0
  137. package/dist/utils/query/toQueryContext.js +20 -0
  138. package/dist/utils/query/toQueryContext.js.map +1 -0
  139. package/package.json +2 -5
  140. package/dist/components/CommentsPanel/constants.d.ts +0 -3
  141. package/dist/components/CommentsPanel/constants.d.ts.map +0 -1
  142. package/dist/components/CommentsPanel/constants.js +0 -9
  143. package/dist/components/CommentsPanel/constants.js.map +0 -1
  144. package/dist/components/CommentsPanel/utils/filterComments.d.ts +0 -9
  145. package/dist/components/CommentsPanel/utils/filterComments.d.ts.map +0 -1
  146. package/dist/components/CommentsPanel/utils/filterComments.js +0 -17
  147. package/dist/components/CommentsPanel/utils/filterComments.js.map +0 -1
  148. package/dist/components/FieldCommentLabel/AddCommentPopup.d.ts +0 -8
  149. package/dist/components/FieldCommentLabel/AddCommentPopup.d.ts.map +0 -1
  150. package/dist/components/FieldCommentLabel/AddCommentPopup.js +0 -50
  151. package/dist/components/FieldCommentLabel/AddCommentPopup.js.map +0 -1
  152. package/dist/providers/GlobalCommentsLoader/GlobalCommentsHydrator.d.ts +0 -13
  153. package/dist/providers/GlobalCommentsLoader/GlobalCommentsHydrator.d.ts.map +0 -1
  154. package/dist/providers/GlobalCommentsLoader/GlobalCommentsHydrator.js +0 -22
  155. package/dist/providers/GlobalCommentsLoader/GlobalCommentsHydrator.js.map +0 -1
  156. package/dist/providers/GlobalCommentsLoader/index.d.ts +0 -10
  157. package/dist/providers/GlobalCommentsLoader/index.d.ts.map +0 -1
  158. package/dist/providers/GlobalCommentsLoader/index.js +0 -31
  159. package/dist/providers/GlobalCommentsLoader/index.js.map +0 -1
  160. package/dist/services/syncAllCommentsData.d.ts +0 -12
  161. package/dist/services/syncAllCommentsData.d.ts.map +0 -1
  162. package/dist/services/syncAllCommentsData.js +0 -48
  163. package/dist/services/syncAllCommentsData.js.map +0 -1
@@ -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,28 @@ 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";
13
+ import { DRAWER_OPENING_TIME } from "../../../constants";
10
14
  function FieldGroupSection({ fields, userId, collectionSlug, documentId, globalSlug }) {
11
15
  const { t } = useTranslation();
12
- const { fieldLabelRegistry } = useComments();
16
+ const { queryContext } = useComments();
17
+ const { data: fieldLabelRegistry = {} } = useFieldLabelsQuery(queryContext);
18
+ const { pendingField } = useCommentsDrawer();
19
+ const editorRef = useRef(null);
20
+ const pendingFieldCollapsibleGroup = useRef(null);
13
21
  const generalComments = fields.get(null) ?? [];
14
22
  const fieldEntries = [...fields.entries()].filter((entry) => entry[0] !== null);
23
+ const allEntries = [
24
+ ...fieldEntries,
25
+ ...pendingField && !fields.has(pendingField.path) ? [[pendingField.path, []]] : []
26
+ ];
27
+ useEffect(() => {
28
+ if (!pendingField) return;
29
+ pendingFieldCollapsibleGroup.current?.open();
30
+ const id = setTimeout(() => editorRef.current?.focus(), DRAWER_OPENING_TIME);
31
+ return () => clearTimeout(id);
32
+ }, [pendingField]);
15
33
  return /* @__PURE__ */ jsxs(Fragment, { children: [
16
34
  /* @__PURE__ */ jsx(
17
35
  CollapsibleGroup,
@@ -33,27 +51,33 @@ function FieldGroupSection({ fields, userId, collectionSlug, documentId, globalS
33
51
  ] })
34
52
  }
35
53
  ),
36
- fieldEntries.map(([fieldPath, fieldComments]) => /* @__PURE__ */ jsx(
37
- CollapsibleGroup,
38
- {
39
- groupKey: createCollapsibleGroupKey({ collectionSlug, documentId, globalSlug, fieldPath }),
40
- label: resolveFieldLabel({ registry: fieldLabelRegistry, collectionSlug, documentId, globalSlug, fieldPath }),
41
- level: "field",
42
- children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", "data-field-path": fieldPath, children: [
43
- fieldComments.map((comment) => /* @__PURE__ */ jsx(CommentItem, { comment, currentUserId: userId }, comment.id)),
44
- /* @__PURE__ */ jsx(
45
- CommentEditor,
46
- {
47
- fieldPath,
48
- collectionSlug,
49
- documentId,
50
- globalSlug
51
- }
52
- )
53
- ] })
54
- },
55
- fieldPath
56
- ))
54
+ allEntries.map(([fieldPath, fieldComments]) => {
55
+ const isPending = pendingField?.path === fieldPath;
56
+ return /* @__PURE__ */ jsx(
57
+ CollapsibleGroup,
58
+ {
59
+ fieldPath,
60
+ ref: isPending ? pendingFieldCollapsibleGroup : void 0,
61
+ groupKey: createCollapsibleGroupKey({ collectionSlug, documentId, globalSlug, fieldPath }),
62
+ label: isPending ? pendingField.label : resolveFieldLabel({ registry: fieldLabelRegistry, collectionSlug, documentId, globalSlug, fieldPath }),
63
+ level: "field",
64
+ children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", children: [
65
+ fieldComments.map((comment) => /* @__PURE__ */ jsx(CommentItem, { comment, currentUserId: userId }, comment.id)),
66
+ /* @__PURE__ */ jsx(
67
+ CommentEditor,
68
+ {
69
+ ref: isPending ? editorRef : void 0,
70
+ fieldPath,
71
+ collectionSlug,
72
+ documentId,
73
+ globalSlug
74
+ }
75
+ )
76
+ ] })
77
+ },
78
+ fieldPath
79
+ );
80
+ })
57
81
  ] });
58
82
  }
59
83
  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 { fieldLabelRegistry } = useComments();\n\n const generalComments = fields.get(null) ?? [];\n const fieldEntries = [...fields.entries()].filter((entry): entry is [string, Comment[]] => entry[0] !== null);\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 {fieldEntries.map(([fieldPath, fieldComments]) => (\n <CollapsibleGroup\n key={fieldPath}\n groupKey={createCollapsibleGroupKey({ collectionSlug, documentId, globalSlug, fieldPath })}\n label={resolveFieldLabel({ registry: fieldLabelRegistry, collectionSlug, documentId, globalSlug, fieldPath })}\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 fieldPath={fieldPath}\n collectionSlug={collectionSlug}\n documentId={documentId}\n globalSlug={globalSlug}\n />\n </div>\n </CollapsibleGroup>\n ))}\n </>\n );\n}\n"],"mappings":";AA2BI,mBAOQ,KAFJ,YALJ;AAzBJ,SAAS,sBAAsB;AAE/B,SAAS,wBAAwB;AACjC,SAAS,mBAAmB;AAC5B,SAAS,iCAAiC;AAC1C,SAAS,yBAAyB;AAClC,SAAS,mBAAmB;AAC5B,SAAS,qBAAqB;AAUvB,SAAS,kBAAkB,EAAE,QAAQ,QAAQ,gBAAgB,YAAY,WAAW,GAAU;AACnG,QAAM,EAAE,EAAE,IAAI,eAAe;AAC7B,QAAM,EAAE,mBAAmB,IAAI,YAAY;AAE3C,QAAM,kBAAkB,OAAO,IAAI,IAAI,KAAK,CAAC;AAC7C,QAAM,eAAe,CAAC,GAAG,OAAO,QAAQ,CAAC,EAAE,OAAO,CAAC,UAAwC,MAAM,CAAC,MAAM,IAAI;AAE5G,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,aAAa,IAAI,CAAC,CAAC,WAAW,aAAa,MAC1C;AAAA,MAAC;AAAA;AAAA,QAEC,UAAU,0BAA0B,EAAE,gBAAgB,YAAY,YAAY,UAAU,CAAC;AAAA,QACzF,OAAO,kBAAkB,EAAE,UAAU,oBAAoB,gBAAgB,YAAY,YAAY,UAAU,CAAC;AAAA,QAC5G,OAAM;AAAA,QACN,+BAAC,SAAI,WAAU,uBAAsB,mBAAiB,WACnD;AAAA,wBAAc,IAAI,CAAC,YAClB,oBAAC,eAA6B,SAAkB,eAAe,UAA7C,QAAQ,EAA6C,CACxE;AAAA,UAED;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA;AAAA,UACF;AAAA,WACF;AAAA;AAAA,MAfK;AAAA,IAgBP,CACD;AAAA,KACH;AAEJ;","names":[]}
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\";\nimport { DRAWER_OPENING_TIME } from \"../../../constants\";\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(), DRAWER_OPENING_TIME);\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 fieldPath={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\">\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":";AAmDI,mBAOQ,KAFJ,YALJ;AAjDJ,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;AACpC,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,mBAAmB;AAE3E,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;AAAA,UACA,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,uBACZ;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,QAtBK;AAAA,MAuBP;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":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAM9C,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,2CAiBxE"}
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, jsxs } from "react/jsx-runtime";
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 { t } = useTranslation();
10
- const { filter, globalSlug } = useComments();
7
+ const { globalSlug } = useComments();
11
8
  const fields = groupCommentsByFieldPath(comments);
12
- return /* @__PURE__ */ jsxs("div", { className, children: [
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, globalSlug: globalSlug ?? void 0 })
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 { useTranslation } from \"@payloadcms/ui\";\nimport type { Comment } from \"../../../types\";\nimport { useComments } from \"../../../providers/CommentsProvider\";\nimport { groupCommentsByFieldPath } from \"../utils/groupCommentsByFieldPath\";\nimport { FILTER_NO_COMMENTS_KEYS } from \"../constants\";\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 { t } = useTranslation();\n const { filter, globalSlug } = useComments();\n\n const fields = groupCommentsByFieldPath(comments);\n\n return (\n <div className={className}>\n {comments.length === 0 && (\n <p className=\"text-(--theme-elevation-450) text-[13px] text-center py-6 m-0\">\n {t(FILTER_NO_COMMENTS_KEYS[filter] as never)}\n </p>\n )}\n\n <FieldGroupSection fields={fields} userId={userId} globalSlug={globalSlug ?? undefined} />\n </div>\n );\n}\n"],"mappings":";AAsBI,SAEI,KAFJ;AApBJ,SAAS,sBAAsB;AAE/B,SAAS,mBAAmB;AAC5B,SAAS,gCAAgC;AACzC,SAAS,+BAA+B;AACxC,SAAS,yBAAyB;AAQ3B,SAAS,mBAAmB,EAAE,UAAU,QAAQ,UAAU,GAAU;AACzE,QAAM,EAAE,EAAE,IAAI,eAAe;AAC7B,QAAM,EAAE,QAAQ,WAAW,IAAI,YAAY;AAE3C,QAAM,SAAS,yBAAyB,QAAQ;AAEhD,SACE,qBAAC,SAAI,WACF;AAAA,aAAS,WAAW,KACnB,oBAAC,OAAE,WAAU,iEACV,YAAE,wBAAwB,MAAM,CAAU,GAC7C;AAAA,IAGF,oBAAC,qBAAkB,QAAgB,QAAgB,YAAY,cAAc,QAAW;AAAA,KAC1F;AAEJ;","names":[]}
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,2CAwDhE"}
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, jsxs } from "react/jsx-runtime";
3
- import { useLocale, useTranslation } from "@payloadcms/ui";
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 { t } = useTranslation();
13
- const { documentTitles, filter, collectionLabels, globalLabels } = useComments();
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__ */ jsxs("div", { className, children: [
17
- 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]) }),
18
- groupedComments.map((entry) => {
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: slug,
50
- label: resolveEntityLabel(globalLabels[slug], locale, slug),
22
+ groupKey: slug2,
23
+ label: resolveEntityLabel(collectionLabels[slug2], locale, slug2),
51
24
  level: "collection",
52
- children: /* @__PURE__ */ jsx(FieldGroupSection, { fields, userId, globalSlug: slug })
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
- slug
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, useTranslation } from \"@payloadcms/ui\";\nimport type { Comment } from \"../../../types/comment\";\nimport { useComments } from \"../../../providers/CommentsProvider\";\nimport { groupCommentsGlobally } from \"../utils/groupCommentsGlobally\";\nimport { resolveEntityLabel } from \"../utils/resolveEntityLabel\";\nimport { CollapsibleGroup } from \"./CollapsibleGroup\";\nimport { FILTER_NO_COMMENTS_KEYS } from \"../constants\";\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 { t } = useTranslation();\n const { documentTitles, filter, collectionLabels, globalLabels } = useComments();\n const { code: locale } = useLocale();\n const groupedComments = groupCommentsGlobally(comments);\n\n return (\n <div className={className}>\n {comments.length === 0 && (\n <p className=\"text-(--theme-elevation-450) text-[13px] text-center py-6 m-0\">\n {t(FILTER_NO_COMMENTS_KEYS[filter] as never)}\n </p>\n )}\n\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":";AAyBI,SAEI,KAFJ;AAvBJ,SAAS,WAAW,sBAAsB;AAE1C,SAAS,mBAAmB;AAC5B,SAAS,6BAA6B;AACtC,SAAS,0BAA0B;AACnC,SAAS,wBAAwB;AACjC,SAAS,+BAA+B;AACxC,SAAS,yBAAyB;AAClC,SAAS,iCAAiC;AAQnC,SAAS,WAAW,EAAE,UAAU,QAAQ,UAAU,GAAU;AACjE,QAAM,EAAE,EAAE,IAAI,eAAe;AAC7B,QAAM,EAAE,gBAAgB,QAAQ,kBAAkB,aAAa,IAAI,YAAY;AAC/E,QAAM,EAAE,MAAM,OAAO,IAAI,UAAU;AACnC,QAAM,kBAAkB,sBAAsB,QAAQ;AAEtD,SACE,qBAAC,SAAI,WACF;AAAA,aAAS,WAAW,KACnB,oBAAC,OAAE,WAAU,iEACV,YAAE,wBAAwB,MAAM,CAAU,GAC7C;AAAA,IAGD,gBAAgB,IAAI,CAAC,UAAU;AAC9B,UAAI,MAAM,SAAS,cAAc;AAC/B,cAAM,EAAE,MAAAA,OAAM,KAAK,IAAI;AAEvB,eACE;AAAA,UAAC;AAAA;AAAA,YAEC,UAAUA;AAAA,YACV,OAAO,mBAAmB,iBAAiBA,KAAI,GAAG,QAAQA,KAAI;AAAA,YAC9D,OAAM;AAAA,YACL,WAAC,GAAG,KAAK,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,OAAOC,OAAM,MAAM;AAC5C,oBAAM,QAAQ,eAAeD,KAAI,IAAI,OAAO,KAAK,CAAC,KAAK,OAAO,KAAK;AACnE,oBAAM,aAAa,OAAO,KAAK;AAE/B,qBACE;AAAA,gBAAC;AAAA;AAAA,kBAEC,UAAU,0BAA0B,EAAE,gBAAgBA,OAAM,WAAW,CAAC;AAAA,kBACxE,OAAO;AAAA,kBACP,OAAM;AAAA,kBACN,8BAAC,qBAAkB,QAAQC,SAAQ,QAAgB,gBAAgBD,OAAM,YAAwB;AAAA;AAAA,gBAJ5F;AAAA,cAKP;AAAA,YAEJ,CAAC;AAAA;AAAA,UAjBIA;AAAA,QAkBP;AAAA,MAEJ;AAEA,YAAM,EAAE,MAAM,OAAO,IAAI;AAEzB,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,UAAU;AAAA,UACV,OAAO,mBAAmB,aAAa,IAAI,GAAG,QAAQ,IAAI;AAAA,UAC1D,OAAM;AAAA,UACN,8BAAC,qBAAkB,QAAgB,QAAgB,YAAY,MAAM;AAAA;AAAA,QAJhE;AAAA,MAKP;AAAA,IAEJ,CAAC;AAAA,KACH;AAEJ;","names":["slug","fields"]}
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,CA8B7F"}
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"}
@@ -36,7 +36,10 @@ function useCollapseState(groupKey) {
36
36
  return next;
37
37
  });
38
38
  };
39
- return [isCollapsed, toggle];
39
+ const open = () => {
40
+ setIsCollapsed(false);
41
+ };
42
+ return [isCollapsed, toggle, open];
40
43
  }
41
44
  export {
42
45
  useCollapseState
@@ -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,UAA8D;AAC7F,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,SAAO,CAAC,aAAa,MAAM;AAC7B;","names":[]}
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":"useScrollToTargetFieldGroup.d.ts","sourceRoot":"","sources":["../../../../src/components/CommentsPanel/hooks/useScrollToTargetFieldGroup.ts"],"names":[],"mappings":"AAGA,wBAAgB,2BAA2B,SAqC1C"}
1
+ {"version":3,"file":"useScrollToTargetFieldGroup.d.ts","sourceRoot":"","sources":["../../../../src/components/CommentsPanel/hooks/useScrollToTargetFieldGroup.ts"],"names":[],"mappings":"AAIA,wBAAgB,2BAA2B,SAkC1C"}
@@ -1,3 +1,4 @@
1
+ import { DRAWER_OPENING_TIME } from "../../../constants";
1
2
  import { useCommentsDrawer } from "../../../providers/CommentsDrawerProvider";
2
3
  import { useLayoutEffect } from "react";
3
4
  function useScrollToTargetFieldGroup() {
@@ -14,18 +15,16 @@ function useScrollToTargetFieldGroup() {
14
15
  scrollContainer = scrollContainer.parentElement;
15
16
  }
16
17
  if (!scrollContainer || scrollContainer === document.documentElement) {
17
- section.scrollIntoView({ behavior: "smooth", block: "start" });
18
+ section.scrollIntoView({ behavior: "smooth", block: "end" });
18
19
  setScrollTargetPath(null);
19
20
  return;
20
21
  }
21
- const header = scrollContainer.querySelector("header");
22
- const headerHeight = header?.getBoundingClientRect().height ?? 0;
23
- const sectionTop = section.getBoundingClientRect().top;
24
- const containerTop = scrollContainer.getBoundingClientRect().top;
25
- const scrollOffset = sectionTop - containerTop - headerHeight + scrollContainer.scrollTop;
22
+ const sectionBottom = section.getBoundingClientRect().bottom;
23
+ const containerBottom = scrollContainer.getBoundingClientRect().bottom;
24
+ const scrollOffset = scrollContainer.scrollTop + (sectionBottom - containerBottom) + 10;
26
25
  scrollContainer.scrollTo({ top: scrollOffset, behavior: "smooth" });
27
26
  setScrollTargetPath(null);
28
- }, 300);
27
+ }, DRAWER_OPENING_TIME + 10);
29
28
  return () => clearTimeout(id);
30
29
  }, [scrollTargetPath, setScrollTargetPath]);
31
30
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/CommentsPanel/hooks/useScrollToTargetFieldGroup.ts"],"sourcesContent":["import { useCommentsDrawer } from \"../../../providers/CommentsDrawerProvider\";\nimport { useLayoutEffect } from \"react\";\n\nexport function useScrollToTargetFieldGroup() {\n const { scrollTargetPath, setScrollTargetPath } = useCommentsDrawer();\n\n useLayoutEffect(() => {\n if (!scrollTargetPath) return;\n\n const id = setTimeout(() => {\n const section = document.querySelector(`[data-field-path=\"${CSS.escape(scrollTargetPath)}\"]`);\n if (!section) return;\n\n let scrollContainer: Element | null = section.parentElement;\n\n while (scrollContainer && scrollContainer !== document.documentElement) {\n const { overflow, overflowY } = getComputedStyle(scrollContainer);\n if (/auto|scroll/.test(overflow + overflowY)) break;\n scrollContainer = scrollContainer.parentElement;\n }\n\n if (!scrollContainer || scrollContainer === document.documentElement) {\n section.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n setScrollTargetPath(null);\n return;\n }\n\n const header = scrollContainer.querySelector(\"header\");\n const headerHeight = header?.getBoundingClientRect().height ?? 0;\n\n const sectionTop = section.getBoundingClientRect().top;\n const containerTop = scrollContainer.getBoundingClientRect().top;\n const scrollOffset = sectionTop - containerTop - headerHeight + scrollContainer.scrollTop;\n\n scrollContainer.scrollTo({ top: scrollOffset, behavior: \"smooth\" });\n setScrollTargetPath(null);\n }, 300);\n\n return () => clearTimeout(id);\n }, [scrollTargetPath, setScrollTargetPath]);\n}\n"],"mappings":"AAAA,SAAS,yBAAyB;AAClC,SAAS,uBAAuB;AAEzB,SAAS,8BAA8B;AAC5C,QAAM,EAAE,kBAAkB,oBAAoB,IAAI,kBAAkB;AAEpE,kBAAgB,MAAM;AACpB,QAAI,CAAC,iBAAkB;AAEvB,UAAM,KAAK,WAAW,MAAM;AAC1B,YAAM,UAAU,SAAS,cAAc,qBAAqB,IAAI,OAAO,gBAAgB,CAAC,IAAI;AAC5F,UAAI,CAAC,QAAS;AAEd,UAAI,kBAAkC,QAAQ;AAE9C,aAAO,mBAAmB,oBAAoB,SAAS,iBAAiB;AACtE,cAAM,EAAE,UAAU,UAAU,IAAI,iBAAiB,eAAe;AAChE,YAAI,cAAc,KAAK,WAAW,SAAS,EAAG;AAC9C,0BAAkB,gBAAgB;AAAA,MACpC;AAEA,UAAI,CAAC,mBAAmB,oBAAoB,SAAS,iBAAiB;AACpE,gBAAQ,eAAe,EAAE,UAAU,UAAU,OAAO,QAAQ,CAAC;AAC7D,4BAAoB,IAAI;AACxB;AAAA,MACF;AAEA,YAAM,SAAS,gBAAgB,cAAc,QAAQ;AACrD,YAAM,eAAe,QAAQ,sBAAsB,EAAE,UAAU;AAE/D,YAAM,aAAa,QAAQ,sBAAsB,EAAE;AACnD,YAAM,eAAe,gBAAgB,sBAAsB,EAAE;AAC7D,YAAM,eAAe,aAAa,eAAe,eAAe,gBAAgB;AAEhF,sBAAgB,SAAS,EAAE,KAAK,cAAc,UAAU,SAAS,CAAC;AAClE,0BAAoB,IAAI;AAAA,IAC1B,GAAG,GAAG;AAEN,WAAO,MAAM,aAAa,EAAE;AAAA,EAC9B,GAAG,CAAC,kBAAkB,mBAAmB,CAAC;AAC5C;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/CommentsPanel/hooks/useScrollToTargetFieldGroup.ts"],"sourcesContent":["import { DRAWER_OPENING_TIME } from \"../../../constants\";\nimport { useCommentsDrawer } from \"../../../providers/CommentsDrawerProvider\";\nimport { useLayoutEffect } from \"react\";\n\nexport function useScrollToTargetFieldGroup() {\n const { scrollTargetPath, setScrollTargetPath } = useCommentsDrawer();\n\n useLayoutEffect(() => {\n if (!scrollTargetPath) return;\n\n const id = setTimeout(() => {\n const section = document.querySelector(`[data-field-path=\"${CSS.escape(scrollTargetPath)}\"]`);\n if (!section) return;\n\n let scrollContainer: Element | null = section.parentElement;\n\n while (scrollContainer && scrollContainer !== document.documentElement) {\n const { overflow, overflowY } = getComputedStyle(scrollContainer);\n if (/auto|scroll/.test(overflow + overflowY)) break;\n scrollContainer = scrollContainer.parentElement;\n }\n\n if (!scrollContainer || scrollContainer === document.documentElement) {\n section.scrollIntoView({ behavior: \"smooth\", block: \"end\" });\n setScrollTargetPath(null);\n return;\n }\n\n const sectionBottom = section.getBoundingClientRect().bottom;\n const containerBottom = scrollContainer.getBoundingClientRect().bottom;\n const scrollOffset = scrollContainer.scrollTop + (sectionBottom - containerBottom) + 10;\n\n scrollContainer.scrollTo({ top: scrollOffset, behavior: \"smooth\" });\n setScrollTargetPath(null);\n }, DRAWER_OPENING_TIME + 10);\n\n return () => clearTimeout(id);\n }, [scrollTargetPath, setScrollTargetPath]);\n}\n"],"mappings":"AAAA,SAAS,2BAA2B;AACpC,SAAS,yBAAyB;AAClC,SAAS,uBAAuB;AAEzB,SAAS,8BAA8B;AAC5C,QAAM,EAAE,kBAAkB,oBAAoB,IAAI,kBAAkB;AAEpE,kBAAgB,MAAM;AACpB,QAAI,CAAC,iBAAkB;AAEvB,UAAM,KAAK,WAAW,MAAM;AAC1B,YAAM,UAAU,SAAS,cAAc,qBAAqB,IAAI,OAAO,gBAAgB,CAAC,IAAI;AAC5F,UAAI,CAAC,QAAS;AAEd,UAAI,kBAAkC,QAAQ;AAE9C,aAAO,mBAAmB,oBAAoB,SAAS,iBAAiB;AACtE,cAAM,EAAE,UAAU,UAAU,IAAI,iBAAiB,eAAe;AAChE,YAAI,cAAc,KAAK,WAAW,SAAS,EAAG;AAC9C,0BAAkB,gBAAgB;AAAA,MACpC;AAEA,UAAI,CAAC,mBAAmB,oBAAoB,SAAS,iBAAiB;AACpE,gBAAQ,eAAe,EAAE,UAAU,UAAU,OAAO,MAAM,CAAC;AAC3D,4BAAoB,IAAI;AACxB;AAAA,MACF;AAEA,YAAM,gBAAgB,QAAQ,sBAAsB,EAAE;AACtD,YAAM,kBAAkB,gBAAgB,sBAAsB,EAAE;AAChE,YAAM,eAAe,gBAAgB,aAAa,gBAAgB,mBAAmB;AAErF,sBAAgB,SAAS,EAAE,KAAK,cAAc,UAAU,SAAS,CAAC;AAClE,0BAAoB,IAAI;AAAA,IAC1B,GAAG,sBAAsB,EAAE;AAE3B,WAAO,MAAM,aAAa,EAAE;AAAA,EAC9B,GAAG,CAAC,kBAAkB,mBAAmB,CAAC;AAC5C;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/CommentsPanel/index.tsx"],"names":[],"mappings":"AAWA,UAAU,KAAK;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,aAAa,kBAAmB,KAAK,4CAsBjD,CAAC"}
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 { filterComments } from "./utils/filterComments";
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 { visibleComments, filter, mode } = useComments();
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 filteredComments = filterComments({
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: filteredComments, userId, className: cn(className) });
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: filteredComments, userId, className: cn(className) });
28
+ return /* @__PURE__ */ jsx(GlobalDocumentView, { comments: visibleComments, userId, className: cn(className) });
26
29
  }
27
- return /* @__PURE__ */ jsx(GlobalView, { comments: filteredComments, userId, className: cn(className) });
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 { filterComments } from \"./utils/filterComments\";\nimport { DocumentView } from \"./components/DocumentView\";\nimport { GlobalView } from \"./components/GlobalView\";\nimport { GlobalDocumentView } from \"./components/GlobalDocumentView\";\nimport { useScrollToTargetFieldGroup } from \"./hooks/useScrollToTargetFieldGroup\";\n\ninterface Props {\n className: string;\n}\n\nexport const CommentsPanel = ({ className }: Props) => {\n const { user } = useAuth();\n const { visibleComments, filter, mode } = useComments();\n\n const userId = (user?.id as number) ?? null;\n const filteredComments = filterComments({\n comments: visibleComments,\n filter,\n currentUserId: userId ?? undefined,\n });\n\n useScrollToTargetFieldGroup();\n\n if (mode === \"document\") {\n return <DocumentView comments={filteredComments} userId={userId} className={cn(className)} />;\n }\n\n if (mode === \"global-document\") {\n return <GlobalDocumentView comments={filteredComments} userId={userId} className={cn(className)} />;\n }\n\n return <GlobalView comments={filteredComments} userId={userId} className={cn(className)} />;\n};\n"],"mappings":";AA6BW;AA3BX,SAAS,eAAe;AACxB,SAAS,UAAU;AACnB,SAAS,mBAAmB;AAC5B,SAAS,sBAAsB;AAC/B,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB;AAC3B,SAAS,0BAA0B;AACnC,SAAS,mCAAmC;AAMrC,MAAM,gBAAgB,CAAC,EAAE,UAAU,MAAa;AACrD,QAAM,EAAE,KAAK,IAAI,QAAQ;AACzB,QAAM,EAAE,iBAAiB,QAAQ,KAAK,IAAI,YAAY;AAEtD,QAAM,SAAU,MAAM,MAAiB;AACvC,QAAM,mBAAmB,eAAe;AAAA,IACtC,UAAU;AAAA,IACV;AAAA,IACA,eAAe,UAAU;AAAA,EAC3B,CAAC;AAED,8BAA4B;AAE5B,MAAI,SAAS,YAAY;AACvB,WAAO,oBAAC,gBAAa,UAAU,kBAAkB,QAAgB,WAAW,GAAG,SAAS,GAAG;AAAA,EAC7F;AAEA,MAAI,SAAS,mBAAmB;AAC9B,WAAO,oBAAC,sBAAmB,UAAU,kBAAkB,QAAgB,WAAW,GAAG,SAAS,GAAG;AAAA,EACnG;AAEA,SAAO,oBAAC,cAAW,UAAU,kBAAkB,QAAgB,WAAW,GAAG,SAAS,GAAG;AAC3F;","names":[]}
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,2 @@
1
+ export declare function useFieldBreadcrumb(positionPath: string | undefined, leafLabel: string | null | undefined, collectionSlug: string | null | undefined, globalSlug: string | null): string;
2
+ //# sourceMappingURL=useFieldBreadcrumb.d.ts.map
@@ -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":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FieldCommentLabel/index.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAQrC,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,kDAwD3E"}
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"}