@ynput/ayon-frontend-shared 0.4.2 → 0.4.3

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 (179) hide show
  1. package/dist/ProjectTreeTable.cjs.js +1 -1
  2. package/dist/ProjectTreeTable.es.js +247 -243
  3. package/dist/_virtual/index.cjs22.js +1 -1
  4. package/dist/_virtual/index.cjs23.js +1 -1
  5. package/dist/_virtual/index.cjs24.js +1 -1
  6. package/dist/_virtual/index.cjs4.js +1 -1
  7. package/dist/_virtual/index.cjs5.js +1 -1
  8. package/dist/_virtual/index.cjs6.js +1 -1
  9. package/dist/_virtual/index.cjs8.js +1 -1
  10. package/dist/_virtual/index.es22.js +3 -3
  11. package/dist/_virtual/index.es23.js +5 -5
  12. package/dist/_virtual/index.es24.js +5 -5
  13. package/dist/_virtual/index.es4.js +2 -5
  14. package/dist/_virtual/index.es4.js.map +1 -1
  15. package/dist/_virtual/index.es5.js +5 -2
  16. package/dist/_virtual/index.es5.js.map +1 -1
  17. package/dist/_virtual/index.es6.js +2 -2
  18. package/dist/_virtual/index.es8.js +2 -2
  19. package/dist/api.cjs.js +1 -1
  20. package/dist/api.es.js +446 -445
  21. package/dist/index.cjs.js +1 -1
  22. package/dist/index.es.js +20 -9
  23. package/dist/index.es.js.map +1 -1
  24. package/dist/node_modules/match-sorter/dist/match-sorter.esm.cjs.js +1 -1
  25. package/dist/node_modules/match-sorter/dist/match-sorter.esm.es.js +1 -1
  26. package/dist/node_modules/parse-numeric-range/index.cjs.js +1 -1
  27. package/dist/node_modules/parse-numeric-range/index.es.js +1 -1
  28. package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +1 -1
  29. package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
  30. package/dist/node_modules/rehype/node_modules/vfile/lib/index.cjs.js +1 -1
  31. package/dist/node_modules/rehype/node_modules/vfile/lib/index.es.js +1 -1
  32. package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
  33. package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
  34. package/dist/node_modules/remove-accents/index.cjs.js +1 -1
  35. package/dist/node_modules/remove-accents/index.es.js +1 -1
  36. package/dist/shared/node_modules/@module-federation/error-codes/dist/index.cjs.js +1 -1
  37. package/dist/shared/node_modules/@module-federation/error-codes/dist/index.es.js +1 -1
  38. package/dist/shared/node_modules/@module-federation/runtime/dist/index.cjs.js +1 -1
  39. package/dist/shared/node_modules/@module-federation/runtime/dist/index.es.js +1 -1
  40. package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.cjs.js +1 -1
  41. package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.es.js +1 -1
  42. package/dist/shared/node_modules/react-is/index.cjs.js +1 -1
  43. package/dist/shared/node_modules/react-is/index.es.js +1 -1
  44. package/dist/shared/src/api/generated/graphql.cjs.js +85 -28
  45. package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
  46. package/dist/shared/src/api/generated/graphql.es.js +129 -68
  47. package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
  48. package/dist/shared/src/api/queries/columnStats/metricTargets.cjs.js +1 -1
  49. package/dist/shared/src/api/queries/columnStats/metricTargets.cjs.js.map +1 -1
  50. package/dist/shared/src/api/queries/columnStats/metricTargets.es.js +36 -36
  51. package/dist/shared/src/api/queries/columnStats/metricTargets.es.js.map +1 -1
  52. package/dist/shared/src/components/Chips/Chips.cjs.js +12 -6
  53. package/dist/shared/src/components/Chips/Chips.cjs.js.map +1 -1
  54. package/dist/shared/src/components/Chips/Chips.es.js +69 -62
  55. package/dist/shared/src/components/Chips/Chips.es.js.map +1 -1
  56. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js +1 -1
  57. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js.map +1 -1
  58. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js +32 -12
  59. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js.map +1 -1
  60. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +2 -2
  61. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
  62. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +33 -33
  63. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
  64. package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js.map +1 -1
  65. package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js.map +1 -1
  66. package/dist/shared/src/components/SubtasksManager/SubtasksManagerWrapper.cjs.js +1 -1
  67. package/dist/shared/src/components/SubtasksManager/SubtasksManagerWrapper.cjs.js.map +1 -1
  68. package/dist/shared/src/components/SubtasksManager/SubtasksManagerWrapper.es.js +39 -8
  69. package/dist/shared/src/components/SubtasksManager/SubtasksManagerWrapper.es.js.map +1 -1
  70. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
  71. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  72. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +32 -31
  73. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  74. package/dist/shared/src/containers/DetailsPanel/containers/FeedWrapper.cjs.js.map +1 -1
  75. package/dist/shared/src/containers/DetailsPanel/containers/FeedWrapper.es.js.map +1 -1
  76. package/dist/shared/src/containers/Feed/helpers/buildBackendFilter.cjs.js +1 -1
  77. package/dist/shared/src/containers/Feed/helpers/buildBackendFilter.cjs.js.map +1 -1
  78. package/dist/shared/src/containers/Feed/helpers/buildBackendFilter.es.js +24 -18
  79. package/dist/shared/src/containers/Feed/helpers/buildBackendFilter.es.js.map +1 -1
  80. package/dist/shared/src/containers/Feed/helpers/feedFilterAdapter.cjs.js +1 -1
  81. package/dist/shared/src/containers/Feed/helpers/feedFilterAdapter.cjs.js.map +1 -1
  82. package/dist/shared/src/containers/Feed/helpers/feedFilterAdapter.es.js +26 -25
  83. package/dist/shared/src/containers/Feed/helpers/feedFilterAdapter.es.js.map +1 -1
  84. package/dist/shared/src/containers/ListTable/ListTableCell.cjs.js +1 -1
  85. package/dist/shared/src/containers/ListTable/ListTableCell.cjs.js.map +1 -1
  86. package/dist/shared/src/containers/ListTable/ListTableCell.es.js +14 -2
  87. package/dist/shared/src/containers/ListTable/ListTableCell.es.js.map +1 -1
  88. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +1 -1
  89. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  90. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +125 -126
  91. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  92. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js +6 -0
  93. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js.map +1 -1
  94. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.es.js +14 -8
  95. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.es.js.map +1 -1
  96. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
  97. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  98. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +200 -178
  99. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  100. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +1 -1
  101. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
  102. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +14 -3
  103. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
  104. package/dist/shared/src/containers/ProjectTreeTable/constants.cjs.js +1 -1
  105. package/dist/shared/src/containers/ProjectTreeTable/constants.cjs.js.map +1 -1
  106. package/dist/shared/src/containers/ProjectTreeTable/constants.es.js +6 -3
  107. package/dist/shared/src/containers/ProjectTreeTable/constants.es.js.map +1 -1
  108. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.cjs.js +1 -1
  109. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.cjs.js.map +1 -1
  110. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.es.js +19 -19
  111. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.es.js.map +1 -1
  112. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +5 -3
  113. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
  114. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +100 -97
  115. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
  116. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidget.cjs.js +9 -1
  117. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidget.cjs.js.map +1 -1
  118. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidget.es.js +47 -31
  119. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidget.es.js.map +1 -1
  120. package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.cjs.js +28 -9
  121. package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.cjs.js.map +1 -1
  122. package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.es.js +58 -39
  123. package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.es.js.map +1 -1
  124. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.cjs.js +53 -25
  125. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.cjs.js.map +1 -1
  126. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.es.js +150 -103
  127. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.es.js.map +1 -1
  128. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.cjs.js +9 -2
  129. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.cjs.js.map +1 -1
  130. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.es.js +66 -57
  131. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.es.js.map +1 -1
  132. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js +1 -1
  133. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js.map +1 -1
  134. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js +9 -8
  135. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js.map +1 -1
  136. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.cjs.js +20 -4
  137. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.cjs.js.map +1 -1
  138. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.es.js +86 -67
  139. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.es.js.map +1 -1
  140. package/dist/shared/src/containers/ProjectTreeTable/widgets/wrapMode.cjs.js +6 -0
  141. package/dist/shared/src/containers/ProjectTreeTable/widgets/wrapMode.cjs.js.map +1 -0
  142. package/dist/shared/src/containers/ProjectTreeTable/widgets/wrapMode.es.js +11 -0
  143. package/dist/shared/src/containers/ProjectTreeTable/widgets/wrapMode.es.js.map +1 -0
  144. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js +1 -1
  145. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js.map +1 -1
  146. package/dist/shared/src/containers/Views/context/ViewsContext.es.js +67 -62
  147. package/dist/shared/src/containers/Views/context/ViewsContext.es.js.map +1 -1
  148. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js +1 -1
  149. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js.map +1 -1
  150. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js +47 -46
  151. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js.map +1 -1
  152. package/dist/shared/src/context/ProjectContext.cjs.js +1 -1
  153. package/dist/shared/src/context/ProjectContext.cjs.js.map +1 -1
  154. package/dist/shared/src/context/ProjectContext.es.js +1 -1
  155. package/dist/shared/src/context/ProjectContext.es.js.map +1 -1
  156. package/dist/shared/src/util/buildHierarchicalTableRows.cjs.js +1 -1
  157. package/dist/shared/src/util/buildHierarchicalTableRows.cjs.js.map +1 -1
  158. package/dist/shared/src/util/buildHierarchicalTableRows.es.js +36 -33
  159. package/dist/shared/src/util/buildHierarchicalTableRows.es.js.map +1 -1
  160. package/dist/types/api/generated/graphql.d.ts +71 -0
  161. package/dist/types/api/queries/activities/getActivities.d.ts +28 -0
  162. package/dist/types/api/queries/entities/getEntity.d.ts +14 -0
  163. package/dist/types/api/queries/entities/getEntityPanel.d.ts +14 -0
  164. package/dist/types/api/queries/entities/updateEntity.d.ts +14 -0
  165. package/dist/types/api/queries/entityLists/getLists.d.ts +14 -0
  166. package/dist/types/api/queries/overview/getOverview.d.ts +14 -0
  167. package/dist/types/api/queries/project/getProject.d.ts +14 -0
  168. package/dist/types/api/queries/userDashboard/getUserDashboard.d.ts +14 -0
  169. package/dist/types/api/queries/users/getUsers.d.ts +14 -0
  170. package/dist/types/api/queries/versions/getVersionsProducts.d.ts +28 -0
  171. package/dist/types/components/SubtasksManager/SubtasksManagerWrapper.d.ts +4 -1
  172. package/dist/types/containers/Feed/helpers/buildBackendFilter.d.ts +1 -0
  173. package/dist/types/containers/ProjectTreeTable/buildTreeTableColumns.d.ts +1 -0
  174. package/dist/types/containers/ProjectTreeTable/constants.d.ts +3 -0
  175. package/dist/types/containers/ProjectTreeTable/widgets/SubtasksWidget.d.ts +1 -0
  176. package/dist/types/containers/ProjectTreeTable/widgets/wrapMode.d.ts +2 -0
  177. package/dist/types/containers/Views/context/ViewsContext.d.ts +1 -0
  178. package/dist/types/util/buildHierarchicalTableRows.d.ts +2 -0
  179. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  import { j as o } from "../../../../_virtual/jsx-runtime.es.js";
2
- import { Button as It } from "@ynput/ayon-react-components";
2
+ import { Button as Dt } from "@ynput/ayon-react-components";
3
3
  import { useRef as b, useEffect as l, useMemo as R } from "react";
4
4
  import wt from "./hooks/useDetailsPanelURLSync.es.js";
5
5
  import { Panel as Ft, Toolbar as Rt, RightTools as St } from "./DetailsPanel.styled.es.js";
@@ -176,10 +176,10 @@ const te = ["product", "representation"], ee = ({
176
176
  }, [e, m, j]), l(() => {
177
177
  d.length && r && v(null);
178
178
  }, [d, r, v]);
179
- const D = R(
179
+ const I = R(
180
180
  () => Yt(g, f),
181
181
  [g, f]
182
- ), Pt = R(() => Zt(D), [D]);
182
+ ), Pt = R(() => Zt(I), [I]);
183
183
  l(() => {
184
184
  m === "files" && e !== "version" && j("feed"), m === "subtasks" && e !== "task" && j("feed");
185
185
  }, [e, m, u]);
