@ynput/ayon-frontend-shared 0.3.49 → 0.3.51

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 (108) hide show
  1. package/dist/Slicer.cjs.js +1 -1
  2. package/dist/Slicer.es.js +13 -11
  3. package/dist/Slicer.es.js.map +1 -1
  4. package/dist/_virtual/index.cjs10.js +1 -1
  5. package/dist/_virtual/index.cjs11.js +1 -1
  6. package/dist/_virtual/index.cjs12.js +1 -1
  7. package/dist/_virtual/index.cjs5.js +1 -1
  8. package/dist/_virtual/index.cjs6.js +1 -1
  9. package/dist/_virtual/index.es10.js +3 -3
  10. package/dist/_virtual/index.es11.js +5 -5
  11. package/dist/_virtual/index.es12.js +5 -5
  12. package/dist/_virtual/index.es5.js +5 -2
  13. package/dist/_virtual/index.es5.js.map +1 -1
  14. package/dist/_virtual/index.es6.js +2 -5
  15. package/dist/_virtual/index.es6.js.map +1 -1
  16. package/dist/components.cjs.js +1 -1
  17. package/dist/components.es.js +112 -109
  18. package/dist/components.es.js.map +1 -1
  19. package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +1 -1
  20. package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
  21. package/dist/node_modules/rehype/node_modules/vfile/lib/index.cjs.js +1 -1
  22. package/dist/node_modules/rehype/node_modules/vfile/lib/index.es.js +1 -1
  23. package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
  24. package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
  25. package/dist/node_modules/remove-accents/index.cjs.js +1 -1
  26. package/dist/node_modules/remove-accents/index.es.js +1 -1
  27. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js +1 -1
  28. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.es.js +1 -1
  29. package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js +1 -1
  30. package/dist/shared/node_modules/react-transition-group/esm/Transition.es.js +1 -1
  31. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js +1 -1
  32. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.es.js +1 -1
  33. package/dist/shared/src/api/generated/graphql.cjs.js +1 -1
  34. package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
  35. package/dist/shared/src/api/generated/graphql.es.js +1 -1
  36. package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
  37. package/dist/shared/src/api/queries/columnStats/columnStats.cjs.js +1 -1
  38. package/dist/shared/src/api/queries/columnStats/columnStats.cjs.js.map +1 -1
  39. package/dist/shared/src/api/queries/columnStats/columnStats.es.js +56 -44
  40. package/dist/shared/src/api/queries/columnStats/columnStats.es.js.map +1 -1
  41. package/dist/shared/src/api/queries/columnStats/groupCounts.cjs.js +1 -1
  42. package/dist/shared/src/api/queries/columnStats/groupCounts.cjs.js.map +1 -1
  43. package/dist/shared/src/api/queries/columnStats/groupCounts.es.js +10 -8
  44. package/dist/shared/src/api/queries/columnStats/groupCounts.es.js.map +1 -1
  45. package/dist/shared/src/components/LinksManager/LinksManager.cjs.js.map +1 -1
  46. package/dist/shared/src/components/LinksManager/LinksManager.es.js.map +1 -1
  47. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
  48. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  49. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +220 -216
  50. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  51. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useMenuOptions.cjs.js +1 -1
  52. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useMenuOptions.cjs.js.map +1 -1
  53. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useMenuOptions.es.js +1 -1
  54. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useMenuOptions.es.js.map +1 -1
  55. package/dist/shared/src/containers/Feed/components/FeedSearchFilter.cjs.js +2 -2
  56. package/dist/shared/src/containers/Feed/components/FeedSearchFilter.cjs.js.map +1 -1
  57. package/dist/shared/src/containers/Feed/components/FeedSearchFilter.es.js +138 -127
  58. package/dist/shared/src/containers/Feed/components/FeedSearchFilter.es.js.map +1 -1
  59. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
  60. package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
  61. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +1 -1
  62. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  63. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +56 -55
  64. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  65. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js +1 -1
  66. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js.map +1 -1
  67. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js +249 -254
  68. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -1
  69. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupCounts.cjs.js.map +1 -1
  70. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupCounts.es.js.map +1 -1
  71. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js +1 -1
  72. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js.map +1 -1
  73. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js +41 -40
  74. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js.map +1 -1
  75. package/dist/shared/src/containers/Slicer/components/Slicer.cjs.js +2 -2
  76. package/dist/shared/src/containers/Slicer/components/Slicer.cjs.js.map +1 -1
  77. package/dist/shared/src/containers/Slicer/components/Slicer.es.js +55 -47
  78. package/dist/shared/src/containers/Slicer/components/Slicer.es.js.map +1 -1
  79. package/dist/shared/src/containers/Slicer/hooks/useSlicerCounts.cjs.js +2 -0
  80. package/dist/shared/src/containers/Slicer/hooks/useSlicerCounts.cjs.js.map +1 -0
  81. package/dist/shared/src/containers/Slicer/hooks/useSlicerCounts.es.js +319 -0
  82. package/dist/shared/src/containers/Slicer/hooks/useSlicerCounts.es.js.map +1 -0
  83. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.cjs.js +1 -1
  84. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.cjs.js.map +1 -1
  85. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.es.js +118 -104
  86. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.es.js.map +1 -1
  87. package/dist/shared/src/context/DetailsPanelContext.cjs.js +1 -1
  88. package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
  89. package/dist/shared/src/context/DetailsPanelContext.es.js +57 -55
  90. package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
  91. package/dist/shared/src/util/confirmDelete.cjs.js +1 -1
  92. package/dist/shared/src/util/confirmDelete.cjs.js.map +1 -1
  93. package/dist/shared/src/util/confirmDelete.es.js +28 -24
  94. package/dist/shared/src/util/confirmDelete.es.js.map +1 -1
  95. package/dist/types/components/index.d.ts +1 -0
  96. package/dist/types/containers/Feed/components/FeedSearchFilter.d.ts +2 -2
  97. package/dist/types/containers/ProjectTreeTable/hooks/useGroupCounts.d.ts +2 -3
  98. package/dist/types/containers/ProjectTreeTable/types/overviewContext.d.ts +8 -0
  99. package/dist/types/containers/ProjectTreeTable/types/table.d.ts +0 -1
  100. package/dist/types/containers/SimpleTable/SimpleTable.types.d.ts +1 -0
  101. package/dist/types/containers/Slicer/components/Slicer.d.ts +2 -0
  102. package/dist/types/containers/Slicer/hooks/index.d.ts +1 -0
  103. package/dist/types/containers/Slicer/hooks/useSlicerCounts.d.ts +17 -0
  104. package/dist/types/containers/Slicer/hooks/useTableDataBySlice.d.ts +5 -1
  105. package/dist/types/util/confirmDelete.d.ts +3 -1
  106. package/dist/util.cjs.js +1 -1
  107. package/dist/util.es.js +77 -76
  108. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
- import { j as l } from "../../../../../_virtual/jsx-runtime.es.js";
2
- import { useMemo as n, useState as x, useRef as k, useEffect as w } from "react";
1
+ import { j as c } from "../../../../../_virtual/jsx-runtime.es.js";
2
+ import { forwardRef as k, useMemo as d, useState as w, useRef as E, useEffect as F } from "react";
3
3
  import { SearchFilter as A } from "@ynput/ayon-react-components";
4
- import j from "styled-components";
5
- import { feedFilterToClientFilters as E, clientFiltersToFeedFilter as O } from "../helpers/feedFilterAdapter.es.js";
4
+ import O from "styled-components";
5
+ import { feedFilterToClientFilters as j, clientFiltersToFeedFilter as L } from "../helpers/feedFilterAdapter.es.js";
6
6
  import { generateDateOptions as N } from "../../../components/SearchFilter/filterDates.es.js";
7
7
  import "lodash";
8
8
  import "react-toastify";
@@ -299,7 +299,7 @@ import "../../ListTable/ListTable.styled.es.js";
299
299
  import "../../../context/DeleteEntitiesContext.es.js";
300
300
  import { useDateRangeFilter as q } from "../../../components/SearchFilter/useDateRangeFilter.es.js";
301
301
  import { CustomDateRangeDialog as I } from "../../../components/SearchFilter/CustomDateRangeDialog.es.js";
302
- const L = j.div`
302
+ const $ = O.div`
303
303
  padding: 4px 8px;
304
304
  padding-bottom: 0;
305
305
  filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.25));
