@ynput/ayon-frontend-shared 0.3.28 → 0.3.29

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 (99) hide show
  1. package/dist/_virtual/index.cjs14.js +1 -1
  2. package/dist/_virtual/index.cjs15.js +1 -1
  3. package/dist/_virtual/index.cjs19.js +1 -1
  4. package/dist/_virtual/index.cjs4.js +1 -1
  5. package/dist/_virtual/index.cjs5.js +1 -1
  6. package/dist/_virtual/index.cjs6.js +1 -1
  7. package/dist/_virtual/index.cjs8.js +1 -1
  8. package/dist/_virtual/index.cjs9.js +1 -1
  9. package/dist/_virtual/index.es10.js +2 -2
  10. package/dist/_virtual/index.es11.js +2 -2
  11. package/dist/_virtual/index.es13.js +2 -2
  12. package/dist/_virtual/index.es14.js +2 -5
  13. package/dist/_virtual/index.es14.js.map +1 -1
  14. package/dist/_virtual/index.es15.js +2 -2
  15. package/dist/_virtual/index.es16.js +2 -2
  16. package/dist/_virtual/index.es17.js +2 -2
  17. package/dist/_virtual/index.es18.js +2 -2
  18. package/dist/_virtual/index.es19.js +2 -2
  19. package/dist/_virtual/index.es4.js +5 -2
  20. package/dist/_virtual/index.es4.js.map +1 -1
  21. package/dist/_virtual/index.es5.js +2 -5
  22. package/dist/_virtual/index.es5.js.map +1 -1
  23. package/dist/_virtual/index.es6.js +2 -2
  24. package/dist/_virtual/index.es8.js +2 -2
  25. package/dist/_virtual/index.es9.js +5 -2
  26. package/dist/_virtual/index.es9.js.map +1 -1
  27. package/dist/components.cjs.js +1 -1
  28. package/dist/components.es.js +34 -33
  29. package/dist/node_modules/match-sorter/dist/match-sorter.esm.cjs.js +1 -1
  30. package/dist/node_modules/match-sorter/dist/match-sorter.esm.es.js +1 -1
  31. package/dist/node_modules/remove-accents/index.cjs.js +1 -1
  32. package/dist/node_modules/remove-accents/index.es.js +1 -1
  33. package/dist/shared/node_modules/@module-federation/error-codes/dist/index.cjs.js +1 -1
  34. package/dist/shared/node_modules/@module-federation/error-codes/dist/index.es.js +1 -1
  35. package/dist/shared/node_modules/@module-federation/runtime/dist/index.cjs.js +1 -1
  36. package/dist/shared/node_modules/@module-federation/runtime/dist/index.es.js +1 -1
  37. package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.cjs.js +1 -1
  38. package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.es.js +1 -1
  39. package/dist/shared/node_modules/@module-federation/runtime-core/dist/module/index.cjs.js +1 -1
  40. package/dist/shared/node_modules/@module-federation/runtime-core/dist/module/index.es.js +1 -1
  41. package/dist/shared/node_modules/@module-federation/runtime-core/dist/plugins/snapshot/index.cjs.js +1 -1
  42. package/dist/shared/node_modules/@module-federation/runtime-core/dist/plugins/snapshot/index.es.js +1 -1
  43. package/dist/shared/node_modules/@module-federation/runtime-core/dist/remote/index.cjs.js +1 -1
  44. package/dist/shared/node_modules/@module-federation/runtime-core/dist/remote/index.es.js +1 -1
  45. package/dist/shared/node_modules/@module-federation/runtime-core/dist/shared/index.cjs.js +1 -1
  46. package/dist/shared/node_modules/@module-federation/runtime-core/dist/shared/index.es.js +1 -1
  47. package/dist/shared/node_modules/@module-federation/runtime-core/dist/type/index.cjs.js +1 -1
  48. package/dist/shared/node_modules/@module-federation/runtime-core/dist/type/index.es.js +1 -1
  49. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/hooks/index.cjs.js +1 -1
  50. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/hooks/index.es.js +1 -1
  51. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/index.cjs.js +1 -1
  52. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/index.es.js +1 -1
  53. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/index.cjs.js +1 -1
  54. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/index.cjs.js.map +1 -1
  55. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/index.es.js +1 -1
  56. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/utils.cjs.js +1 -1
  57. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/utils.es.js +1 -1
  58. package/dist/shared/node_modules/@module-federation/sdk/dist/index.cjs.js +1 -1
  59. package/dist/shared/node_modules/@module-federation/sdk/dist/index.es.js +1 -1
  60. package/dist/shared/node_modules/@module-federation/sdk/dist/utils.cjs.js +1 -1
  61. package/dist/shared/node_modules/@module-federation/sdk/dist/utils.es.js +1 -1
  62. package/dist/shared/node_modules/prop-types/index.cjs.js +1 -1
  63. package/dist/shared/node_modules/prop-types/index.es.js +1 -1
  64. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js +1 -1
  65. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js.map +1 -1
  66. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.es.js +1 -1
  67. package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js +1 -1
  68. package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js.map +1 -1
  69. package/dist/shared/node_modules/react-transition-group/esm/Transition.es.js +1 -1
  70. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js +1 -1
  71. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js.map +1 -1
  72. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.es.js +1 -1
  73. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js +1 -1
  74. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -1
  75. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js +155 -133
  76. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -1
  77. package/dist/shared/src/components/Powerpack/PricingLink.cjs.js +1 -1
  78. package/dist/shared/src/components/Powerpack/PricingLink.cjs.js.map +1 -1
  79. package/dist/shared/src/components/Powerpack/PricingLink.es.js +5 -5
  80. package/dist/shared/src/components/Powerpack/PricingLink.es.js.map +1 -1
  81. package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.cjs.js +1 -1
  82. package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.cjs.js.map +1 -1
  83. package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.es.js +29 -29
  84. package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.es.js.map +1 -1
  85. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js +1 -1
  86. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js.map +1 -1
  87. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js +100 -99
  88. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js.map +1 -1
  89. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js +1 -1
  90. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js.map +1 -1
  91. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js +23 -23
  92. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js.map +1 -1
  93. package/dist/shared/src/containers/Feed/Feed.cjs.js +1 -1
  94. package/dist/shared/src/containers/Feed/Feed.cjs.js.map +1 -1
  95. package/dist/shared/src/containers/Feed/Feed.es.js +1 -1
  96. package/dist/shared/src/containers/Feed/Feed.es.js.map +1 -1
  97. package/dist/types/components/Powerpack/PricingLink.d.ts +1 -1
  98. package/dist/types/components/VersionUploader/context/VersionUploadContext.d.ts +1 -0
  99. package/package.json +2 -2
@@ -1,10 +1,10 @@
1
1
  import { j as r } from "../../../../../_virtual/jsx-runtime.es.js";
2
- import c from "../../SimpleTable/SimpleTable.es.js";
2
+ import j from "../../SimpleTable/SimpleTable.es.js";
3
3
  import "../../SimpleTable/context/SimpleTableContext.es.js";
4
- import { Container as x } from "../../SimpleTable/SimpleTable.styled.es.js";
4
+ import { Container as b } from "../../SimpleTable/SimpleTable.styled.es.js";
5
5
  import "../../SimpleTable/SimpleTableRowTemplate.es.js";
6
- import j from "./EntityTypeTableHeader.es.js";
7
- import { upperFirst as b } from "lodash";
6
+ import h from "./EntityTypeTableHeader.es.js";
7
+ import { upperFirst as E } from "lodash";
8
8
  import "../../../components/AddonLoadingScreen/AddonLoadingScreen.es.js";
9
9
  import "react";
10
10
  import "../../../../../node_modules/match-sorter/dist/match-sorter.esm.es.js";
@@ -129,7 +129,7 @@ import "../../../components/DetailsPanelDetails/DetailsSection.es.js";
129
129
  import "../../../components/DetailsPanelDetails/FieldLabel.es.js";
130
130
  import "../../../components/DoneCheckbox/DoneCheckbox.es.js";
131
131
  import "../../../components/EarlyPreview/EarlyPreview.es.js";
132
- import { EmptyPlaceholder as h } from "../../../components/EmptyPlaceholder/EmptyPlaceholder.es.js";
132
+ import { EmptyPlaceholder as T } from "../../../components/EmptyPlaceholder/EmptyPlaceholder.es.js";
133
133
  import "../../../components/EmptyPlaceholder/EmptyPlaceholderFlex.styled.es.js";
134
134
  import "../../ContextMenu/ContextMenuContext.es.js";
135
135
  /* empty css */
@@ -275,45 +275,45 @@ import "../../../components/Watchers/Watchers.es.js";
275
275
  import "../../../components/Menu/Menu.styled.es.js";
276
276
  import "../../../components/Menu/MenuItem.es.js";
277
277
  import "../../../components/ReviewablesSelector/ReviewablesSelector.es.js";