@@ -202,27 +202,27 @@ const te = ["product", "representation"], ee = ({
202
202
  l(() => {
203
203
  h || G();
204
204
  }, [Et, h]);
205
- const I = b(null);
205
+ const D = b(null);
206
206
  l(() => {
207
- r || (I.current = null);
207
+ r || (D.current = null);
208
208
  }, [r]), l(() => {
209
209
  if (!y && (r?.source === "uri" || r?.source === "url") && r?.entities?.length && k) {
210
210
  const t = r.entities[0].id;
211
- if (I.current === t) return;
212
- const i = s.find((n) => n.id === t);
211
+ if (D.current === t) return;
212
+ const i = s.find((a) => a.id === t);
213
213
  if (!i) return;
214
- I.current = t, k(i, r.source);
214
+ D.current = t, k(i, r.source);
215
215
  }
216
216
  }, [s, y, r, k]);
217
- const X = _t(g), p = f[0], _ = g[p] || {}, a = s[0] || {}, E = s[s.length - 1], w = f[f.length - 1], [z, bt] = Xt({
218
- entity: a,
217
+ const X = _t(g), p = f[0], _ = g[p] || {}, n = s[0] || {}, E = s[s.length - 1], w = f[f.length - 1], [z, bt] = Xt({
218
+ entity: n,
219
219
  entityType: e,
220
220
  projectName: p,
221
221
  isLoading: y
222
222
  }), { setEntityUri: Tt, setUri: J } = Vt();
223
223
  l(() => {
224
224
  if (!E?.parents || !w) return;
225
- const { folderPath: t, taskName: i, versionName: n, productName: tt } = At(
225
+ const { folderPath: t, taskName: i, versionName: a, productName: tt } = At(
226
226
  E.parents,
227
227
  e,
228
228
  E.name
@@ -232,7 +232,7 @@ const te = ["product", "representation"], ee = ({
232
232
  folderPath: t,
233
233
  taskName: i,
234
234
  productName: tt,
235
- versionName: n
235
+ versionName: a
236
236
  }), () => {
237
237
  J("");
238
238
  };
@@ -256,32 +256,32 @@ const te = ["product", "representation"], ee = ({
256
256
  l(() => {
257
257
  const t = (i) => {
258
258
  if (i.key === "Escape" && x) {
259
- const n = i.target;
260
- if (["INPUT", "TEXTAREA", "SELECT"].includes(n.tagName) || n.isContentEditable || h === !1 && (n.closest("#viewer-dialog") || V)) return;
259
+ const a = i.target;
260
+ if (["INPUT", "TEXTAREA", "SELECT"].includes(a.tagName) || a.isContentEditable || h === !1 && (a.closest("#viewer-dialog") || V)) return;
261
261
  F();
262
262
  }
263
263
  };
264
264
  return window.addEventListener("keydown", t), () => window.removeEventListener("keydown", t);
265
265
  }, [F, h, V]);
266
266
  const { requestPipWindow: xt } = Mt(), Y = b(null), Z = b(null), kt = s.length === 1 && e !== "representation", vt = R(() => {
267
- const t = a?.label || a?.name || "", i = a?.parents || [], n = [p];
267
+ const t = n?.label || n?.name || "", i = n?.parents || [], a = [p];
268
268
  switch (e) {
269
269
  case "folder":
270
270
  case "task":
271
271
  case "product":
272
- n.push(i.at(-1), t);
272
+ a.push(i.at(-1), t);
273
273
  break;
274
274
  case "version":
275
- n.push(i.at(-2), i.at(-1), t);
275
+ a.push(i.at(-2), i.at(-1), t);
276
276
  break;
277
277
  case "representation":
278
- n.push(i.at(-3), i.at(-2), i.at(-1), t);
278
+ a.push(i.at(-3), i.at(-2), i.at(-1), t);
279
279
  break;
280
280
  default:
281
- n.push(t);
281
+ a.push(t);
282
282
  }
283
- return n.filter(Boolean).join(" - ");
284
- }, [a, e, p]), Dt = () => {
283
+ return a.filter(Boolean).join(" - ");
284
+ }, [n, e, p]), It = () => {
285
285
  lt({
286
286
  entityType: e,
287
287
  entities: c,
@@ -317,7 +317,7 @@ const te = ["product", "representation"], ee = ({
317
317
  Kt,
318
318
  {
319
319
  entityType: e,
320
- entityId: a?.id,
320
+ entityId: n?.id,
321
321
  entityIds: c.map((t) => t.id).filter(Boolean),
322
322
  entityLabel: vt,
323
323
  projectName: p,
@@ -334,11 +334,11 @@ const te = ["product", "representation"], ee = ({
334
334
  };
335
335
  }),
336
336
  entityListsContext: mt,
337
- onOpenPip: Dt,
337
+ onOpenPip: It,
338
338
  onOpenViewer: U,
339
- productId: a?.product?.id,
340
- taskId: a?.task?.id,
341
- folderId: a?.folder?.id
339
+ productId: n?.product?.id,
340
+ taskId: n?.task?.id,
341
+ folderId: n?.folder?.id
342
342
  }
343
343
  ),
344
344
  /* @__PURE__ */ o.jsx(
@@ -352,7 +352,7 @@ const te = ["product", "representation"], ee = ({
352
352
  }
353
353
  ),
354
354
  x && /* @__PURE__ */ o.jsx(
355
- It,
355
+ Dt,
356
356
  {
357
357
  icon: "close",
358
358
  variant: "text",
@@ -376,7 +376,7 @@ const te = ["product", "representation"], ee = ({
376
376
  isCompact: nt,
377
377
  currentTab: m,
378
378
  onTabChange: j,
379
- projectInfo: D,
379
+ projectInfo: I,
380
380
  onOpenViewer: (t) => U?.(t),
381
381
  onEntityFocus: at,
382
382
  thumbnailInputRef: Y,
@@ -403,12 +403,13 @@ const te = ["product", "representation"], ee = ({
403
403
  isSlideOut: h
404
404
  }
405
405
  ),
406
- m === "subtasks" && e === "task" && a?.id && Q && /* @__PURE__ */ o.jsx(
406
+ m === "subtasks" && e === "task" && n?.id && Q && /* @__PURE__ */ o.jsx(
407
407
  $t,
408
408
  {
409
409
  projectName: p,
410
- taskId: a.id,
411
- subtasks: a.task?.subtasks || [],
410
+ taskId: n.id,
411
+ folderId: n.folder?.id,
412
+ subtasks: n.task?.subtasks || [],
412
413
  SubtasksManager: Q,
413
414
  useNavigate: ut,
414
415
  onNotFound: () => j("feed")
@@ -1 +1 @@
1
- {"version":3,"file":"DetailsPanel.es.js","sources":["../../../../../src/containers/DetailsPanel/DetailsPanel.tsx"],"sourcesContent":["import { Button } from '@ynput/ayon-react-components'\nimport React, { useEffect, useMemo, useRef, useState } from 'react'\nimport useDetailsPanelURLSync from './hooks/useDetailsPanelURLSync'\nimport * as Styled from './DetailsPanel.styled'\n\n// shared\nimport { useGetEntitiesDetailsPanelQuery, detailsPanelEntityTypes } from '@shared/api'\nimport type { Tag, DetailsPanelEntityType, DetailsPanelEntityData } from '@shared/api'\nimport { DetailsPanelDetails } from '@shared/components/DetailsPanelDetails/DetailsPanelDetails'\nimport { EntityPath } from '@shared/components/EntityPath/EntityPath'\nimport { Watchers } from '@shared/components/Watchers/Watchers'\nimport { usePiPWindow } from '@shared/context/pip/PiPProvider'\nimport { extractEntityHierarchyFromParents } from '@shared/util'\nimport { ProjectContextProvider } from '@shared/context/ProjectContext'\nimport { ThumbnailUploadProvider } from '@shared/context/ThumbnailUploaderContext'\nimport {\n useDetailsPanelContext,\n useScopedDetailsPanel,\n setDetailsPanelTabForScope,\n} from '@shared/context/DetailsPanelContext'\nimport { useURIContext } from '@shared/context/UriContext'\nimport type { ProjectModelWithProducts } from '@shared/context/ProjectContext'\nimport type { FeedFilter } from '@shared/context/DetailsPanelContext'\n\nimport DetailsPanelHeader from './components/DetailsPanelHeader/DetailsPanelHeader'\nimport DetailsPanelFiles from './components/DetailsPanelFiles'\nimport {\n DetailsPanelMoreMenu,\n type DetailsPanelEntityListsContext,\n} from './components/DetailsPanelMoreMenu'\nimport useGetEntityPath from './hooks/useGetEntityPath'\nimport getAllProjectStatuses from './helpers/getAllProjectsStatuses'\nimport FeedWrapper from './containers/FeedWrapper'\nimport FeedContextWrapper from './containers/FeedContextWrapper'\nimport mergeProjectInfo from './helpers/mergeProjectInfo'\nimport buildEntityTypeIcons from './helpers/buildEntityTypeIcons'\nimport DetailsPanelSubtasks from './containers/DetailsPanelSubtasks'\n\nexport const entitiesWithoutFeed = ['product', 'representation']\n\ntype User = { avatarUrl: string; name: string; fullName?: string }\n\nexport type DetailsPanelProps = {\n entityType: DetailsPanelEntityType\n entitySubTypes?: string[] // used to get actions before the entity has loaded\n entitiesData?: { id: string; label: string; type: DetailsPanelEntityType }[]\n entities?: { id: string; projectName: string }[]\n tagsOptions?: Tag[]\n disabledStatuses?: string[]\n projectUsers?: User[]\n disabledProjectUsers?: string[]\n activeProjectUsers?: string[]\n projectsInfo?: Record<string, ProjectModelWithProducts>\n projectNames?: string[]\n isSlideOut?: boolean\n style?: React.CSSProperties\n scope: string\n isCompact?: boolean\n onClose?: () => void\n onWatchersUpdate?: (added: any[], removed: any[]) => void\n onOpenViewer?: (entity: any) => void\n onEntityFocus?: (id: string, entityType: DetailsPanelEntityType) => void\n onOpen?: () => void\n onUriOpen?: (entity: DetailsPanelEntityData, source: 'uri' | 'url') => void\n // annotations\n annotations?: any\n removeAnnotation?: (id: string) => void\n exportAnnotationComposite?: (id: string) => Promise<Blob | null>\n entityListId?: string\n guestCategories?: Record<string, string> // only used for guests to find if they have access to any categories\n /** Optional EntityListsContext for the \"Add to list\" sub-menu in the more-menu.\n * Hosts that already mount EntityListsProvider can pass the resolved context here;\n * otherwise wrap the panel with EntityListsContextBoundary. The shape mirrors\n * `EntityListsContextType` from `src/pages/ProjectListsPage/context` — it lives as a\n * structural type in shared/ so the layering rule (shared cannot import src/pages)\n * is preserved. */\n entityListsContext?: DetailsPanelEntityListsContext\n // optional tab state for independent tab management\n}\n\nconst DetailsPanelInner = ({\n entityType,\n entitySubTypes = [],\n // entities is data we already have from kanban\n entitiesData = [],\n // entityIds are used to get the full details data for the entities\n entities = [],\n tagsOptions = [],\n disabledStatuses,\n projectUsers,\n disabledProjectUsers,\n activeProjectUsers,\n projectsInfo = {},\n projectNames = [],\n isSlideOut = false,\n style = {},\n scope,\n isCompact = false,\n onClose,\n onWatchersUpdate,\n onOpenViewer,\n onEntityFocus,\n onOpen,\n onUriOpen, // when the details panel is opened from uri\n // annotations\n annotations,\n removeAnnotation,\n exportAnnotationComposite,\n entityListId,\n guestCategories = {},\n entityListsContext,\n}: // optional tab state for independent tab management\nDetailsPanelProps) => {\n const {\n closeSlideOut,\n openPip,\n user,\n isGuest,\n entities: contextEntities,\n setEntities,\n slideOut,\n useSearchParams,\n SubtasksManager,\n useNavigate,\n } = useDetailsPanelContext()\n const { currentTab, setTab, isFeed } = useScopedDetailsPanel(scope)\n const [_searchParams, setSearchParams] = useSearchParams()\n const hasCalledOnOpen = useRef(false)\n\n // Use context entities if available, otherwise use props\n const activeEntityType = contextEntities?.entityType ?? entityType\n const activeEntities = contextEntities?.entities ?? entities\n const activeEntitySubTypes = contextEntities?.entitySubTypes ?? entitySubTypes\n const activeEntitiesData = contextEntities?.entities ? [] : entitiesData\n const activeProjectNames = contextEntities?.entities\n ? contextEntities.entities.map((e) => e.projectName)\n : projectNames\n\n // Fire onOpen callback once when component mounts and renders\n useEffect(() => {\n if (onOpen && !hasCalledOnOpen.current) {\n hasCalledOnOpen.current = true\n onOpen()\n }\n }, [])\n\n // Force details tab for specific entity types\n useEffect(() => {\n if (entitiesWithoutFeed.includes(activeEntityType) && currentTab !== 'details') {\n setTab('details')\n }\n }, [activeEntityType, currentTab, setTab])\n\n // once component is provided with specific entities, remove context entities to avoid conflicts\n useEffect(() => {\n if (entities.length && contextEntities) {\n setEntities(null)\n }\n }, [entities, contextEntities, setEntities])\n\n // reduce projectsInfo to selected projects and into one\n const projectInfo = useMemo(\n () => mergeProjectInfo(projectsInfo, activeProjectNames),\n [projectsInfo, activeProjectNames],\n )\n\n // build icons for entity types (used by the entity path breadcrumb)\n const entityTypeIcons = useMemo(() => buildEntityTypeIcons(projectInfo), [projectInfo])\n\n // for example when switching from version to task, task doesn't have reps tab\n // if reps tab was selected, set default to feed\n useEffect(() => {\n if (currentTab === 'files') {\n // check entity type is still version\n if (activeEntityType !== 'version') {\n setTab('feed')\n }\n }\n // Reset to feed if subtasks tab is selected but entity is not a task\n if (currentTab === 'subtasks' && activeEntityType !== 'task') {\n setTab('feed')\n }\n }, [activeEntityType, currentTab, scope])\n\n // now we get the full details data for selected entities\n let entitiesToQuery = activeEntities.length\n ? activeEntities.map((entity) => ({ id: entity.id, projectName: entity.projectName }))\n : // @ts-expect-error = not sure what's going on with activeEntitiesData, we should try and remove it\n activeEntitiesData.map((entity) => ({ id: entity.id, projectName: entity.projectName }))\n\n entitiesToQuery = entitiesToQuery.filter((entity) => entity.id)\n\n const {\n data: entityDetailsData = [],\n isFetching: isFetchingEntitiesDetails,\n isError,\n originalArgs,\n } = useGetEntitiesDetailsPanelQuery(\n { entityType: activeEntityType, entities: entitiesToQuery },\n {\n skip: !entitiesToQuery.length || !detailsPanelEntityTypes.includes(activeEntityType),\n },\n )\n\n // the entity changes then we close the slide out\n useEffect(() => {\n if (!isSlideOut) {\n closeSlideOut()\n }\n }, [originalArgs, isSlideOut])\n\n // fire onUriOpen once per context entity — a details refetch must not re-run the jump/filter reset\n const uriOpenFiredForId = useRef<string | null>(null)\n useEffect(() => {\n if (!contextEntities) uriOpenFiredForId.current = null\n }, [contextEntities])\n\n // if the details panel is opened via the uri, run callback\n useEffect(() => {\n if (isFetchingEntitiesDetails) return\n\n if (\n (contextEntities?.source === 'uri' || contextEntities?.source === 'url') &&\n contextEntities?.entities?.length &&\n !!onUriOpen\n ) {\n const targetId = contextEntities.entities[0].id\n if (uriOpenFiredForId.current === targetId) return\n\n const uriEntity = entityDetailsData.find((entity) => entity.id === targetId)\n if (!uriEntity) return\n\n uriOpenFiredForId.current = targetId\n onUriOpen(uriEntity, contextEntities.source)\n }\n }, [entityDetailsData, isFetchingEntitiesDetails, contextEntities, onUriOpen])\n\n // TODO: merge current entities data with fresh details data\n\n const allStatuses = getAllProjectStatuses(projectsInfo)\n\n // get the first project name and info to be used in the feed.\n const firstProject = activeProjectNames[0]\n const firstProjectInfo = projectsInfo[firstProject] || {}\n const firstEntityData = entityDetailsData[0] || {}\n // Use the last entity for URI sync\n const lastEntityData = entityDetailsData[entityDetailsData.length - 1]\n const lastProject = activeProjectNames[activeProjectNames.length - 1]\n\n // build the full entity path for the first entity\n const [entityPathSegments, entityPathVersions] = useGetEntityPath({\n entity: firstEntityData,\n entityType: activeEntityType,\n projectName: firstProject,\n isLoading: isFetchingEntitiesDetails,\n })\n\n const { setEntityUri, setUri } = useURIContext()\n // sync the uri when entity changes\n useEffect(() => {\n if (!lastEntityData?.parents) return\n if (!lastProject) return\n const { folderPath, taskName, versionName, productName } = extractEntityHierarchyFromParents(\n lastEntityData.parents,\n activeEntityType,\n lastEntityData.name,\n )\n\n setEntityUri({\n projectName: lastProject,\n folderPath: folderPath,\n taskName: taskName,\n productName: productName,\n versionName: versionName,\n })\n\n // unmount cleanup: clear uri\n return () => {\n setUri('')\n }\n }, [entityDetailsData, activeProjectNames, activeEntityType])\n\n // sync the details panel url (panel) with entity\n useDetailsPanelURLSync({\n entityData: lastEntityData,\n project: lastProject,\n activeEntityType,\n entitiesToQuery,\n })\n\n const clearSearchUrl = () => {\n // remove URL params when closing\n setSearchParams(\n (prev) => {\n const newParams = new URLSearchParams(prev)\n newParams.delete('project')\n newParams.delete('type')\n newParams.delete('id')\n return newParams\n },\n { replace: true },\n )\n }\n\n const handleClose = () => {\n onClose?.()\n // also remove any entities in context\n setEntities(null)\n // drop the uri so an in-flight resolve can't reopen the panel after close\n setUri('')\n clearSearchUrl()\n closeSlideOut()\n }\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && onClose) {\n // Don't trigger if we're in an input element\n const target = e.target as HTMLElement\n const isInputElement =\n ['INPUT', 'TEXTAREA', 'SELECT'].includes(target.tagName) || target.isContentEditable\n\n if (isInputElement) return\n\n // don't trigger if the viewer is open and panel not in slideout mode\n if (isSlideOut === false && (target.closest('#viewer-dialog') || !!slideOut)) return\n\n handleClose()\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [handleClose, isSlideOut, slideOut])\n\n const { requestPipWindow } = usePiPWindow()\n\n // Hoisted so ThumbnailUploadProvider (wrapping the toolbar) and EntityPanelUploader\n // (inside DetailsPanelHeader) share the same ref identity — otherwise the toolbar's\n // more-menu, which sits as a sibling above the header, can't reach the inputs.\n const thumbnailInputRef = useRef<HTMLInputElement>(null)\n const versionsInputRef = useRef<HTMLInputElement>(null)\n const canUploadVersion = entityDetailsData.length === 1 && activeEntityType !== 'representation'\n\n const shareEntityLabel = useMemo(() => {\n const name = firstEntityData?.label || firstEntityData?.name || ''\n const parents: string[] = firstEntityData?.parents || []\n const parts: (string | undefined)[] = [firstProject]\n switch (activeEntityType) {\n case 'folder':\n case 'task':\n case 'product':\n parts.push(parents.at(-1), name)\n break\n case 'version':\n parts.push(parents.at(-2), parents.at(-1), name)\n break\n case 'representation':\n parts.push(parents.at(-3), parents.at(-2), parents.at(-1), name)\n break\n default:\n parts.push(name)\n }\n return parts.filter(Boolean).join(' - ')\n }, [firstEntityData, activeEntityType, firstProject])\n\n const handleOpenPip = () => {\n openPip({\n entityType: activeEntityType,\n entities: entitiesToQuery,\n scope: scope,\n })\n requestPipWindow(500, 500)\n }\n\n const isCommentingEnabled = () => {\n // cannot comment on multiple projects\n if (activeProjectNames.length > 1) return false\n if (isGuest) {\n // Guest can only comment in review sessions (for now)\n if (!entityListId) return false\n // Guest must have at least one category set for list\n const guestHasCategory = Object.prototype.hasOwnProperty.call(\n guestCategories,\n user.attrib?.email || '',\n )\n if (!guestHasCategory) return false\n }\n return true\n }\n\n return (\n <ThumbnailUploadProvider\n thumbnailInputRef={thumbnailInputRef}\n versionsInputRef={versionsInputRef}\n canUploadVersion={canUploadVersion}\n >\n <Styled.Panel className=\"details-panel\">\n <Styled.Toolbar>\n {/* TODO FIX PATH */}\n <EntityPath\n segments={entityPathSegments}\n versions={entityPathVersions}\n projectName={firstProject}\n hideProjectName={isSlideOut}\n isLoading={isFetchingEntitiesDetails || !entityPathSegments.length}\n entityType={activeEntityType}\n scope={scope}\n // @ts-ignore\n entityTypeIcons={entityTypeIcons}\n />\n <Styled.RightTools className=\"right-tools\">\n <DetailsPanelMoreMenu\n entityType={activeEntityType}\n entityId={firstEntityData?.id}\n entityIds={entitiesToQuery.map((e) => e.id).filter(Boolean)}\n entityLabel={shareEntityLabel}\n projectName={firstProject}\n selectedEntities={entityDetailsData\n .filter((e) => !!e?.id)\n .map((e) => {\n const type = e.entityType || activeEntityType\n return {\n entityId: e.id,\n entityType: type,\n hasReviewables: !!e.hasReviewables,\n name: e.name,\n label: e.label,\n projectName: e.projectName || firstProject,\n folderId: type === 'task' ? e.folder?.id : undefined,\n }\n })}\n entityListsContext={entityListsContext}\n onOpenPip={handleOpenPip}\n onOpenViewer={onOpenViewer}\n productId={firstEntityData?.product?.id}\n taskId={firstEntityData?.task?.id}\n folderId={firstEntityData?.folder?.id}\n />\n <Watchers\n entities={entitiesToQuery}\n entityType={activeEntityType}\n options={projectUsers || []}\n onWatchersUpdate={onWatchersUpdate && onWatchersUpdate}\n userName={user.name}\n />\n\n {onClose && (\n <Button\n icon=\"close\"\n variant={'text'}\n onClick={handleClose}\n data-shortcut={'Escape'}\n />\n )}\n </Styled.RightTools>\n </Styled.Toolbar>\n\n <DetailsPanelHeader\n entityType={activeEntityType}\n entitySubTypes={activeEntitySubTypes}\n entities={entityDetailsData}\n users={projectUsers}\n disabledAssignees={disabledProjectUsers}\n disabledStatuses={disabledStatuses}\n tagsOptions={tagsOptions}\n isFetching={isFetchingEntitiesDetails}\n isCompact={isCompact}\n currentTab={currentTab}\n onTabChange={setTab}\n projectInfo={projectInfo}\n onOpenViewer={(args) => onOpenViewer?.(args)}\n onEntityFocus={onEntityFocus}\n thumbnailInputRef={thumbnailInputRef}\n versionsInputRef={versionsInputRef}\n />\n\n <ProjectContextProvider projectName={firstProject}>\n {isFeed && !isError && (\n <FeedWrapper\n entityType={activeEntityType}\n entities={entityDetailsData}\n activeUsers={activeProjectUsers || []}\n projectInfo={firstProjectInfo}\n projectName={firstProject}\n disabled={!isCommentingEnabled()}\n scope={scope}\n statuses={allStatuses}\n readOnly={false}\n entityListId={entityListId}\n annotations={annotations}\n removeAnnotation={removeAnnotation}\n exportAnnotationComposite={exportAnnotationComposite}\n isSlideOut={isSlideOut}\n />\n )}\n {currentTab === 'subtasks' &&\n activeEntityType === 'task' &&\n firstEntityData?.id &&\n SubtasksManager && (\n <DetailsPanelSubtasks\n projectName={firstProject}\n taskId={firstEntityData.id}\n subtasks={firstEntityData.task?.subtasks || []}\n SubtasksManager={SubtasksManager}\n useNavigate={useNavigate!}\n onNotFound={() => setTab('feed')} // if subtasks module is not found, switch to feed tab\n />\n )}\n {currentTab === 'files' && (\n <DetailsPanelFiles\n entities={entityDetailsData}\n scope={scope}\n isLoadingVersion={isFetchingEntitiesDetails}\n />\n )}\n {currentTab === 'details' && (\n <FeedContextWrapper\n entityType={activeEntityType}\n entities={entityDetailsData}\n activeUsers={activeProjectUsers || []}\n projectInfo={firstProjectInfo}\n projectName={firstProject}\n disabled={!isCommentingEnabled()}\n scope={scope}\n statuses={allStatuses}\n readOnly={false}\n annotations={annotations}\n removeAnnotation={removeAnnotation}\n exportAnnotationComposite={exportAnnotationComposite}\n >\n <DetailsPanelDetails\n entities={entityDetailsData}\n isLoading={isFetchingEntitiesDetails}\n />\n </FeedContextWrapper>\n )}\n </ProjectContextProvider>\n </Styled.Panel>\n </ThumbnailUploadProvider>\n )\n}\n\n// create a wrapper that checks if the details panel should be open or not based on isOpen prop and entities state\nexport const DetailsPanel = ({\n isOpen,\n entityType,\n ...props\n}: Omit<DetailsPanelProps, 'entityType'> & {\n entityType?: DetailsPanelEntityType\n isOpen: boolean\n}) => {\n const { entities } = useDetailsPanelContext()\n\n if (!isOpen && !entities) return null\n if (!entityType && !entities) return null\n\n return <DetailsPanelInner {...props} entityType={entityType || entities?.entityType} />\n}\n"],"names":["entitiesWithoutFeed","DetailsPanelInner","entityType","entitySubTypes","entitiesData","entities","tagsOptions","disabledStatuses","projectUsers","disabledProjectUsers","activeProjectUsers","projectsInfo","projectNames","isSlideOut","style","scope","isCompact","onClose","onWatchersUpdate","onOpenViewer","onEntityFocus","onOpen","onUriOpen","annotations","removeAnnotation","exportAnnotationComposite","entityListId","guestCategories","entityListsContext","closeSlideOut","openPip","user","isGuest","contextEntities","setEntities","slideOut","useSearchParams","SubtasksManager","useNavigate","useDetailsPanelContext","currentTab","setTab","isFeed","useScopedDetailsPanel","_searchParams","setSearchParams","hasCalledOnOpen","useRef","activeEntityType","activeEntities","activeEntitySubTypes","activeEntitiesData","activeProjectNames","e","useEffect","projectInfo","useMemo","mergeProjectInfo","entityTypeIcons","buildEntityTypeIcons","entitiesToQuery","entity","entityDetailsData","isFetchingEntitiesDetails","isError","originalArgs","useGetEntitiesDetailsPanelQuery","detailsPanelEntityTypes","uriOpenFiredForId","targetId","uriEntity","allStatuses","getAllProjectStatuses","firstProject","firstProjectInfo","firstEntityData","lastEntityData","lastProject","entityPathSegments","entityPathVersions","useGetEntityPath","setEntityUri","setUri","useURIContext","folderPath","taskName","versionName","productName","extractEntityHierarchyFromParents","useDetailsPanelURLSync","clearSearchUrl","prev","newParams","handleClose","handleKeyDown","target","requestPipWindow","usePiPWindow","thumbnailInputRef","versionsInputRef","canUploadVersion","shareEntityLabel","name","parents","parts","handleOpenPip","isCommentingEnabled","jsx","ThumbnailUploadProvider","jsxs","Styled.Panel","Styled.Toolbar","EntityPath","Styled.RightTools","DetailsPanelMoreMenu","type","Watchers","Button","DetailsPanelHeader","args","ProjectContextProvider","FeedWrapper","DetailsPanelSubtasks","DetailsPanelFiles","FeedContextWrapper","DetailsPanelDetails","DetailsPanel","isOpen","props"],"mappings":"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"}
1
+ {"version":3,"file":"DetailsPanel.es.js","sources":["../../../../../src/containers/DetailsPanel/DetailsPanel.tsx"],"sourcesContent":["import { Button } from '@ynput/ayon-react-components'\nimport React, { useEffect, useMemo, useRef, useState } from 'react'\nimport useDetailsPanelURLSync from './hooks/useDetailsPanelURLSync'\nimport * as Styled from './DetailsPanel.styled'\n\n// shared\nimport { useGetEntitiesDetailsPanelQuery, detailsPanelEntityTypes } from '@shared/api'\nimport type { Tag, DetailsPanelEntityType, DetailsPanelEntityData } from '@shared/api'\nimport { DetailsPanelDetails } from '@shared/components/DetailsPanelDetails/DetailsPanelDetails'\nimport { EntityPath } from '@shared/components/EntityPath/EntityPath'\nimport { Watchers } from '@shared/components/Watchers/Watchers'\nimport { usePiPWindow } from '@shared/context/pip/PiPProvider'\nimport { extractEntityHierarchyFromParents } from '@shared/util'\nimport { ProjectContextProvider } from '@shared/context/ProjectContext'\nimport { ThumbnailUploadProvider } from '@shared/context/ThumbnailUploaderContext'\nimport {\n useDetailsPanelContext,\n useScopedDetailsPanel,\n setDetailsPanelTabForScope,\n} from '@shared/context/DetailsPanelContext'\nimport { useURIContext } from '@shared/context/UriContext'\nimport type { ProjectModelWithProducts } from '@shared/context/ProjectContext'\nimport type { FeedFilter } from '@shared/context/DetailsPanelContext'\n\nimport DetailsPanelHeader from './components/DetailsPanelHeader/DetailsPanelHeader'\nimport DetailsPanelFiles from './components/DetailsPanelFiles'\nimport {\n DetailsPanelMoreMenu,\n type DetailsPanelEntityListsContext,\n} from './components/DetailsPanelMoreMenu'\nimport useGetEntityPath from './hooks/useGetEntityPath'\nimport getAllProjectStatuses from './helpers/getAllProjectsStatuses'\nimport FeedWrapper from './containers/FeedWrapper'\nimport FeedContextWrapper from './containers/FeedContextWrapper'\nimport mergeProjectInfo from './helpers/mergeProjectInfo'\nimport buildEntityTypeIcons from './helpers/buildEntityTypeIcons'\nimport DetailsPanelSubtasks from './containers/DetailsPanelSubtasks'\n\nexport const entitiesWithoutFeed = ['product', 'representation']\n\ntype User = { avatarUrl: string; name: string; fullName?: string }\n\nexport type DetailsPanelProps = {\n entityType: DetailsPanelEntityType\n entitySubTypes?: string[] // used to get actions before the entity has loaded\n entitiesData?: { id: string; label: string; type: DetailsPanelEntityType }[]\n entities?: { id: string; projectName: string }[]\n tagsOptions?: Tag[]\n disabledStatuses?: string[]\n projectUsers?: User[]\n disabledProjectUsers?: string[]\n activeProjectUsers?: string[]\n projectsInfo?: Record<string, ProjectModelWithProducts>\n projectNames?: string[]\n isSlideOut?: boolean\n style?: React.CSSProperties\n scope: string\n isCompact?: boolean\n onClose?: () => void\n onWatchersUpdate?: (added: any[], removed: any[]) => void\n onOpenViewer?: (entity: any) => void\n onEntityFocus?: (id: string, entityType: DetailsPanelEntityType) => void\n onOpen?: () => void\n onUriOpen?: (entity: DetailsPanelEntityData, source: 'uri' | 'url') => void\n // annotations\n annotations?: any\n removeAnnotation?: (id: string) => void\n exportAnnotationComposite?: (id: string) => Promise<Blob | null>\n entityListId?: string\n guestCategories?: Record<string, string> // only used for guests to find if they have access to any categories\n /** Optional EntityListsContext for the \"Add to list\" sub-menu in the more-menu.\n * Hosts that already mount EntityListsProvider can pass the resolved context here;\n * otherwise wrap the panel with EntityListsContextBoundary. The shape mirrors\n * `EntityListsContextType` from `src/pages/ProjectListsPage/context` — it lives as a\n * structural type in shared/ so the layering rule (shared cannot import src/pages)\n * is preserved. */\n entityListsContext?: DetailsPanelEntityListsContext\n // optional tab state for independent tab management\n}\n\nconst DetailsPanelInner = ({\n entityType,\n entitySubTypes = [],\n // entities is data we already have from kanban\n entitiesData = [],\n // entityIds are used to get the full details data for the entities\n entities = [],\n tagsOptions = [],\n disabledStatuses,\n projectUsers,\n disabledProjectUsers,\n activeProjectUsers,\n projectsInfo = {},\n projectNames = [],\n isSlideOut = false,\n style = {},\n scope,\n isCompact = false,\n onClose,\n onWatchersUpdate,\n onOpenViewer,\n onEntityFocus,\n onOpen,\n onUriOpen, // when the details panel is opened from uri\n // annotations\n annotations,\n removeAnnotation,\n exportAnnotationComposite,\n entityListId,\n guestCategories = {},\n entityListsContext,\n}: // optional tab state for independent tab management\nDetailsPanelProps) => {\n const {\n closeSlideOut,\n openPip,\n user,\n isGuest,\n entities: contextEntities,\n setEntities,\n slideOut,\n useSearchParams,\n SubtasksManager,\n useNavigate,\n } = useDetailsPanelContext()\n const { currentTab, setTab, isFeed } = useScopedDetailsPanel(scope)\n const [_searchParams, setSearchParams] = useSearchParams()\n const hasCalledOnOpen = useRef(false)\n\n // Use context entities if available, otherwise use props\n const activeEntityType = contextEntities?.entityType ?? entityType\n const activeEntities = contextEntities?.entities ?? entities\n const activeEntitySubTypes = contextEntities?.entitySubTypes ?? entitySubTypes\n const activeEntitiesData = contextEntities?.entities ? [] : entitiesData\n const activeProjectNames = contextEntities?.entities\n ? contextEntities.entities.map((e) => e.projectName)\n : projectNames\n\n // Fire onOpen callback once when component mounts and renders\n useEffect(() => {\n if (onOpen && !hasCalledOnOpen.current) {\n hasCalledOnOpen.current = true\n onOpen()\n }\n }, [])\n\n // Force details tab for specific entity types\n useEffect(() => {\n if (entitiesWithoutFeed.includes(activeEntityType) && currentTab !== 'details') {\n setTab('details')\n }\n }, [activeEntityType, currentTab, setTab])\n\n // once component is provided with specific entities, remove context entities to avoid conflicts\n useEffect(() => {\n if (entities.length && contextEntities) {\n setEntities(null)\n }\n }, [entities, contextEntities, setEntities])\n\n // reduce projectsInfo to selected projects and into one\n const projectInfo = useMemo(\n () => mergeProjectInfo(projectsInfo, activeProjectNames),\n [projectsInfo, activeProjectNames],\n )\n\n // build icons for entity types (used by the entity path breadcrumb)\n const entityTypeIcons = useMemo(() => buildEntityTypeIcons(projectInfo), [projectInfo])\n\n // for example when switching from version to task, task doesn't have reps tab\n // if reps tab was selected, set default to feed\n useEffect(() => {\n if (currentTab === 'files') {\n // check entity type is still version\n if (activeEntityType !== 'version') {\n setTab('feed')\n }\n }\n // Reset to feed if subtasks tab is selected but entity is not a task\n if (currentTab === 'subtasks' && activeEntityType !== 'task') {\n setTab('feed')\n }\n }, [activeEntityType, currentTab, scope])\n\n // now we get the full details data for selected entities\n let entitiesToQuery = activeEntities.length\n ? activeEntities.map((entity) => ({ id: entity.id, projectName: entity.projectName }))\n : // @ts-expect-error = not sure what's going on with activeEntitiesData, we should try and remove it\n activeEntitiesData.map((entity) => ({ id: entity.id, projectName: entity.projectName }))\n\n entitiesToQuery = entitiesToQuery.filter((entity) => entity.id)\n\n const {\n data: entityDetailsData = [],\n isFetching: isFetchingEntitiesDetails,\n isError,\n originalArgs,\n } = useGetEntitiesDetailsPanelQuery(\n { entityType: activeEntityType, entities: entitiesToQuery },\n {\n skip: !entitiesToQuery.length || !detailsPanelEntityTypes.includes(activeEntityType),\n },\n )\n\n // the entity changes then we close the slide out\n useEffect(() => {\n if (!isSlideOut) {\n closeSlideOut()\n }\n }, [originalArgs, isSlideOut])\n\n // fire onUriOpen once per context entity — a details refetch must not re-run the jump/filter reset\n const uriOpenFiredForId = useRef<string | null>(null)\n useEffect(() => {\n if (!contextEntities) uriOpenFiredForId.current = null\n }, [contextEntities])\n\n // if the details panel is opened via the uri, run callback\n useEffect(() => {\n if (isFetchingEntitiesDetails) return\n\n if (\n (contextEntities?.source === 'uri' || contextEntities?.source === 'url') &&\n contextEntities?.entities?.length &&\n !!onUriOpen\n ) {\n const targetId = contextEntities.entities[0].id\n if (uriOpenFiredForId.current === targetId) return\n\n const uriEntity = entityDetailsData.find((entity) => entity.id === targetId)\n if (!uriEntity) return\n\n uriOpenFiredForId.current = targetId\n onUriOpen(uriEntity, contextEntities.source)\n }\n }, [entityDetailsData, isFetchingEntitiesDetails, contextEntities, onUriOpen])\n\n // TODO: merge current entities data with fresh details data\n\n const allStatuses = getAllProjectStatuses(projectsInfo)\n\n // get the first project name and info to be used in the feed.\n const firstProject = activeProjectNames[0]\n const firstProjectInfo = projectsInfo[firstProject] || {}\n const firstEntityData = entityDetailsData[0] || {}\n // Use the last entity for URI sync\n const lastEntityData = entityDetailsData[entityDetailsData.length - 1]\n const lastProject = activeProjectNames[activeProjectNames.length - 1]\n\n // build the full entity path for the first entity\n const [entityPathSegments, entityPathVersions] = useGetEntityPath({\n entity: firstEntityData,\n entityType: activeEntityType,\n projectName: firstProject,\n isLoading: isFetchingEntitiesDetails,\n })\n\n const { setEntityUri, setUri } = useURIContext()\n // sync the uri when entity changes\n useEffect(() => {\n if (!lastEntityData?.parents) return\n if (!lastProject) return\n const { folderPath, taskName, versionName, productName } = extractEntityHierarchyFromParents(\n lastEntityData.parents,\n activeEntityType,\n lastEntityData.name,\n )\n\n setEntityUri({\n projectName: lastProject,\n folderPath: folderPath,\n taskName: taskName,\n productName: productName,\n versionName: versionName,\n })\n\n // unmount cleanup: clear uri\n return () => {\n setUri('')\n }\n }, [entityDetailsData, activeProjectNames, activeEntityType])\n\n // sync the details panel url (panel) with entity\n useDetailsPanelURLSync({\n entityData: lastEntityData,\n project: lastProject,\n activeEntityType,\n entitiesToQuery,\n })\n\n const clearSearchUrl = () => {\n // remove URL params when closing\n setSearchParams(\n (prev) => {\n const newParams = new URLSearchParams(prev)\n newParams.delete('project')\n newParams.delete('type')\n newParams.delete('id')\n return newParams\n },\n { replace: true },\n )\n }\n\n const handleClose = () => {\n onClose?.()\n // also remove any entities in context\n setEntities(null)\n // drop the uri so an in-flight resolve can't reopen the panel after close\n setUri('')\n clearSearchUrl()\n closeSlideOut()\n }\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && onClose) {\n // Don't trigger if we're in an input element\n const target = e.target as HTMLElement\n const isInputElement =\n ['INPUT', 'TEXTAREA', 'SELECT'].includes(target.tagName) || target.isContentEditable\n\n if (isInputElement) return\n\n // don't trigger if the viewer is open and panel not in slideout mode\n if (isSlideOut === false && (target.closest('#viewer-dialog') || !!slideOut)) return\n\n handleClose()\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [handleClose, isSlideOut, slideOut])\n\n const { requestPipWindow } = usePiPWindow()\n\n // Hoisted so ThumbnailUploadProvider (wrapping the toolbar) and EntityPanelUploader\n // (inside DetailsPanelHeader) share the same ref identity — otherwise the toolbar's\n // more-menu, which sits as a sibling above the header, can't reach the inputs.\n const thumbnailInputRef = useRef<HTMLInputElement>(null)\n const versionsInputRef = useRef<HTMLInputElement>(null)\n const canUploadVersion = entityDetailsData.length === 1 && activeEntityType !== 'representation'\n\n const shareEntityLabel = useMemo(() => {\n const name = firstEntityData?.label || firstEntityData?.name || ''\n const parents: string[] = firstEntityData?.parents || []\n const parts: (string | undefined)[] = [firstProject]\n switch (activeEntityType) {\n case 'folder':\n case 'task':\n case 'product':\n parts.push(parents.at(-1), name)\n break\n case 'version':\n parts.push(parents.at(-2), parents.at(-1), name)\n break\n case 'representation':\n parts.push(parents.at(-3), parents.at(-2), parents.at(-1), name)\n break\n default:\n parts.push(name)\n }\n return parts.filter(Boolean).join(' - ')\n }, [firstEntityData, activeEntityType, firstProject])\n\n const handleOpenPip = () => {\n openPip({\n entityType: activeEntityType,\n entities: entitiesToQuery,\n scope: scope,\n })\n requestPipWindow(500, 500)\n }\n\n const isCommentingEnabled = () => {\n // cannot comment on multiple projects\n if (activeProjectNames.length > 1) return false\n if (isGuest) {\n // Guest can only comment in review sessions (for now)\n if (!entityListId) return false\n // Guest must have at least one category set for list\n const guestHasCategory = Object.prototype.hasOwnProperty.call(\n guestCategories,\n user.attrib?.email || '',\n )\n if (!guestHasCategory) return false\n }\n return true\n }\n\n return (\n <ThumbnailUploadProvider\n thumbnailInputRef={thumbnailInputRef}\n versionsInputRef={versionsInputRef}\n canUploadVersion={canUploadVersion}\n >\n <Styled.Panel className=\"details-panel\">\n <Styled.Toolbar>\n {/* TODO FIX PATH */}\n <EntityPath\n segments={entityPathSegments}\n versions={entityPathVersions}\n projectName={firstProject}\n hideProjectName={isSlideOut}\n isLoading={isFetchingEntitiesDetails || !entityPathSegments.length}\n entityType={activeEntityType}\n scope={scope}\n // @ts-ignore\n entityTypeIcons={entityTypeIcons}\n />\n <Styled.RightTools className=\"right-tools\">\n <DetailsPanelMoreMenu\n entityType={activeEntityType}\n entityId={firstEntityData?.id}\n entityIds={entitiesToQuery.map((e) => e.id).filter(Boolean)}\n entityLabel={shareEntityLabel}\n projectName={firstProject}\n selectedEntities={entityDetailsData\n .filter((e) => !!e?.id)\n .map((e) => {\n const type = e.entityType || activeEntityType\n return {\n entityId: e.id,\n entityType: type,\n hasReviewables: !!e.hasReviewables,\n name: e.name,\n label: e.label,\n projectName: e.projectName || firstProject,\n folderId: type === 'task' ? e.folder?.id : undefined,\n }\n })}\n entityListsContext={entityListsContext}\n onOpenPip={handleOpenPip}\n onOpenViewer={onOpenViewer}\n productId={firstEntityData?.product?.id}\n taskId={firstEntityData?.task?.id}\n folderId={firstEntityData?.folder?.id}\n />\n <Watchers\n entities={entitiesToQuery}\n entityType={activeEntityType}\n options={projectUsers || []}\n onWatchersUpdate={onWatchersUpdate && onWatchersUpdate}\n userName={user.name}\n />\n\n {onClose && (\n <Button\n icon=\"close\"\n variant={'text'}\n onClick={handleClose}\n data-shortcut={'Escape'}\n />\n )}\n </Styled.RightTools>\n </Styled.Toolbar>\n\n <DetailsPanelHeader\n entityType={activeEntityType}\n entitySubTypes={activeEntitySubTypes}\n entities={entityDetailsData}\n users={projectUsers}\n disabledAssignees={disabledProjectUsers}\n disabledStatuses={disabledStatuses}\n tagsOptions={tagsOptions}\n isFetching={isFetchingEntitiesDetails}\n isCompact={isCompact}\n currentTab={currentTab}\n onTabChange={setTab}\n projectInfo={projectInfo}\n onOpenViewer={(args) => onOpenViewer?.(args)}\n onEntityFocus={onEntityFocus}\n thumbnailInputRef={thumbnailInputRef}\n versionsInputRef={versionsInputRef}\n />\n\n <ProjectContextProvider projectName={firstProject}>\n {isFeed && !isError && (\n <FeedWrapper\n entityType={activeEntityType}\n entities={entityDetailsData}\n activeUsers={activeProjectUsers || []}\n projectInfo={firstProjectInfo}\n projectName={firstProject}\n disabled={!isCommentingEnabled()}\n scope={scope}\n statuses={allStatuses}\n readOnly={false}\n entityListId={entityListId}\n annotations={annotations}\n removeAnnotation={removeAnnotation}\n exportAnnotationComposite={exportAnnotationComposite}\n isSlideOut={isSlideOut}\n />\n )}\n {currentTab === 'subtasks' &&\n activeEntityType === 'task' &&\n firstEntityData?.id &&\n SubtasksManager && (\n <DetailsPanelSubtasks\n projectName={firstProject}\n taskId={firstEntityData.id}\n folderId={firstEntityData.folder?.id}\n subtasks={firstEntityData.task?.subtasks || []}\n SubtasksManager={SubtasksManager}\n useNavigate={useNavigate!}\n onNotFound={() => setTab('feed')} // if subtasks module is not found, switch to feed tab\n />\n )}\n {currentTab === 'files' && (\n <DetailsPanelFiles\n entities={entityDetailsData}\n scope={scope}\n isLoadingVersion={isFetchingEntitiesDetails}\n />\n )}\n {currentTab === 'details' && (\n <FeedContextWrapper\n entityType={activeEntityType}\n entities={entityDetailsData}\n activeUsers={activeProjectUsers || []}\n projectInfo={firstProjectInfo}\n projectName={firstProject}\n disabled={!isCommentingEnabled()}\n scope={scope}\n statuses={allStatuses}\n readOnly={false}\n annotations={annotations}\n removeAnnotation={removeAnnotation}\n exportAnnotationComposite={exportAnnotationComposite}\n >\n <DetailsPanelDetails\n entities={entityDetailsData}\n isLoading={isFetchingEntitiesDetails}\n />\n </FeedContextWrapper>\n )}\n </ProjectContextProvider>\n </Styled.Panel>\n </ThumbnailUploadProvider>\n )\n}\n\n// create a wrapper that checks if the details panel should be open or not based on isOpen prop and entities state\nexport const DetailsPanel = ({\n isOpen,\n entityType,\n ...props\n}: Omit<DetailsPanelProps, 'entityType'> & {\n entityType?: DetailsPanelEntityType\n isOpen: boolean\n}) => {\n const { entities } = useDetailsPanelContext()\n\n if (!isOpen && !entities) return null\n if (!entityType && !entities) return null\n\n return <DetailsPanelInner {...props} entityType={entityType || entities?.entityType} />\n}\n"],"names":["entitiesWithoutFeed","DetailsPanelInner","entityType","entitySubTypes","entitiesData","entities","tagsOptions","disabledStatuses","projectUsers","disabledProjectUsers","activeProjectUsers","projectsInfo","projectNames","isSlideOut","style","scope","isCompact","onClose","onWatchersUpdate","onOpenViewer","onEntityFocus","onOpen","onUriOpen","annotations","removeAnnotation","exportAnnotationComposite","entityListId","guestCategories","entityListsContext","closeSlideOut","openPip","user","isGuest","contextEntities","setEntities","slideOut","useSearchParams","SubtasksManager","useNavigate","useDetailsPanelContext","currentTab","setTab","isFeed","useScopedDetailsPanel","_searchParams","setSearchParams","hasCalledOnOpen","useRef","activeEntityType","activeEntities","activeEntitySubTypes","activeEntitiesData","activeProjectNames","e","useEffect","projectInfo","useMemo","mergeProjectInfo","entityTypeIcons","buildEntityTypeIcons","entitiesToQuery","entity","entityDetailsData","isFetchingEntitiesDetails","isError","originalArgs","useGetEntitiesDetailsPanelQuery","detailsPanelEntityTypes","uriOpenFiredForId","targetId","uriEntity","allStatuses","getAllProjectStatuses","firstProject","firstProjectInfo","firstEntityData","lastEntityData","lastProject","entityPathSegments","entityPathVersions","useGetEntityPath","setEntityUri","setUri","useURIContext","folderPath","taskName","versionName","productName","extractEntityHierarchyFromParents","useDetailsPanelURLSync","clearSearchUrl","prev","newParams","handleClose","handleKeyDown","target","requestPipWindow","usePiPWindow","thumbnailInputRef","versionsInputRef","canUploadVersion","shareEntityLabel","name","parents","parts","handleOpenPip","isCommentingEnabled","jsx","ThumbnailUploadProvider","jsxs","Styled.Panel","Styled.Toolbar","EntityPath","Styled.RightTools","DetailsPanelMoreMenu","type","Watchers","Button","DetailsPanelHeader","args","ProjectContextProvider","FeedWrapper","DetailsPanelSubtasks","DetailsPanelFiles","FeedContextWrapper","DetailsPanelDetails","DetailsPanel","isOpen","props"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FeedWrapper.cjs.js","sources":["../../../../../../src/containers/DetailsPanel/containers/FeedWrapper.tsx"],"sourcesContent":["import { FC } from 'react'\n\nimport { Feed } from '@shared/containers/Feed/Feed'\nimport ActivityReferenceTooltip from '@shared/containers/Feed/components/ActivityReferenceTooltip/ActivityReferenceTooltip'\nimport { FeedProvider } from '@shared/containers/Feed/context/FeedContext'\nimport type { Status, QueryFilter } from '@shared/api'\nimport { useDetailsPanelContext } from '@shared/context/DetailsPanelContext'\nimport { useLocalStorage } from '@shared/hooks/useLocalStorage'\n\ninterface FeedWrapperProps {\n entities: any[]\n activeUsers: any[]\n projectInfo: any\n projectName: string\n entityType: string\n thumbnailHash?: string // thumbnailHash from entity\n disabled: boolean\n readOnly: boolean\n isSlideOut?: boolean\n statuses: Status[]\n scope: string\n entityListId?: string\n annotations?: any\n removeAnnotation?: (id: string) => void\n exportAnnotationComposite?: (id: string) => Promise<Blob | null>\n}\n\n// forwards any props\nconst FeedWrapper: FC<FeedWrapperProps> = ({\n scope = 'dashboard',\n entities,\n entityType,\n thumbnailHash,\n projectName,\n projectInfo,\n annotations,\n removeAnnotation,\n exportAnnotationComposite,\n ...props\n}) => {\n const annotationsProps = { annotations, removeAnnotation, exportAnnotationComposite }\n\n const { user } = useDetailsPanelContext()\n\n const userName = user.name || ''\n const userFullName = user.attrib?.fullName || ''\n\n return (\n <FeedProvider\n {...{\n scope,\n entities,\n projectName,\n entityType,\n projectInfo,\n userName,\n userFullName,\n }}\n {...annotationsProps}\n {...props}\n >\n <Feed {...props} statuses={props.statuses} />\n <ActivityReferenceTooltip />\n </FeedProvider>\n )\n}\n\nexport default FeedWrapper\n"],"names":["FeedWrapper","scope","entities","entityType","thumbnailHash","projectName","projectInfo","annotations","removeAnnotation","exportAnnotationComposite","props","annotationsProps","user","useDetailsPanelContext","userName","userFullName","jsxs","FeedProvider","jsx","Feed","ActivityReferenceTooltip"],"mappings":"uTA4BMA,EAAoC,CAAC,CACzC,MAAAC,EAAQ,YACR,SAAAC,EACA,WAAAC,EACA,cAAAC,EACA,YAAAC,EACA,YAAAC,EACA,YAAAC,EACA,iBAAAC,EACA,0BAAAC,EACA,GAAGC,CACL,IAAM,CACJ,MAAMC,EAAmB,CAAE,YAAAJ,EAAa,iBAAAC,EAAkB,0BAAAC,CAAA,EAEpD,CAAE,KAAAG,CAAA,EAASC,yBAAA,EAEXC,EAAWF,EAAK,MAAQ,GACxBG,EAAeH,EAAK,QAAQ,UAAY,GAE9C,OACEI,EAAAA,kBAAAA,KAACC,EAAAA,aAAA,CAEG,MAAAhB,EACA,SAAAC,EACA,YAAAG,EACA,WAAAF,EACA,YAAAG,EACA,SAAAQ,EACA,aAAAC,EAED,GAAGJ,EACH,GAAGD,EAEJ,SAAA,CAAAQ,EAAAA,kBAAAA,IAACC,EAAAA,KAAA,CAAM,GAAGT,EAAO,SAAUA,EAAM,SAAU,0BAC1CU,EAAA,CAAA,CAAyB,CAAA,CAAA,CAAA,CAGhC"}
1
+ {"version":3,"file":"FeedWrapper.cjs.js","sources":["../../../../../../src/containers/DetailsPanel/containers/FeedWrapper.tsx"],"sourcesContent":["import { FC } from 'react'\n\nimport { Feed } from '@shared/containers/Feed/Feed'\nimport ActivityReferenceTooltip from '@shared/containers/Feed/components/ActivityReferenceTooltip/ActivityReferenceTooltip'\nimport { FeedProvider } from '@shared/containers/Feed/context/FeedContext'\nimport type { Status, QueryFilter } from '@shared/api'\nimport { useDetailsPanelContext } from '@shared/context/DetailsPanelContext'\n\ninterface FeedWrapperProps {\n entities: any[]\n activeUsers: any[]\n projectInfo: any\n projectName: string\n entityType: string\n thumbnailHash?: string // thumbnailHash from entity\n disabled: boolean\n readOnly: boolean\n isSlideOut?: boolean\n statuses: Status[]\n scope: string\n entityListId?: string\n annotations?: any\n removeAnnotation?: (id: string) => void\n exportAnnotationComposite?: (id: string) => Promise<Blob | null>\n}\n\n// forwards any props\nconst FeedWrapper: FC<FeedWrapperProps> = ({\n scope = 'dashboard',\n entities,\n entityType,\n thumbnailHash,\n projectName,\n projectInfo,\n annotations,\n removeAnnotation,\n exportAnnotationComposite,\n ...props\n}) => {\n const annotationsProps = { annotations, removeAnnotation, exportAnnotationComposite }\n\n const { user } = useDetailsPanelContext()\n\n const userName = user.name || ''\n const userFullName = user.attrib?.fullName || ''\n\n return (\n <FeedProvider\n {...{\n scope,\n entities,\n projectName,\n entityType,\n projectInfo,\n userName,\n userFullName,\n }}\n {...annotationsProps}\n {...props}\n >\n <Feed {...props} statuses={props.statuses} />\n <ActivityReferenceTooltip />\n </FeedProvider>\n )\n}\n\nexport default FeedWrapper\n"],"names":["FeedWrapper","scope","entities","entityType","thumbnailHash","projectName","projectInfo","annotations","removeAnnotation","exportAnnotationComposite","props","annotationsProps","user","useDetailsPanelContext","userName","userFullName","jsxs","FeedProvider","jsx","Feed","ActivityReferenceTooltip"],"mappings":"uTA2BMA,EAAoC,CAAC,CACzC,MAAAC,EAAQ,YACR,SAAAC,EACA,WAAAC,EACA,cAAAC,EACA,YAAAC,EACA,YAAAC,EACA,YAAAC,EACA,iBAAAC,EACA,0BAAAC,EACA,GAAGC,CACL,IAAM,CACJ,MAAMC,EAAmB,CAAE,YAAAJ,EAAa,iBAAAC,EAAkB,0BAAAC,CAAA,EAEpD,CAAE,KAAAG,CAAA,EAASC,yBAAA,EAEXC,EAAWF,EAAK,MAAQ,GACxBG,EAAeH,EAAK,QAAQ,UAAY,GAE9C,OACEI,EAAAA,kBAAAA,KAACC,EAAAA,aAAA,CAEG,MAAAhB,EACA,SAAAC,EACA,YAAAG,EACA,WAAAF,EACA,YAAAG,EACA,SAAAQ,EACA,aAAAC,EAED,GAAGJ,EACH,GAAGD,EAEJ,SAAA,CAAAQ,EAAAA,kBAAAA,IAACC,EAAAA,KAAA,CAAM,GAAGT,EAAO,SAAUA,EAAM,SAAU,0BAC1CU,EAAA,CAAA,CAAyB,CAAA,CAAA,CAAA,CAGhC"}
@@ -1 +1 @@
1
- {"version":3,"file":"FeedWrapper.es.js","sources":["../../../../../../src/containers/DetailsPanel/containers/FeedWrapper.tsx"],"sourcesContent":["import { FC } from 'react'\n\nimport { Feed } from '@shared/containers/Feed/Feed'\nimport ActivityReferenceTooltip from '@shared/containers/Feed/components/ActivityReferenceTooltip/ActivityReferenceTooltip'\nimport { FeedProvider } from '@shared/containers/Feed/context/FeedContext'\nimport type { Status, QueryFilter } from '@shared/api'\nimport { useDetailsPanelContext } from '@shared/context/DetailsPanelContext'\nimport { useLocalStorage } from '@shared/hooks/useLocalStorage'\n\ninterface FeedWrapperProps {\n entities: any[]\n activeUsers: any[]\n projectInfo: any\n projectName: string\n entityType: string\n thumbnailHash?: string // thumbnailHash from entity\n disabled: boolean\n readOnly: boolean\n isSlideOut?: boolean\n statuses: Status[]\n scope: string\n entityListId?: string\n annotations?: any\n removeAnnotation?: (id: string) => void\n exportAnnotationComposite?: (id: string) => Promise<Blob | null>\n}\n\n// forwards any props\nconst FeedWrapper: FC<FeedWrapperProps> = ({\n scope = 'dashboard',\n entities,\n entityType,\n thumbnailHash,\n projectName,\n projectInfo,\n annotations,\n removeAnnotation,\n exportAnnotationComposite,\n ...props\n}) => {\n const annotationsProps = { annotations, removeAnnotation, exportAnnotationComposite }\n\n const { user } = useDetailsPanelContext()\n\n const userName = user.name || ''\n const userFullName = user.attrib?.fullName || ''\n\n return (\n <FeedProvider\n {...{\n scope,\n entities,\n projectName,\n entityType,\n projectInfo,\n userName,\n userFullName,\n }}\n {...annotationsProps}\n {...props}\n >\n <Feed {...props} statuses={props.statuses} />\n <ActivityReferenceTooltip />\n </FeedProvider>\n )\n}\n\nexport default FeedWrapper\n"],"names":["FeedWrapper","scope","entities","entityType","thumbnailHash","projectName","projectInfo","annotations","removeAnnotation","exportAnnotationComposite","props","annotationsProps","user","useDetailsPanelContext","userName","userFullName","jsxs","FeedProvider","jsx","Feed","ActivityReferenceTooltip"],"mappings":";;;;;AA4BA,MAAMA,IAAoC,CAAC;AAAA,EACzC,OAAAC,IAAQ;AAAA,EACR,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,2BAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAmB,EAAE,aAAAJ,GAAa,kBAAAC,GAAkB,2BAAAC,EAAA,GAEpD,EAAE,MAAAG,EAAA,IAASC,EAAA,GAEXC,IAAWF,EAAK,QAAQ,IACxBG,IAAeH,EAAK,QAAQ,YAAY;AAE9C,SACEI,gBAAAA,EAAAA;AAAAA,IAACC;AAAA,IAAA;AAAA,MAEG,OAAAhB;AAAA,MACA,UAAAC;AAAA,MACA,aAAAG;AAAA,MACA,YAAAF;AAAA,MACA,aAAAG;AAAA,MACA,UAAAQ;AAAA,MACA,cAAAC;AAAA,MAED,GAAGJ;AAAA,MACH,GAAGD;AAAA,MAEJ,UAAA;AAAA,QAAAQ,gBAAAA,EAAAA,IAACC,GAAA,EAAM,GAAGT,GAAO,UAAUA,EAAM,UAAU;AAAA,8BAC1CU,GAAA,CAAA,CAAyB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGhC;"}
1
+ {"version":3,"file":"FeedWrapper.es.js","sources":["../../../../../../src/containers/DetailsPanel/containers/FeedWrapper.tsx"],"sourcesContent":["import { FC } from 'react'\n\nimport { Feed } from '@shared/containers/Feed/Feed'\nimport ActivityReferenceTooltip from '@shared/containers/Feed/components/ActivityReferenceTooltip/ActivityReferenceTooltip'\nimport { FeedProvider } from '@shared/containers/Feed/context/FeedContext'\nimport type { Status, QueryFilter } from '@shared/api'\nimport { useDetailsPanelContext } from '@shared/context/DetailsPanelContext'\n\ninterface FeedWrapperProps {\n entities: any[]\n activeUsers: any[]\n projectInfo: any\n projectName: string\n entityType: string\n thumbnailHash?: string // thumbnailHash from entity\n disabled: boolean\n readOnly: boolean\n isSlideOut?: boolean\n statuses: Status[]\n scope: string\n entityListId?: string\n annotations?: any\n removeAnnotation?: (id: string) => void\n exportAnnotationComposite?: (id: string) => Promise<Blob | null>\n}\n\n// forwards any props\nconst FeedWrapper: FC<FeedWrapperProps> = ({\n scope = 'dashboard',\n entities,\n entityType,\n thumbnailHash,\n projectName,\n projectInfo,\n annotations,\n removeAnnotation,\n exportAnnotationComposite,\n ...props\n}) => {\n const annotationsProps = { annotations, removeAnnotation, exportAnnotationComposite }\n\n const { user } = useDetailsPanelContext()\n\n const userName = user.name || ''\n const userFullName = user.attrib?.fullName || ''\n\n return (\n <FeedProvider\n {...{\n scope,\n entities,\n projectName,\n entityType,\n projectInfo,\n userName,\n userFullName,\n }}\n {...annotationsProps}\n {...props}\n >\n <Feed {...props} statuses={props.statuses} />\n <ActivityReferenceTooltip />\n </FeedProvider>\n )\n}\n\nexport default FeedWrapper\n"],"names":["FeedWrapper","scope","entities","entityType","thumbnailHash","projectName","projectInfo","annotations","removeAnnotation","exportAnnotationComposite","props","annotationsProps","user","useDetailsPanelContext","userName","userFullName","jsxs","FeedProvider","jsx","Feed","ActivityReferenceTooltip"],"mappings":";;;;;AA2BA,MAAMA,IAAoC,CAAC;AAAA,EACzC,OAAAC,IAAQ;AAAA,EACR,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,2BAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAmB,EAAE,aAAAJ,GAAa,kBAAAC,GAAkB,2BAAAC,EAAA,GAEpD,EAAE,MAAAG,EAAA,IAASC,EAAA,GAEXC,IAAWF,EAAK,QAAQ,IACxBG,IAAeH,EAAK,QAAQ,YAAY;AAE9C,SACEI,gBAAAA,EAAAA;AAAAA,IAACC;AAAA,IAAA;AAAA,MAEG,OAAAhB;AAAA,MACA,UAAAC;AAAA,MACA,aAAAG;AAAA,MACA,YAAAF;AAAA,MACA,aAAAG;AAAA,MACA,UAAAQ;AAAA,MACA,cAAAC;AAAA,MAED,GAAGJ;AAAA,MACH,GAAGD;AAAA,MAEJ,UAAA;AAAA,QAAAQ,gBAAAA,EAAAA,IAACC,GAAA,EAAM,GAAGT,GAAO,UAAUA,EAAM,UAAU;AAAA,8BAC1CU,GAAA,CAAA,CAAyB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGhC;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/dataImport.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/projectFolders.cjs.js");require("../../../api/generated/reviewables.cjs.js");require("../../../api/generated/services.cjs.js");require("../../../api/generated/system.cjs.js");require("../../../api/generated/tasks.cjs.js");require("../../../api/generated/teams.cjs.js");require("../../../api/generated/thumbnails.cjs.js");require("../../../api/generated/uRIs.cjs.js");require("../../../api/generated/users.cjs.js");require("../../../api/generated/versions.cjs.js");require("../../../api/generated/workfiles.cjs.js");require("../../../api/generated/ynputCloud.cjs.js");require("../../../api/generated/grouping.cjs.js");require("../../../api/generated/views.cjs.js");require("../../../api/queries/actions/getActions.cjs.js");require("../../../api/queries/activities/getActivities.cjs.js");require("../../../api/queries/activities/updateReaction.cjs.js");require("../../../api/queries/activities/getMentions.cjs.js");require("../../../api/queries/activities/getCategories.cjs.js");const s=require("../../../api/queries/activities/util/activitiesHelpers.cjs.js");require("../../../api/queries/addons/getAddons.cjs.js");require("../../../api/queries/addons/updateAddons.cjs.js");require("../../../api/queries/attributes/getAttributes.cjs.js");require("../../../api/queries/attributes/updateAttributes.cjs.js");require("../../../api/queries/authentication/getAuthentication.cjs.js");require("../../../api/queries/bundles/getBundles.cjs.js");require("../../../api/queries/bundles/updateBundles.cjs.js");require("../../../api/queries/cloud/cloud.cjs.js");require("../../../api/queries/columnStats/metricTargets.cjs.js");require("../../../api/queries/columnStats/groupCounts.cjs.js");require("../../../api/queries/config/getConfig.cjs.js");require("../../../api/queries/config/updateConfig.cjs.js");require("../../../api/queries/entities/getEntity.cjs.js");require("../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../api/queries/overview/getOverview.cjs.js");require("../../../api/queries/overview/updateOverview.cjs.js");require("../../../api/queries/versions/getVersionsProducts.cjs.js");require("../../../api/queries/links/getEntityLinks.cjs.js");require("../../../api/queries/entities/updateEntity.cjs.js");require("../../../api/queries/entityLists/getLists.cjs.js");require("../../../api/queries/entityLists/updateLists.cjs.js");require("../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../api/queries/entityLists/listItemsColumnStats.cjs.js");require("../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../api/queries/entityLists/listFolders.cjs.js");require("../../../api/queries/folders/getFolders.cjs.js");require("../../../api/queries/folders/getFolderDeleteInfo.cjs.js");require("../../../api/queries/grouping/getGrouping.cjs.js");require("../../../api/queries/links/updateLinks.cjs.js");require("../../../api/queries/links/getLinks.cjs.js");require("../../../api/queries/permissions/getPermissions.cjs.js");require("../../../api/queries/products/createProduct.cjs.js");require("../../../api/queries/products/getFolderProducts.cjs.js");require("../../../api/queries/project/getProject.cjs.js");require("../../../api/queries/project/updateProject.cjs.js");require("../../../api/queries/projectFolders/projectFolders.cjs.js");require("../../../api/queries/review/getReview.cjs.js");require("../../../api/queries/review/updateReview.cjs.js");require("../../../api/queries/share/share.cjs.js");require("../../../api/queries/system/getSystem.cjs.js");require("../../../api/queries/tasks/getTasks.cjs.js");require("../../../api/queries/tasks/updateTasks.cjs.js");require("../../../api/queries/teams/getTeams.cjs.js");require("../../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../../api/queries/users/getUsers.cjs.js");require("../../../api/queries/users/updateUsers.cjs.js");require("../../../api/queries/users/guests.cjs.js");require("../../../api/queries/versions/updateVersions.cjs.js");require("../../../api/queries/views/getViews.cjs.js");require("../../../api/queries/views/updateViews.cjs.js");require("../../../api/queries/watchers/getWatchers.cjs.js");require("../../../api/queries/uris/getUris.cjs.js");const l=require("../../ProjectTreeTable/utils/expandRelativeDates.cjs.js"),y=new Set(Object.keys(s.filterActivityTypes).filter(e=>e!=="activity")),d={has_attachments:"activity_data.files"},c=e=>!!e&&"key"in e,v=e=>{const i=d[e.key]??e.key;if(e.key==="has_attachments")return e.value?{key:i,operator:"ne",value:[]}:null;if(e.key==="in_review_session")return e.value?{key:"activity_data.entityList",operator:"notnull"}:null;if(e.key==="category"){const r=Array.isArray(e.value)?e.value:[],t=r.includes("__none__"),u=r.filter(o=>o!=="__none__"),q={operator:"or",conditions:[{key:"activity_data.category",operator:"isnull"},{key:"activity_data.category",operator:"eq",value:""}]},n={key:"activity_data.category",operator:"in",value:u};return t&&u.length?{operator:"or",conditions:[q,n]}:t?q:u.length?n:null}return e.key==="body"&&e.operator==="like"&&typeof e.value=="string"?{...e,key:i,value:`%${e.value}%`}:e.key==="author"?{operator:"or",conditions:[{...e,key:"activity_data.author"},{...e,key:"activity_data.assignee"}]}:{...e,key:i}},a=e=>{if(c(e))return y.has(e.key)?null:v(e);const i=(e.conditions||[]).map(r=>a(r)).filter(r=>r!==null);return i.length===0?null:{operator:e.operator||"and",conditions:i}},_=e=>{if(!e||!e.conditions?.length)return;const i=l.expandRelativeDates(e),r=a(i);if(r)return JSON.stringify(r)};exports.buildBackendFilter=_;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/dataImport.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/projectFolders.cjs.js");require("../../../api/generated/reviewables.cjs.js");require("../../../api/generated/services.cjs.js");require("../../../api/generated/system.cjs.js");require("../../../api/generated/tasks.cjs.js");require("../../../api/generated/teams.cjs.js");require("../../../api/generated/thumbnails.cjs.js");require("../../../api/generated/uRIs.cjs.js");require("../../../api/generated/users.cjs.js");require("../../../api/generated/versions.cjs.js");require("../../../api/generated/workfiles.cjs.js");require("../../../api/generated/ynputCloud.cjs.js");require("../../../api/generated/grouping.cjs.js");require("../../../api/generated/views.cjs.js");require("../../../api/queries/actions/getActions.cjs.js");require("../../../api/queries/activities/getActivities.cjs.js");require("../../../api/queries/activities/updateReaction.cjs.js");require("../../../api/queries/activities/getMentions.cjs.js");require("../../../api/queries/activities/getCategories.cjs.js");const s=require("../../../api/queries/activities/util/activitiesHelpers.cjs.js");require("../../../api/queries/addons/getAddons.cjs.js");require("../../../api/queries/addons/updateAddons.cjs.js");require("../../../api/queries/attributes/getAttributes.cjs.js");require("../../../api/queries/attributes/updateAttributes.cjs.js");require("../../../api/queries/authentication/getAuthentication.cjs.js");require("../../../api/queries/bundles/getBundles.cjs.js");require("../../../api/queries/bundles/updateBundles.cjs.js");require("../../../api/queries/cloud/cloud.cjs.js");require("../../../api/queries/columnStats/metricTargets.cjs.js");require("../../../api/queries/columnStats/groupCounts.cjs.js");require("../../../api/queries/config/getConfig.cjs.js");require("../../../api/queries/config/updateConfig.cjs.js");require("../../../api/queries/entities/getEntity.cjs.js");require("../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../api/queries/overview/getOverview.cjs.js");require("../../../api/queries/overview/updateOverview.cjs.js");require("../../../api/queries/versions/getVersionsProducts.cjs.js");require("../../../api/queries/links/getEntityLinks.cjs.js");require("../../../api/queries/entities/updateEntity.cjs.js");require("../../../api/queries/entityLists/getLists.cjs.js");require("../../../api/queries/entityLists/updateLists.cjs.js");require("../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../api/queries/entityLists/listItemsColumnStats.cjs.js");require("../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../api/queries/entityLists/listFolders.cjs.js");require("../../../api/queries/folders/getFolders.cjs.js");require("../../../api/queries/folders/getFolderDeleteInfo.cjs.js");require("../../../api/queries/grouping/getGrouping.cjs.js");require("../../../api/queries/links/updateLinks.cjs.js");require("../../../api/queries/links/getLinks.cjs.js");require("../../../api/queries/permissions/getPermissions.cjs.js");require("../../../api/queries/products/createProduct.cjs.js");require("../../../api/queries/products/getFolderProducts.cjs.js");require("../../../api/queries/project/getProject.cjs.js");require("../../../api/queries/project/updateProject.cjs.js");require("../../../api/queries/projectFolders/projectFolders.cjs.js");require("../../../api/queries/review/getReview.cjs.js");require("../../../api/queries/review/updateReview.cjs.js");require("../../../api/queries/share/share.cjs.js");require("../../../api/queries/system/getSystem.cjs.js");require("../../../api/queries/tasks/getTasks.cjs.js");require("../../../api/queries/tasks/updateTasks.cjs.js");require("../../../api/queries/teams/getTeams.cjs.js");require("../../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../../api/queries/users/getUsers.cjs.js");require("../../../api/queries/users/updateUsers.cjs.js");require("../../../api/queries/users/guests.cjs.js");require("../../../api/queries/versions/updateVersions.cjs.js");require("../../../api/queries/views/getViews.cjs.js");require("../../../api/queries/views/updateViews.cjs.js");require("../../../api/queries/watchers/getWatchers.cjs.js");require("../../../api/queries/uris/getUris.cjs.js");const y=require("../../ProjectTreeTable/utils/expandRelativeDates.cjs.js"),d=new Set(Object.keys(s.filterActivityTypes).filter(e=>e!=="activity")),c={has_attachments:"activity_data.files",origin_type:"activity_data.origin.type"},v=e=>!!e&&"key"in e,_=e=>{const r=c[e.key]??e.key;if(e.key==="has_attachments")return e.value?{key:r,operator:"ne",value:[]}:null;if(e.key==="in_review_session")return e.value?{key:"activity_data.entityList",operator:"notnull"}:null;if(e.key==="category"){const i=Array.isArray(e.value)?e.value:[],t=i.includes("__none__"),u=i.filter(l=>l!=="__none__"),n={operator:"or",conditions:[{key:"activity_data.category",operator:"isnull"},{key:"activity_data.category",operator:"eq",value:""}]},q={key:"activity_data.category",operator:"in",value:u};return t&&u.length?{operator:"or",conditions:[n,q]}:t?n:u.length?q:null}return e.key==="body"&&e.operator==="like"&&typeof e.value=="string"?{...e,key:r,value:`%${e.value}%`}:e.key==="author"?{operator:"or",conditions:[{...e,key:"activity_data.author"},{...e,key:"activity_data.assignee"}]}:{...e,key:r}},a=e=>{if(v(e))return d.has(e.key)?null:_(e);const r=(e.conditions||[]).map(i=>a(i)).filter(i=>i!==null);return r.length===0?null:{operator:e.operator||"and",conditions:r}},o=e=>{if(!e||!e.conditions?.length)return null;const r=y.expandRelativeDates(e),i=a(r);return i||null},k=e=>{const r=o(e);if(r)return JSON.stringify(r)};exports.buildBackendFilter=k;exports.buildBackendFilterObject=o;
2
2
  //# sourceMappingURL=buildBackendFilter.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildBackendFilter.cjs.js","sources":["../../../../../../src/containers/Feed/helpers/buildBackendFilter.ts"],"sourcesContent":["import type { QueryCondition, QueryFilter } from '@shared/api'\nimport { filterActivityTypes } from '@shared/api'\nimport { expandRelativeDates } from '@shared/containers/ProjectTreeTable/utils/expandRelativeDates'\n\n// UI chip keys handled by getFilterActivityTypes → activityTypes arg.\n// Must not leak into the QueryFilter (not in backend whitelist).\nconst UI_ONLY_KEYS = new Set(Object.keys(filterActivityTypes).filter((k) => k !== 'activity'))\n\nconst UI_KEY_TO_BACKEND_KEY: Record<string, string> = {\n has_attachments: 'activity_data.files',\n}\n\nconst isCondition = (c: QueryCondition | QueryFilter): c is QueryCondition => {\n return !!c && 'key' in c\n}\n\nconst translateCondition = (c: QueryCondition): QueryCondition | QueryFilter | null => {\n const mappedKey = UI_KEY_TO_BACKEND_KEY[c.key] ?? c.key\n\n if (c.key === 'has_attachments') {\n return c.value ? { key: mappedKey, operator: 'ne', value: [] } : null\n }\n\n if (c.key === 'in_review_session') {\n return c.value ? { key: 'activity_data.entityList', operator: 'notnull' } : null\n }\n\n if (c.key === 'category') {\n const values = Array.isArray(c.value) ? (c.value as string[]) : []\n const hasNone = values.includes('__none__')\n const named = values.filter((v) => v !== '__none__')\n const nullCond: QueryFilter = {\n operator: 'or',\n conditions: [\n { key: 'activity_data.category', operator: 'isnull' },\n { key: 'activity_data.category', operator: 'eq', value: '' },\n ],\n }\n const namedCond: QueryCondition = {\n key: 'activity_data.category',\n operator: 'in',\n value: named,\n }\n if (hasNone && named.length) return { operator: 'or', conditions: [nullCond, namedCond] }\n if (hasNone) return nullCond\n if (named.length) return namedCond\n return null\n }\n\n if (c.key === 'body' && c.operator === 'like' && typeof c.value === 'string') {\n return { ...c, key: mappedKey, value: `%${c.value}%` }\n }\n\n // \"Author\" UI filter matches actor OR assignee, so picking a user surfaces\n // both their comments/versions AND assignment events involving them.\n if (c.key === 'author') {\n return {\n operator: 'or',\n conditions: [\n { ...c, key: 'activity_data.author' },\n { ...c, key: 'activity_data.assignee' },\n ],\n }\n }\n\n return { ...c, key: mappedKey }\n}\n\nconst translate = (node: QueryCondition | QueryFilter): QueryCondition | QueryFilter | null => {\n if (isCondition(node)) {\n if (UI_ONLY_KEYS.has(node.key)) return null\n return translateCondition(node)\n }\n\n const translated = (node.conditions || [])\n .map((c) => translate(c))\n .filter((c): c is QueryCondition | QueryFilter => c !== null)\n\n if (translated.length === 0) return null\n\n return { operator: node.operator || 'and', conditions: translated }\n}\n\nexport const buildBackendFilter = (filter: QueryFilter | undefined): string | undefined => {\n if (!filter || !filter.conditions?.length) return undefined\n\n const expanded = expandRelativeDates(filter as any) as QueryFilter\n const translated = translate(expanded)\n if (!translated) return undefined\n\n return JSON.stringify(translated)\n}\n\nexport default buildBackendFilter\n"],"names":["UI_ONLY_KEYS","filterActivityTypes","k","UI_KEY_TO_BACKEND_KEY","isCondition","c","translateCondition","mappedKey","values","hasNone","named","v","nullCond","namedCond","translate","node","translated","buildBackendFilter","filter","expanded","expandRelativeDates"],"mappings":"skLAMMA,EAAe,IAAI,IAAI,OAAO,KAAKC,EAAAA,mBAAmB,EAAE,OAAQC,GAAMA,IAAM,UAAU,CAAC,EAEvFC,EAAgD,CACpD,gBAAiB,qBACnB,EAEMC,EAAeC,GACZ,CAAC,CAACA,GAAK,QAASA,EAGnBC,EAAsBD,GAA2D,CACrF,MAAME,EAAYJ,EAAsBE,EAAE,GAAG,GAAKA,EAAE,IAEpD,GAAIA,EAAE,MAAQ,kBACZ,OAAOA,EAAE,MAAQ,CAAE,IAAKE,EAAW,SAAU,KAAM,MAAO,CAAA,CAAC,EAAM,KAGnE,GAAIF,EAAE,MAAQ,oBACZ,OAAOA,EAAE,MAAQ,CAAE,IAAK,2BAA4B,SAAU,WAAc,KAG9E,GAAIA,EAAE,MAAQ,WAAY,CACxB,MAAMG,EAAS,MAAM,QAAQH,EAAE,KAAK,EAAKA,EAAE,MAAqB,CAAA,EAC1DI,EAAUD,EAAO,SAAS,UAAU,EACpCE,EAAQF,EAAO,OAAQG,GAAMA,IAAM,UAAU,EAC7CC,EAAwB,CAC5B,SAAU,KACV,WAAY,CACV,CAAE,IAAK,yBAA0B,SAAU,QAAA,EAC3C,CAAE,IAAK,yBAA0B,SAAU,KAAM,MAAO,EAAA,CAAG,CAC7D,EAEIC,EAA4B,CAChC,IAAK,yBACL,SAAU,KACV,MAAOH,CAAA,EAET,OAAID,GAAWC,EAAM,OAAe,CAAE,SAAU,KAAM,WAAY,CAACE,EAAUC,CAAS,CAAA,EAClFJ,EAAgBG,EAChBF,EAAM,OAAeG,EAClB,IACT,CAEA,OAAIR,EAAE,MAAQ,QAAUA,EAAE,WAAa,QAAU,OAAOA,EAAE,OAAU,SAC3D,CAAE,GAAGA,EAAG,IAAKE,EAAW,MAAO,IAAIF,EAAE,KAAK,GAAA,EAK/CA,EAAE,MAAQ,SACL,CACL,SAAU,KACV,WAAY,CACV,CAAE,GAAGA,EAAG,IAAK,sBAAA,EACb,CAAE,GAAGA,EAAG,IAAK,wBAAA,CAAyB,CACxC,EAIG,CAAE,GAAGA,EAAG,IAAKE,CAAA,CACtB,EAEMO,EAAaC,GAA4E,CAC7F,GAAIX,EAAYW,CAAI,EAClB,OAAIf,EAAa,IAAIe,EAAK,GAAG,EAAU,KAChCT,EAAmBS,CAAI,EAGhC,MAAMC,GAAcD,EAAK,YAAc,CAAA,GACpC,IAAKV,GAAMS,EAAUT,CAAC,CAAC,EACvB,OAAQA,GAAyCA,IAAM,IAAI,EAE9D,OAAIW,EAAW,SAAW,EAAU,KAE7B,CAAE,SAAUD,EAAK,UAAY,MAAO,WAAYC,CAAA,CACzD,EAEaC,EAAsBC,GAAwD,CACzF,GAAI,CAACA,GAAU,CAACA,EAAO,YAAY,OAAQ,OAE3C,MAAMC,EAAWC,EAAAA,oBAAoBF,CAAa,EAC5CF,EAAaF,EAAUK,CAAQ,EACrC,GAAKH,EAEL,OAAO,KAAK,UAAUA,CAAU,CAClC"}
1
+ {"version":3,"file":"buildBackendFilter.cjs.js","sources":["../../../../../../src/containers/Feed/helpers/buildBackendFilter.ts"],"sourcesContent":["import type { QueryCondition, QueryFilter } from '@shared/api'\nimport { filterActivityTypes } from '@shared/api'\nimport { expandRelativeDates } from '@shared/containers/ProjectTreeTable/utils/expandRelativeDates'\n\n// UI chip keys handled by getFilterActivityTypes → activityTypes arg.\n// Must not leak into the QueryFilter (not in backend whitelist).\nconst UI_ONLY_KEYS = new Set(Object.keys(filterActivityTypes).filter((k) => k !== 'activity'))\n\nconst UI_KEY_TO_BACKEND_KEY: Record<string, string> = {\n has_attachments: 'activity_data.files',\n // not `entity_type`: on inbox rows that column is always 'user'\n origin_type: 'activity_data.origin.type',\n}\n\nconst isCondition = (c: QueryCondition | QueryFilter): c is QueryCondition => {\n return !!c && 'key' in c\n}\n\nconst translateCondition = (c: QueryCondition): QueryCondition | QueryFilter | null => {\n const mappedKey = UI_KEY_TO_BACKEND_KEY[c.key] ?? c.key\n\n if (c.key === 'has_attachments') {\n return c.value ? { key: mappedKey, operator: 'ne', value: [] } : null\n }\n\n if (c.key === 'in_review_session') {\n return c.value ? { key: 'activity_data.entityList', operator: 'notnull' } : null\n }\n\n if (c.key === 'category') {\n const values = Array.isArray(c.value) ? (c.value as string[]) : []\n const hasNone = values.includes('__none__')\n const named = values.filter((v) => v !== '__none__')\n const nullCond: QueryFilter = {\n operator: 'or',\n conditions: [\n { key: 'activity_data.category', operator: 'isnull' },\n { key: 'activity_data.category', operator: 'eq', value: '' },\n ],\n }\n const namedCond: QueryCondition = {\n key: 'activity_data.category',\n operator: 'in',\n value: named,\n }\n if (hasNone && named.length) return { operator: 'or', conditions: [nullCond, namedCond] }\n if (hasNone) return nullCond\n if (named.length) return namedCond\n return null\n }\n\n if (c.key === 'body' && c.operator === 'like' && typeof c.value === 'string') {\n return { ...c, key: mappedKey, value: `%${c.value}%` }\n }\n\n // \"Author\" UI filter matches actor OR assignee, so picking a user surfaces\n // both their comments/versions AND assignment events involving them.\n if (c.key === 'author') {\n return {\n operator: 'or',\n conditions: [\n { ...c, key: 'activity_data.author' },\n { ...c, key: 'activity_data.assignee' },\n ],\n }\n }\n\n return { ...c, key: mappedKey }\n}\n\nconst translate = (node: QueryCondition | QueryFilter): QueryCondition | QueryFilter | null => {\n if (isCondition(node)) {\n if (UI_ONLY_KEYS.has(node.key)) return null\n return translateCondition(node)\n }\n\n const translated = (node.conditions || [])\n .map((c) => translate(c))\n .filter((c): c is QueryCondition | QueryFilter => c !== null)\n\n if (translated.length === 0) return null\n\n return { operator: node.operator || 'and', conditions: translated }\n}\n\nexport const buildBackendFilterObject = (filter: QueryFilter | undefined): QueryFilter | null => {\n if (!filter || !filter.conditions?.length) return null\n\n const expanded = expandRelativeDates(filter as any) as QueryFilter\n const translated = translate(expanded)\n if (!translated) return null\n\n return translated as QueryFilter\n}\n\nexport const buildBackendFilter = (filter: QueryFilter | undefined): string | undefined => {\n const translated = buildBackendFilterObject(filter)\n if (!translated) return undefined\n\n return JSON.stringify(translated)\n}\n\nexport default buildBackendFilter\n"],"names":["UI_ONLY_KEYS","filterActivityTypes","k","UI_KEY_TO_BACKEND_KEY","isCondition","c","translateCondition","mappedKey","values","hasNone","named","v","nullCond","namedCond","translate","node","translated","buildBackendFilterObject","filter","expanded","expandRelativeDates","buildBackendFilter"],"mappings":"skLAMMA,EAAe,IAAI,IAAI,OAAO,KAAKC,EAAAA,mBAAmB,EAAE,OAAQC,GAAMA,IAAM,UAAU,CAAC,EAEvFC,EAAgD,CACpD,gBAAiB,sBAEjB,YAAa,2BACf,EAEMC,EAAeC,GACZ,CAAC,CAACA,GAAK,QAASA,EAGnBC,EAAsBD,GAA2D,CACrF,MAAME,EAAYJ,EAAsBE,EAAE,GAAG,GAAKA,EAAE,IAEpD,GAAIA,EAAE,MAAQ,kBACZ,OAAOA,EAAE,MAAQ,CAAE,IAAKE,EAAW,SAAU,KAAM,MAAO,CAAA,CAAC,EAAM,KAGnE,GAAIF,EAAE,MAAQ,oBACZ,OAAOA,EAAE,MAAQ,CAAE,IAAK,2BAA4B,SAAU,WAAc,KAG9E,GAAIA,EAAE,MAAQ,WAAY,CACxB,MAAMG,EAAS,MAAM,QAAQH,EAAE,KAAK,EAAKA,EAAE,MAAqB,CAAA,EAC1DI,EAAUD,EAAO,SAAS,UAAU,EACpCE,EAAQF,EAAO,OAAQG,GAAMA,IAAM,UAAU,EAC7CC,EAAwB,CAC5B,SAAU,KACV,WAAY,CACV,CAAE,IAAK,yBAA0B,SAAU,QAAA,EAC3C,CAAE,IAAK,yBAA0B,SAAU,KAAM,MAAO,EAAA,CAAG,CAC7D,EAEIC,EAA4B,CAChC,IAAK,yBACL,SAAU,KACV,MAAOH,CAAA,EAET,OAAID,GAAWC,EAAM,OAAe,CAAE,SAAU,KAAM,WAAY,CAACE,EAAUC,CAAS,CAAA,EAClFJ,EAAgBG,EAChBF,EAAM,OAAeG,EAClB,IACT,CAEA,OAAIR,EAAE,MAAQ,QAAUA,EAAE,WAAa,QAAU,OAAOA,EAAE,OAAU,SAC3D,CAAE,GAAGA,EAAG,IAAKE,EAAW,MAAO,IAAIF,EAAE,KAAK,GAAA,EAK/CA,EAAE,MAAQ,SACL,CACL,SAAU,KACV,WAAY,CACV,CAAE,GAAGA,EAAG,IAAK,sBAAA,EACb,CAAE,GAAGA,EAAG,IAAK,wBAAA,CAAyB,CACxC,EAIG,CAAE,GAAGA,EAAG,IAAKE,CAAA,CACtB,EAEMO,EAAaC,GAA4E,CAC7F,GAAIX,EAAYW,CAAI,EAClB,OAAIf,EAAa,IAAIe,EAAK,GAAG,EAAU,KAChCT,EAAmBS,CAAI,EAGhC,MAAMC,GAAcD,EAAK,YAAc,CAAA,GACpC,IAAKV,GAAMS,EAAUT,CAAC,CAAC,EACvB,OAAQA,GAAyCA,IAAM,IAAI,EAE9D,OAAIW,EAAW,SAAW,EAAU,KAE7B,CAAE,SAAUD,EAAK,UAAY,MAAO,WAAYC,CAAA,CACzD,EAEaC,EAA4BC,GAAwD,CAC/F,GAAI,CAACA,GAAU,CAACA,EAAO,YAAY,OAAQ,OAAO,KAElD,MAAMC,EAAWC,EAAAA,oBAAoBF,CAAa,EAC5CF,EAAaF,EAAUK,CAAQ,EACrC,OAAKH,GAAmB,IAG1B,EAEaK,EAAsBH,GAAwD,CACzF,MAAMF,EAAaC,EAAyBC,CAAM,EAClD,GAAKF,EAEL,OAAO,KAAK,UAAUA,CAAU,CAClC"}
@@ -43,7 +43,7 @@ import "../../../api/queries/activities/getActivities.es.js";
43
43
  import "../../../api/queries/activities/updateReaction.es.js";
44
44
  import "../../../api/queries/activities/getMentions.es.js";
45
45
  import "../../../api/queries/activities/getCategories.es.js";
46
- import { filterActivityTypes as s } from "../../../api/queries/activities/util/activitiesHelpers.es.js";
46
+ import { filterActivityTypes as l } from "../../../api/queries/activities/util/activitiesHelpers.es.js";
47
47
  import "../../../api/queries/addons/getAddons.es.js";
48
48
  import "../../../api/queries/addons/updateAddons.es.js";
49
49
  import "../../../api/queries/attributes/getAttributes.es.js";
@@ -96,48 +96,54 @@ import "../../../api/queries/views/getViews.es.js";
96
96
  import "../../../api/queries/views/updateViews.es.js";
97
97
  import "../../../api/queries/watchers/getWatchers.es.js";
98
98
  import "../../../api/queries/uris/getUris.es.js";
99
- import { expandRelativeDates as l } from "../../ProjectTreeTable/utils/expandRelativeDates.es.js";
100
- const u = new Set(Object.keys(s).filter((t) => t !== "activity")), y = {
101
- has_attachments: "activity_data.files"
99
+ import { expandRelativeDates as s } from "../../ProjectTreeTable/utils/expandRelativeDates.es.js";
100
+ const u = new Set(Object.keys(l).filter((t) => t !== "activity")), y = {
101
+ has_attachments: "activity_data.files",
102
+ // not `entity_type`: on inbox rows that column is always 'user'
103
+ origin_type: "activity_data.origin.type"
102
104
  }, d = (t) => !!t && "key" in t, _ = (t) => {
103
- const o = y[t.key] ?? t.key;
105
+ const r = y[t.key] ?? t.key;
104
106
  if (t.key === "has_attachments")
105
- return t.value ? { key: o, operator: "ne", value: [] } : null;
107
+ return t.value ? { key: r, operator: "ne", value: [] } : null;
106
108
  if (t.key === "in_review_session")
107
109
  return t.value ? { key: "activity_data.entityList", operator: "notnull" } : null;
108
110
  if (t.key === "category") {
109
- const r = Array.isArray(t.value) ? t.value : [], p = r.includes("__none__"), i = r.filter((a) => a !== "__none__"), m = {
111
+ const i = Array.isArray(t.value) ? t.value : [], p = i.includes("__none__"), o = i.filter((a) => a !== "__none__"), e = {
110
112
  operator: "or",
111
113
  conditions: [
112
114
  { key: "activity_data.category", operator: "isnull" },
113
115
  { key: "activity_data.category", operator: "eq", value: "" }
114
116
  ]
115
- }, e = {
117
+ }, m = {
116
118
  key: "activity_data.category",
117
119
  operator: "in",
118
- value: i
120
+ value: o
119
121
  };
120
- return p && i.length ? { operator: "or", conditions: [m, e] } : p ? m : i.length ? e : null;
122
+ return p && o.length ? { operator: "or", conditions: [e, m] } : p ? e : o.length ? m : null;
121
123
  }
122
- return t.key === "body" && t.operator === "like" && typeof t.value == "string" ? { ...t, key: o, value: `%${t.value}%` } : t.key === "author" ? {
124
+ return t.key === "body" && t.operator === "like" && typeof t.value == "string" ? { ...t, key: r, value: `%${t.value}%` } : t.key === "author" ? {
123
125
  operator: "or",
124
126
  conditions: [
125
127
  { ...t, key: "activity_data.author" },
126
128
  { ...t, key: "activity_data.assignee" }
127
129
  ]
128
- } : { ...t, key: o };
130
+ } : { ...t, key: r };
129
131
  }, n = (t) => {
130
132
  if (d(t))
131
133
  return u.has(t.key) ? null : _(t);
132
- const o = (t.conditions || []).map((r) => n(r)).filter((r) => r !== null);
133
- return o.length === 0 ? null : { operator: t.operator || "and", conditions: o };
134
- }, er = (t) => {
135
- if (!t || !t.conditions?.length) return;
136
- const o = l(t), r = n(o);
134
+ const r = (t.conditions || []).map((i) => n(i)).filter((i) => i !== null);
135
+ return r.length === 0 ? null : { operator: t.operator || "and", conditions: r };
136
+ }, c = (t) => {
137
+ if (!t || !t.conditions?.length) return null;
138
+ const r = s(t), i = n(r);
139
+ return i || null;
140
+ }, nr = (t) => {
141
+ const r = c(t);
137
142
  if (r)
138
143
  return JSON.stringify(r);
139
144
  };
140
145
  export {
141
- er as buildBackendFilter
146
+ nr as buildBackendFilter,
147
+ c as buildBackendFilterObject
142
148
  };
143
149
  //# sourceMappingURL=buildBackendFilter.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildBackendFilter.es.js","sources":["../../../../../../src/containers/Feed/helpers/buildBackendFilter.ts"],"sourcesContent":["import type { QueryCondition, QueryFilter } from '@shared/api'\nimport { filterActivityTypes } from '@shared/api'\nimport { expandRelativeDates } from '@shared/containers/ProjectTreeTable/utils/expandRelativeDates'\n\n// UI chip keys handled by getFilterActivityTypes → activityTypes arg.\n// Must not leak into the QueryFilter (not in backend whitelist).\nconst UI_ONLY_KEYS = new Set(Object.keys(filterActivityTypes).filter((k) => k !== 'activity'))\n\nconst UI_KEY_TO_BACKEND_KEY: Record<string, string> = {\n has_attachments: 'activity_data.files',\n}\n\nconst isCondition = (c: QueryCondition | QueryFilter): c is QueryCondition => {\n return !!c && 'key' in c\n}\n\nconst translateCondition = (c: QueryCondition): QueryCondition | QueryFilter | null => {\n const mappedKey = UI_KEY_TO_BACKEND_KEY[c.key] ?? c.key\n\n if (c.key === 'has_attachments') {\n return c.value ? { key: mappedKey, operator: 'ne', value: [] } : null\n }\n\n if (c.key === 'in_review_session') {\n return c.value ? { key: 'activity_data.entityList', operator: 'notnull' } : null\n }\n\n if (c.key === 'category') {\n const values = Array.isArray(c.value) ? (c.value as string[]) : []\n const hasNone = values.includes('__none__')\n const named = values.filter((v) => v !== '__none__')\n const nullCond: QueryFilter = {\n operator: 'or',\n conditions: [\n { key: 'activity_data.category', operator: 'isnull' },\n { key: 'activity_data.category', operator: 'eq', value: '' },\n ],\n }\n const namedCond: QueryCondition = {\n key: 'activity_data.category',\n operator: 'in',\n value: named,\n }\n if (hasNone && named.length) return { operator: 'or', conditions: [nullCond, namedCond] }\n if (hasNone) return nullCond\n if (named.length) return namedCond\n return null\n }\n\n if (c.key === 'body' && c.operator === 'like' && typeof c.value === 'string') {\n return { ...c, key: mappedKey, value: `%${c.value}%` }\n }\n\n // \"Author\" UI filter matches actor OR assignee, so picking a user surfaces\n // both their comments/versions AND assignment events involving them.\n if (c.key === 'author') {\n return {\n operator: 'or',\n conditions: [\n { ...c, key: 'activity_data.author' },\n { ...c, key: 'activity_data.assignee' },\n ],\n }\n }\n\n return { ...c, key: mappedKey }\n}\n\nconst translate = (node: QueryCondition | QueryFilter): QueryCondition | QueryFilter | null => {\n if (isCondition(node)) {\n if (UI_ONLY_KEYS.has(node.key)) return null\n return translateCondition(node)\n }\n\n const translated = (node.conditions || [])\n .map((c) => translate(c))\n .filter((c): c is QueryCondition | QueryFilter => c !== null)\n\n if (translated.length === 0) return null\n\n return { operator: node.operator || 'and', conditions: translated }\n}\n\nexport const buildBackendFilter = (filter: QueryFilter | undefined): string | undefined => {\n if (!filter || !filter.conditions?.length) return undefined\n\n const expanded = expandRelativeDates(filter as any) as QueryFilter\n const translated = translate(expanded)\n if (!translated) return undefined\n\n return JSON.stringify(translated)\n}\n\nexport default buildBackendFilter\n"],"names":["UI_ONLY_KEYS","filterActivityTypes","k","UI_KEY_TO_BACKEND_KEY","isCondition","c","translateCondition","mappedKey","values","hasNone","named","v","nullCond","namedCond","translate","node","translated","buildBackendFilter","filter","expanded","expandRelativeDates"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,MAAMA,IAAe,IAAI,IAAI,OAAO,KAAKC,CAAmB,EAAE,OAAO,CAACC,MAAMA,MAAM,UAAU,CAAC,GAEvFC,IAAgD;AAAA,EACpD,iBAAiB;AACnB,GAEMC,IAAc,CAACC,MACZ,CAAC,CAACA,KAAK,SAASA,GAGnBC,IAAqB,CAACD,MAA2D;AACrF,QAAME,IAAYJ,EAAsBE,EAAE,GAAG,KAAKA,EAAE;AAEpD,MAAIA,EAAE,QAAQ;AACZ,WAAOA,EAAE,QAAQ,EAAE,KAAKE,GAAW,UAAU,MAAM,OAAO,CAAA,EAAC,IAAM;AAGnE,MAAIF,EAAE,QAAQ;AACZ,WAAOA,EAAE,QAAQ,EAAE,KAAK,4BAA4B,UAAU,cAAc;AAG9E,MAAIA,EAAE,QAAQ,YAAY;AACxB,UAAMG,IAAS,MAAM,QAAQH,EAAE,KAAK,IAAKA,EAAE,QAAqB,CAAA,GAC1DI,IAAUD,EAAO,SAAS,UAAU,GACpCE,IAAQF,EAAO,OAAO,CAACG,MAAMA,MAAM,UAAU,GAC7CC,IAAwB;AAAA,MAC5B,UAAU;AAAA,MACV,YAAY;AAAA,QACV,EAAE,KAAK,0BAA0B,UAAU,SAAA;AAAA,QAC3C,EAAE,KAAK,0BAA0B,UAAU,MAAM,OAAO,GAAA;AAAA,MAAG;AAAA,IAC7D,GAEIC,IAA4B;AAAA,MAChC,KAAK;AAAA,MACL,UAAU;AAAA,MACV,OAAOH;AAAA,IAAA;AAET,WAAID,KAAWC,EAAM,SAAe,EAAE,UAAU,MAAM,YAAY,CAACE,GAAUC,CAAS,EAAA,IAClFJ,IAAgBG,IAChBF,EAAM,SAAeG,IAClB;AAAA,EACT;AAEA,SAAIR,EAAE,QAAQ,UAAUA,EAAE,aAAa,UAAU,OAAOA,EAAE,SAAU,WAC3D,EAAE,GAAGA,GAAG,KAAKE,GAAW,OAAO,IAAIF,EAAE,KAAK,IAAA,IAK/CA,EAAE,QAAQ,WACL;AAAA,IACL,UAAU;AAAA,IACV,YAAY;AAAA,MACV,EAAE,GAAGA,GAAG,KAAK,uBAAA;AAAA,MACb,EAAE,GAAGA,GAAG,KAAK,yBAAA;AAAA,IAAyB;AAAA,EACxC,IAIG,EAAE,GAAGA,GAAG,KAAKE,EAAA;AACtB,GAEMO,IAAY,CAACC,MAA4E;AAC7F,MAAIX,EAAYW,CAAI;AAClB,WAAIf,EAAa,IAAIe,EAAK,GAAG,IAAU,OAChCT,EAAmBS,CAAI;AAGhC,QAAMC,KAAcD,EAAK,cAAc,CAAA,GACpC,IAAI,CAACV,MAAMS,EAAUT,CAAC,CAAC,EACvB,OAAO,CAACA,MAAyCA,MAAM,IAAI;AAE9D,SAAIW,EAAW,WAAW,IAAU,OAE7B,EAAE,UAAUD,EAAK,YAAY,OAAO,YAAYC,EAAA;AACzD,GAEaC,KAAqB,CAACC,MAAwD;AACzF,MAAI,CAACA,KAAU,CAACA,EAAO,YAAY,OAAQ;AAE3C,QAAMC,IAAWC,EAAoBF,CAAa,GAC5CF,IAAaF,EAAUK,CAAQ;AACrC,MAAKH;AAEL,WAAO,KAAK,UAAUA,CAAU;AAClC;"}
1
+ {"version":3,"file":"buildBackendFilter.es.js","sources":["../../../../../../src/containers/Feed/helpers/buildBackendFilter.ts"],"sourcesContent":["import type { QueryCondition, QueryFilter } from '@shared/api'\nimport { filterActivityTypes } from '@shared/api'\nimport { expandRelativeDates } from '@shared/containers/ProjectTreeTable/utils/expandRelativeDates'\n\n// UI chip keys handled by getFilterActivityTypes → activityTypes arg.\n// Must not leak into the QueryFilter (not in backend whitelist).\nconst UI_ONLY_KEYS = new Set(Object.keys(filterActivityTypes).filter((k) => k !== 'activity'))\n\nconst UI_KEY_TO_BACKEND_KEY: Record<string, string> = {\n has_attachments: 'activity_data.files',\n // not `entity_type`: on inbox rows that column is always 'user'\n origin_type: 'activity_data.origin.type',\n}\n\nconst isCondition = (c: QueryCondition | QueryFilter): c is QueryCondition => {\n return !!c && 'key' in c\n}\n\nconst translateCondition = (c: QueryCondition): QueryCondition | QueryFilter | null => {\n const mappedKey = UI_KEY_TO_BACKEND_KEY[c.key] ?? c.key\n\n if (c.key === 'has_attachments') {\n return c.value ? { key: mappedKey, operator: 'ne', value: [] } : null\n }\n\n if (c.key === 'in_review_session') {\n return c.value ? { key: 'activity_data.entityList', operator: 'notnull' } : null\n }\n\n if (c.key === 'category') {\n const values = Array.isArray(c.value) ? (c.value as string[]) : []\n const hasNone = values.includes('__none__')\n const named = values.filter((v) => v !== '__none__')\n const nullCond: QueryFilter = {\n operator: 'or',\n conditions: [\n { key: 'activity_data.category', operator: 'isnull' },\n { key: 'activity_data.category', operator: 'eq', value: '' },\n ],\n }\n const namedCond: QueryCondition = {\n key: 'activity_data.category',\n operator: 'in',\n value: named,\n }\n if (hasNone && named.length) return { operator: 'or', conditions: [nullCond, namedCond] }\n if (hasNone) return nullCond\n if (named.length) return namedCond\n return null\n }\n\n if (c.key === 'body' && c.operator === 'like' && typeof c.value === 'string') {\n return { ...c, key: mappedKey, value: `%${c.value}%` }\n }\n\n // \"Author\" UI filter matches actor OR assignee, so picking a user surfaces\n // both their comments/versions AND assignment events involving them.\n if (c.key === 'author') {\n return {\n operator: 'or',\n conditions: [\n { ...c, key: 'activity_data.author' },\n { ...c, key: 'activity_data.assignee' },\n ],\n }\n }\n\n return { ...c, key: mappedKey }\n}\n\nconst translate = (node: QueryCondition | QueryFilter): QueryCondition | QueryFilter | null => {\n if (isCondition(node)) {\n if (UI_ONLY_KEYS.has(node.key)) return null\n return translateCondition(node)\n }\n\n const translated = (node.conditions || [])\n .map((c) => translate(c))\n .filter((c): c is QueryCondition | QueryFilter => c !== null)\n\n if (translated.length === 0) return null\n\n return { operator: node.operator || 'and', conditions: translated }\n}\n\nexport const buildBackendFilterObject = (filter: QueryFilter | undefined): QueryFilter | null => {\n if (!filter || !filter.conditions?.length) return null\n\n const expanded = expandRelativeDates(filter as any) as QueryFilter\n const translated = translate(expanded)\n if (!translated) return null\n\n return translated as QueryFilter\n}\n\nexport const buildBackendFilter = (filter: QueryFilter | undefined): string | undefined => {\n const translated = buildBackendFilterObject(filter)\n if (!translated) return undefined\n\n return JSON.stringify(translated)\n}\n\nexport default buildBackendFilter\n"],"names":["UI_ONLY_KEYS","filterActivityTypes","k","UI_KEY_TO_BACKEND_KEY","isCondition","c","translateCondition","mappedKey","values","hasNone","named","v","nullCond","namedCond","translate","node","translated","buildBackendFilterObject","filter","expanded","expandRelativeDates","buildBackendFilter"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,MAAMA,IAAe,IAAI,IAAI,OAAO,KAAKC,CAAmB,EAAE,OAAO,CAACC,MAAMA,MAAM,UAAU,CAAC,GAEvFC,IAAgD;AAAA,EACpD,iBAAiB;AAAA;AAAA,EAEjB,aAAa;AACf,GAEMC,IAAc,CAACC,MACZ,CAAC,CAACA,KAAK,SAASA,GAGnBC,IAAqB,CAACD,MAA2D;AACrF,QAAME,IAAYJ,EAAsBE,EAAE,GAAG,KAAKA,EAAE;AAEpD,MAAIA,EAAE,QAAQ;AACZ,WAAOA,EAAE,QAAQ,EAAE,KAAKE,GAAW,UAAU,MAAM,OAAO,CAAA,EAAC,IAAM;AAGnE,MAAIF,EAAE,QAAQ;AACZ,WAAOA,EAAE,QAAQ,EAAE,KAAK,4BAA4B,UAAU,cAAc;AAG9E,MAAIA,EAAE,QAAQ,YAAY;AACxB,UAAMG,IAAS,MAAM,QAAQH,EAAE,KAAK,IAAKA,EAAE,QAAqB,CAAA,GAC1DI,IAAUD,EAAO,SAAS,UAAU,GACpCE,IAAQF,EAAO,OAAO,CAACG,MAAMA,MAAM,UAAU,GAC7CC,IAAwB;AAAA,MAC5B,UAAU;AAAA,MACV,YAAY;AAAA,QACV,EAAE,KAAK,0BAA0B,UAAU,SAAA;AAAA,QAC3C,EAAE,KAAK,0BAA0B,UAAU,MAAM,OAAO,GAAA;AAAA,MAAG;AAAA,IAC7D,GAEIC,IAA4B;AAAA,MAChC,KAAK;AAAA,MACL,UAAU;AAAA,MACV,OAAOH;AAAA,IAAA;AAET,WAAID,KAAWC,EAAM,SAAe,EAAE,UAAU,MAAM,YAAY,CAACE,GAAUC,CAAS,EAAA,IAClFJ,IAAgBG,IAChBF,EAAM,SAAeG,IAClB;AAAA,EACT;AAEA,SAAIR,EAAE,QAAQ,UAAUA,EAAE,aAAa,UAAU,OAAOA,EAAE,SAAU,WAC3D,EAAE,GAAGA,GAAG,KAAKE,GAAW,OAAO,IAAIF,EAAE,KAAK,IAAA,IAK/CA,EAAE,QAAQ,WACL;AAAA,IACL,UAAU;AAAA,IACV,YAAY;AAAA,MACV,EAAE,GAAGA,GAAG,KAAK,uBAAA;AAAA,MACb,EAAE,GAAGA,GAAG,KAAK,yBAAA;AAAA,IAAyB;AAAA,EACxC,IAIG,EAAE,GAAGA,GAAG,KAAKE,EAAA;AACtB,GAEMO,IAAY,CAACC,MAA4E;AAC7F,MAAIX,EAAYW,CAAI;AAClB,WAAIf,EAAa,IAAIe,EAAK,GAAG,IAAU,OAChCT,EAAmBS,CAAI;AAGhC,QAAMC,KAAcD,EAAK,cAAc,CAAA,GACpC,IAAI,CAACV,MAAMS,EAAUT,CAAC,CAAC,EACvB,OAAO,CAACA,MAAyCA,MAAM,IAAI;AAE9D,SAAIW,EAAW,WAAW,IAAU,OAE7B,EAAE,UAAUD,EAAK,YAAY,OAAO,YAAYC,EAAA;AACzD,GAEaC,IAA2B,CAACC,MAAwD;AAC/F,MAAI,CAACA,KAAU,CAACA,EAAO,YAAY,OAAQ,QAAO;AAElD,QAAMC,IAAWC,EAAoBF,CAAa,GAC5CF,IAAaF,EAAUK,CAAQ;AACrC,SAAKH,KAAmB;AAG1B,GAEaK,KAAqB,CAACH,MAAwD;AACzF,QAAMF,IAAaC,EAAyBC,CAAM;AAClD,MAAKF;AAEL,WAAO,KAAK,UAAUA,CAAU;AAClC;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("@ynput/ayon-react-components"),h=require("../../ProjectTreeTable/utils/queryFilterToClientFilter.cjs.js"),y=require("../../ProjectTreeTable/utils/clientFilterToQueryFilter.cjs.js"),d=["comments","versions","updates","checklists","has_attachments","in_review_session"],b=u=>!!u&&"key"in u,v=(u,i)=>{const t=[],n=[],s=e=>{if(!e)return;if(b(e)){const a=e.key;if(a==="body"){const l=String(e.value??"");l&&n.push({id:l,label:l});return}const o=i.find(l=>l.id===a);if(!o)return;if(d.includes(a)){e.value===!0&&t.push({id:c.buildFilterId(a),label:o.label,icon:o.icon,type:"boolean",singleSelect:!0,values:[{id:"true",label:o.label}]});return}const F=Array.isArray(e.value)?e.value:[e.value];t.push({id:c.buildFilterId(a),label:o.label,type:o.type,icon:o.icon,operator:"OR",values:F.map(l=>{const p=o.values?.find(f=>f.id===String(l));return p?{...p}:{id:String(l),label:String(l)}})});return}const r=h.tryMergeDatetimeRange(e,i);if(r){t.push(r);return}e.conditions?.forEach(s)};return u?.conditions?.forEach(s),n.length&&t.push({id:c.SEARCH_FILTER_ID,label:"",values:n}),t},g=u=>{const i=[],t=[];return u.forEach(n=>{const s=c.getFilterFromId(n.id),e=(n.values||[]).map(r=>r.id);if(e.length)if(s===c.SEARCH_FILTER_ID)e.forEach(r=>t.push({key:"body",operator:"like",value:String(r)}));else if(d.includes(s))e.includes("true")&&i.push({key:s,operator:"eq",value:!0});else if(n.type==="datetime"){const r=y.convertDateFilterToQueryFilter(s,n);r&&i.push(r)}else i.push({key:s,operator:"in",value:e.map(String)})}),t.length===1?i.push(t[0]):t.length>1&&i.push({operator:"or",conditions:t}),{operator:"and",conditions:i}};exports.FEED_BOOLEAN_KEYS=d;exports.clientFiltersToFeedFilter=g;exports.feedFilterToClientFilters=v;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("@ynput/ayon-react-components"),h=require("../../ProjectTreeTable/utils/queryFilterToClientFilter.cjs.js"),y=require("../../ProjectTreeTable/utils/clientFilterToQueryFilter.cjs.js"),d=["comments","versions","updates","checklists","has_attachments","in_review_session"],b=u=>!!u&&"key"in u,g=(u,i)=>{const t=[],s=[],o=e=>{if(!e)return;if(b(e)){const a=e.key;if(a==="body"){const n=String(e.value??"");n&&s.push({id:n,label:n});return}const l=i.find(n=>n.id===a);if(!l)return;if(d.includes(a)){e.value===!0&&t.push({id:c.buildFilterId(a),label:l.label,icon:l.icon,type:"boolean",singleSelect:!0,values:[{id:"true",label:l.label}]});return}const F=Array.isArray(e.value)?e.value:[e.value];t.push({id:c.buildFilterId(a),label:l.label,type:l.type,icon:l.icon,singleSelect:l.singleSelect,operator:"OR",values:F.map(n=>{const p=l.values?.find(f=>f.id===String(n));return p?{...p}:{id:String(n),label:String(n)}})});return}const r=h.tryMergeDatetimeRange(e,i);if(r){t.push(r);return}e.conditions?.forEach(o)};return u?.conditions?.forEach(o),s.length&&t.push({id:c.SEARCH_FILTER_ID,label:"",values:s}),t},v=u=>{const i=[],t=[];return u.forEach(s=>{const o=c.getFilterFromId(s.id),e=(s.values||[]).map(r=>r.id);if(e.length)if(o===c.SEARCH_FILTER_ID)e.forEach(r=>t.push({key:"body",operator:"like",value:String(r)}));else if(d.includes(o))e.includes("true")&&i.push({key:o,operator:"eq",value:!0});else if(s.type==="datetime"){const r=y.convertDateFilterToQueryFilter(o,s);r&&i.push(r)}else i.push({key:o,operator:"in",value:e.map(String)})}),t.length===1?i.push(t[0]):t.length>1&&i.push({operator:"or",conditions:t}),{operator:"and",conditions:i}};exports.FEED_BOOLEAN_KEYS=d;exports.clientFiltersToFeedFilter=v;exports.feedFilterToClientFilters=g;
2
2
  //# sourceMappingURL=feedFilterAdapter.cjs.js.map