@@ -314,136 +314,147 @@ const L = j.div`
314
314
  opacity: 0.5;
315
315
  pointer-events: none;
316
316
  }
317
- `, gm = ({
318
- feedFilter: c,
319
- setFeedFilter: _,
320
- users: d,
321
- categories: e,
322
- supportsReviewSession: h,
323
- isLoading: F,
324
- checklistCount: m,
325
- onSearchTextChange: u
326
- }) => {
327
- const i = n(() => {
328
- const t = (r, S, v) => ({
329
- id: r,
330
- label: S,
331
- icon: v,
332
- type: "boolean",
333
- singleSelect: !0,
334
- values: []
335
- });
336
- return [
337
- t("comments", "Comments", "chat"),
338
- t("versions", "Versions", "layers"),
339
- t("updates", "Updates", "arrow_circle_right"),
340
- t("checklists", "Checklists", "check_circle"),
341
- t("has_attachments", "Attachments", "attach_file"),
342
- ...h ? [t("in_review_session", "Review session", "subscriptions")] : [],
343
- ...e.length ? [
317
+ `, B = k(
318
+ ({
319
+ feedFilter: u,
320
+ setFeedFilter: _,
321
+ users: h,
322
+ categories: n,
323
+ supportsReviewSession: f,
324
+ isLoading: y,
325
+ checklistCount: e,
326
+ onSearchTextChange: g
327
+ }) => {
328
+ const i = d(() => {
329
+ const t = (o, S, x) => ({
330
+ id: o,
331
+ label: S,
332
+ icon: x,
333
+ type: "boolean",
334
+ singleSelect: !0,
335
+ values: []
336
+ });
337
+ return [
338
+ t("comments", "Comments", "chat"),
339
+ t("versions", "Versions", "layers"),
340
+ t("updates", "Updates", "arrow_circle_right"),
341
+ t("checklists", "Checklists", "check_circle"),
342
+ t("has_attachments", "Attachments", "attach_file"),
343
+ ...f ? [t("in_review_session", "Review session", "subscriptions")] : [],
344
+ ...n.length ? [
345
+ {
346
+ id: "category",
347
+ label: "Category",
348
+ icon: "label",
349
+ type: "list_of_strings",
350
+ operator: "OR",
351
+ values: [
352
+ { id: "__none__", label: "No category", icon: "crop_square" },
353
+ ...n.map((o) => ({
354
+ id: o.name,
355
+ label: o.name,
356
+ icon: "crop_square",
357
+ color: o.color
358
+ }))
359
+ ]
360
+ }
361
+ ] : [],
344
362
  {
345
- id: "category",
346
- label: "Category",
347
- icon: "label",
363
+ id: "author",
364
+ label: "User",
365
+ icon: "person",
348
366
  type: "list_of_strings",
349
367
  operator: "OR",
350
- values: [
351
- { id: "__none__", label: "No category", icon: "crop_square" },
352
- ...e.map((r) => ({
353
- id: r.name,
354
- label: r.name,
355
- icon: "crop_square",
356
- color: r.color
357
- }))
358
- ]
368
+ values: h.map((o) => ({
369
+ id: o.name,
370
+ label: o.attrib?.fullName || o.name,
371
+ img: `/api/users/${o.name}/avatar`
372
+ }))
373
+ },
374
+ {
375
+ id: "createdAt",
376
+ label: "Posted date",
377
+ icon: "calendar_today",
378
+ type: "datetime",
379
+ values: N()
359
380
  }
360
- ] : [],
361
- {
362
- id: "author",
363
- label: "User",
364
- icon: "person",
365
- type: "list_of_strings",
366
- operator: "OR",
367
- values: d.map((r) => ({
368
- id: r.name,
369
- label: r.attrib?.fullName || r.name,
370
- img: `/api/users/${r.name}/avatar`
371
- }))
372
- },
373
- {
374
- id: "createdAt",
375
- label: "Posted date",
376
- icon: "calendar_today",
377
- type: "datetime",
378
- values: N()
379
- }
380
- ];
381
- }, [d, e, h]);
382
- let a = "";
383
- m?.total && m.total > 0 && (a = `${m.checked}/${m.total}`);
384
- const y = n(
385
- () => ["comments", { id: "checklists", label: a, tooltip: "Checklists" }],
386
- [a]
387
- ), s = n(
388
- () => E(c, i),
389
- [c, i]
390
- ), [p, g] = x(s), f = k(null), o = q();
391
- w(() => {
392
- g(s);
393
- }, [JSON.stringify(s)]);
394
- const b = (t) => {
395
- _(O(t)), u?.("");
396
- }, D = (t) => {
397
- o.wrapFilterChange(t, p, g);
398
- }, R = (t, C) => {
399
- C || u?.(t);
400
- };
401
- return /* @__PURE__ */ l.jsxs(L, { className: F ? "loading" : void 0, children: [
402
- /* @__PURE__ */ l.jsx(
403
- A,
404
- {
405
- ref: f,
406
- compact: !0,
407
- options: i,
408
- filters: p,
409
- onChange: D,
410
- onFinish: b,
411
- enableGlobalSearch: !0,
412
- enableMultipleSameFilters: !1,
413
- enableAutosuggestion: !0,
414
- onSearchChange: R,
415
- quickActions: y,
416
- placeholder: "Search and filter feed...",
417
- pt: {
418
- searchBar: {
419
- onClickCapture: (t) => o.handleSearchBarClickCapture(t, p)
420
- },
421
- dropdown: {
422
- pt: {
423
- item: {
424
- onClick: (t) => o.handleDropdownItemClick(t, p, i)
381
+ ];
382
+ }, [h, n, f]);
383
+ let s = "";
384
+ e?.total && e.total > 0 && (s = `${e.checked}/${e.total}`);
385
+ const v = d(
386
+ () => ["comments", { id: "checklists", label: s, tooltip: "Checklists" }],
387
+ [s]
388
+ ), l = d(
389
+ () => j(u, i),
390
+ [u, i]
391
+ ), [m, C] = w(l), r = q(), p = E(null);
392
+ F(() => {
393
+ C(l);
394
+ }, [JSON.stringify(l)]), F(() => {
395
+ const t = (a) => {
396
+ const o = p.current?.getContainerElement();
397
+ o && !o.contains(a.target) && p.current?.close();
398
+ };
399
+ return document.addEventListener("mousedown", t), () => {
400
+ document.removeEventListener("mousedown", t);
401
+ };
402
+ }, [p]);
403
+ const b = (t) => {
404
+ _(L(t)), g?.("");
405
+ }, D = (t) => {
406
+ r.wrapFilterChange(t, m, C);
407
+ }, R = (t, a) => {
408
+ a || g?.(t);
409
+ };
410
+ return /* @__PURE__ */ c.jsxs($, { className: y ? "loading" : void 0, children: [
411
+ /* @__PURE__ */ c.jsx(
412
+ A,
413
+ {
414
+ ref: p,
415
+ compact: !0,
416
+ options: i,
417
+ filters: m,
418
+ onChange: D,
419
+ onFinish: b,
420
+ enableGlobalSearch: !0,
421
+ enableMultipleSameFilters: !1,
422
+ enableAutosuggestion: !0,
423
+ onSearchChange: R,
424
+ quickActions: v,
425
+ placeholder: "Search and filter feed...",
426
+ pt: {
427
+ searchBar: {
428
+ onClickCapture: (t) => r.handleSearchBarClickCapture(t, m)
429
+ },
430
+ dropdown: {
431
+ pt: {
432
+ item: {
433
+ onClick: (t) => r.handleDropdownItemClick(t, m, i)
434
+ }
425
435
  }
426
436
  }
427
437
  }
428
438
  }
429
- }
430
- ),
431
- /* @__PURE__ */ l.jsx(
432
- I,
433
- {
434
- isOpen: !!o.customRangeFilterId,
435
- header: i.find((t) => t.id === o.customRangeFilterId?.split("__")[0])?.label ?? "Custom range",
436
- startDate: o.customStartDate,
437
- endDate: o.customEndDate,
438
- onStartDateChange: o.setCustomStartDate,
439
- onEndDateChange: o.setCustomEndDate,
440
- onApply: () => o.handleCustomRangeApply(p, i, b, f),
441
- onClose: o.handleCustomRangeClose
442
- }
443
- )
444
- ] });
445
- };
439
+ ),
440
+ /* @__PURE__ */ c.jsx(
441
+ I,
442
+ {
443
+ isOpen: !!r.customRangeFilterId,
444
+ header: i.find((t) => t.id === r.customRangeFilterId?.split("__")[0])?.label ?? "Custom range",
445
+ startDate: r.customStartDate,
446
+ endDate: r.customEndDate,
447
+ onStartDateChange: r.setCustomStartDate,
448
+ onEndDateChange: r.setCustomEndDate,
449
+ onApply: () => r.handleCustomRangeApply(m, i, b, p),
450
+ onClose: r.handleCustomRangeClose
451
+ }
452
+ )
453
+ ] });
454
+ }
455
+ );
456
+ B.displayName = "FeedSearchFilter";
446
457
  export {
447
- gm as default
458
+ B as default
448
459
  };
449
460
  //# sourceMappingURL=FeedSearchFilter.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FeedSearchFilter.es.js","sources":["../../../../../../src/containers/Feed/components/FeedSearchFilter.tsx"],"sourcesContent":["import { FC, useEffect, useMemo, useRef, useState } from 'react'\nimport {\n SearchFilter,\n Filter,\n Option,\n SearchFilterQuickAction,\n SearchFilterRef,\n} from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\nimport { type QueryFilter, type ActivityCategory, ChecklistCount } from '@shared/api'\nimport { ActivityUser } from '../helpers/groupMinorActivities'\nimport { feedFilterToClientFilters, clientFiltersToFeedFilter } from '../helpers/feedFilterAdapter'\nimport { generateDateOptions } from '@shared/components/SearchFilter/filterDates'\nimport { useDateRangeFilter, CustomDateRangeDialog } from '@shared/components/SearchFilter'\n\nconst Wrapper = styled.div`\n padding: 4px 8px;\n padding-bottom: 0;\n filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.25));\n z-index: 10;\n\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n\n &.loading {\n opacity: 0.5;\n pointer-events: none;\n }\n`\n\ninterface FeedSearchFilterProps {\n feedFilter: QueryFilter\n setFeedFilter: (filter: QueryFilter) => void\n users: ActivityUser[]\n categories: ActivityCategory[]\n supportsReviewSession: boolean\n isLoading?: boolean\n checklistCount?: ChecklistCount | undefined\n onSearchTextChange?: (text: string) => void\n}\n\nconst FeedSearchFilter: FC<FeedSearchFilterProps> = ({\n feedFilter,\n setFeedFilter,\n users,\n categories,\n supportsReviewSession,\n isLoading,\n checklistCount,\n onSearchTextChange,\n}) => {\n const options: Option[] = useMemo(() => {\n // no values -> ARC adds it in one click (select \"Yes\"), no value-panel prompt\n const boolean = (id: string, label: string, icon: string): Option => ({\n id,\n label,\n icon,\n type: 'boolean',\n singleSelect: true,\n values: [],\n })\n\n const opts: Option[] = [\n boolean('comments', 'Comments', 'chat'),\n boolean('versions', 'Versions', 'layers'),\n boolean('updates', 'Updates', 'arrow_circle_right'),\n boolean('checklists', 'Checklists', 'check_circle'),\n boolean('has_attachments', 'Attachments', 'attach_file'),\n ...(supportsReviewSession\n ? [boolean('in_review_session', 'Review session', 'subscriptions')]\n : []),\n ...(categories.length\n ? [\n {\n id: 'category',\n label: 'Category',\n icon: 'label',\n type: 'list_of_strings' as const,\n operator: 'OR' as const,\n values: [\n { id: '__none__', label: 'No category', icon: 'crop_square' },\n ...categories.map((c) => ({\n id: c.name,\n label: c.name,\n icon: 'crop_square',\n color: c.color,\n })),\n ],\n },\n ]\n : []),\n {\n id: 'author',\n label: 'User',\n icon: 'person',\n type: 'list_of_strings' as const,\n operator: 'OR' as const,\n values: users.map((u) => ({\n id: u.name,\n label: u.attrib?.fullName || u.name,\n img: `/api/users/${u.name}/avatar`,\n })),\n },\n {\n id: 'createdAt',\n label: 'Posted date',\n icon: 'calendar_today',\n type: 'datetime',\n values: generateDateOptions(),\n },\n ]\n\n return opts\n }, [users, categories, supportsReviewSession])\n\n let checklistsLabel: string = ''\n if (checklistCount?.total && checklistCount.total > 0) {\n checklistsLabel = `${checklistCount.checked}/${checklistCount.total}`\n }\n\n // @ts-expect-error - using string is fine\n const quickActions: SearchFilterQuickAction[] = useMemo(\n () => ['comments', { id: 'checklists', label: checklistsLabel, tooltip: 'Checklists' }],\n [checklistsLabel],\n )\n\n const filters = useMemo(\n () => feedFilterToClientFilters(feedFilter, options),\n [feedFilter, options],\n )\n\n const [localFilters, setLocalFilters] = useState<Filter[]>(filters)\n const searchFilterRef = useRef<SearchFilterRef>(null)\n\n const dateRange = useDateRangeFilter()\n\n useEffect(() => {\n setLocalFilters(filters)\n }, [JSON.stringify(filters)])\n\n const handleFinish = (newFilters: Filter[]) => {\n setFeedFilter(clientFiltersToFeedFilter(newFilters))\n onSearchTextChange?.('')\n }\n\n const handleFilterChange = (newFilters: Filter[]) => {\n dateRange.wrapFilterChange(newFilters, localFilters, setLocalFilters)\n }\n\n const handleLiveSearch = (value: string, filter: string | null) => {\n // only for root level searching\n if (!!filter) return\n onSearchTextChange?.(value)\n }\n\n return (\n <Wrapper className={isLoading ? 'loading' : undefined}>\n <SearchFilter\n ref={searchFilterRef}\n compact\n options={options}\n filters={localFilters}\n onChange={handleFilterChange}\n onFinish={handleFinish}\n enableGlobalSearch\n enableMultipleSameFilters={false}\n enableAutosuggestion={true}\n onSearchChange={handleLiveSearch}\n quickActions={quickActions}\n placeholder=\"Search and filter feed...\"\n pt={{\n searchBar: {\n onClickCapture: (e) => dateRange.handleSearchBarClickCapture(e, localFilters),\n },\n dropdown: {\n pt: {\n item: {\n onClick: (e) => dateRange.handleDropdownItemClick(e, localFilters, options),\n },\n },\n },\n }}\n />\n <CustomDateRangeDialog\n isOpen={!!dateRange.customRangeFilterId}\n header={\n options.find((o) => o.id === dateRange.customRangeFilterId?.split('__')[0])?.label ??\n 'Custom range'\n }\n startDate={dateRange.customStartDate}\n endDate={dateRange.customEndDate}\n onStartDateChange={dateRange.setCustomStartDate}\n onEndDateChange={dateRange.setCustomEndDate}\n onApply={() =>\n dateRange.handleCustomRangeApply(localFilters, options, handleFinish, searchFilterRef)\n }\n onClose={dateRange.handleCustomRangeClose}\n />\n </Wrapper>\n )\n}\n\nexport default FeedSearchFilter\n"],"names":["Wrapper","styled","FeedSearchFilter","feedFilter","setFeedFilter","users","categories","supportsReviewSession","isLoading","checklistCount","onSearchTextChange","options","useMemo","boolean","id","label","icon","c","u","generateDateOptions","checklistsLabel","quickActions","filters","feedFilterToClientFilters","localFilters","setLocalFilters","useState","searchFilterRef","useRef","dateRange","useDateRangeFilter","useEffect","handleFinish","newFilters","clientFiltersToFeedFilter","handleFilterChange","handleLiveSearch","value","filter","jsxs","jsx","SearchFilter","e","CustomDateRangeDialog","o"],"mappings":"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"}
1
+ {"version":3,"file":"FeedSearchFilter.es.js","sources":["../../../../../../src/containers/Feed/components/FeedSearchFilter.tsx"],"sourcesContent":["import { forwardRef, useEffect, useMemo, useRef, useState } from 'react'\nimport {\n SearchFilter,\n Filter,\n Option,\n SearchFilterQuickAction,\n SearchFilterRef,\n} from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\nimport { type QueryFilter, type ActivityCategory, ChecklistCount } from '@shared/api'\nimport { ActivityUser } from '../helpers/groupMinorActivities'\nimport { feedFilterToClientFilters, clientFiltersToFeedFilter } from '../helpers/feedFilterAdapter'\nimport { generateDateOptions } from '@shared/components/SearchFilter/filterDates'\nimport { useDateRangeFilter, CustomDateRangeDialog } from '@shared/components/SearchFilter'\n\nconst Wrapper = styled.div`\n padding: 4px 8px;\n padding-bottom: 0;\n filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.25));\n z-index: 10;\n\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n\n &.loading {\n opacity: 0.5;\n pointer-events: none;\n }\n`\n\ninterface FeedSearchFilterProps {\n feedFilter: QueryFilter\n setFeedFilter: (filter: QueryFilter) => void\n users: ActivityUser[]\n categories: ActivityCategory[]\n supportsReviewSession: boolean\n isLoading?: boolean\n checklistCount?: ChecklistCount | undefined\n onSearchTextChange?: (text: string) => void\n}\n\nconst FeedSearchFilter = forwardRef<SearchFilterRef, FeedSearchFilterProps>(\n ({\n feedFilter,\n setFeedFilter,\n users,\n categories,\n supportsReviewSession,\n isLoading,\n checklistCount,\n onSearchTextChange,\n }) => {\n const options: Option[] = useMemo(() => {\n // no values -> ARC adds it in one click (select \"Yes\"), no value-panel prompt\n const boolean = (id: string, label: string, icon: string): Option => ({\n id,\n label,\n icon,\n type: 'boolean',\n singleSelect: true,\n values: [],\n })\n\n const opts: Option[] = [\n boolean('comments', 'Comments', 'chat'),\n boolean('versions', 'Versions', 'layers'),\n boolean('updates', 'Updates', 'arrow_circle_right'),\n boolean('checklists', 'Checklists', 'check_circle'),\n boolean('has_attachments', 'Attachments', 'attach_file'),\n ...(supportsReviewSession\n ? [boolean('in_review_session', 'Review session', 'subscriptions')]\n : []),\n ...(categories.length\n ? [\n {\n id: 'category',\n label: 'Category',\n icon: 'label',\n type: 'list_of_strings' as const,\n operator: 'OR' as const,\n values: [\n { id: '__none__', label: 'No category', icon: 'crop_square' },\n ...categories.map((c) => ({\n id: c.name,\n label: c.name,\n icon: 'crop_square',\n color: c.color,\n })),\n ],\n },\n ]\n : []),\n {\n id: 'author',\n label: 'User',\n icon: 'person',\n type: 'list_of_strings' as const,\n operator: 'OR' as const,\n values: users.map((u) => ({\n id: u.name,\n label: u.attrib?.fullName || u.name,\n img: `/api/users/${u.name}/avatar`,\n })),\n },\n {\n id: 'createdAt',\n label: 'Posted date',\n icon: 'calendar_today',\n type: 'datetime',\n values: generateDateOptions(),\n },\n ]\n\n return opts\n }, [users, categories, supportsReviewSession])\n\n let checklistsLabel: string = ''\n if (checklistCount?.total && checklistCount.total > 0) {\n checklistsLabel = `${checklistCount.checked}/${checklistCount.total}`\n }\n\n // @ts-expect-error - using string is fine\n const quickActions: SearchFilterQuickAction[] = useMemo(\n () => ['comments', { id: 'checklists', label: checklistsLabel, tooltip: 'Checklists' }],\n [checklistsLabel],\n )\n\n const filters = useMemo(\n () => feedFilterToClientFilters(feedFilter, options),\n [feedFilter, options],\n )\n\n const [localFilters, setLocalFilters] = useState<Filter[]>(filters)\n\n const dateRange = useDateRangeFilter()\n\n const searchFilterRef = useRef<SearchFilterRef>(null)\n\n useEffect(() => {\n setLocalFilters(filters)\n }, [JSON.stringify(filters)])\n\n // close the search filter when clicking outside of it\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const filterContainer = searchFilterRef.current?.getContainerElement()\n // if the click is outside the search filter container, close it\n if (filterContainer && !filterContainer.contains(event.target as Node)) {\n searchFilterRef.current?.close()\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [searchFilterRef])\n\n const handleFinish = (newFilters: Filter[]) => {\n setFeedFilter(clientFiltersToFeedFilter(newFilters))\n onSearchTextChange?.('')\n }\n\n const handleFilterChange = (newFilters: Filter[]) => {\n dateRange.wrapFilterChange(newFilters, localFilters, setLocalFilters)\n }\n\n const handleLiveSearch = (value: string, filter: string | null) => {\n // only for root level searching\n if (!!filter) return\n onSearchTextChange?.(value)\n }\n\n return (\n <Wrapper className={isLoading ? 'loading' : undefined}>\n <SearchFilter\n ref={searchFilterRef}\n compact\n options={options}\n filters={localFilters}\n onChange={handleFilterChange}\n onFinish={handleFinish}\n enableGlobalSearch\n enableMultipleSameFilters={false}\n enableAutosuggestion={true}\n onSearchChange={handleLiveSearch}\n quickActions={quickActions}\n placeholder=\"Search and filter feed...\"\n pt={{\n searchBar: {\n onClickCapture: (e) => dateRange.handleSearchBarClickCapture(e, localFilters),\n },\n dropdown: {\n pt: {\n item: {\n onClick: (e) => dateRange.handleDropdownItemClick(e, localFilters, options),\n },\n },\n },\n }}\n />\n <CustomDateRangeDialog\n isOpen={!!dateRange.customRangeFilterId}\n header={\n options.find((o) => o.id === dateRange.customRangeFilterId?.split('__')[0])?.label ??\n 'Custom range'\n }\n startDate={dateRange.customStartDate}\n endDate={dateRange.customEndDate}\n onStartDateChange={dateRange.setCustomStartDate}\n onEndDateChange={dateRange.setCustomEndDate}\n onApply={() =>\n dateRange.handleCustomRangeApply(localFilters, options, handleFinish, searchFilterRef)\n }\n onClose={dateRange.handleCustomRangeClose}\n />\n </Wrapper>\n )\n },\n)\n\nFeedSearchFilter.displayName = 'FeedSearchFilter'\n\nexport default FeedSearchFilter\n"],"names":["Wrapper","styled","FeedSearchFilter","forwardRef","feedFilter","setFeedFilter","users","categories","supportsReviewSession","isLoading","checklistCount","onSearchTextChange","options","useMemo","boolean","id","label","icon","c","u","generateDateOptions","checklistsLabel","quickActions","filters","feedFilterToClientFilters","localFilters","setLocalFilters","useState","dateRange","useDateRangeFilter","searchFilterRef","useRef","useEffect","handleClickOutside","event","filterContainer","handleFinish","newFilters","clientFiltersToFeedFilter","handleFilterChange","handleLiveSearch","value","filter","jsxs","jsx","SearchFilter","e","CustomDateRangeDialog","o"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FeedContext.cjs.js","sources":["../../../../../../src/containers/Feed/context/FeedContext.tsx"],"sourcesContent":["import React, { createContext, useContext, useMemo, useState } from 'react'\nimport useGetFeedActivitiesData from '../hooks/useGetFeedActivitiesData'\nimport { buildBackendFilter } from '../helpers/buildBackendFilter'\n\n// Queries\nimport {\n useCreateEntityActivityMutation,\n useDeleteActivityMutation,\n useUpdateActivityMutation,\n useCreateReactionToActivityMutation,\n useDeleteReactionToActivityMutation,\n useGetActivityUsersQuery,\n useGetEntityMentionsQuery,\n useGetEntityTooltipQuery,\n useGetActivityCategoriesQuery,\n teamsApi,\n useGetEntitiesChecklistsQuery,\n} from '@shared/api'\nimport type { ActivityCategory, ChecklistCount, SuggestRequest, SuggestResponse } from '@shared/api'\nimport { ActivityUser } from '../helpers/groupMinorActivities'\nimport { FeedFilter, PowerpackFeature, useDetailsPanelContext } from '@shared/context'\nimport { getFilterActivityTypes } from '@shared/api'\n\nexport const FEED_NEW_COMMENT = '__new__' as const\n\nexport type EditingState = null | typeof FEED_NEW_COMMENT | string\n\n// Add type for the refTooltip\nexport interface RefTooltip {\n id: string | null\n type: string\n name: string\n label: string\n pos: {\n top: number\n left: number\n }\n}\n\nexport type FeedContextProps = {\n children: React.ReactNode\n projectName: string\n entityType: string\n activityTypes?: string[] | null\n entities: any[]\n projectInfo: any\n scope: string\n userName: string\n userFullName: string\n\n // annotations\n annotations?: Record<string, any>\n removeAnnotation?: (id: string) => void\n exportAnnotationComposite?: (id: string) => Promise<Blob | null>\n // feedFilter - the current filter within the feed tab\n feedFilter?: FeedFilter\n setFeedFilter?: (filter: FeedFilter) => void\n}\n\ninterface FeedContextType extends Omit<FeedContextProps, 'children'> {\n // local UI state\n editingId: EditingState\n setEditingId: (id: EditingState) => void\n // activities data props\n activitiesData: any[]\n isLoadingActivities: boolean\n isLoadingNew: boolean\n isLoadingNextPage: boolean\n hasNextPage: boolean\n loadNextPage?: () => Promise<any>\n // refTooltip state and functions\n refTooltip: RefTooltip | null\n setRefTooltip: (tooltip: RefTooltip | null) => void\n // tooltip data\n entityTooltipData: any\n isFetchingTooltip: boolean\n // query functions\n createEntityActivity: (args: any) => Promise<any>\n updateActivity: (args: any) => Promise<any>\n deleteActivity: (args: any) => Promise<any>\n createReaction: (args: any) => Promise<any>\n deleteReaction: (args: any) => Promise<any>\n isUpdatingActivity: boolean\n // users data\n users: ActivityUser[]\n isGuest: boolean\n // team membership for current user\n userTeamNames: string[]\n // mentions data\n mentionSuggestionsData: SuggestResponse\n // categories data\n categories: ActivityCategory[]\n // checklists count\n checklistCount: ChecklistCount | undefined\n feedFilter: FeedFilter\n setFeedFilter: (filter: FeedFilter) => void\n backendFilter: string | undefined\n searchText: string\n setSearchText: (text: string) => void\n}\n\nconst FeedContext = createContext<FeedContextType | undefined>(undefined)\n\nexport const FeedProvider = ({ children, ...props }: FeedContextProps) => {\n const { isGuest } = useDetailsPanelContext()\n const { data: users = [] } = useGetActivityUsersQuery({ projects: [props.projectName] })\n\n // Fetch teams with members to derive which teams the current user belongs to\n const { data: teams = [] } = teamsApi.useGetTeamsQuery(\n { projectName: props.projectName, showMembers: true },\n { skip: !props.projectName },\n )\n const userTeamNames = useMemo(\n () => teams.filter((t) => t.members?.some((m) => m.name === props.userName)).map((t) => t.name),\n [teams, props.userName],\n )\n\n const [feedFilterInternal, setFeedFilterInternal] = useState<FeedFilter>({\n operator: 'and',\n conditions: [],\n })\n\n const [searchText, setSearchText] = useState<string>('')\n\n // use props if provided, otherwise use local state\n const feedFilter = props.feedFilter ?? feedFilterInternal\n const setFeedFilter = props.setFeedFilter ?? setFeedFilterInternal\n\n const [editingId, setEditingId] = useState<EditingState>(null)\n const [refTooltip, setRefTooltip] = useState<RefTooltip | null>(null)\n\n // queries\n const [createEntityActivityMutation, { isLoading: isLoadingCreate }] =\n useCreateEntityActivityMutation()\n const [updateActivityMutation, { isLoading: isLoadingUpdate }] = useUpdateActivityMutation()\n const [deleteActivityMutation, { isLoading: isLoadingDelete }] = useDeleteActivityMutation()\n const isUpdatingActivity = isLoadingCreate || isLoadingUpdate || isLoadingDelete\n\n const createEntityActivity: FeedContextType['createEntityActivity'] = async (args) =>\n await createEntityActivityMutation(args).unwrap()\n const updateActivity: FeedContextType['updateActivity'] = async (args) =>\n await updateActivityMutation(args).unwrap()\n const deleteActivity: FeedContextType['deleteActivity'] = async (args) =>\n await deleteActivityMutation(args).unwrap()\n\n const [createReactionToActivity] = useCreateReactionToActivityMutation()\n const [deleteReactionToActivity] = useDeleteReactionToActivityMutation()\n\n const createReaction: FeedContextType['createReaction'] = async (args) =>\n await createReactionToActivity(args).unwrap()\n const deleteReaction: FeedContextType['deleteReaction'] = async (args) =>\n await deleteReactionToActivity(args).unwrap()\n\n const activityTypes = getFilterActivityTypes(feedFilter)\n const backendFilter = useMemo(() => buildBackendFilter(feedFilter), [feedFilter])\n\n const activitiesDataProps = useGetFeedActivitiesData({\n entities: props.entities,\n filter: feedFilter,\n backendFilter,\n activityTypes: activityTypes,\n projectName: props.projectName,\n entityType: props.entityType,\n })\n const skip =\n !props.projectName ||\n !refTooltip?.id ||\n refTooltip.type === 'user' ||\n refTooltip.type === 'team'\n const { data: entityTooltipData, isFetching: isFetchingTooltip } = useGetEntityTooltipQuery(\n { entityType: refTooltip?.type, entityId: refTooltip?.id, projectName: props.projectName },\n { skip: skip },\n )\n\n // get all versions that can be mentioned\n const { data: mentionSuggestionsData = {} } = useGetEntityMentionsQuery(\n {\n suggestRequest: {\n entityType: props.entityType as SuggestRequest['entityType'],\n entityId: props.entities[0]?.id,\n },\n projectName: props.projectName,\n },\n { skip: !editingId },\n )\n\n // get comment categories for this project and user\n const { data: categories = [] } = useGetActivityCategoriesQuery({\n projectName: props.projectName,\n })\n\n // get checklists count\n const { data: checklistCount } = useGetEntitiesChecklistsQuery(\n {\n projectName: props.projectName,\n entityIds: props.entities.map((e) => e.id),\n },\n { skip: !props.projectName || !props.entities.length },\n )\n\n return (\n <FeedContext.Provider\n value={{\n ...props,\n ...activitiesDataProps,\n mentionSuggestionsData,\n categories,\n checklistCount,\n users,\n isUpdatingActivity,\n userTeamNames,\n entityTooltipData,\n isFetchingTooltip,\n refTooltip,\n activityTypes,\n feedFilter,\n setFeedFilter,\n backendFilter,\n searchText,\n setSearchText,\n isGuest,\n editingId,\n setEditingId,\n setRefTooltip,\n // Query functions\n createEntityActivity,\n updateActivity,\n deleteActivity,\n createReaction,\n deleteReaction,\n }}\n >\n {children}\n </FeedContext.Provider>\n )\n}\n\nexport const useFeedContext = () => {\n const context = useContext(FeedContext)\n if (!context) {\n throw new Error('useFeedContext must be used within a FeedProvider')\n }\n return context\n}\n"],"names":["FEED_NEW_COMMENT","FeedContext","createContext","FeedProvider","children","props","isGuest","useDetailsPanelContext","users","useGetActivityUsersQuery","teams","teamsApi","userTeamNames","useMemo","t","m","feedFilterInternal","setFeedFilterInternal","useState","searchText","setSearchText","feedFilter","setFeedFilter","editingId","setEditingId","refTooltip","setRefTooltip","createEntityActivityMutation","isLoadingCreate","useCreateEntityActivityMutation","updateActivityMutation","isLoadingUpdate","useUpdateActivityMutation","deleteActivityMutation","isLoadingDelete","useDeleteActivityMutation","isUpdatingActivity","createEntityActivity","args","updateActivity","deleteActivity","createReactionToActivity","useCreateReactionToActivityMutation","deleteReactionToActivity","useDeleteReactionToActivityMutation","createReaction","deleteReaction","activityTypes","getFilterActivityTypes","backendFilter","buildBackendFilter","activitiesDataProps","useGetFeedActivitiesData","skip","entityTooltipData","isFetchingTooltip","useGetEntityTooltipQuery","mentionSuggestionsData","useGetEntityMentionsQuery","categories","useGetActivityCategoriesQuery","checklistCount","useGetEntitiesChecklistsQuery","e","jsx","useFeedContext","context","useContext"],"mappings":"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"}
1
+ {"version":3,"file":"FeedContext.cjs.js","sources":["../../../../../../src/containers/Feed/context/FeedContext.tsx"],"sourcesContent":["import React, { createContext, useContext, useMemo, useState } from 'react'\nimport useGetFeedActivitiesData from '../hooks/useGetFeedActivitiesData'\nimport { buildBackendFilter } from '../helpers/buildBackendFilter'\n\n// Queries\nimport {\n useCreateEntityActivityMutation,\n useDeleteActivityMutation,\n useUpdateActivityMutation,\n useCreateReactionToActivityMutation,\n useDeleteReactionToActivityMutation,\n useGetActivityUsersQuery,\n useGetEntityMentionsQuery,\n useGetEntityTooltipQuery,\n useGetActivityCategoriesQuery,\n teamsApi,\n useGetEntitiesChecklistsQuery,\n} from '@shared/api'\nimport type { ActivityCategory, ChecklistCount, SuggestRequest, SuggestResponse } from '@shared/api'\nimport { ActivityUser } from '../helpers/groupMinorActivities'\nimport { FeedFilter, useDetailsPanelContext } from '@shared/context'\nimport { getFilterActivityTypes } from '@shared/api'\n\nexport const FEED_NEW_COMMENT = '__new__' as const\n\nexport type EditingState = null | typeof FEED_NEW_COMMENT | string\n\n// Add type for the refTooltip\nexport interface RefTooltip {\n id: string | null\n type: string\n name: string\n label: string\n pos: {\n top: number\n left: number\n }\n}\n\nexport type FeedContextProps = {\n children: React.ReactNode\n projectName: string\n entityType: string\n activityTypes?: string[] | null\n entities: any[]\n projectInfo: any\n scope: string\n userName: string\n userFullName: string\n\n // annotations\n annotations?: Record<string, any>\n removeAnnotation?: (id: string) => void\n exportAnnotationComposite?: (id: string) => Promise<Blob | null>\n // feedFilter - the current filter within the feed tab\n feedFilter?: FeedFilter\n setFeedFilter?: (filter: FeedFilter) => void\n}\n\ninterface FeedContextType extends Omit<FeedContextProps, 'children'> {\n // local UI state\n editingId: EditingState\n setEditingId: (id: EditingState) => void\n // activities data props\n activitiesData: any[]\n isLoadingActivities: boolean\n isLoadingNew: boolean\n isLoadingNextPage: boolean\n hasNextPage: boolean\n loadNextPage?: () => Promise<any>\n // refTooltip state and functions\n refTooltip: RefTooltip | null\n setRefTooltip: (tooltip: RefTooltip | null) => void\n // tooltip data\n entityTooltipData: any\n isFetchingTooltip: boolean\n // query functions\n createEntityActivity: (args: any) => Promise<any>\n updateActivity: (args: any) => Promise<any>\n deleteActivity: (args: any) => Promise<any>\n createReaction: (args: any) => Promise<any>\n deleteReaction: (args: any) => Promise<any>\n isUpdatingActivity: boolean\n // users data\n users: ActivityUser[]\n isGuest: boolean\n // team membership for current user\n userTeamNames: string[]\n // mentions data\n mentionSuggestionsData: SuggestResponse\n // categories data\n categories: ActivityCategory[]\n // checklists count\n checklistCount: ChecklistCount | undefined\n feedFilter: FeedFilter\n setFeedFilter: (filter: FeedFilter) => void\n backendFilter: string | undefined\n searchText: string\n setSearchText: (text: string) => void\n}\n\nconst FeedContext = createContext<FeedContextType | undefined>(undefined)\n\nexport const FeedProvider = ({ children, ...props }: FeedContextProps) => {\n const { isGuest } = useDetailsPanelContext()\n const { data: users = [] } = useGetActivityUsersQuery({ projects: [props.projectName] })\n\n // Fetch teams with members to derive which teams the current user belongs to\n const { data: teams = [] } = teamsApi.useGetTeamsQuery(\n { projectName: props.projectName, showMembers: true },\n { skip: !props.projectName },\n )\n const userTeamNames = useMemo(\n () => teams.filter((t) => t.members?.some((m) => m.name === props.userName)).map((t) => t.name),\n [teams, props.userName],\n )\n\n const [feedFilterInternal, setFeedFilterInternal] = useState<FeedFilter>({\n operator: 'and',\n conditions: [],\n })\n\n const [searchText, setSearchText] = useState<string>('')\n\n // use props if provided, otherwise use local state\n const feedFilter = props.feedFilter ?? feedFilterInternal\n const setFeedFilter = props.setFeedFilter ?? setFeedFilterInternal\n\n const [editingId, setEditingId] = useState<EditingState>(null)\n const [refTooltip, setRefTooltip] = useState<RefTooltip | null>(null)\n\n // queries\n const [createEntityActivityMutation, { isLoading: isLoadingCreate }] =\n useCreateEntityActivityMutation()\n const [updateActivityMutation, { isLoading: isLoadingUpdate }] = useUpdateActivityMutation()\n const [deleteActivityMutation, { isLoading: isLoadingDelete }] = useDeleteActivityMutation()\n const isUpdatingActivity = isLoadingCreate || isLoadingUpdate || isLoadingDelete\n\n const createEntityActivity: FeedContextType['createEntityActivity'] = async (args) =>\n await createEntityActivityMutation(args).unwrap()\n const updateActivity: FeedContextType['updateActivity'] = async (args) =>\n await updateActivityMutation(args).unwrap()\n const deleteActivity: FeedContextType['deleteActivity'] = async (args) =>\n await deleteActivityMutation(args).unwrap()\n\n const [createReactionToActivity] = useCreateReactionToActivityMutation()\n const [deleteReactionToActivity] = useDeleteReactionToActivityMutation()\n\n const createReaction: FeedContextType['createReaction'] = async (args) =>\n await createReactionToActivity(args).unwrap()\n const deleteReaction: FeedContextType['deleteReaction'] = async (args) =>\n await deleteReactionToActivity(args).unwrap()\n\n const activityTypes = getFilterActivityTypes(feedFilter)\n const backendFilter = useMemo(() => buildBackendFilter(feedFilter), [feedFilter])\n\n const activitiesDataProps = useGetFeedActivitiesData({\n entities: props.entities,\n filter: feedFilter,\n backendFilter,\n activityTypes: activityTypes,\n projectName: props.projectName,\n entityType: props.entityType,\n })\n const skip =\n !props.projectName ||\n !refTooltip?.id ||\n refTooltip.type === 'user' ||\n refTooltip.type === 'team'\n const { data: entityTooltipData, isFetching: isFetchingTooltip } = useGetEntityTooltipQuery(\n { entityType: refTooltip?.type, entityId: refTooltip?.id, projectName: props.projectName },\n { skip: skip },\n )\n\n // get all versions that can be mentioned\n const { data: mentionSuggestionsData = {} } = useGetEntityMentionsQuery(\n {\n suggestRequest: {\n entityType: props.entityType as SuggestRequest['entityType'],\n entityId: props.entities[0]?.id,\n },\n projectName: props.projectName,\n },\n { skip: !editingId },\n )\n\n // get comment categories for this project and user\n const { data: categories = [] } = useGetActivityCategoriesQuery({\n projectName: props.projectName,\n })\n\n // get checklists count\n const { data: checklistCount } = useGetEntitiesChecklistsQuery(\n {\n projectName: props.projectName,\n entityIds: props.entities.map((e) => e.id),\n },\n { skip: !props.projectName || !props.entities.length },\n )\n\n return (\n <FeedContext.Provider\n value={{\n ...props,\n ...activitiesDataProps,\n mentionSuggestionsData,\n categories,\n checklistCount,\n users,\n isUpdatingActivity,\n userTeamNames,\n entityTooltipData,\n isFetchingTooltip,\n refTooltip,\n activityTypes,\n feedFilter,\n setFeedFilter,\n backendFilter,\n searchText,\n setSearchText,\n isGuest,\n editingId,\n setEditingId,\n setRefTooltip,\n // Query functions\n createEntityActivity,\n updateActivity,\n deleteActivity,\n createReaction,\n deleteReaction,\n }}\n >\n {children}\n </FeedContext.Provider>\n )\n}\n\nexport const useFeedContext = () => {\n const context = useContext(FeedContext)\n if (!context) {\n throw new Error('useFeedContext must be used within a FeedProvider')\n }\n return context\n}\n"],"names":["FEED_NEW_COMMENT","FeedContext","createContext","FeedProvider","children","props","isGuest","useDetailsPanelContext","users","useGetActivityUsersQuery","teams","teamsApi","userTeamNames","useMemo","t","m","feedFilterInternal","setFeedFilterInternal","useState","searchText","setSearchText","feedFilter","setFeedFilter","editingId","setEditingId","refTooltip","setRefTooltip","createEntityActivityMutation","isLoadingCreate","useCreateEntityActivityMutation","updateActivityMutation","isLoadingUpdate","useUpdateActivityMutation","deleteActivityMutation","isLoadingDelete","useDeleteActivityMutation","isUpdatingActivity","createEntityActivity","args","updateActivity","deleteActivity","createReactionToActivity","useCreateReactionToActivityMutation","deleteReactionToActivity","useDeleteReactionToActivityMutation","createReaction","deleteReaction","activityTypes","getFilterActivityTypes","backendFilter","buildBackendFilter","activitiesDataProps","useGetFeedActivitiesData","skip","entityTooltipData","isFetchingTooltip","useGetEntityTooltipQuery","mentionSuggestionsData","useGetEntityMentionsQuery","categories","useGetActivityCategoriesQuery","checklistCount","useGetEntitiesChecklistsQuery","e","jsx","useFeedContext","context","useContext"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FeedContext.es.js","sources":["../../../../../../src/containers/Feed/context/FeedContext.tsx"],"sourcesContent":["import React, { createContext, useContext, useMemo, useState } from 'react'\nimport useGetFeedActivitiesData from '../hooks/useGetFeedActivitiesData'\nimport { buildBackendFilter } from '../helpers/buildBackendFilter'\n\n// Queries\nimport {\n useCreateEntityActivityMutation,\n useDeleteActivityMutation,\n useUpdateActivityMutation,\n useCreateReactionToActivityMutation,\n useDeleteReactionToActivityMutation,\n useGetActivityUsersQuery,\n useGetEntityMentionsQuery,\n useGetEntityTooltipQuery,\n useGetActivityCategoriesQuery,\n teamsApi,\n useGetEntitiesChecklistsQuery,\n} from '@shared/api'\nimport type { ActivityCategory, ChecklistCount, SuggestRequest, SuggestResponse } from '@shared/api'\nimport { ActivityUser } from '../helpers/groupMinorActivities'\nimport { FeedFilter, PowerpackFeature, useDetailsPanelContext } from '@shared/context'\nimport { getFilterActivityTypes } from '@shared/api'\n\nexport const FEED_NEW_COMMENT = '__new__' as const\n\nexport type EditingState = null | typeof FEED_NEW_COMMENT | string\n\n// Add type for the refTooltip\nexport interface RefTooltip {\n id: string | null\n type: string\n name: string\n label: string\n pos: {\n top: number\n left: number\n }\n}\n\nexport type FeedContextProps = {\n children: React.ReactNode\n projectName: string\n entityType: string\n activityTypes?: string[] | null\n entities: any[]\n projectInfo: any\n scope: string\n userName: string\n userFullName: string\n\n // annotations\n annotations?: Record<string, any>\n removeAnnotation?: (id: string) => void\n exportAnnotationComposite?: (id: string) => Promise<Blob | null>\n // feedFilter - the current filter within the feed tab\n feedFilter?: FeedFilter\n setFeedFilter?: (filter: FeedFilter) => void\n}\n\ninterface FeedContextType extends Omit<FeedContextProps, 'children'> {\n // local UI state\n editingId: EditingState\n setEditingId: (id: EditingState) => void\n // activities data props\n activitiesData: any[]\n isLoadingActivities: boolean\n isLoadingNew: boolean\n isLoadingNextPage: boolean\n hasNextPage: boolean\n loadNextPage?: () => Promise<any>\n // refTooltip state and functions\n refTooltip: RefTooltip | null\n setRefTooltip: (tooltip: RefTooltip | null) => void\n // tooltip data\n entityTooltipData: any\n isFetchingTooltip: boolean\n // query functions\n createEntityActivity: (args: any) => Promise<any>\n updateActivity: (args: any) => Promise<any>\n deleteActivity: (args: any) => Promise<any>\n createReaction: (args: any) => Promise<any>\n deleteReaction: (args: any) => Promise<any>\n isUpdatingActivity: boolean\n // users data\n users: ActivityUser[]\n isGuest: boolean\n // team membership for current user\n userTeamNames: string[]\n // mentions data\n mentionSuggestionsData: SuggestResponse\n // categories data\n categories: ActivityCategory[]\n // checklists count\n checklistCount: ChecklistCount | undefined\n feedFilter: FeedFilter\n setFeedFilter: (filter: FeedFilter) => void\n backendFilter: string | undefined\n searchText: string\n setSearchText: (text: string) => void\n}\n\nconst FeedContext = createContext<FeedContextType | undefined>(undefined)\n\nexport const FeedProvider = ({ children, ...props }: FeedContextProps) => {\n const { isGuest } = useDetailsPanelContext()\n const { data: users = [] } = useGetActivityUsersQuery({ projects: [props.projectName] })\n\n // Fetch teams with members to derive which teams the current user belongs to\n const { data: teams = [] } = teamsApi.useGetTeamsQuery(\n { projectName: props.projectName, showMembers: true },\n { skip: !props.projectName },\n )\n const userTeamNames = useMemo(\n () => teams.filter((t) => t.members?.some((m) => m.name === props.userName)).map((t) => t.name),\n [teams, props.userName],\n )\n\n const [feedFilterInternal, setFeedFilterInternal] = useState<FeedFilter>({\n operator: 'and',\n conditions: [],\n })\n\n const [searchText, setSearchText] = useState<string>('')\n\n // use props if provided, otherwise use local state\n const feedFilter = props.feedFilter ?? feedFilterInternal\n const setFeedFilter = props.setFeedFilter ?? setFeedFilterInternal\n\n const [editingId, setEditingId] = useState<EditingState>(null)\n const [refTooltip, setRefTooltip] = useState<RefTooltip | null>(null)\n\n // queries\n const [createEntityActivityMutation, { isLoading: isLoadingCreate }] =\n useCreateEntityActivityMutation()\n const [updateActivityMutation, { isLoading: isLoadingUpdate }] = useUpdateActivityMutation()\n const [deleteActivityMutation, { isLoading: isLoadingDelete }] = useDeleteActivityMutation()\n const isUpdatingActivity = isLoadingCreate || isLoadingUpdate || isLoadingDelete\n\n const createEntityActivity: FeedContextType['createEntityActivity'] = async (args) =>\n await createEntityActivityMutation(args).unwrap()\n const updateActivity: FeedContextType['updateActivity'] = async (args) =>\n await updateActivityMutation(args).unwrap()\n const deleteActivity: FeedContextType['deleteActivity'] = async (args) =>\n await deleteActivityMutation(args).unwrap()\n\n const [createReactionToActivity] = useCreateReactionToActivityMutation()\n const [deleteReactionToActivity] = useDeleteReactionToActivityMutation()\n\n const createReaction: FeedContextType['createReaction'] = async (args) =>\n await createReactionToActivity(args).unwrap()\n const deleteReaction: FeedContextType['deleteReaction'] = async (args) =>\n await deleteReactionToActivity(args).unwrap()\n\n const activityTypes = getFilterActivityTypes(feedFilter)\n const backendFilter = useMemo(() => buildBackendFilter(feedFilter), [feedFilter])\n\n const activitiesDataProps = useGetFeedActivitiesData({\n entities: props.entities,\n filter: feedFilter,\n backendFilter,\n activityTypes: activityTypes,\n projectName: props.projectName,\n entityType: props.entityType,\n })\n const skip =\n !props.projectName ||\n !refTooltip?.id ||\n refTooltip.type === 'user' ||\n refTooltip.type === 'team'\n const { data: entityTooltipData, isFetching: isFetchingTooltip } = useGetEntityTooltipQuery(\n { entityType: refTooltip?.type, entityId: refTooltip?.id, projectName: props.projectName },\n { skip: skip },\n )\n\n // get all versions that can be mentioned\n const { data: mentionSuggestionsData = {} } = useGetEntityMentionsQuery(\n {\n suggestRequest: {\n entityType: props.entityType as SuggestRequest['entityType'],\n entityId: props.entities[0]?.id,\n },\n projectName: props.projectName,\n },\n { skip: !editingId },\n )\n\n // get comment categories for this project and user\n const { data: categories = [] } = useGetActivityCategoriesQuery({\n projectName: props.projectName,\n })\n\n // get checklists count\n const { data: checklistCount } = useGetEntitiesChecklistsQuery(\n {\n projectName: props.projectName,\n entityIds: props.entities.map((e) => e.id),\n },\n { skip: !props.projectName || !props.entities.length },\n )\n\n return (\n <FeedContext.Provider\n value={{\n ...props,\n ...activitiesDataProps,\n mentionSuggestionsData,\n categories,\n checklistCount,\n users,\n isUpdatingActivity,\n userTeamNames,\n entityTooltipData,\n isFetchingTooltip,\n refTooltip,\n activityTypes,\n feedFilter,\n setFeedFilter,\n backendFilter,\n searchText,\n setSearchText,\n isGuest,\n editingId,\n setEditingId,\n setRefTooltip,\n // Query functions\n createEntityActivity,\n updateActivity,\n deleteActivity,\n createReaction,\n deleteReaction,\n }}\n >\n {children}\n </FeedContext.Provider>\n )\n}\n\nexport const useFeedContext = () => {\n const context = useContext(FeedContext)\n if (!context) {\n throw new Error('useFeedContext must be used within a FeedProvider')\n }\n return context\n}\n"],"names":["FEED_NEW_COMMENT","FeedContext","createContext","FeedProvider","children","props","isGuest","useDetailsPanelContext","users","useGetActivityUsersQuery","teams","teamsApi","userTeamNames","useMemo","t","m","feedFilterInternal","setFeedFilterInternal","useState","searchText","setSearchText","feedFilter","setFeedFilter","editingId","setEditingId","refTooltip","setRefTooltip","createEntityActivityMutation","isLoadingCreate","useCreateEntityActivityMutation","updateActivityMutation","isLoadingUpdate","useUpdateActivityMutation","deleteActivityMutation","isLoadingDelete","useDeleteActivityMutation","isUpdatingActivity","createEntityActivity","args","updateActivity","deleteActivity","createReactionToActivity","useCreateReactionToActivityMutation","deleteReactionToActivity","useDeleteReactionToActivityMutation","createReaction","deleteReaction","activityTypes","getFilterActivityTypes","backendFilter","buildBackendFilter","activitiesDataProps","useGetFeedActivitiesData","skip","entityTooltipData","isFetchingTooltip","useGetEntityTooltipQuery","mentionSuggestionsData","useGetEntityMentionsQuery","categories","useGetActivityCategoriesQuery","checklistCount","useGetEntitiesChecklistsQuery","e","jsx","useFeedContext","context","useContext"],"mappings":"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"}
1
+ {"version":3,"file":"FeedContext.es.js","sources":["../../../../../../src/containers/Feed/context/FeedContext.tsx"],"sourcesContent":["import React, { createContext, useContext, useMemo, useState } from 'react'\nimport useGetFeedActivitiesData from '../hooks/useGetFeedActivitiesData'\nimport { buildBackendFilter } from '../helpers/buildBackendFilter'\n\n// Queries\nimport {\n useCreateEntityActivityMutation,\n useDeleteActivityMutation,\n useUpdateActivityMutation,\n useCreateReactionToActivityMutation,\n useDeleteReactionToActivityMutation,\n useGetActivityUsersQuery,\n useGetEntityMentionsQuery,\n useGetEntityTooltipQuery,\n useGetActivityCategoriesQuery,\n teamsApi,\n useGetEntitiesChecklistsQuery,\n} from '@shared/api'\nimport type { ActivityCategory, ChecklistCount, SuggestRequest, SuggestResponse } from '@shared/api'\nimport { ActivityUser } from '../helpers/groupMinorActivities'\nimport { FeedFilter, useDetailsPanelContext } from '@shared/context'\nimport { getFilterActivityTypes } from '@shared/api'\n\nexport const FEED_NEW_COMMENT = '__new__' as const\n\nexport type EditingState = null | typeof FEED_NEW_COMMENT | string\n\n// Add type for the refTooltip\nexport interface RefTooltip {\n id: string | null\n type: string\n name: string\n label: string\n pos: {\n top: number\n left: number\n }\n}\n\nexport type FeedContextProps = {\n children: React.ReactNode\n projectName: string\n entityType: string\n activityTypes?: string[] | null\n entities: any[]\n projectInfo: any\n scope: string\n userName: string\n userFullName: string\n\n // annotations\n annotations?: Record<string, any>\n removeAnnotation?: (id: string) => void\n exportAnnotationComposite?: (id: string) => Promise<Blob | null>\n // feedFilter - the current filter within the feed tab\n feedFilter?: FeedFilter\n setFeedFilter?: (filter: FeedFilter) => void\n}\n\ninterface FeedContextType extends Omit<FeedContextProps, 'children'> {\n // local UI state\n editingId: EditingState\n setEditingId: (id: EditingState) => void\n // activities data props\n activitiesData: any[]\n isLoadingActivities: boolean\n isLoadingNew: boolean\n isLoadingNextPage: boolean\n hasNextPage: boolean\n loadNextPage?: () => Promise<any>\n // refTooltip state and functions\n refTooltip: RefTooltip | null\n setRefTooltip: (tooltip: RefTooltip | null) => void\n // tooltip data\n entityTooltipData: any\n isFetchingTooltip: boolean\n // query functions\n createEntityActivity: (args: any) => Promise<any>\n updateActivity: (args: any) => Promise<any>\n deleteActivity: (args: any) => Promise<any>\n createReaction: (args: any) => Promise<any>\n deleteReaction: (args: any) => Promise<any>\n isUpdatingActivity: boolean\n // users data\n users: ActivityUser[]\n isGuest: boolean\n // team membership for current user\n userTeamNames: string[]\n // mentions data\n mentionSuggestionsData: SuggestResponse\n // categories data\n categories: ActivityCategory[]\n // checklists count\n checklistCount: ChecklistCount | undefined\n feedFilter: FeedFilter\n setFeedFilter: (filter: FeedFilter) => void\n backendFilter: string | undefined\n searchText: string\n setSearchText: (text: string) => void\n}\n\nconst FeedContext = createContext<FeedContextType | undefined>(undefined)\n\nexport const FeedProvider = ({ children, ...props }: FeedContextProps) => {\n const { isGuest } = useDetailsPanelContext()\n const { data: users = [] } = useGetActivityUsersQuery({ projects: [props.projectName] })\n\n // Fetch teams with members to derive which teams the current user belongs to\n const { data: teams = [] } = teamsApi.useGetTeamsQuery(\n { projectName: props.projectName, showMembers: true },\n { skip: !props.projectName },\n )\n const userTeamNames = useMemo(\n () => teams.filter((t) => t.members?.some((m) => m.name === props.userName)).map((t) => t.name),\n [teams, props.userName],\n )\n\n const [feedFilterInternal, setFeedFilterInternal] = useState<FeedFilter>({\n operator: 'and',\n conditions: [],\n })\n\n const [searchText, setSearchText] = useState<string>('')\n\n // use props if provided, otherwise use local state\n const feedFilter = props.feedFilter ?? feedFilterInternal\n const setFeedFilter = props.setFeedFilter ?? setFeedFilterInternal\n\n const [editingId, setEditingId] = useState<EditingState>(null)\n const [refTooltip, setRefTooltip] = useState<RefTooltip | null>(null)\n\n // queries\n const [createEntityActivityMutation, { isLoading: isLoadingCreate }] =\n useCreateEntityActivityMutation()\n const [updateActivityMutation, { isLoading: isLoadingUpdate }] = useUpdateActivityMutation()\n const [deleteActivityMutation, { isLoading: isLoadingDelete }] = useDeleteActivityMutation()\n const isUpdatingActivity = isLoadingCreate || isLoadingUpdate || isLoadingDelete\n\n const createEntityActivity: FeedContextType['createEntityActivity'] = async (args) =>\n await createEntityActivityMutation(args).unwrap()\n const updateActivity: FeedContextType['updateActivity'] = async (args) =>\n await updateActivityMutation(args).unwrap()\n const deleteActivity: FeedContextType['deleteActivity'] = async (args) =>\n await deleteActivityMutation(args).unwrap()\n\n const [createReactionToActivity] = useCreateReactionToActivityMutation()\n const [deleteReactionToActivity] = useDeleteReactionToActivityMutation()\n\n const createReaction: FeedContextType['createReaction'] = async (args) =>\n await createReactionToActivity(args).unwrap()\n const deleteReaction: FeedContextType['deleteReaction'] = async (args) =>\n await deleteReactionToActivity(args).unwrap()\n\n const activityTypes = getFilterActivityTypes(feedFilter)\n const backendFilter = useMemo(() => buildBackendFilter(feedFilter), [feedFilter])\n\n const activitiesDataProps = useGetFeedActivitiesData({\n entities: props.entities,\n filter: feedFilter,\n backendFilter,\n activityTypes: activityTypes,\n projectName: props.projectName,\n entityType: props.entityType,\n })\n const skip =\n !props.projectName ||\n !refTooltip?.id ||\n refTooltip.type === 'user' ||\n refTooltip.type === 'team'\n const { data: entityTooltipData, isFetching: isFetchingTooltip } = useGetEntityTooltipQuery(\n { entityType: refTooltip?.type, entityId: refTooltip?.id, projectName: props.projectName },\n { skip: skip },\n )\n\n // get all versions that can be mentioned\n const { data: mentionSuggestionsData = {} } = useGetEntityMentionsQuery(\n {\n suggestRequest: {\n entityType: props.entityType as SuggestRequest['entityType'],\n entityId: props.entities[0]?.id,\n },\n projectName: props.projectName,\n },\n { skip: !editingId },\n )\n\n // get comment categories for this project and user\n const { data: categories = [] } = useGetActivityCategoriesQuery({\n projectName: props.projectName,\n })\n\n // get checklists count\n const { data: checklistCount } = useGetEntitiesChecklistsQuery(\n {\n projectName: props.projectName,\n entityIds: props.entities.map((e) => e.id),\n },\n { skip: !props.projectName || !props.entities.length },\n )\n\n return (\n <FeedContext.Provider\n value={{\n ...props,\n ...activitiesDataProps,\n mentionSuggestionsData,\n categories,\n checklistCount,\n users,\n isUpdatingActivity,\n userTeamNames,\n entityTooltipData,\n isFetchingTooltip,\n refTooltip,\n activityTypes,\n feedFilter,\n setFeedFilter,\n backendFilter,\n searchText,\n setSearchText,\n isGuest,\n editingId,\n setEditingId,\n setRefTooltip,\n // Query functions\n createEntityActivity,\n updateActivity,\n deleteActivity,\n createReaction,\n deleteReaction,\n }}\n >\n {children}\n </FeedContext.Provider>\n )\n}\n\nexport const useFeedContext = () => {\n const context = useContext(FeedContext)\n if (!context) {\n throw new Error('useFeedContext must be used within a FeedProvider')\n }\n return context\n}\n"],"names":["FEED_NEW_COMMENT","FeedContext","createContext","FeedProvider","children","props","isGuest","useDetailsPanelContext","users","useGetActivityUsersQuery","teams","teamsApi","userTeamNames","useMemo","t","m","feedFilterInternal","setFeedFilterInternal","useState","searchText","setSearchText","feedFilter","setFeedFilter","editingId","setEditingId","refTooltip","setRefTooltip","createEntityActivityMutation","isLoadingCreate","useCreateEntityActivityMutation","updateActivityMutation","isLoadingUpdate","useUpdateActivityMutation","deleteActivityMutation","isLoadingDelete","useDeleteActivityMutation","isUpdatingActivity","createEntityActivity","args","updateActivity","deleteActivity","createReactionToActivity","useCreateReactionToActivityMutation","deleteReactionToActivity","useDeleteReactionToActivityMutation","createReaction","deleteReaction","activityTypes","getFilterActivityTypes","backendFilter","buildBackendFilter","activitiesDataProps","useGetFeedActivitiesData","skip","entityTooltipData","isFetchingTooltip","useGetEntityTooltipQuery","mentionSuggestionsData","useGetEntityMentionsQuery","categories","useGetActivityCategoriesQuery","checklistCount","useGetEntitiesChecklistsQuery","e","jsx","useFeedContext","context","useContext"],"mappings":"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"}