278
- const Hm = ({
279
- entityType: t,
278
+ const Fm = ({
279
+ entityType: i,
280
280
  tableData: o,
281
- isLoading: i = !1,
281
+ isLoading: m = !1,
282
282
  error: e,
283
283
  search: s,
284
284
  onSearch: l,
285
285
  isFolderHierarchy: n,
286
286
  isMultiSelect: a,
287
- onRowSubmit: f,
288
- onScrollBottom: d
287
+ onRowSubmit: d,
288
+ onScrollBottom: f
289
289
  }) => {
290
- const u = (m) => {
291
- m.preventDefault();
292
- const p = m.currentTarget.id;
293
- p && f?.(p);
290
+ const c = (p) => {
291
+ p.preventDefault();
292
+ const t = p.currentTarget.id, u = o.find((x) => x.id === t);
293
+ t && !u?.isDisabled && d?.(t);
294
294
  };
295
- return /* @__PURE__ */ r.jsxs(x, { children: [
295
+ return /* @__PURE__ */ r.jsxs(b, { children: [
296
296
  /* @__PURE__ */ r.jsx(
297
- j,
297
+ h,
298
298
  {
299
299
  search: s,
300
300
  onSearch: l,
301
- title: b(t) + "s"
301
+ title: E(i) + "s"
302
302
  }
303
303
  ),
304
- !i && !o?.length && /* @__PURE__ */ r.jsx(h, { message: `No ${t}s found.`, error: e }),
304
+ !m && !o?.length && /* @__PURE__ */ r.jsx(T, { message: `No ${i}s found.`, error: e }),
305
305
  /* @__PURE__ */ r.jsx(
306
- c,
306
+ j,
307
307
  {
308
308
  data: o,
309
- isLoading: i,
309
+ isLoading: m,
310
310
  isExpandable: n,
311
311
  rowHeight: 34,
312
312
  isMultiSelect: a,
313
- onScrollBottom: d,
313
+ onScrollBottom: f,
314
314
  pt: {
315
315
  row: {
316
- onDoubleClick: u
316
+ onDoubleClick: c
317
317
  }
318
318
  }
319
319
  }
@@ -321,6 +321,6 @@ const Hm = ({
321
321
  ] });
322
322
  };
323
323
  export {
324
- Hm as default
324
+ Fm as default
325
325
  };
326
326
  //# sourceMappingURL=EntityTypeTable.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityTypeTable.es.js","sources":["../../../../../../src/containers/EntityPickerDialog/components/EntityTypeTable.tsx"],"sourcesContent":["// Show's all data for a specific entity type with parent ids and optional search\n// When entity type is folder, the data defaults to a tree table when not searching and a flat table when searching\n\nimport { FC, useMemo } from 'react'\nimport { PickerEntityType } from '../EntityPickerDialog'\nimport SimpleTable, { Container, SimpleTableRow } from '@shared/containers/SimpleTable'\nimport EntityTypeTableHeader from './EntityTypeTableHeader'\nimport { upperFirst } from 'lodash'\nimport { useGetSearchedEntitiesLinksInfiniteQuery } from '@shared/api'\nimport { buildEntityPickerTableData } from '../util'\nimport { EmptyPlaceholder } from '@shared/components'\n\ninterface EntityTypeTableProps {\n entityType: PickerEntityType\n tableData: SimpleTableRow[] // Folder data if this is a folder table\n isLoading?: boolean // Whether folders are loading\n error?: string // Error message if any\n search?: string // The search term to filter the entities\n onSearch: (search: string | undefined) => void // Callback to handle search changes\n isFolderHierarchy?: boolean // Whether this is a folder hierarchy table\n isMultiSelect?: boolean // Whether to allow multiple selection\n onRowSubmit?: (id: string) => void // Callback when a row is submitted (e.g., double-clicked)\n onScrollBottom?: () => void // Callback when scrolled to the bottom of the table\n}\n\nconst EntityTypeTable: FC<EntityTypeTableProps> = ({\n entityType,\n tableData,\n isLoading = false,\n error,\n search,\n onSearch,\n isFolderHierarchy,\n isMultiSelect,\n onRowSubmit,\n onScrollBottom,\n}) => {\n const handleDoubleClick = (e: React.MouseEvent<HTMLTableRowElement>) => {\n e.preventDefault()\n const id = e.currentTarget.id\n if (id) {\n onRowSubmit?.(id)\n }\n }\n\n return (\n <Container>\n <EntityTypeTableHeader\n search={search}\n onSearch={onSearch}\n title={upperFirst(entityType) + 's'}\n />\n {!isLoading && !tableData?.length && (\n <EmptyPlaceholder message={`No ${entityType}s found.`} error={error} />\n )}\n <SimpleTable\n data={tableData}\n isLoading={isLoading}\n isExpandable={isFolderHierarchy}\n rowHeight={34}\n isMultiSelect={isMultiSelect}\n onScrollBottom={onScrollBottom}\n pt={{\n row: {\n onDoubleClick: handleDoubleClick,\n },\n }}\n />\n </Container>\n )\n}\n\nexport default EntityTypeTable\n"],"names":["EntityTypeTable","entityType","tableData","isLoading","error","search","onSearch","isFolderHierarchy","isMultiSelect","onRowSubmit","onScrollBottom","handleDoubleClick","e","id","Container","jsx","EntityTypeTableHeader","upperFirst","EmptyPlaceholder","SimpleTable"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,MAAMA,KAA4C,CAAC;AAAA,EACjD,YAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,gBAAAC;AACF,MAAM;AACJ,QAAMC,IAAoB,CAACC,MAA6C;AACtE,IAAAA,EAAE,eAAA;AACF,UAAMC,IAAKD,EAAE,cAAc;AAC3B,IAAIC,KACFJ,IAAcI,CAAE;AAAA,EAEpB;AAEA,gCACGC,GAAA,EACC,UAAA;AAAA,IAAAC,gBAAAA,EAAAA;AAAAA,MAACC;AAAA,MAAA;AAAA,QACC,QAAAX;AAAA,QACA,UAAAC;AAAA,QACA,OAAOW,EAAWhB,CAAU,IAAI;AAAA,MAAA;AAAA,IAAA;AAAA,IAEjC,CAACE,KAAa,CAACD,GAAW,UACzBa,gBAAAA,EAAAA,IAACG,GAAA,EAAiB,SAAS,MAAMjB,CAAU,YAAY,OAAAG,EAAA,CAAc;AAAA,IAEvEW,gBAAAA,EAAAA;AAAAA,MAACI;AAAA,MAAA;AAAA,QACC,MAAMjB;AAAA,QACN,WAAAC;AAAA,QACA,cAAcI;AAAA,QACd,WAAW;AAAA,QACX,eAAAC;AAAA,QACA,gBAAAE;AAAA,QACA,IAAI;AAAA,UACF,KAAK;AAAA,YACH,eAAeC;AAAA,UAAA;AAAA,QACjB;AAAA,MACF;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;"}
1
+ {"version":3,"file":"EntityTypeTable.es.js","sources":["../../../../../../src/containers/EntityPickerDialog/components/EntityTypeTable.tsx"],"sourcesContent":["// Show's all data for a specific entity type with parent ids and optional search\n// When entity type is folder, the data defaults to a tree table when not searching and a flat table when searching\n\nimport { FC, useMemo } from 'react'\nimport { PickerEntityType } from '../EntityPickerDialog'\nimport SimpleTable, { Container, SimpleTableRow } from '@shared/containers/SimpleTable'\nimport EntityTypeTableHeader from './EntityTypeTableHeader'\nimport { upperFirst } from 'lodash'\nimport { useGetSearchedEntitiesLinksInfiniteQuery } from '@shared/api'\nimport { buildEntityPickerTableData } from '../util'\nimport { EmptyPlaceholder } from '@shared/components'\n\ninterface EntityTypeTableProps {\n entityType: PickerEntityType\n tableData: SimpleTableRow[] // Folder data if this is a folder table\n isLoading?: boolean // Whether folders are loading\n error?: string // Error message if any\n search?: string // The search term to filter the entities\n onSearch: (search: string | undefined) => void // Callback to handle search changes\n isFolderHierarchy?: boolean // Whether this is a folder hierarchy table\n isMultiSelect?: boolean // Whether to allow multiple selection\n onRowSubmit?: (id: string) => void // Callback when a row is submitted (e.g., double-clicked)\n onScrollBottom?: () => void // Callback when scrolled to the bottom of the table\n}\n\nconst EntityTypeTable: FC<EntityTypeTableProps> = ({\n entityType,\n tableData,\n isLoading = false,\n error,\n search,\n onSearch,\n isFolderHierarchy,\n isMultiSelect,\n onRowSubmit,\n onScrollBottom,\n}) => {\n const handleDoubleClick = (e: React.MouseEvent<HTMLTableRowElement>) => {\n e.preventDefault()\n const id = e.currentTarget.id\n const row = tableData.find((r) => r.id === id)\n if (id && !row?.isDisabled) {\n onRowSubmit?.(id)\n }\n }\n\n return (\n <Container>\n <EntityTypeTableHeader\n search={search}\n onSearch={onSearch}\n title={upperFirst(entityType) + 's'}\n />\n {!isLoading && !tableData?.length && (\n <EmptyPlaceholder message={`No ${entityType}s found.`} error={error} />\n )}\n <SimpleTable\n data={tableData}\n isLoading={isLoading}\n isExpandable={isFolderHierarchy}\n rowHeight={34}\n isMultiSelect={isMultiSelect}\n onScrollBottom={onScrollBottom}\n pt={{\n row: {\n onDoubleClick: handleDoubleClick,\n },\n }}\n />\n </Container>\n )\n}\n\nexport default EntityTypeTable\n"],"names":["EntityTypeTable","entityType","tableData","isLoading","error","search","onSearch","isFolderHierarchy","isMultiSelect","onRowSubmit","onScrollBottom","handleDoubleClick","e","id","row","r","Container","jsx","EntityTypeTableHeader","upperFirst","EmptyPlaceholder","SimpleTable"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,MAAMA,KAA4C,CAAC;AAAA,EACjD,YAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,gBAAAC;AACF,MAAM;AACJ,QAAMC,IAAoB,CAACC,MAA6C;AACtE,IAAAA,EAAE,eAAA;AACF,UAAMC,IAAKD,EAAE,cAAc,IACrBE,IAAMZ,EAAU,KAAK,CAACa,MAAMA,EAAE,OAAOF,CAAE;AAC7C,IAAIA,KAAM,CAACC,GAAK,cACdL,IAAcI,CAAE;AAAA,EAEpB;AAEA,gCACGG,GAAA,EACC,UAAA;AAAA,IAAAC,gBAAAA,EAAAA;AAAAA,MAACC;AAAA,MAAA;AAAA,QACC,QAAAb;AAAA,QACA,UAAAC;AAAA,QACA,OAAOa,EAAWlB,CAAU,IAAI;AAAA,MAAA;AAAA,IAAA;AAAA,IAEjC,CAACE,KAAa,CAACD,GAAW,UACzBe,gBAAAA,EAAAA,IAACG,GAAA,EAAiB,SAAS,MAAMnB,CAAU,YAAY,OAAAG,EAAA,CAAc;AAAA,IAEvEa,gBAAAA,EAAAA;AAAAA,MAACI;AAAA,MAAA;AAAA,QACC,MAAMnB;AAAA,QACN,WAAAC;AAAA,QACA,cAAcI;AAAA,QACd,WAAW;AAAA,QACX,eAAAC;AAAA,QACA,gBAAAE;AAAA,QACA,IAAI;AAAA,UACF,KAAK;AAAA,YACH,eAAeC;AAAA,UAAA;AAAA,QACjB;AAAA,MACF;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("../../../../_virtual/jsx-runtime.cjs.js"),q=require("react"),le=require("./components/ActivityItem.cjs.js"),de=require("./components/CommentInput/CommentInput.cjs.js"),E=require("./Feed.styled.cjs.js"),qe=require("./hooks/useCommentMutations.cjs.js"),me=require("./hooks/useTransformActivities.cjs.js"),pe=require("../../../../node_modules/react-intersection-observer/dist/index.cjs.js"),ge=require("./hooks/useSaveScrollPos.cjs.js"),he=require("./hooks/useScrollOnInputOpen.cjs.js"),xe=require("./feedHelpers.cjs.js");require("@ynput/ayon-react-components");const ye=require("clsx"),fe=require("./hooks/useScrollToHighlighted.cjs.js"),ve=require("./components/FileUploadPreview/FileUploadPreview.cjs.js"),Ce=require("../../components/EmptyPlaceholder/EmptyPlaceholder.cjs.js");require("../../components/EmptyPlaceholder/EmptyPlaceholderFlex.styled.cjs.js");const h=require("./context/FeedContext.cjs.js");require("../../context/RemoteModulesContext.cjs.js");const ke=require("../../context/DetailsPanelContext.cjs.js");require("../../context/SubtasksModulesContext.cjs.js");require("../../context/ThumbnailUploaderContext.cjs.js");require("../../context/SettingsPanelContext.cjs.js");require("../../context/pip/PiPProvider.cjs.js");require("react-dom");require("../../context/pip/PiPWrapper.cjs.js");require("../../context/AddonProjectContext.cjs.js");require("../../context/AddonContext.cjs.js");require("../../context/PowerpackContext.cjs.js");require("../../context/MoveEntityContext.cjs.js");require("../../context/MenuContext.cjs.js");require("../../context/WebsocketContext.cjs.js");require("../../context/GlobalContext.cjs.js");require("../../context/ProjectContext.cjs.js");require("../../context/ProjectFoldersContext.cjs.js");require("../../context/UriContext.cjs.js");require("../../api/base/client.cjs.js");require("../../api/generated/graphql.cjs.js");require("../../api/generated/graphqlLinks.cjs.js");require("../../api/generated/access.cjs.js");require("../../api/generated/actions.cjs.js");require("../../api/generated/activityFeed.cjs.js");require("../../api/generated/addons.cjs.js");require("../../api/generated/anatomy.cjs.js");require("../../api/generated/attributes.cjs.js");require("../../api/generated/authentication.cjs.js");require("../../api/generated/bundles.cjs.js");require("../../api/generated/configuration.cjs.js");require("../../api/generated/dataImport.cjs.js");require("../../api/generated/desktop.cjs.js");require("../../api/generated/entityLists.cjs.js");require("../../api/generated/events.cjs.js");require("../../api/generated/files.cjs.js");require("../../api/generated/folders.cjs.js");require("../../api/generated/inbox.cjs.js");require("../../api/generated/links.cjs.js");require("../../api/generated/market.cjs.js");require("../../api/generated/onboarding.cjs.js");require("../../api/generated/operations.cjs.js");require("../../api/generated/products.cjs.js");require("../../api/generated/projectDashboard.cjs.js");require("../../api/generated/projects.cjs.js");require("../../api/generated/projectFolders.cjs.js");require("../../api/generated/reviewables.cjs.js");require("../../api/generated/services.cjs.js");require("../../api/generated/system.cjs.js");require("../../api/generated/tasks.cjs.js");require("../../api/generated/teams.cjs.js");require("../../api/generated/thumbnails.cjs.js");require("../../api/generated/uRIs.cjs.js");require("../../api/generated/users.cjs.js");require("../../api/generated/versions.cjs.js");require("../../api/generated/workfiles.cjs.js");require("../../api/generated/ynputCloud.cjs.js");require("../../api/generated/grouping.cjs.js");require("../../api/generated/views.cjs.js");require("../../api/queries/actions/getActions.cjs.js");require("../../api/queries/activities/getActivities.cjs.js");require("../../api/queries/activities/updateActivities.cjs.js");require("../../api/queries/activities/updateReaction.cjs.js");require("../../api/queries/activities/getMentions.cjs.js");require("../../api/queries/activities/getCategories.cjs.js");require("../../api/queries/addons/getAddons.cjs.js");require("../../api/queries/addons/updateAddons.cjs.js");require("../../api/queries/attributes/getAttributes.cjs.js");require("../../api/queries/attributes/updateAttributes.cjs.js");require("../../api/queries/authentication/getAuthentication.cjs.js");require("../../api/queries/cloud/cloud.cjs.js");require("../../api/queries/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/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/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/links/getEntityLinks.cjs.js");require("../../api/queries/overview/getOverview.cjs.js");require("../../api/queries/overview/updateOverview.cjs.js");require("../../api/queries/versions/getVersionsProducts.cjs.js");const Ee=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 Fe=require("./helpers/mergeAnnotationAttachments.cjs.js"),je=require("../DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.cjs.js"),Ie=30,Me=[{id:"comments",tooltip:"Comments",icon:"chat"},{id:"checklists",tooltip:"Checklists",icon:"checklist"},{id:"versions",tooltip:"Published versions",icon:"layers"},{id:"updates",tooltip:"Entity updates",icon:"arrow_circle_right"}],Pe=({disabled:_,readOnly:D,statuses:H=[],entityListId:B,isSlideOut:W})=>{const{projectName:o,entities:l,entityType:m,editingId:F,projectInfo:j,setEditingId:I,userName:V,activitiesData:x,isLoadingNew:a,isLoadingNextPage:M,loadNextPage:d,hasNextPage:U,users:G,feedFilter:u,setFeedFilter:Q}=h.useFeedContext(),{openSlideOut:z,highlightedActivities:y,setHighlightedActivities:J,onOpenImage:K,setFeedAnnotations:P,user:R}=ke.useDetailsPanelContext(),X=u.conditions?.some(e=>"key"in e&&e.key==="versions"&&e.value===!0),Y=u.conditions?.some(e=>"key"in e&&["comments","checklists","versions","updates"].includes(e.key)&&e.value===!0),w=u.conditions?.some(e=>"key"in e&&(e.key==="comments"||e.key==="checklists")&&e.value===!0),{data:b,isLoading:Z}=Ee.useGetMyProjectPermissionsQuery({projectName:o},{skip:!o}),$=!R.data?.isManager&&!R.data?.isAdmin&&!Z&&b?.activities?.enabled&&!b?.activities?.activities?.includes("comment")||Y&&!w,p=q.useMemo(()=>Fe(x),[x]);q.useEffect(()=>{p.length||P([]);const e=p.map(r=>r.activityData?.annotations?.map(i=>({...i,activityId:r.activityId}))).filter(Boolean).flat();P(e)},[p]);const f=me.default(p,G,j,m,V,u),c=q.useRef(null);he({feedRef:c,isInputOpen:F===h.FEED_NEW_COMMENT,height:93}),ge({entities:l,feedRef:c,filter:u,disabled:!!y.length,isLoading:a}),fe({feedRef:c,highlighted:y,isLoading:a||M,loadNextPage:d,hasNextPage:!!d,activities:x});const{submitComment:A,updateComment:N,deleteComment:ee,isSaving:re}=qe({projectName:o,entityType:m,entities:l,filter:u,entityListId:B}),ie=q.useCallback(async(e,r=[],i={})=>{await A(e,r,i),c.current&&c.current.scrollTo({top:0})},[A,c]),te=(e,r)=>{const i=e?.target;if(!i||!r)return console.log("no target or activity");const t=i.checked,n=t?"[ ]":"[x]",ue=t?"[x]":"[ ]",{body:g}=r,T=Array.from(i.closest(".comment-body")?.querySelectorAll(".task-list-item")||[]).findIndex(k=>k===i.closest("li"));let O=T;(g.match(/\[.\]/g)||[]).forEach((k,ae)=>{k!==n&&ae<T&&O--});const L=[];let v=-1;for(;(v=g.indexOf(n,v+1))>-1;)L.push(v);const C=L[O];if(C===void 0)return;const ce=C+n.length,S=g.slice(0,C)+ue+g.slice(ce);S&&N(r,S,r.files)},se=e=>{const{entityId:r,entityType:i,activityId:t}=e;if(!i||!["version","task","folder"].includes(i))return console.log("Entity type not supported yet");if(!r||!i||!o)return console.log("No entity id or type found");z({entityId:r,entityType:i,projectName:o}),J([t])},ne=({index:e,activityId:r})=>{const i=Object.values(f).reverse().filter(t=>t.activityType=="comment").map(t=>({id:t.activityId,files:t.files.filter(n=>ve.isFilePreviewable(n.mime,n.ext))})).filter(t=>t.files.length>0);K?.({files:i,activityId:r,index:e,projectName:o})},oe=q.useMemo(()=>xe.getLoadingPlaceholders(10),[]);return s.jsxRuntimeExports.jsx(s.jsxRuntimeExports.Fragment,{children:s.jsxRuntimeExports.jsxs(E.FeedContainer,{className:"feed",children:[void 0,s.jsxRuntimeExports.jsx(je,{label:"Activity Feed",filters:Me,currentFilter:u,onFilterChange:Q,isLoading:a}),s.jsxRuntimeExports.jsxs(E.FeedContent,{ref:c,className:ye({loading:a},"no-shimmer"),children:[a?oe:f.map(e=>s.jsxRuntimeExports.jsx(le,{activity:e,onCheckChange:te,onDelete:ee,onUpdate:async(r,i,t,n)=>await N(e,r,i,n),projectInfo:j,projectName:o,entityType:m,onReferenceClick:se,createdAts:l.map(r=>r.createdAt),onFileExpand:ne,showOrigin:l.length>1,filter:u,editProps:{projectName:o,entities:l,entityType:m},isHighlighted:y.includes(e.activityId),readOnly:D,statuses:H,isSlideOut:W},e.activityId)),f.length===1&&X&&!w&&!a&&s.jsxRuntimeExports.jsx(Ce.EmptyPlaceholder,{message:"No versions published yet",icon:"layers"}),U&&d&&s.jsxRuntimeExports.jsx(pe.InView,{root:c.current,onChange:e=>e&&d(),rootMargin:"400px 0px 0px 0px",children:s.jsxRuntimeExports.jsx(E.LoadMore,{style:{height:0},onClick:()=>d(),children:M?"Loading more...":"Click to load more"})})]}),!$&&s.jsxRuntimeExports.jsx(de.default,{initValue:null,onSubmit:ie,isOpen:F===h.FEED_NEW_COMMENT,onClose:()=>I(null),onOpen:()=>I(h.FEED_NEW_COMMENT),disabled:_,isLoading:a||!l.length||re})]})})};exports.Feed=Pe;exports.activitiesLast=Ie;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("../../../../_virtual/jsx-runtime.cjs.js"),q=require("react"),le=require("./components/ActivityItem.cjs.js"),de=require("./components/CommentInput/CommentInput.cjs.js"),E=require("./Feed.styled.cjs.js"),qe=require("./hooks/useCommentMutations.cjs.js"),me=require("./hooks/useTransformActivities.cjs.js"),pe=require("../../../../node_modules/react-intersection-observer/dist/index.cjs.js"),ge=require("./hooks/useSaveScrollPos.cjs.js"),he=require("./hooks/useScrollOnInputOpen.cjs.js"),xe=require("./feedHelpers.cjs.js");require("@ynput/ayon-react-components");const ye=require("clsx"),fe=require("./hooks/useScrollToHighlighted.cjs.js"),ve=require("./components/FileUploadPreview/FileUploadPreview.cjs.js"),Ce=require("../../components/EmptyPlaceholder/EmptyPlaceholder.cjs.js");require("../../components/EmptyPlaceholder/EmptyPlaceholderFlex.styled.cjs.js");const h=require("./context/FeedContext.cjs.js");require("../../context/RemoteModulesContext.cjs.js");const ke=require("../../context/DetailsPanelContext.cjs.js");require("../../context/SubtasksModulesContext.cjs.js");require("../../context/ThumbnailUploaderContext.cjs.js");require("../../context/SettingsPanelContext.cjs.js");require("../../context/pip/PiPProvider.cjs.js");require("react-dom");require("../../context/pip/PiPWrapper.cjs.js");require("../../context/AddonProjectContext.cjs.js");require("../../context/AddonContext.cjs.js");require("../../context/PowerpackContext.cjs.js");require("../../context/MoveEntityContext.cjs.js");require("../../context/MenuContext.cjs.js");require("../../context/WebsocketContext.cjs.js");require("../../context/GlobalContext.cjs.js");require("../../context/ProjectContext.cjs.js");require("../../context/ProjectFoldersContext.cjs.js");require("../../context/UriContext.cjs.js");require("../../api/base/client.cjs.js");require("../../api/generated/graphql.cjs.js");require("../../api/generated/graphqlLinks.cjs.js");require("../../api/generated/access.cjs.js");require("../../api/generated/actions.cjs.js");require("../../api/generated/activityFeed.cjs.js");require("../../api/generated/addons.cjs.js");require("../../api/generated/anatomy.cjs.js");require("../../api/generated/attributes.cjs.js");require("../../api/generated/authentication.cjs.js");require("../../api/generated/bundles.cjs.js");require("../../api/generated/configuration.cjs.js");require("../../api/generated/dataImport.cjs.js");require("../../api/generated/desktop.cjs.js");require("../../api/generated/entityLists.cjs.js");require("../../api/generated/events.cjs.js");require("../../api/generated/files.cjs.js");require("../../api/generated/folders.cjs.js");require("../../api/generated/inbox.cjs.js");require("../../api/generated/links.cjs.js");require("../../api/generated/market.cjs.js");require("../../api/generated/onboarding.cjs.js");require("../../api/generated/operations.cjs.js");require("../../api/generated/products.cjs.js");require("../../api/generated/projectDashboard.cjs.js");require("../../api/generated/projects.cjs.js");require("../../api/generated/projectFolders.cjs.js");require("../../api/generated/reviewables.cjs.js");require("../../api/generated/services.cjs.js");require("../../api/generated/system.cjs.js");require("../../api/generated/tasks.cjs.js");require("../../api/generated/teams.cjs.js");require("../../api/generated/thumbnails.cjs.js");require("../../api/generated/uRIs.cjs.js");require("../../api/generated/users.cjs.js");require("../../api/generated/versions.cjs.js");require("../../api/generated/workfiles.cjs.js");require("../../api/generated/ynputCloud.cjs.js");require("../../api/generated/grouping.cjs.js");require("../../api/generated/views.cjs.js");require("../../api/queries/actions/getActions.cjs.js");require("../../api/queries/activities/getActivities.cjs.js");require("../../api/queries/activities/updateActivities.cjs.js");require("../../api/queries/activities/updateReaction.cjs.js");require("../../api/queries/activities/getMentions.cjs.js");require("../../api/queries/activities/getCategories.cjs.js");require("../../api/queries/addons/getAddons.cjs.js");require("../../api/queries/addons/updateAddons.cjs.js");require("../../api/queries/attributes/getAttributes.cjs.js");require("../../api/queries/attributes/updateAttributes.cjs.js");require("../../api/queries/authentication/getAuthentication.cjs.js");require("../../api/queries/cloud/cloud.cjs.js");require("../../api/queries/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/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/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/links/getEntityLinks.cjs.js");require("../../api/queries/overview/getOverview.cjs.js");require("../../api/queries/overview/updateOverview.cjs.js");require("../../api/queries/versions/getVersionsProducts.cjs.js");const Ee=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 Fe=require("./helpers/mergeAnnotationAttachments.cjs.js"),je=require("../DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.cjs.js"),Ie=30,Me=[{id:"comments",tooltip:"Comments",icon:"chat"},{id:"checklists",tooltip:"Checklists",icon:"checklist"},{id:"versions",tooltip:"Published versions",icon:"layers"},{id:"updates",tooltip:"Entity updates",icon:"arrow_circle_right"}],Pe=({disabled:_,readOnly:D,statuses:H=[],entityListId:B,isSlideOut:W})=>{const{projectName:o,entities:l,entityType:m,editingId:F,projectInfo:j,setEditingId:I,userName:V,activitiesData:x,isLoadingNew:a,isLoadingNextPage:M,loadNextPage:d,hasNextPage:U,users:G,feedFilter:u,setFeedFilter:Q}=h.useFeedContext(),{openSlideOut:z,highlightedActivities:y,setHighlightedActivities:J,onOpenImage:K,setFeedAnnotations:P,user:R}=ke.useDetailsPanelContext(),X=u.conditions?.some(e=>"key"in e&&e.key==="versions"&&e.value===!0),Y=u.conditions?.some(e=>"key"in e&&["comments","checklists","versions","updates"].includes(e.key)&&e.value===!0),w=u.conditions?.some(e=>"key"in e&&(e.key==="comments"||e.key==="checklists")&&e.value===!0),{data:b,isLoading:Z}=Ee.useGetMyProjectPermissionsQuery({projectName:o},{skip:!o}),$=!R.data?.isManager&&!R.data?.isAdmin&&!Z&&b?.activities?.enabled&&!b?.activities?.activities?.includes("comment")||Y&&!w,p=q.useMemo(()=>Fe(x),[x]);q.useEffect(()=>{p.length||P([]);const e=p.map(r=>r.activityData?.annotations?.map(i=>({...i,activityId:r.activityId}))).filter(Boolean).flat();P(e)},[p]);const f=me.default(p,G,j,m,V,u),c=q.useRef(null);he({feedRef:c,isInputOpen:F===h.FEED_NEW_COMMENT,height:93}),ge({entities:l,feedRef:c,filter:u,disabled:!!y.length,isLoading:a}),fe({feedRef:c,highlighted:y,isLoading:a||M,loadNextPage:d,hasNextPage:!!d,activities:x});const{submitComment:A,updateComment:N,deleteComment:ee,isSaving:re}=qe({projectName:o,entityType:m,entities:l,filter:u,entityListId:B}),ie=q.useCallback(async(e,r=[],i={})=>{await A(e,r,i),c.current&&c.current.scrollTo({top:0})},[A,c]),te=(e,r)=>{const i=e?.target;if(!i||!r)return console.log("no target or activity");const t=i.checked,n=t?"[ ]":"[x]",ue=t?"[x]":"[ ]",{body:g}=r,T=Array.from(i.closest(".comment-body")?.querySelectorAll(".task-list-item")||[]).findIndex(k=>k===i.closest("li"));let O=T;(g.match(/\[.\]/g)||[]).forEach((k,ae)=>{k!==n&&ae<T&&O--});const L=[];let v=-1;for(;(v=g.indexOf(n,v+1))>-1;)L.push(v);const C=L[O];if(C===void 0)return;const ce=C+n.length,S=g.slice(0,C)+ue+g.slice(ce);S&&N(r,S,r.files)},se=e=>{const{entityId:r,entityType:i,activityId:t}=e;if(!i||!["version","task","folder"].includes(i))return console.log("Entity type not supported yet");if(!r||!i||!o)return console.log("No entity id or type found");z({entityId:r,entityType:i,projectName:o}),J([t])},ne=({index:e,activityId:r})=>{const i=Object.values(f).reverse().filter(t=>t.activityType=="comment").map(t=>({id:t.activityId,files:t.files.filter(n=>ve.isFilePreviewable(n.mime,n.ext))})).filter(t=>t.files.length>0);K?.({files:i,activityId:r,index:e,projectName:o})},oe=q.useMemo(()=>xe.getLoadingPlaceholders(10),[]);return s.jsxRuntimeExports.jsx(s.jsxRuntimeExports.Fragment,{children:s.jsxRuntimeExports.jsxs(E.FeedContainer,{className:"feed",children:[void 0,s.jsxRuntimeExports.jsx(je,{label:"Activity Feed",filters:Me,currentFilter:u,onFilterChange:Q,isLoading:a}),s.jsxRuntimeExports.jsxs(E.FeedContent,{ref:c,className:ye({loading:a},"no-shimmer"),children:[a?oe:f.map(e=>s.jsxRuntimeExports.jsx(le,{activity:e,onCheckChange:te,onDelete:ee,onUpdate:async(r,i,t,n)=>await N(e,r,i,n),projectInfo:j,projectName:o,entityType:m,onReferenceClick:se,createdAts:l.map(r=>r.createdAt),onFileExpand:ne,showOrigin:l.length>1,filter:u,editProps:{projectName:o,entities:l,entityType:m},isHighlighted:y.includes(e.activityId),readOnly:D,statuses:H,isSlideOut:W},e.activityId)),f.length===0&&X&&!w&&!a&&s.jsxRuntimeExports.jsx(Ce.EmptyPlaceholder,{message:"No versions published yet",icon:"layers"}),U&&d&&s.jsxRuntimeExports.jsx(pe.InView,{root:c.current,onChange:e=>e&&d(),rootMargin:"400px 0px 0px 0px",children:s.jsxRuntimeExports.jsx(E.LoadMore,{style:{height:0},onClick:()=>d(),children:M?"Loading more...":"Click to load more"})})]}),!$&&s.jsxRuntimeExports.jsx(de.default,{initValue:null,onSubmit:ie,isOpen:F===h.FEED_NEW_COMMENT,onClose:()=>I(null),onOpen:()=>I(h.FEED_NEW_COMMENT),disabled:_,isLoading:a||!l.length||re})]})})};exports.Feed=Pe;exports.activitiesLast=Ie;
2
2
  //# sourceMappingURL=Feed.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Feed.cjs.js","sources":["../../../../../src/containers/Feed/Feed.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef } from 'react'\nimport ActivityItem from './components/ActivityItem'\nimport CommentInput from './components/CommentInput/CommentInput'\nimport * as Styled from './Feed.styled'\nimport useCommentMutations, { Activity } from './hooks/useCommentMutations'\nimport useTransformActivities from './hooks/useTransformActivities'\nimport { InView } from 'react-intersection-observer'\nimport useSaveScrollPos from './hooks/useSaveScrollPos'\nimport useScrollOnInputOpen from './hooks/useScrollOnInputOpen'\nimport { getLoadingPlaceholders } from './feedHelpers'\nimport { Icon } from '@ynput/ayon-react-components'\nimport clsx from 'clsx'\nimport useScrollToHighlighted from './hooks/useScrollToHighlighted'\nimport { isFilePreviewable } from './components/FileUploadPreview/FileUploadPreview'\nimport EmptyPlaceholder from '@shared/components/EmptyPlaceholder'\nimport { useFeedContext, FEED_NEW_COMMENT } from './context/FeedContext'\nimport { Status } from '../ProjectTreeTable/types/project'\nimport { useDetailsPanelContext, FeedFilter } from '@shared/context'\nimport { DetailsPanelEntityType, useGetMyProjectPermissionsQuery } from '@shared/api'\nimport mergeAnnotationAttachments from './helpers/mergeAnnotationAttachments'\nimport { SavedAnnotationMetadata } from '.'\nimport TabHeaderAndFilters, {\n FilterItem,\n} from '../DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters'\n\n// number of activities to get\nexport const activitiesLast = 30\n\nconst feedFilters: FilterItem<string>[] = [\n {\n id: 'comments',\n tooltip: 'Comments',\n icon: 'chat',\n },\n {\n id: 'checklists',\n tooltip: 'Checklists',\n icon: 'checklist',\n },\n {\n id: 'versions',\n tooltip: 'Published versions',\n icon: 'layers',\n },\n {\n id: 'updates',\n tooltip: 'Entity updates',\n icon: 'arrow_circle_right',\n },\n]\n\nexport type FeedProps = {\n disabled?: boolean\n readOnly: boolean\n statuses: Status[]\n entityListId?: string | undefined\n isSlideOut?: boolean\n}\n\nexport const Feed = ({\n disabled,\n readOnly,\n statuses = [],\n entityListId,\n isSlideOut,\n}: FeedProps) => {\n const {\n projectName,\n entities,\n entityType,\n editingId,\n projectInfo,\n setEditingId,\n userName,\n activitiesData,\n isLoadingNew,\n isLoadingNextPage,\n loadNextPage,\n hasNextPage,\n users,\n feedFilter,\n setFeedFilter,\n } = useFeedContext()\n\n const {\n openSlideOut,\n highlightedActivities,\n setHighlightedActivities,\n onOpenImage,\n setFeedAnnotations,\n user,\n } = useDetailsPanelContext()\n\n const isVersionsFilter = feedFilter.conditions?.some(\n (c) => 'key' in c && c.key === 'versions' && c.value === true,\n )\n const hasActiveFilters = feedFilter.conditions?.some(\n (c) => 'key' in c && ['comments', 'checklists', 'versions', 'updates'].includes(c.key) && c.value === true,\n )\n const hasCommentLikeFilter = feedFilter.conditions?.some(\n (c) => 'key' in c && (c.key === 'comments' || c.key === 'checklists') && c.value === true,\n )\n\n // check activities permission for commenting\n const {\n data: projectPermissions,\n isLoading: isLoadingPermissions,\n } = useGetMyProjectPermissionsQuery(\n { projectName },\n { skip: !projectName },\n )\n const isCommentRestricted =\n !user.data?.isManager &&\n !user.data?.isAdmin &&\n !isLoadingPermissions &&\n projectPermissions?.activities?.enabled &&\n !projectPermissions?.activities?.activities?.includes('comment')\n\n // hide comment input for specific filters or when restricted by permissions\n const hideCommentInput = isCommentRestricted || (hasActiveFilters && !hasCommentLikeFilter)\n\n const activitiesWithMergedAnnotations = useMemo(\n () => mergeAnnotationAttachments(activitiesData),\n [activitiesData],\n )\n\n useEffect(() => {\n if (!activitiesWithMergedAnnotations.length) {\n setFeedAnnotations([])\n }\n\n const annotations = activitiesWithMergedAnnotations\n .map((activity) =>\n activity.activityData?.annotations?.map((a: SavedAnnotationMetadata) => ({\n ...a,\n activityId: activity.activityId,\n })),\n )\n .filter(Boolean)\n .flat()\n\n setFeedAnnotations(annotations)\n }, [activitiesWithMergedAnnotations])\n\n // do any transformation on activities data\n // 1. status change activities, attach status data based on projectName\n // 2. reverse the order\n // 3. is this activity from the current user?\n const transformedActivitiesData = useTransformActivities(\n // @ts-ignore\n activitiesWithMergedAnnotations,\n users,\n projectInfo,\n entityType,\n userName,\n feedFilter,\n ) as any[]\n\n // REFS\n const feedRef = useRef(null)\n // const commentInputRef = useRef(null)\n\n // scroll by height of comment input when it opens or closes\n useScrollOnInputOpen({ feedRef, isInputOpen: editingId === FEED_NEW_COMMENT, height: 93 })\n\n // save scroll position of a feed\n useSaveScrollPos({\n entities,\n feedRef,\n filter: feedFilter,\n disabled: !!highlightedActivities.length,\n isLoading: isLoadingNew,\n })\n // try and scroll to highlightedActivities activity\n useScrollToHighlighted({\n feedRef,\n highlighted: highlightedActivities,\n isLoading: isLoadingNew || isLoadingNextPage,\n loadNextPage,\n hasNextPage: !!loadNextPage,\n activities: activitiesData,\n })\n\n // comment mutations here!\n const {\n submitComment: submitCommentMutation,\n updateComment,\n deleteComment,\n isSaving,\n } = useCommentMutations({\n projectName,\n entityType: entityType,\n entities,\n filter: feedFilter,\n entityListId,\n })\n\n // wrap submitComment to scroll to bottom\n const submitComment = useCallback(\n async (value: string, files: any[] = [], data: any = {}) => {\n await submitCommentMutation(value, files, data)\n // scroll to bottom (scrollTop 0 is bottom because of column-reverse)\n if (feedRef.current) {\n ;(feedRef.current as any).scrollTo({ top: 0 })\n }\n },\n [submitCommentMutation, feedRef],\n )\n\n // When a checkbox is clicked, update the body to add/remove \"x\" in [ ] markdown\n // Then update comment with new body\n const handleCommentChecked = (e: React.ChangeEvent<HTMLInputElement>, activity: Activity) => {\n const target = e?.target\n if (!target || !activity) return console.log('no target or activity')\n\n // the value that it's changing to\n const checked: boolean = target.checked\n const currentMarkdown: string = checked ? '[ ]' : '[x]'\n const newMarkdown: string = checked ? '[x]' : '[ ]'\n\n const { body } = activity\n\n // based on all li elements in the whole className 'comment-body' with className 'task-list-item'\n // find the index of the task that was checked\n const taskIndex: number = Array.from(\n target.closest('.comment-body')?.querySelectorAll('.task-list-item') || [],\n ).findIndex((li: Element) => li === target.closest('li'))\n\n let replaceIndex: number = taskIndex\n\n // count the number of current markdowns in the body\n const allMarkdowns: string[] = body.match(/\\[.\\]/g) || []\n\n allMarkdowns.forEach((markdown: string, index: number) => {\n // does it match the current markdown?\n if (markdown !== currentMarkdown && index < taskIndex) replaceIndex--\n })\n\n // now find the indexes of the current markdown to replace\n const indexesOfCurrentMarkdownInBody: number[] = []\n let index: number = -1\n while ((index = body.indexOf(currentMarkdown, index + 1)) > -1) {\n indexesOfCurrentMarkdownInBody.push(index)\n }\n\n const indexToReplaceInBody: number | undefined = indexesOfCurrentMarkdownInBody[replaceIndex]\n if (indexToReplaceInBody === undefined) return\n\n const endReplaceIndex: number = indexToReplaceInBody + currentMarkdown.length\n\n // replace the current markdown with the new markdown\n const newBody: string =\n body.slice(0, indexToReplaceInBody) + newMarkdown + body.slice(endReplaceIndex)\n\n if (!newBody) return\n\n updateComment(activity, newBody, activity.files)\n }\n\n const handleRefClick = (ref: {\n entityId: string\n entityType: DetailsPanelEntityType\n activityId: string\n }) => {\n const { entityId, entityType, activityId } = ref\n const supportedTypes = ['version', 'task', 'folder']\n\n if (!entityType || !supportedTypes.includes(entityType))\n return console.log('Entity type not supported yet')\n\n if (!entityId || !entityType || !projectName) return console.log('No entity id or type found')\n\n // open the slide out\n openSlideOut({ entityId, entityType, projectName })\n // set highlighted activity\n setHighlightedActivities([activityId])\n }\n\n const handleFileExpand = ({ index, activityId }: { index: number; activityId: string }) => {\n const previewableFiles = Object.values(transformedActivitiesData)\n .reverse()\n .filter((a) => a.activityType == 'comment')\n .map((a) => ({\n id: a.activityId,\n files: a.files.filter((file: any) => isFilePreviewable(file.mime, file.ext)),\n }))\n .filter((a) => a.files.length > 0)\n\n // open image callback\n onOpenImage?.({ files: previewableFiles, activityId, index, projectName })\n }\n\n const loadingPlaceholders = useMemo(() => getLoadingPlaceholders(10), [])\n\n let warningMessage\n\n return (\n <>\n <Styled.FeedContainer className=\"feed\">\n {warningMessage && (\n <Styled.Warning>\n <Icon icon=\"info\" />\n {warningMessage}\n </Styled.Warning>\n )}\n <TabHeaderAndFilters\n label=\"Activity Feed\"\n filters={feedFilters}\n currentFilter={feedFilter}\n onFilterChange={setFeedFilter}\n isLoading={isLoadingNew}\n />\n <Styled.FeedContent ref={feedRef} className={clsx({ loading: isLoadingNew }, 'no-shimmer')}>\n {isLoadingNew\n ? loadingPlaceholders\n : transformedActivitiesData.map((activity) => (\n <ActivityItem\n key={activity.activityId}\n activity={activity}\n onCheckChange={handleCommentChecked}\n onDelete={deleteComment}\n onUpdate={async (value, files, _refs, data) =>\n await updateComment(activity, value, files, data)\n }\n projectInfo={projectInfo}\n projectName={projectName}\n entityType={entityType}\n onReferenceClick={handleRefClick}\n createdAts={entities.map((e) => e.createdAt)}\n onFileExpand={handleFileExpand}\n showOrigin={entities.length > 1}\n filter={feedFilter}\n editProps={{\n projectName,\n entities: entities,\n entityType,\n }}\n isHighlighted={highlightedActivities.includes(activity.activityId)}\n readOnly={readOnly}\n statuses={statuses}\n isSlideOut={isSlideOut}\n />\n ))}\n {/* message when no versions published */}\n {transformedActivitiesData.length === 1 &&\n isVersionsFilter &&\n !hasCommentLikeFilter &&\n !isLoadingNew && (\n <EmptyPlaceholder message=\"No versions published yet\" icon=\"layers\" />\n )}\n {hasNextPage && loadNextPage && (\n <InView\n root={feedRef.current}\n onChange={(inView) => inView && loadNextPage()}\n rootMargin={'400px 0px 0px 0px'}\n >\n <Styled.LoadMore style={{ height: 0 }} onClick={() => loadNextPage()}>\n {isLoadingNextPage ? 'Loading more...' : 'Click to load more'}\n </Styled.LoadMore>\n </InView>\n )}\n </Styled.FeedContent>\n {!hideCommentInput && (\n <CommentInput\n initValue={null}\n onSubmit={submitComment}\n isOpen={editingId === FEED_NEW_COMMENT}\n onClose={() => setEditingId(null)}\n onOpen={() => setEditingId(FEED_NEW_COMMENT)}\n disabled={disabled}\n isLoading={isLoadingNew || !entities.length || isSaving}\n />\n )}\n </Styled.FeedContainer>\n </>\n )\n}\n"],"names":["activitiesLast","feedFilters","Feed","disabled","readOnly","statuses","entityListId","isSlideOut","projectName","entities","entityType","editingId","projectInfo","setEditingId","userName","activitiesData","isLoadingNew","isLoadingNextPage","loadNextPage","hasNextPage","users","feedFilter","setFeedFilter","useFeedContext","openSlideOut","highlightedActivities","setHighlightedActivities","onOpenImage","setFeedAnnotations","user","useDetailsPanelContext","isVersionsFilter","c","hasActiveFilters","hasCommentLikeFilter","projectPermissions","isLoadingPermissions","useGetMyProjectPermissionsQuery","hideCommentInput","activitiesWithMergedAnnotations","useMemo","mergeAnnotationAttachments","useEffect","annotations","activity","a","transformedActivitiesData","useTransformActivities","feedRef","useRef","useScrollOnInputOpen","FEED_NEW_COMMENT","useSaveScrollPos","useScrollToHighlighted","submitCommentMutation","updateComment","deleteComment","isSaving","useCommentMutations","submitComment","useCallback","value","files","data","handleCommentChecked","target","checked","currentMarkdown","newMarkdown","body","taskIndex","li","replaceIndex","markdown","index","indexesOfCurrentMarkdownInBody","indexToReplaceInBody","endReplaceIndex","newBody","handleRefClick","ref","entityId","activityId","handleFileExpand","previewableFiles","file","isFilePreviewable","loadingPlaceholders","getLoadingPlaceholders","jsxs","Styled.FeedContainer","jsx","TabHeaderAndFilters","Styled.FeedContent","clsx","ActivityItem","_refs","e","EmptyPlaceholder","InView","inView","Styled.LoadMore","CommentInput"],"mappings":"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"}
1
+ {"version":3,"file":"Feed.cjs.js","sources":["../../../../../src/containers/Feed/Feed.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef } from 'react'\nimport ActivityItem from './components/ActivityItem'\nimport CommentInput from './components/CommentInput/CommentInput'\nimport * as Styled from './Feed.styled'\nimport useCommentMutations, { Activity } from './hooks/useCommentMutations'\nimport useTransformActivities from './hooks/useTransformActivities'\nimport { InView } from 'react-intersection-observer'\nimport useSaveScrollPos from './hooks/useSaveScrollPos'\nimport useScrollOnInputOpen from './hooks/useScrollOnInputOpen'\nimport { getLoadingPlaceholders } from './feedHelpers'\nimport { Icon } from '@ynput/ayon-react-components'\nimport clsx from 'clsx'\nimport useScrollToHighlighted from './hooks/useScrollToHighlighted'\nimport { isFilePreviewable } from './components/FileUploadPreview/FileUploadPreview'\nimport EmptyPlaceholder from '@shared/components/EmptyPlaceholder'\nimport { useFeedContext, FEED_NEW_COMMENT } from './context/FeedContext'\nimport { Status } from '../ProjectTreeTable/types/project'\nimport { useDetailsPanelContext, FeedFilter } from '@shared/context'\nimport { DetailsPanelEntityType, useGetMyProjectPermissionsQuery } from '@shared/api'\nimport mergeAnnotationAttachments from './helpers/mergeAnnotationAttachments'\nimport { SavedAnnotationMetadata } from '.'\nimport TabHeaderAndFilters, {\n FilterItem,\n} from '../DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters'\n\n// number of activities to get\nexport const activitiesLast = 30\n\nconst feedFilters: FilterItem<string>[] = [\n {\n id: 'comments',\n tooltip: 'Comments',\n icon: 'chat',\n },\n {\n id: 'checklists',\n tooltip: 'Checklists',\n icon: 'checklist',\n },\n {\n id: 'versions',\n tooltip: 'Published versions',\n icon: 'layers',\n },\n {\n id: 'updates',\n tooltip: 'Entity updates',\n icon: 'arrow_circle_right',\n },\n]\n\nexport type FeedProps = {\n disabled?: boolean\n readOnly: boolean\n statuses: Status[]\n entityListId?: string | undefined\n isSlideOut?: boolean\n}\n\nexport const Feed = ({\n disabled,\n readOnly,\n statuses = [],\n entityListId,\n isSlideOut,\n}: FeedProps) => {\n const {\n projectName,\n entities,\n entityType,\n editingId,\n projectInfo,\n setEditingId,\n userName,\n activitiesData,\n isLoadingNew,\n isLoadingNextPage,\n loadNextPage,\n hasNextPage,\n users,\n feedFilter,\n setFeedFilter,\n } = useFeedContext()\n\n const {\n openSlideOut,\n highlightedActivities,\n setHighlightedActivities,\n onOpenImage,\n setFeedAnnotations,\n user,\n } = useDetailsPanelContext()\n\n const isVersionsFilter = feedFilter.conditions?.some(\n (c) => 'key' in c && c.key === 'versions' && c.value === true,\n )\n const hasActiveFilters = feedFilter.conditions?.some(\n (c) => 'key' in c && ['comments', 'checklists', 'versions', 'updates'].includes(c.key) && c.value === true,\n )\n const hasCommentLikeFilter = feedFilter.conditions?.some(\n (c) => 'key' in c && (c.key === 'comments' || c.key === 'checklists') && c.value === true,\n )\n\n // check activities permission for commenting\n const {\n data: projectPermissions,\n isLoading: isLoadingPermissions,\n } = useGetMyProjectPermissionsQuery(\n { projectName },\n { skip: !projectName },\n )\n const isCommentRestricted =\n !user.data?.isManager &&\n !user.data?.isAdmin &&\n !isLoadingPermissions &&\n projectPermissions?.activities?.enabled &&\n !projectPermissions?.activities?.activities?.includes('comment')\n\n // hide comment input for specific filters or when restricted by permissions\n const hideCommentInput = isCommentRestricted || (hasActiveFilters && !hasCommentLikeFilter)\n\n const activitiesWithMergedAnnotations = useMemo(\n () => mergeAnnotationAttachments(activitiesData),\n [activitiesData],\n )\n\n useEffect(() => {\n if (!activitiesWithMergedAnnotations.length) {\n setFeedAnnotations([])\n }\n\n const annotations = activitiesWithMergedAnnotations\n .map((activity) =>\n activity.activityData?.annotations?.map((a: SavedAnnotationMetadata) => ({\n ...a,\n activityId: activity.activityId,\n })),\n )\n .filter(Boolean)\n .flat()\n\n setFeedAnnotations(annotations)\n }, [activitiesWithMergedAnnotations])\n\n // do any transformation on activities data\n // 1. status change activities, attach status data based on projectName\n // 2. reverse the order\n // 3. is this activity from the current user?\n const transformedActivitiesData = useTransformActivities(\n // @ts-ignore\n activitiesWithMergedAnnotations,\n users,\n projectInfo,\n entityType,\n userName,\n feedFilter,\n ) as any[]\n\n // REFS\n const feedRef = useRef(null)\n // const commentInputRef = useRef(null)\n\n // scroll by height of comment input when it opens or closes\n useScrollOnInputOpen({ feedRef, isInputOpen: editingId === FEED_NEW_COMMENT, height: 93 })\n\n // save scroll position of a feed\n useSaveScrollPos({\n entities,\n feedRef,\n filter: feedFilter,\n disabled: !!highlightedActivities.length,\n isLoading: isLoadingNew,\n })\n // try and scroll to highlightedActivities activity\n useScrollToHighlighted({\n feedRef,\n highlighted: highlightedActivities,\n isLoading: isLoadingNew || isLoadingNextPage,\n loadNextPage,\n hasNextPage: !!loadNextPage,\n activities: activitiesData,\n })\n\n // comment mutations here!\n const {\n submitComment: submitCommentMutation,\n updateComment,\n deleteComment,\n isSaving,\n } = useCommentMutations({\n projectName,\n entityType: entityType,\n entities,\n filter: feedFilter,\n entityListId,\n })\n\n // wrap submitComment to scroll to bottom\n const submitComment = useCallback(\n async (value: string, files: any[] = [], data: any = {}) => {\n await submitCommentMutation(value, files, data)\n // scroll to bottom (scrollTop 0 is bottom because of column-reverse)\n if (feedRef.current) {\n ;(feedRef.current as any).scrollTo({ top: 0 })\n }\n },\n [submitCommentMutation, feedRef],\n )\n\n // When a checkbox is clicked, update the body to add/remove \"x\" in [ ] markdown\n // Then update comment with new body\n const handleCommentChecked = (e: React.ChangeEvent<HTMLInputElement>, activity: Activity) => {\n const target = e?.target\n if (!target || !activity) return console.log('no target or activity')\n\n // the value that it's changing to\n const checked: boolean = target.checked\n const currentMarkdown: string = checked ? '[ ]' : '[x]'\n const newMarkdown: string = checked ? '[x]' : '[ ]'\n\n const { body } = activity\n\n // based on all li elements in the whole className 'comment-body' with className 'task-list-item'\n // find the index of the task that was checked\n const taskIndex: number = Array.from(\n target.closest('.comment-body')?.querySelectorAll('.task-list-item') || [],\n ).findIndex((li: Element) => li === target.closest('li'))\n\n let replaceIndex: number = taskIndex\n\n // count the number of current markdowns in the body\n const allMarkdowns: string[] = body.match(/\\[.\\]/g) || []\n\n allMarkdowns.forEach((markdown: string, index: number) => {\n // does it match the current markdown?\n if (markdown !== currentMarkdown && index < taskIndex) replaceIndex--\n })\n\n // now find the indexes of the current markdown to replace\n const indexesOfCurrentMarkdownInBody: number[] = []\n let index: number = -1\n while ((index = body.indexOf(currentMarkdown, index + 1)) > -1) {\n indexesOfCurrentMarkdownInBody.push(index)\n }\n\n const indexToReplaceInBody: number | undefined = indexesOfCurrentMarkdownInBody[replaceIndex]\n if (indexToReplaceInBody === undefined) return\n\n const endReplaceIndex: number = indexToReplaceInBody + currentMarkdown.length\n\n // replace the current markdown with the new markdown\n const newBody: string =\n body.slice(0, indexToReplaceInBody) + newMarkdown + body.slice(endReplaceIndex)\n\n if (!newBody) return\n\n updateComment(activity, newBody, activity.files)\n }\n\n const handleRefClick = (ref: {\n entityId: string\n entityType: DetailsPanelEntityType\n activityId: string\n }) => {\n const { entityId, entityType, activityId } = ref\n const supportedTypes = ['version', 'task', 'folder']\n\n if (!entityType || !supportedTypes.includes(entityType))\n return console.log('Entity type not supported yet')\n\n if (!entityId || !entityType || !projectName) return console.log('No entity id or type found')\n\n // open the slide out\n openSlideOut({ entityId, entityType, projectName })\n // set highlighted activity\n setHighlightedActivities([activityId])\n }\n\n const handleFileExpand = ({ index, activityId }: { index: number; activityId: string }) => {\n const previewableFiles = Object.values(transformedActivitiesData)\n .reverse()\n .filter((a) => a.activityType == 'comment')\n .map((a) => ({\n id: a.activityId,\n files: a.files.filter((file: any) => isFilePreviewable(file.mime, file.ext)),\n }))\n .filter((a) => a.files.length > 0)\n\n // open image callback\n onOpenImage?.({ files: previewableFiles, activityId, index, projectName })\n }\n\n const loadingPlaceholders = useMemo(() => getLoadingPlaceholders(10), [])\n\n let warningMessage\n\n return (\n <>\n <Styled.FeedContainer className=\"feed\">\n {warningMessage && (\n <Styled.Warning>\n <Icon icon=\"info\" />\n {warningMessage}\n </Styled.Warning>\n )}\n <TabHeaderAndFilters\n label=\"Activity Feed\"\n filters={feedFilters}\n currentFilter={feedFilter}\n onFilterChange={setFeedFilter}\n isLoading={isLoadingNew}\n />\n <Styled.FeedContent ref={feedRef} className={clsx({ loading: isLoadingNew }, 'no-shimmer')}>\n {isLoadingNew\n ? loadingPlaceholders\n : transformedActivitiesData.map((activity) => (\n <ActivityItem\n key={activity.activityId}\n activity={activity}\n onCheckChange={handleCommentChecked}\n onDelete={deleteComment}\n onUpdate={async (value, files, _refs, data) =>\n await updateComment(activity, value, files, data)\n }\n projectInfo={projectInfo}\n projectName={projectName}\n entityType={entityType}\n onReferenceClick={handleRefClick}\n createdAts={entities.map((e) => e.createdAt)}\n onFileExpand={handleFileExpand}\n showOrigin={entities.length > 1}\n filter={feedFilter}\n editProps={{\n projectName,\n entities: entities,\n entityType,\n }}\n isHighlighted={highlightedActivities.includes(activity.activityId)}\n readOnly={readOnly}\n statuses={statuses}\n isSlideOut={isSlideOut}\n />\n ))}\n {/* message when no versions published */}\n {transformedActivitiesData.length === 0 &&\n isVersionsFilter &&\n !hasCommentLikeFilter &&\n !isLoadingNew && (\n <EmptyPlaceholder message=\"No versions published yet\" icon=\"layers\" />\n )}\n {hasNextPage && loadNextPage && (\n <InView\n root={feedRef.current}\n onChange={(inView) => inView && loadNextPage()}\n rootMargin={'400px 0px 0px 0px'}\n >\n <Styled.LoadMore style={{ height: 0 }} onClick={() => loadNextPage()}>\n {isLoadingNextPage ? 'Loading more...' : 'Click to load more'}\n </Styled.LoadMore>\n </InView>\n )}\n </Styled.FeedContent>\n {!hideCommentInput && (\n <CommentInput\n initValue={null}\n onSubmit={submitComment}\n isOpen={editingId === FEED_NEW_COMMENT}\n onClose={() => setEditingId(null)}\n onOpen={() => setEditingId(FEED_NEW_COMMENT)}\n disabled={disabled}\n isLoading={isLoadingNew || !entities.length || isSaving}\n />\n )}\n </Styled.FeedContainer>\n </>\n )\n}\n"],"names":["activitiesLast","feedFilters","Feed","disabled","readOnly","statuses","entityListId","isSlideOut","projectName","entities","entityType","editingId","projectInfo","setEditingId","userName","activitiesData","isLoadingNew","isLoadingNextPage","loadNextPage","hasNextPage","users","feedFilter","setFeedFilter","useFeedContext","openSlideOut","highlightedActivities","setHighlightedActivities","onOpenImage","setFeedAnnotations","user","useDetailsPanelContext","isVersionsFilter","c","hasActiveFilters","hasCommentLikeFilter","projectPermissions","isLoadingPermissions","useGetMyProjectPermissionsQuery","hideCommentInput","activitiesWithMergedAnnotations","useMemo","mergeAnnotationAttachments","useEffect","annotations","activity","a","transformedActivitiesData","useTransformActivities","feedRef","useRef","useScrollOnInputOpen","FEED_NEW_COMMENT","useSaveScrollPos","useScrollToHighlighted","submitCommentMutation","updateComment","deleteComment","isSaving","useCommentMutations","submitComment","useCallback","value","files","data","handleCommentChecked","target","checked","currentMarkdown","newMarkdown","body","taskIndex","li","replaceIndex","markdown","index","indexesOfCurrentMarkdownInBody","indexToReplaceInBody","endReplaceIndex","newBody","handleRefClick","ref","entityId","activityId","handleFileExpand","previewableFiles","file","isFilePreviewable","loadingPlaceholders","getLoadingPlaceholders","jsxs","Styled.FeedContainer","jsx","TabHeaderAndFilters","Styled.FeedContent","clsx","ActivityItem","_refs","e","EmptyPlaceholder","InView","inView","Styled.LoadMore","CommentInput"],"mappings":"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"}
@@ -316,7 +316,7 @@ const no = 30, Nt = [
316
316
  },
317
317
  t.activityId
318
318
  )),
319
- y.length === 1 && K && !j && !a && /* @__PURE__ */ r.jsx(Mt, { message: "No versions published yet", icon: "layers" }),
319
+ y.length === 0 && K && !j && !a && /* @__PURE__ */ r.jsx(Mt, { message: "No versions published yet", icon: "layers" }),
320
320
  q && c && /* @__PURE__ */ r.jsx(
321
321
  vt,
322
322
  {
@@ -1 +1 @@
1
- {"version":3,"file":"Feed.es.js","sources":["../../../../../src/containers/Feed/Feed.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef } from 'react'\nimport ActivityItem from './components/ActivityItem'\nimport CommentInput from './components/CommentInput/CommentInput'\nimport * as Styled from './Feed.styled'\nimport useCommentMutations, { Activity } from './hooks/useCommentMutations'\nimport useTransformActivities from './hooks/useTransformActivities'\nimport { InView } from 'react-intersection-observer'\nimport useSaveScrollPos from './hooks/useSaveScrollPos'\nimport useScrollOnInputOpen from './hooks/useScrollOnInputOpen'\nimport { getLoadingPlaceholders } from './feedHelpers'\nimport { Icon } from '@ynput/ayon-react-components'\nimport clsx from 'clsx'\nimport useScrollToHighlighted from './hooks/useScrollToHighlighted'\nimport { isFilePreviewable } from './components/FileUploadPreview/FileUploadPreview'\nimport EmptyPlaceholder from '@shared/components/EmptyPlaceholder'\nimport { useFeedContext, FEED_NEW_COMMENT } from './context/FeedContext'\nimport { Status } from '../ProjectTreeTable/types/project'\nimport { useDetailsPanelContext, FeedFilter } from '@shared/context'\nimport { DetailsPanelEntityType, useGetMyProjectPermissionsQuery } from '@shared/api'\nimport mergeAnnotationAttachments from './helpers/mergeAnnotationAttachments'\nimport { SavedAnnotationMetadata } from '.'\nimport TabHeaderAndFilters, {\n FilterItem,\n} from '../DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters'\n\n// number of activities to get\nexport const activitiesLast = 30\n\nconst feedFilters: FilterItem<string>[] = [\n {\n id: 'comments',\n tooltip: 'Comments',\n icon: 'chat',\n },\n {\n id: 'checklists',\n tooltip: 'Checklists',\n icon: 'checklist',\n },\n {\n id: 'versions',\n tooltip: 'Published versions',\n icon: 'layers',\n },\n {\n id: 'updates',\n tooltip: 'Entity updates',\n icon: 'arrow_circle_right',\n },\n]\n\nexport type FeedProps = {\n disabled?: boolean\n readOnly: boolean\n statuses: Status[]\n entityListId?: string | undefined\n isSlideOut?: boolean\n}\n\nexport const Feed = ({\n disabled,\n readOnly,\n statuses = [],\n entityListId,\n isSlideOut,\n}: FeedProps) => {\n const {\n projectName,\n entities,\n entityType,\n editingId,\n projectInfo,\n setEditingId,\n userName,\n activitiesData,\n isLoadingNew,\n isLoadingNextPage,\n loadNextPage,\n hasNextPage,\n users,\n feedFilter,\n setFeedFilter,\n } = useFeedContext()\n\n const {\n openSlideOut,\n highlightedActivities,\n setHighlightedActivities,\n onOpenImage,\n setFeedAnnotations,\n user,\n } = useDetailsPanelContext()\n\n const isVersionsFilter = feedFilter.conditions?.some(\n (c) => 'key' in c && c.key === 'versions' && c.value === true,\n )\n const hasActiveFilters = feedFilter.conditions?.some(\n (c) => 'key' in c && ['comments', 'checklists', 'versions', 'updates'].includes(c.key) && c.value === true,\n )\n const hasCommentLikeFilter = feedFilter.conditions?.some(\n (c) => 'key' in c && (c.key === 'comments' || c.key === 'checklists') && c.value === true,\n )\n\n // check activities permission for commenting\n const {\n data: projectPermissions,\n isLoading: isLoadingPermissions,\n } = useGetMyProjectPermissionsQuery(\n { projectName },\n { skip: !projectName },\n )\n const isCommentRestricted =\n !user.data?.isManager &&\n !user.data?.isAdmin &&\n !isLoadingPermissions &&\n projectPermissions?.activities?.enabled &&\n !projectPermissions?.activities?.activities?.includes('comment')\n\n // hide comment input for specific filters or when restricted by permissions\n const hideCommentInput = isCommentRestricted || (hasActiveFilters && !hasCommentLikeFilter)\n\n const activitiesWithMergedAnnotations = useMemo(\n () => mergeAnnotationAttachments(activitiesData),\n [activitiesData],\n )\n\n useEffect(() => {\n if (!activitiesWithMergedAnnotations.length) {\n setFeedAnnotations([])\n }\n\n const annotations = activitiesWithMergedAnnotations\n .map((activity) =>\n activity.activityData?.annotations?.map((a: SavedAnnotationMetadata) => ({\n ...a,\n activityId: activity.activityId,\n })),\n )\n .filter(Boolean)\n .flat()\n\n setFeedAnnotations(annotations)\n }, [activitiesWithMergedAnnotations])\n\n // do any transformation on activities data\n // 1. status change activities, attach status data based on projectName\n // 2. reverse the order\n // 3. is this activity from the current user?\n const transformedActivitiesData = useTransformActivities(\n // @ts-ignore\n activitiesWithMergedAnnotations,\n users,\n projectInfo,\n entityType,\n userName,\n feedFilter,\n ) as any[]\n\n // REFS\n const feedRef = useRef(null)\n // const commentInputRef = useRef(null)\n\n // scroll by height of comment input when it opens or closes\n useScrollOnInputOpen({ feedRef, isInputOpen: editingId === FEED_NEW_COMMENT, height: 93 })\n\n // save scroll position of a feed\n useSaveScrollPos({\n entities,\n feedRef,\n filter: feedFilter,\n disabled: !!highlightedActivities.length,\n isLoading: isLoadingNew,\n })\n // try and scroll to highlightedActivities activity\n useScrollToHighlighted({\n feedRef,\n highlighted: highlightedActivities,\n isLoading: isLoadingNew || isLoadingNextPage,\n loadNextPage,\n hasNextPage: !!loadNextPage,\n activities: activitiesData,\n })\n\n // comment mutations here!\n const {\n submitComment: submitCommentMutation,\n updateComment,\n deleteComment,\n isSaving,\n } = useCommentMutations({\n projectName,\n entityType: entityType,\n entities,\n filter: feedFilter,\n entityListId,\n })\n\n // wrap submitComment to scroll to bottom\n const submitComment = useCallback(\n async (value: string, files: any[] = [], data: any = {}) => {\n await submitCommentMutation(value, files, data)\n // scroll to bottom (scrollTop 0 is bottom because of column-reverse)\n if (feedRef.current) {\n ;(feedRef.current as any).scrollTo({ top: 0 })\n }\n },\n [submitCommentMutation, feedRef],\n )\n\n // When a checkbox is clicked, update the body to add/remove \"x\" in [ ] markdown\n // Then update comment with new body\n const handleCommentChecked = (e: React.ChangeEvent<HTMLInputElement>, activity: Activity) => {\n const target = e?.target\n if (!target || !activity) return console.log('no target or activity')\n\n // the value that it's changing to\n const checked: boolean = target.checked\n const currentMarkdown: string = checked ? '[ ]' : '[x]'\n const newMarkdown: string = checked ? '[x]' : '[ ]'\n\n const { body } = activity\n\n // based on all li elements in the whole className 'comment-body' with className 'task-list-item'\n // find the index of the task that was checked\n const taskIndex: number = Array.from(\n target.closest('.comment-body')?.querySelectorAll('.task-list-item') || [],\n ).findIndex((li: Element) => li === target.closest('li'))\n\n let replaceIndex: number = taskIndex\n\n // count the number of current markdowns in the body\n const allMarkdowns: string[] = body.match(/\\[.\\]/g) || []\n\n allMarkdowns.forEach((markdown: string, index: number) => {\n // does it match the current markdown?\n if (markdown !== currentMarkdown && index < taskIndex) replaceIndex--\n })\n\n // now find the indexes of the current markdown to replace\n const indexesOfCurrentMarkdownInBody: number[] = []\n let index: number = -1\n while ((index = body.indexOf(currentMarkdown, index + 1)) > -1) {\n indexesOfCurrentMarkdownInBody.push(index)\n }\n\n const indexToReplaceInBody: number | undefined = indexesOfCurrentMarkdownInBody[replaceIndex]\n if (indexToReplaceInBody === undefined) return\n\n const endReplaceIndex: number = indexToReplaceInBody + currentMarkdown.length\n\n // replace the current markdown with the new markdown\n const newBody: string =\n body.slice(0, indexToReplaceInBody) + newMarkdown + body.slice(endReplaceIndex)\n\n if (!newBody) return\n\n updateComment(activity, newBody, activity.files)\n }\n\n const handleRefClick = (ref: {\n entityId: string\n entityType: DetailsPanelEntityType\n activityId: string\n }) => {\n const { entityId, entityType, activityId } = ref\n const supportedTypes = ['version', 'task', 'folder']\n\n if (!entityType || !supportedTypes.includes(entityType))\n return console.log('Entity type not supported yet')\n\n if (!entityId || !entityType || !projectName) return console.log('No entity id or type found')\n\n // open the slide out\n openSlideOut({ entityId, entityType, projectName })\n // set highlighted activity\n setHighlightedActivities([activityId])\n }\n\n const handleFileExpand = ({ index, activityId }: { index: number; activityId: string }) => {\n const previewableFiles = Object.values(transformedActivitiesData)\n .reverse()\n .filter((a) => a.activityType == 'comment')\n .map((a) => ({\n id: a.activityId,\n files: a.files.filter((file: any) => isFilePreviewable(file.mime, file.ext)),\n }))\n .filter((a) => a.files.length > 0)\n\n // open image callback\n onOpenImage?.({ files: previewableFiles, activityId, index, projectName })\n }\n\n const loadingPlaceholders = useMemo(() => getLoadingPlaceholders(10), [])\n\n let warningMessage\n\n return (\n <>\n <Styled.FeedContainer className=\"feed\">\n {warningMessage && (\n <Styled.Warning>\n <Icon icon=\"info\" />\n {warningMessage}\n </Styled.Warning>\n )}\n <TabHeaderAndFilters\n label=\"Activity Feed\"\n filters={feedFilters}\n currentFilter={feedFilter}\n onFilterChange={setFeedFilter}\n isLoading={isLoadingNew}\n />\n <Styled.FeedContent ref={feedRef} className={clsx({ loading: isLoadingNew }, 'no-shimmer')}>\n {isLoadingNew\n ? loadingPlaceholders\n : transformedActivitiesData.map((activity) => (\n <ActivityItem\n key={activity.activityId}\n activity={activity}\n onCheckChange={handleCommentChecked}\n onDelete={deleteComment}\n onUpdate={async (value, files, _refs, data) =>\n await updateComment(activity, value, files, data)\n }\n projectInfo={projectInfo}\n projectName={projectName}\n entityType={entityType}\n onReferenceClick={handleRefClick}\n createdAts={entities.map((e) => e.createdAt)}\n onFileExpand={handleFileExpand}\n showOrigin={entities.length > 1}\n filter={feedFilter}\n editProps={{\n projectName,\n entities: entities,\n entityType,\n }}\n isHighlighted={highlightedActivities.includes(activity.activityId)}\n readOnly={readOnly}\n statuses={statuses}\n isSlideOut={isSlideOut}\n />\n ))}\n {/* message when no versions published */}\n {transformedActivitiesData.length === 1 &&\n isVersionsFilter &&\n !hasCommentLikeFilter &&\n !isLoadingNew && (\n <EmptyPlaceholder message=\"No versions published yet\" icon=\"layers\" />\n )}\n {hasNextPage && loadNextPage && (\n <InView\n root={feedRef.current}\n onChange={(inView) => inView && loadNextPage()}\n rootMargin={'400px 0px 0px 0px'}\n >\n <Styled.LoadMore style={{ height: 0 }} onClick={() => loadNextPage()}>\n {isLoadingNextPage ? 'Loading more...' : 'Click to load more'}\n </Styled.LoadMore>\n </InView>\n )}\n </Styled.FeedContent>\n {!hideCommentInput && (\n <CommentInput\n initValue={null}\n onSubmit={submitComment}\n isOpen={editingId === FEED_NEW_COMMENT}\n onClose={() => setEditingId(null)}\n onOpen={() => setEditingId(FEED_NEW_COMMENT)}\n disabled={disabled}\n isLoading={isLoadingNew || !entities.length || isSaving}\n />\n )}\n </Styled.FeedContainer>\n </>\n )\n}\n"],"names":["activitiesLast","feedFilters","Feed","disabled","readOnly","statuses","entityListId","isSlideOut","projectName","entities","entityType","editingId","projectInfo","setEditingId","userName","activitiesData","isLoadingNew","isLoadingNextPage","loadNextPage","hasNextPage","users","feedFilter","setFeedFilter","useFeedContext","openSlideOut","highlightedActivities","setHighlightedActivities","onOpenImage","setFeedAnnotations","user","useDetailsPanelContext","isVersionsFilter","c","hasActiveFilters","hasCommentLikeFilter","projectPermissions","isLoadingPermissions","useGetMyProjectPermissionsQuery","hideCommentInput","activitiesWithMergedAnnotations","useMemo","mergeAnnotationAttachments","useEffect","annotations","activity","a","transformedActivitiesData","useTransformActivities","feedRef","useRef","useScrollOnInputOpen","FEED_NEW_COMMENT","useSaveScrollPos","useScrollToHighlighted","submitCommentMutation","updateComment","deleteComment","isSaving","useCommentMutations","submitComment","useCallback","value","files","data","handleCommentChecked","e","target","checked","currentMarkdown","newMarkdown","body","taskIndex","li","replaceIndex","markdown","index","indexesOfCurrentMarkdownInBody","indexToReplaceInBody","endReplaceIndex","newBody","handleRefClick","ref","entityId","activityId","handleFileExpand","previewableFiles","file","isFilePreviewable","loadingPlaceholders","getLoadingPlaceholders","jsxs","Styled.FeedContainer","jsx","TabHeaderAndFilters","Styled.FeedContent","clsx","ActivityItem","_refs","EmptyPlaceholder","InView","inView","Styled.LoadMore","CommentInput"],"mappings":"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"}
1
+ {"version":3,"file":"Feed.es.js","sources":["../../../../../src/containers/Feed/Feed.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef } from 'react'\nimport ActivityItem from './components/ActivityItem'\nimport CommentInput from './components/CommentInput/CommentInput'\nimport * as Styled from './Feed.styled'\nimport useCommentMutations, { Activity } from './hooks/useCommentMutations'\nimport useTransformActivities from './hooks/useTransformActivities'\nimport { InView } from 'react-intersection-observer'\nimport useSaveScrollPos from './hooks/useSaveScrollPos'\nimport useScrollOnInputOpen from './hooks/useScrollOnInputOpen'\nimport { getLoadingPlaceholders } from './feedHelpers'\nimport { Icon } from '@ynput/ayon-react-components'\nimport clsx from 'clsx'\nimport useScrollToHighlighted from './hooks/useScrollToHighlighted'\nimport { isFilePreviewable } from './components/FileUploadPreview/FileUploadPreview'\nimport EmptyPlaceholder from '@shared/components/EmptyPlaceholder'\nimport { useFeedContext, FEED_NEW_COMMENT } from './context/FeedContext'\nimport { Status } from '../ProjectTreeTable/types/project'\nimport { useDetailsPanelContext, FeedFilter } from '@shared/context'\nimport { DetailsPanelEntityType, useGetMyProjectPermissionsQuery } from '@shared/api'\nimport mergeAnnotationAttachments from './helpers/mergeAnnotationAttachments'\nimport { SavedAnnotationMetadata } from '.'\nimport TabHeaderAndFilters, {\n FilterItem,\n} from '../DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters'\n\n// number of activities to get\nexport const activitiesLast = 30\n\nconst feedFilters: FilterItem<string>[] = [\n {\n id: 'comments',\n tooltip: 'Comments',\n icon: 'chat',\n },\n {\n id: 'checklists',\n tooltip: 'Checklists',\n icon: 'checklist',\n },\n {\n id: 'versions',\n tooltip: 'Published versions',\n icon: 'layers',\n },\n {\n id: 'updates',\n tooltip: 'Entity updates',\n icon: 'arrow_circle_right',\n },\n]\n\nexport type FeedProps = {\n disabled?: boolean\n readOnly: boolean\n statuses: Status[]\n entityListId?: string | undefined\n isSlideOut?: boolean\n}\n\nexport const Feed = ({\n disabled,\n readOnly,\n statuses = [],\n entityListId,\n isSlideOut,\n}: FeedProps) => {\n const {\n projectName,\n entities,\n entityType,\n editingId,\n projectInfo,\n setEditingId,\n userName,\n activitiesData,\n isLoadingNew,\n isLoadingNextPage,\n loadNextPage,\n hasNextPage,\n users,\n feedFilter,\n setFeedFilter,\n } = useFeedContext()\n\n const {\n openSlideOut,\n highlightedActivities,\n setHighlightedActivities,\n onOpenImage,\n setFeedAnnotations,\n user,\n } = useDetailsPanelContext()\n\n const isVersionsFilter = feedFilter.conditions?.some(\n (c) => 'key' in c && c.key === 'versions' && c.value === true,\n )\n const hasActiveFilters = feedFilter.conditions?.some(\n (c) => 'key' in c && ['comments', 'checklists', 'versions', 'updates'].includes(c.key) && c.value === true,\n )\n const hasCommentLikeFilter = feedFilter.conditions?.some(\n (c) => 'key' in c && (c.key === 'comments' || c.key === 'checklists') && c.value === true,\n )\n\n // check activities permission for commenting\n const {\n data: projectPermissions,\n isLoading: isLoadingPermissions,\n } = useGetMyProjectPermissionsQuery(\n { projectName },\n { skip: !projectName },\n )\n const isCommentRestricted =\n !user.data?.isManager &&\n !user.data?.isAdmin &&\n !isLoadingPermissions &&\n projectPermissions?.activities?.enabled &&\n !projectPermissions?.activities?.activities?.includes('comment')\n\n // hide comment input for specific filters or when restricted by permissions\n const hideCommentInput = isCommentRestricted || (hasActiveFilters && !hasCommentLikeFilter)\n\n const activitiesWithMergedAnnotations = useMemo(\n () => mergeAnnotationAttachments(activitiesData),\n [activitiesData],\n )\n\n useEffect(() => {\n if (!activitiesWithMergedAnnotations.length) {\n setFeedAnnotations([])\n }\n\n const annotations = activitiesWithMergedAnnotations\n .map((activity) =>\n activity.activityData?.annotations?.map((a: SavedAnnotationMetadata) => ({\n ...a,\n activityId: activity.activityId,\n })),\n )\n .filter(Boolean)\n .flat()\n\n setFeedAnnotations(annotations)\n }, [activitiesWithMergedAnnotations])\n\n // do any transformation on activities data\n // 1. status change activities, attach status data based on projectName\n // 2. reverse the order\n // 3. is this activity from the current user?\n const transformedActivitiesData = useTransformActivities(\n // @ts-ignore\n activitiesWithMergedAnnotations,\n users,\n projectInfo,\n entityType,\n userName,\n feedFilter,\n ) as any[]\n\n // REFS\n const feedRef = useRef(null)\n // const commentInputRef = useRef(null)\n\n // scroll by height of comment input when it opens or closes\n useScrollOnInputOpen({ feedRef, isInputOpen: editingId === FEED_NEW_COMMENT, height: 93 })\n\n // save scroll position of a feed\n useSaveScrollPos({\n entities,\n feedRef,\n filter: feedFilter,\n disabled: !!highlightedActivities.length,\n isLoading: isLoadingNew,\n })\n // try and scroll to highlightedActivities activity\n useScrollToHighlighted({\n feedRef,\n highlighted: highlightedActivities,\n isLoading: isLoadingNew || isLoadingNextPage,\n loadNextPage,\n hasNextPage: !!loadNextPage,\n activities: activitiesData,\n })\n\n // comment mutations here!\n const {\n submitComment: submitCommentMutation,\n updateComment,\n deleteComment,\n isSaving,\n } = useCommentMutations({\n projectName,\n entityType: entityType,\n entities,\n filter: feedFilter,\n entityListId,\n })\n\n // wrap submitComment to scroll to bottom\n const submitComment = useCallback(\n async (value: string, files: any[] = [], data: any = {}) => {\n await submitCommentMutation(value, files, data)\n // scroll to bottom (scrollTop 0 is bottom because of column-reverse)\n if (feedRef.current) {\n ;(feedRef.current as any).scrollTo({ top: 0 })\n }\n },\n [submitCommentMutation, feedRef],\n )\n\n // When a checkbox is clicked, update the body to add/remove \"x\" in [ ] markdown\n // Then update comment with new body\n const handleCommentChecked = (e: React.ChangeEvent<HTMLInputElement>, activity: Activity) => {\n const target = e?.target\n if (!target || !activity) return console.log('no target or activity')\n\n // the value that it's changing to\n const checked: boolean = target.checked\n const currentMarkdown: string = checked ? '[ ]' : '[x]'\n const newMarkdown: string = checked ? '[x]' : '[ ]'\n\n const { body } = activity\n\n // based on all li elements in the whole className 'comment-body' with className 'task-list-item'\n // find the index of the task that was checked\n const taskIndex: number = Array.from(\n target.closest('.comment-body')?.querySelectorAll('.task-list-item') || [],\n ).findIndex((li: Element) => li === target.closest('li'))\n\n let replaceIndex: number = taskIndex\n\n // count the number of current markdowns in the body\n const allMarkdowns: string[] = body.match(/\\[.\\]/g) || []\n\n allMarkdowns.forEach((markdown: string, index: number) => {\n // does it match the current markdown?\n if (markdown !== currentMarkdown && index < taskIndex) replaceIndex--\n })\n\n // now find the indexes of the current markdown to replace\n const indexesOfCurrentMarkdownInBody: number[] = []\n let index: number = -1\n while ((index = body.indexOf(currentMarkdown, index + 1)) > -1) {\n indexesOfCurrentMarkdownInBody.push(index)\n }\n\n const indexToReplaceInBody: number | undefined = indexesOfCurrentMarkdownInBody[replaceIndex]\n if (indexToReplaceInBody === undefined) return\n\n const endReplaceIndex: number = indexToReplaceInBody + currentMarkdown.length\n\n // replace the current markdown with the new markdown\n const newBody: string =\n body.slice(0, indexToReplaceInBody) + newMarkdown + body.slice(endReplaceIndex)\n\n if (!newBody) return\n\n updateComment(activity, newBody, activity.files)\n }\n\n const handleRefClick = (ref: {\n entityId: string\n entityType: DetailsPanelEntityType\n activityId: string\n }) => {\n const { entityId, entityType, activityId } = ref\n const supportedTypes = ['version', 'task', 'folder']\n\n if (!entityType || !supportedTypes.includes(entityType))\n return console.log('Entity type not supported yet')\n\n if (!entityId || !entityType || !projectName) return console.log('No entity id or type found')\n\n // open the slide out\n openSlideOut({ entityId, entityType, projectName })\n // set highlighted activity\n setHighlightedActivities([activityId])\n }\n\n const handleFileExpand = ({ index, activityId }: { index: number; activityId: string }) => {\n const previewableFiles = Object.values(transformedActivitiesData)\n .reverse()\n .filter((a) => a.activityType == 'comment')\n .map((a) => ({\n id: a.activityId,\n files: a.files.filter((file: any) => isFilePreviewable(file.mime, file.ext)),\n }))\n .filter((a) => a.files.length > 0)\n\n // open image callback\n onOpenImage?.({ files: previewableFiles, activityId, index, projectName })\n }\n\n const loadingPlaceholders = useMemo(() => getLoadingPlaceholders(10), [])\n\n let warningMessage\n\n return (\n <>\n <Styled.FeedContainer className=\"feed\">\n {warningMessage && (\n <Styled.Warning>\n <Icon icon=\"info\" />\n {warningMessage}\n </Styled.Warning>\n )}\n <TabHeaderAndFilters\n label=\"Activity Feed\"\n filters={feedFilters}\n currentFilter={feedFilter}\n onFilterChange={setFeedFilter}\n isLoading={isLoadingNew}\n />\n <Styled.FeedContent ref={feedRef} className={clsx({ loading: isLoadingNew }, 'no-shimmer')}>\n {isLoadingNew\n ? loadingPlaceholders\n : transformedActivitiesData.map((activity) => (\n <ActivityItem\n key={activity.activityId}\n activity={activity}\n onCheckChange={handleCommentChecked}\n onDelete={deleteComment}\n onUpdate={async (value, files, _refs, data) =>\n await updateComment(activity, value, files, data)\n }\n projectInfo={projectInfo}\n projectName={projectName}\n entityType={entityType}\n onReferenceClick={handleRefClick}\n createdAts={entities.map((e) => e.createdAt)}\n onFileExpand={handleFileExpand}\n showOrigin={entities.length > 1}\n filter={feedFilter}\n editProps={{\n projectName,\n entities: entities,\n entityType,\n }}\n isHighlighted={highlightedActivities.includes(activity.activityId)}\n readOnly={readOnly}\n statuses={statuses}\n isSlideOut={isSlideOut}\n />\n ))}\n {/* message when no versions published */}\n {transformedActivitiesData.length === 0 &&\n isVersionsFilter &&\n !hasCommentLikeFilter &&\n !isLoadingNew && (\n <EmptyPlaceholder message=\"No versions published yet\" icon=\"layers\" />\n )}\n {hasNextPage && loadNextPage && (\n <InView\n root={feedRef.current}\n onChange={(inView) => inView && loadNextPage()}\n rootMargin={'400px 0px 0px 0px'}\n >\n <Styled.LoadMore style={{ height: 0 }} onClick={() => loadNextPage()}>\n {isLoadingNextPage ? 'Loading more...' : 'Click to load more'}\n </Styled.LoadMore>\n </InView>\n )}\n </Styled.FeedContent>\n {!hideCommentInput && (\n <CommentInput\n initValue={null}\n onSubmit={submitComment}\n isOpen={editingId === FEED_NEW_COMMENT}\n onClose={() => setEditingId(null)}\n onOpen={() => setEditingId(FEED_NEW_COMMENT)}\n disabled={disabled}\n isLoading={isLoadingNew || !entities.length || isSaving}\n />\n )}\n </Styled.FeedContainer>\n </>\n )\n}\n"],"names":["activitiesLast","feedFilters","Feed","disabled","readOnly","statuses","entityListId","isSlideOut","projectName","entities","entityType","editingId","projectInfo","setEditingId","userName","activitiesData","isLoadingNew","isLoadingNextPage","loadNextPage","hasNextPage","users","feedFilter","setFeedFilter","useFeedContext","openSlideOut","highlightedActivities","setHighlightedActivities","onOpenImage","setFeedAnnotations","user","useDetailsPanelContext","isVersionsFilter","c","hasActiveFilters","hasCommentLikeFilter","projectPermissions","isLoadingPermissions","useGetMyProjectPermissionsQuery","hideCommentInput","activitiesWithMergedAnnotations","useMemo","mergeAnnotationAttachments","useEffect","annotations","activity","a","transformedActivitiesData","useTransformActivities","feedRef","useRef","useScrollOnInputOpen","FEED_NEW_COMMENT","useSaveScrollPos","useScrollToHighlighted","submitCommentMutation","updateComment","deleteComment","isSaving","useCommentMutations","submitComment","useCallback","value","files","data","handleCommentChecked","e","target","checked","currentMarkdown","newMarkdown","body","taskIndex","li","replaceIndex","markdown","index","indexesOfCurrentMarkdownInBody","indexToReplaceInBody","endReplaceIndex","newBody","handleRefClick","ref","entityId","activityId","handleFileExpand","previewableFiles","file","isFilePreviewable","loadingPlaceholders","getLoadingPlaceholders","jsxs","Styled.FeedContainer","jsx","TabHeaderAndFilters","Styled.FeedContent","clsx","ActivityItem","_refs","EmptyPlaceholder","InView","inView","Styled.LoadMore","CommentInput"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export declare const pricingUrl = "https://ynput.io/ayon/pricing?utm_source=ayon";
1
+ export declare const pricingUrl = "https://ynput.cloud/free-trial";
2
2
  export interface PricingLinkProps extends React.HTMLAttributes<HTMLAnchorElement> {
3
3
  }
4
4
  export declare const PricingLink: import('react').ForwardRefExoticComponent<PricingLinkProps & import('react').RefAttributes<HTMLAnchorElement>>;
@@ -67,4 +67,5 @@ interface VersionUploadProviderProps {
67
67
  }
68
68
  export declare const VersionUploadProvider: React.FC<VersionUploadProviderProps>;
69
69
  export declare const useVersionUploadContext: () => VersionUploadContextType;
70
+ export declare const useOptionalVersionUploadContext: () => VersionUploadContextType | null;
70
71
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ynput/ayon-frontend-shared",
3
- "version": "0.3.28",
3
+ "version": "0.3.29",
4
4
  "description": "Shared React components for AYON frontend",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.es.js",
@@ -148,6 +148,6 @@
148
148
  "remark-gfm": "4.0.1",
149
149
  "short-uuid": "4.2.2",
150
150
  "turndown": "7.2.4",
151
- "uuid": "9.0.1"
151
+ "uuid": "14.0.0"
152
152
  }
153
153
  }