@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 +1 @@
1
- {"version":3,"file":"DetailsPanel.es.js","sources":["../../../../../src/containers/DetailsPanel/DetailsPanel.tsx"],"sourcesContent":["import { Button } from '@ynput/ayon-react-components'\nimport React, { useEffect, useMemo, useRef, useState } from 'react'\nimport useDetailsPanelURLSync from './hooks/useDetailsPanelURLSync'\nimport * as Styled from './DetailsPanel.styled'\n\n// shared\nimport { useGetEntitiesDetailsPanelQuery, detailsPanelEntityTypes } from '@shared/api'\nimport type { Tag, DetailsPanelEntityType, DetailsPanelEntityData } from '@shared/api'\nimport { DetailsPanelDetails, EntityPath, Watchers } from '@shared/components'\nimport { usePiPWindow } from '@shared/context/pip/PiPProvider'\nimport { extractEntityHierarchyFromParents } from '@shared/util'\nimport {\n ProjectContextProvider,\n ProjectModelWithProducts,\n ThumbnailUploadProvider,\n useDetailsPanelContext,\n useScopedDetailsPanel,\n useURIContext,\n FeedFilter,\n} from '@shared/context'\n\nimport DetailsPanelHeader from './components/DetailsPanelHeader/DetailsPanelHeader'\nimport DetailsPanelFiles from './components/DetailsPanelFiles'\nimport {\n DetailsPanelMoreMenu,\n type DetailsPanelEntityListsContext,\n} from './components/DetailsPanelMoreMenu'\nimport useGetEntityPath from './hooks/useGetEntityPath'\nimport getAllProjectStatuses from './helpers/getAllProjectsStatuses'\nimport FeedWrapper from './containers/FeedWrapper'\nimport FeedContextWrapper from './containers/FeedContextWrapper'\nimport mergeProjectInfo from './helpers/mergeProjectInfo'\nimport buildEntityTypeIcons from './helpers/buildEntityTypeIcons'\nimport DetailsPanelSubtasks from './containers/DetailsPanelSubtasks'\n\nexport const entitiesWithoutFeed = ['product', 'representation']\n\ntype User = { avatarUrl: string; name: string; fullName?: string }\n\nexport type DetailsPanelProps = {\n entityType: DetailsPanelEntityType\n entitySubTypes?: string[] // used to get actions before the entity has loaded\n entitiesData?: { id: string; label: string; type: DetailsPanelEntityType }[]\n entities?: { id: string; projectName: string }[]\n tagsOptions?: Tag[]\n disabledStatuses?: string[]\n projectUsers?: User[]\n disabledProjectUsers?: string[]\n activeProjectUsers?: string[]\n projectsInfo?: Record<string, ProjectModelWithProducts>\n projectNames?: string[]\n isSlideOut?: boolean\n style?: React.CSSProperties\n scope: string\n isCompact?: boolean\n onClose?: () => void\n onWatchersUpdate?: (added: any[], removed: any[]) => void\n onOpenViewer?: (entity: any) => void\n onEntityFocus?: (id: string, entityType: DetailsPanelEntityType) => void\n onOpen?: () => void\n onUriOpen?: (entity: DetailsPanelEntityData, source: 'uri' | 'url') => void\n // annotations\n annotations?: any\n removeAnnotation?: (id: string) => void\n exportAnnotationComposite?: (id: string) => Promise<Blob | null>\n entityListId?: string\n guestCategories?: Record<string, string> // only used for guests to find if they have access to any categories\n /** Optional EntityListsContext for the \"Add to list\" sub-menu in the more-menu.\n * Hosts that already mount EntityListsProvider can pass the resolved context here;\n * otherwise wrap the panel with EntityListsContextBoundary. The shape mirrors\n * `EntityListsContextType` from `src/pages/ProjectListsPage/context` — it lives as a\n * structural type in shared/ so the layering rule (shared cannot import src/pages)\n * is preserved. */\n entityListsContext?: DetailsPanelEntityListsContext\n // optional tab state for independent tab management\n}\n\nconst DetailsPanelInner = ({\n entityType,\n entitySubTypes = [],\n // entities is data we already have from kanban\n entitiesData = [],\n // entityIds are used to get the full details data for the entities\n entities = [],\n tagsOptions = [],\n disabledStatuses,\n projectUsers,\n disabledProjectUsers,\n activeProjectUsers,\n projectsInfo = {},\n projectNames = [],\n isSlideOut = false,\n style = {},\n scope,\n isCompact = false,\n onClose,\n onWatchersUpdate,\n onOpenViewer,\n onEntityFocus,\n onOpen,\n onUriOpen, // when the details panel is opened from uri\n // annotations\n annotations,\n removeAnnotation,\n exportAnnotationComposite,\n entityListId,\n guestCategories = {},\n entityListsContext,\n}: // optional tab state for independent tab management\nDetailsPanelProps) => {\n const {\n closeSlideOut,\n openPip,\n user,\n isGuest,\n entities: contextEntities,\n setEntities,\n slideOut,\n useSearchParams,\n SubtasksManager,\n useNavigate,\n } = useDetailsPanelContext()\n const { currentTab, setTab, isFeed } = useScopedDetailsPanel(scope)\n const [_searchParams, setSearchParams] = useSearchParams()\n const hasCalledOnOpen = useRef(false)\n\n // Use context entities if available, otherwise use props\n const activeEntityType = contextEntities?.entityType ?? entityType\n const activeEntities = contextEntities?.entities ?? entities\n const activeEntitySubTypes = contextEntities?.entitySubTypes ?? entitySubTypes\n const activeEntitiesData = contextEntities?.entities ? [] : entitiesData\n const activeProjectNames = contextEntities?.entities\n ? contextEntities.entities.map((e) => e.projectName)\n : projectNames\n\n // Fire onOpen callback once when component mounts and renders\n useEffect(() => {\n if (onOpen && !hasCalledOnOpen.current) {\n hasCalledOnOpen.current = true\n onOpen()\n }\n }, [])\n\n // Force details tab for specific entity types\n useEffect(() => {\n if (entitiesWithoutFeed.includes(activeEntityType) && currentTab !== 'details') {\n setTab('details')\n }\n }, [activeEntityType, currentTab, setTab])\n\n // once component is provided with specific entities, remove context entities to avoid conflicts\n useEffect(() => {\n if (entities.length && contextEntities) {\n setEntities(null)\n }\n }, [entities, contextEntities, setEntities])\n\n // reduce projectsInfo to selected projects and into one\n const projectInfo = useMemo(\n () => mergeProjectInfo(projectsInfo, activeProjectNames),\n [projectsInfo, activeProjectNames],\n )\n\n // build icons for entity types (used by the entity path breadcrumb)\n const entityTypeIcons = useMemo(() => buildEntityTypeIcons(projectInfo), [projectInfo])\n\n // for example when switching from version to task, task doesn't have reps tab\n // if reps tab was selected, set default to feed\n useEffect(() => {\n if (currentTab === 'files') {\n // check entity type is still version\n if (activeEntityType !== 'version') {\n setTab('feed')\n }\n }\n // Reset to feed if subtasks tab is selected but entity is not a task\n if (currentTab === 'subtasks' && activeEntityType !== 'task') {\n setTab('feed')\n }\n }, [activeEntityType, currentTab, scope])\n\n // now we get the full details data for selected entities\n let entitiesToQuery = activeEntities.length\n ? activeEntities.map((entity) => ({ id: entity.id, projectName: entity.projectName }))\n : // @ts-expect-error = not sure what's going on with activeEntitiesData, we should try and remove it\n activeEntitiesData.map((entity) => ({ id: entity.id, projectName: entity.projectName }))\n\n entitiesToQuery = entitiesToQuery.filter((entity) => entity.id)\n\n const {\n data: entityDetailsData = [],\n isFetching: isFetchingEntitiesDetails,\n isError,\n originalArgs,\n } = useGetEntitiesDetailsPanelQuery(\n { entityType: activeEntityType, entities: entitiesToQuery },\n {\n skip: !entitiesToQuery.length || !detailsPanelEntityTypes.includes(activeEntityType),\n },\n )\n\n // the entity changes then we close the slide out\n useEffect(() => {\n if (!isSlideOut) {\n closeSlideOut()\n }\n }, [originalArgs, isSlideOut])\n\n // if the details panel is opened vair the uri, run callback\n useEffect(() => {\n if (isFetchingEntitiesDetails) return\n\n if (\n (contextEntities?.source === 'uri' || contextEntities?.source === 'url') &&\n contextEntities?.entities?.length &&\n !!onUriOpen\n ) {\n const uriEntity = entityDetailsData.find(\n (entity) => entity.id === contextEntities.entities[0].id,\n )\n if (!uriEntity) return\n\n onUriOpen(uriEntity, contextEntities.source)\n }\n }, [entityDetailsData, isFetchingEntitiesDetails])\n\n // TODO: merge current entities data with fresh details data\n\n const allStatuses = getAllProjectStatuses(projectsInfo)\n\n // get the first project name and info to be used in the feed.\n const firstProject = activeProjectNames[0]\n const firstProjectInfo = projectsInfo[firstProject] || {}\n const firstEntityData = entityDetailsData[0] || {}\n // Use the last entity for URI sync\n const lastEntityData = entityDetailsData[entityDetailsData.length - 1]\n const lastProject = activeProjectNames[activeProjectNames.length - 1]\n\n // build the full entity path for the first entity\n const [entityPathSegments, entityPathVersions] = useGetEntityPath({\n entity: firstEntityData,\n entityType: activeEntityType,\n projectName: firstProject,\n isLoading: isFetchingEntitiesDetails,\n })\n\n const { setEntityUri, setUri } = useURIContext()\n // sync the uri when entity changes\n useEffect(() => {\n if (!lastEntityData?.parents) return\n if (!lastProject) return\n const { folderPath, taskName, versionName, productName } = extractEntityHierarchyFromParents(\n lastEntityData.parents,\n activeEntityType,\n lastEntityData.name,\n )\n\n setEntityUri({\n projectName: lastProject,\n folderPath: folderPath,\n taskName: taskName,\n productName: productName,\n versionName: versionName,\n })\n\n // unmount cleanup: clear uri\n return () => {\n setUri('')\n }\n }, [entityDetailsData, activeProjectNames, activeEntityType])\n\n // sync the details panel url (panel) with entity\n useDetailsPanelURLSync({\n entityData: lastEntityData,\n project: lastProject,\n activeEntityType,\n entitiesToQuery,\n })\n\n const clearSearchUrl = () => {\n // remove URL params when closing\n setSearchParams(\n (prev) => {\n const newParams = new URLSearchParams(prev)\n newParams.delete('project')\n newParams.delete('type')\n newParams.delete('id')\n return newParams\n },\n { replace: true },\n )\n }\n\n const handleClose = () => {\n onClose?.()\n // also remove any entities in context\n setEntities(null)\n clearSearchUrl()\n closeSlideOut()\n }\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && onClose) {\n // Don't trigger if we're in an input element\n const target = e.target as HTMLElement\n const isInputElement =\n ['INPUT', 'TEXTAREA', 'SELECT'].includes(target.tagName) || target.isContentEditable\n\n if (isInputElement) return\n\n // don't trigger if the viewer is open and panel not in slideout mode\n if (isSlideOut === false && (target.closest('#viewer-dialog') || !!slideOut)) return\n\n handleClose()\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [handleClose, isSlideOut, slideOut])\n\n const { requestPipWindow } = usePiPWindow()\n\n // Hoisted so ThumbnailUploadProvider (wrapping the toolbar) and EntityPanelUploader\n // (inside DetailsPanelHeader) share the same ref identity — otherwise the toolbar's\n // more-menu, which sits as a sibling above the header, can't reach the inputs.\n const thumbnailInputRef = useRef<HTMLInputElement>(null)\n const versionsInputRef = useRef<HTMLInputElement>(null)\n const canUploadVersion = entityDetailsData.length === 1 && activeEntityType !== 'representation'\n\n const shareEntityLabel = useMemo(() => {\n const name = firstEntityData?.label || firstEntityData?.name || ''\n const parents: string[] = firstEntityData?.parents || []\n const parts: (string | undefined)[] = [firstProject]\n switch (activeEntityType) {\n case 'folder':\n case 'task':\n case 'product':\n parts.push(parents.at(-1), name)\n break\n case 'version':\n parts.push(parents.at(-2), parents.at(-1), name)\n break\n case 'representation':\n parts.push(parents.at(-3), parents.at(-2), parents.at(-1), name)\n break\n default:\n parts.push(name)\n }\n return parts.filter(Boolean).join(' - ')\n }, [firstEntityData, activeEntityType, firstProject])\n\n const handleOpenPip = () => {\n openPip({\n entityType: activeEntityType,\n entities: entitiesToQuery,\n scope: scope,\n })\n requestPipWindow(500, 500)\n }\n\n const isCommentingEnabled = () => {\n // cannot comment on multiple projects\n if (activeProjectNames.length > 1) return false\n if (isGuest) {\n // Guest can only comment in review sessions (for now)\n if (!entityListId) return false\n // Guest must have at least one category set for list\n const guestHasCategory = Object.prototype.hasOwnProperty.call(\n guestCategories,\n user.attrib?.email || '',\n )\n if (!guestHasCategory) return false\n }\n return true\n }\n\n return (\n <ThumbnailUploadProvider\n thumbnailInputRef={thumbnailInputRef}\n versionsInputRef={versionsInputRef}\n canUploadVersion={canUploadVersion}\n >\n <Styled.Panel className=\"details-panel\">\n <Styled.Toolbar>\n {/* TODO FIX PATH */}\n <EntityPath\n segments={entityPathSegments}\n versions={entityPathVersions}\n projectName={firstProject}\n hideProjectName={isSlideOut}\n isLoading={isFetchingEntitiesDetails || !entityPathSegments.length}\n entityType={activeEntityType}\n scope={scope}\n // @ts-ignore\n entityTypeIcons={entityTypeIcons}\n />\n <Styled.RightTools className=\"right-tools\">\n <DetailsPanelMoreMenu\n entityType={activeEntityType}\n entityId={firstEntityData?.id}\n entityIds={entitiesToQuery.map((e) => e.id).filter(Boolean)}\n entityLabel={shareEntityLabel}\n projectName={firstProject}\n selectedEntities={entityDetailsData\n .filter((e) => !!e?.id)\n .map((e) => {\n const type = e.entityType || activeEntityType\n return {\n entityId: e.id,\n entityType: type,\n hasReviewables: !!e.hasReviewables,\n name: e.name,\n label: e.label,\n projectName: e.projectName || firstProject,\n folderId: type === 'task' ? e.folder?.id : undefined,\n }\n })}\n entityListsContext={entityListsContext}\n onOpenPip={handleOpenPip}\n onOpenViewer={onOpenViewer}\n productId={firstEntityData?.product?.id}\n taskId={firstEntityData?.task?.id}\n folderId={firstEntityData?.folder?.id}\n />\n <Watchers\n entities={entitiesToQuery}\n entityType={activeEntityType}\n options={projectUsers || []}\n onWatchersUpdate={onWatchersUpdate && onWatchersUpdate}\n userName={user.name}\n />\n\n {onClose && (\n <Button\n icon=\"close\"\n variant={'text'}\n onClick={handleClose}\n data-shortcut={'Escape'}\n />\n )}\n </Styled.RightTools>\n </Styled.Toolbar>\n\n <DetailsPanelHeader\n entityType={activeEntityType}\n entitySubTypes={activeEntitySubTypes}\n entities={entityDetailsData}\n users={projectUsers}\n disabledAssignees={disabledProjectUsers}\n disabledStatuses={disabledStatuses}\n tagsOptions={tagsOptions}\n isFetching={isFetchingEntitiesDetails}\n isCompact={isCompact}\n currentTab={currentTab}\n onTabChange={setTab}\n projectInfo={projectInfo}\n onOpenViewer={(args) => onOpenViewer?.(args)}\n onEntityFocus={onEntityFocus}\n thumbnailInputRef={thumbnailInputRef}\n versionsInputRef={versionsInputRef}\n />\n\n <ProjectContextProvider projectName={firstProject}>\n {isFeed && !isError && (\n <FeedWrapper\n entityType={activeEntityType}\n entities={entityDetailsData}\n activeUsers={activeProjectUsers || []}\n projectInfo={firstProjectInfo}\n projectName={firstProject}\n disabled={!isCommentingEnabled()}\n scope={scope}\n statuses={allStatuses}\n readOnly={false}\n entityListId={entityListId}\n annotations={annotations}\n removeAnnotation={removeAnnotation}\n exportAnnotationComposite={exportAnnotationComposite}\n isSlideOut={isSlideOut}\n />\n )}\n {currentTab === 'subtasks' &&\n activeEntityType === 'task' &&\n firstEntityData?.id &&\n SubtasksManager && (\n <DetailsPanelSubtasks\n projectName={firstProject}\n taskId={firstEntityData.id}\n subtasks={firstEntityData.task?.subtasks || []}\n SubtasksManager={SubtasksManager}\n useNavigate={useNavigate!}\n onNotFound={() => setTab('feed')} // if subtasks module is not found, switch to feed tab\n />\n )}\n {currentTab === 'files' && (\n <DetailsPanelFiles\n entities={entityDetailsData}\n scope={scope}\n isLoadingVersion={isFetchingEntitiesDetails}\n />\n )}\n {currentTab === 'details' && (\n <FeedContextWrapper\n entityType={activeEntityType}\n entities={entityDetailsData}\n activeUsers={activeProjectUsers || []}\n projectInfo={firstProjectInfo}\n projectName={firstProject}\n disabled={!isCommentingEnabled()}\n scope={scope}\n statuses={allStatuses}\n readOnly={false}\n annotations={annotations}\n removeAnnotation={removeAnnotation}\n exportAnnotationComposite={exportAnnotationComposite}\n >\n <DetailsPanelDetails\n entities={entityDetailsData}\n isLoading={isFetchingEntitiesDetails}\n />\n </FeedContextWrapper>\n )}\n </ProjectContextProvider>\n </Styled.Panel>\n </ThumbnailUploadProvider>\n )\n}\n\n// create a wrapper that checks if the details panel should be open or not based on isOpen prop and entities state\nexport const DetailsPanel = ({\n isOpen,\n entityType,\n ...props\n}: Omit<DetailsPanelProps, 'entityType'> & {\n entityType?: DetailsPanelEntityType\n isOpen: boolean\n}) => {\n const { entities } = useDetailsPanelContext()\n\n if (!isOpen && !entities) return null\n if (!entityType && !entities) return null\n\n // @ts-expect-error - entityType could be undefined but we check for entities above\n return <DetailsPanelInner {...props} entityType={entityType || entities?.entityType} />\n}\n"],"names":["entitiesWithoutFeed","DetailsPanelInner","entityType","entitySubTypes","entitiesData","entities","tagsOptions","disabledStatuses","projectUsers","disabledProjectUsers","activeProjectUsers","projectsInfo","projectNames","isSlideOut","style","scope","isCompact","onClose","onWatchersUpdate","onOpenViewer","onEntityFocus","onOpen","onUriOpen","annotations","removeAnnotation","exportAnnotationComposite","entityListId","guestCategories","entityListsContext","closeSlideOut","openPip","user","isGuest","contextEntities","setEntities","slideOut","useSearchParams","SubtasksManager","useNavigate","useDetailsPanelContext","currentTab","setTab","isFeed","useScopedDetailsPanel","_searchParams","setSearchParams","hasCalledOnOpen","useRef","activeEntityType","activeEntities","activeEntitySubTypes","activeEntitiesData","activeProjectNames","e","useEffect","projectInfo","useMemo","mergeProjectInfo","entityTypeIcons","buildEntityTypeIcons","entitiesToQuery","entity","entityDetailsData","isFetchingEntitiesDetails","isError","originalArgs","useGetEntitiesDetailsPanelQuery","detailsPanelEntityTypes","uriEntity","allStatuses","getAllProjectStatuses","firstProject","firstProjectInfo","firstEntityData","lastEntityData","lastProject","entityPathSegments","entityPathVersions","useGetEntityPath","setEntityUri","setUri","useURIContext","folderPath","taskName","versionName","productName","extractEntityHierarchyFromParents","useDetailsPanelURLSync","clearSearchUrl","prev","newParams","handleClose","handleKeyDown","target","requestPipWindow","usePiPWindow","thumbnailInputRef","versionsInputRef","canUploadVersion","shareEntityLabel","name","parents","parts","handleOpenPip","isCommentingEnabled","jsx","ThumbnailUploadProvider","jsxs","Styled.Panel","Styled.Toolbar","EntityPath","Styled.RightTools","DetailsPanelMoreMenu","type","Watchers","Button","DetailsPanelHeader","args","ProjectContextProvider","FeedWrapper","DetailsPanelSubtasks","DetailsPanelFiles","FeedContextWrapper","DetailsPanelDetails","DetailsPanel","isOpen","props"],"mappings":"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"}
1
+ {"version":3,"file":"DetailsPanel.es.js","sources":["../../../../../src/containers/DetailsPanel/DetailsPanel.tsx"],"sourcesContent":["import { Button } from '@ynput/ayon-react-components'\nimport React, { useEffect, useMemo, useRef, useState } from 'react'\nimport useDetailsPanelURLSync from './hooks/useDetailsPanelURLSync'\nimport * as Styled from './DetailsPanel.styled'\n\n// shared\nimport { useGetEntitiesDetailsPanelQuery, detailsPanelEntityTypes } from '@shared/api'\nimport type { Tag, DetailsPanelEntityType, DetailsPanelEntityData } from '@shared/api'\nimport { DetailsPanelDetails, EntityPath, Watchers } from '@shared/components'\nimport { usePiPWindow } from '@shared/context/pip/PiPProvider'\nimport { extractEntityHierarchyFromParents } from '@shared/util'\nimport {\n ProjectContextProvider,\n ProjectModelWithProducts,\n ThumbnailUploadProvider,\n useDetailsPanelContext,\n useScopedDetailsPanel,\n useURIContext,\n FeedFilter,\n} from '@shared/context'\n\nimport DetailsPanelHeader from './components/DetailsPanelHeader/DetailsPanelHeader'\nimport DetailsPanelFiles from './components/DetailsPanelFiles'\nimport {\n DetailsPanelMoreMenu,\n type DetailsPanelEntityListsContext,\n} from './components/DetailsPanelMoreMenu'\nimport useGetEntityPath from './hooks/useGetEntityPath'\nimport getAllProjectStatuses from './helpers/getAllProjectsStatuses'\nimport FeedWrapper from './containers/FeedWrapper'\nimport FeedContextWrapper from './containers/FeedContextWrapper'\nimport mergeProjectInfo from './helpers/mergeProjectInfo'\nimport buildEntityTypeIcons from './helpers/buildEntityTypeIcons'\nimport DetailsPanelSubtasks from './containers/DetailsPanelSubtasks'\n\nexport const entitiesWithoutFeed = ['product', 'representation']\n\ntype User = { avatarUrl: string; name: string; fullName?: string }\n\nexport type DetailsPanelProps = {\n entityType: DetailsPanelEntityType\n entitySubTypes?: string[] // used to get actions before the entity has loaded\n entitiesData?: { id: string; label: string; type: DetailsPanelEntityType }[]\n entities?: { id: string; projectName: string }[]\n tagsOptions?: Tag[]\n disabledStatuses?: string[]\n projectUsers?: User[]\n disabledProjectUsers?: string[]\n activeProjectUsers?: string[]\n projectsInfo?: Record<string, ProjectModelWithProducts>\n projectNames?: string[]\n isSlideOut?: boolean\n style?: React.CSSProperties\n scope: string\n isCompact?: boolean\n onClose?: () => void\n onWatchersUpdate?: (added: any[], removed: any[]) => void\n onOpenViewer?: (entity: any) => void\n onEntityFocus?: (id: string, entityType: DetailsPanelEntityType) => void\n onOpen?: () => void\n onUriOpen?: (entity: DetailsPanelEntityData, source: 'uri' | 'url') => void\n // annotations\n annotations?: any\n removeAnnotation?: (id: string) => void\n exportAnnotationComposite?: (id: string) => Promise<Blob | null>\n entityListId?: string\n guestCategories?: Record<string, string> // only used for guests to find if they have access to any categories\n /** Optional EntityListsContext for the \"Add to list\" sub-menu in the more-menu.\n * Hosts that already mount EntityListsProvider can pass the resolved context here;\n * otherwise wrap the panel with EntityListsContextBoundary. The shape mirrors\n * `EntityListsContextType` from `src/pages/ProjectListsPage/context` — it lives as a\n * structural type in shared/ so the layering rule (shared cannot import src/pages)\n * is preserved. */\n entityListsContext?: DetailsPanelEntityListsContext\n // optional tab state for independent tab management\n}\n\nconst DetailsPanelInner = ({\n entityType,\n entitySubTypes = [],\n // entities is data we already have from kanban\n entitiesData = [],\n // entityIds are used to get the full details data for the entities\n entities = [],\n tagsOptions = [],\n disabledStatuses,\n projectUsers,\n disabledProjectUsers,\n activeProjectUsers,\n projectsInfo = {},\n projectNames = [],\n isSlideOut = false,\n style = {},\n scope,\n isCompact = false,\n onClose,\n onWatchersUpdate,\n onOpenViewer,\n onEntityFocus,\n onOpen,\n onUriOpen, // when the details panel is opened from uri\n // annotations\n annotations,\n removeAnnotation,\n exportAnnotationComposite,\n entityListId,\n guestCategories = {},\n entityListsContext,\n}: // optional tab state for independent tab management\nDetailsPanelProps) => {\n const {\n closeSlideOut,\n openPip,\n user,\n isGuest,\n entities: contextEntities,\n setEntities,\n slideOut,\n useSearchParams,\n SubtasksManager,\n useNavigate,\n } = useDetailsPanelContext()\n const { currentTab, setTab, isFeed } = useScopedDetailsPanel(scope)\n const [_searchParams, setSearchParams] = useSearchParams()\n const hasCalledOnOpen = useRef(false)\n\n // Use context entities if available, otherwise use props\n const activeEntityType = contextEntities?.entityType ?? entityType\n const activeEntities = contextEntities?.entities ?? entities\n const activeEntitySubTypes = contextEntities?.entitySubTypes ?? entitySubTypes\n const activeEntitiesData = contextEntities?.entities ? [] : entitiesData\n const activeProjectNames = contextEntities?.entities\n ? contextEntities.entities.map((e) => e.projectName)\n : projectNames\n\n // Fire onOpen callback once when component mounts and renders\n useEffect(() => {\n if (onOpen && !hasCalledOnOpen.current) {\n hasCalledOnOpen.current = true\n onOpen()\n }\n }, [])\n\n // Force details tab for specific entity types\n useEffect(() => {\n if (entitiesWithoutFeed.includes(activeEntityType) && currentTab !== 'details') {\n setTab('details')\n }\n }, [activeEntityType, currentTab, setTab])\n\n // once component is provided with specific entities, remove context entities to avoid conflicts\n useEffect(() => {\n if (entities.length && contextEntities) {\n setEntities(null)\n }\n }, [entities, contextEntities, setEntities])\n\n // reduce projectsInfo to selected projects and into one\n const projectInfo = useMemo(\n () => mergeProjectInfo(projectsInfo, activeProjectNames),\n [projectsInfo, activeProjectNames],\n )\n\n // build icons for entity types (used by the entity path breadcrumb)\n const entityTypeIcons = useMemo(() => buildEntityTypeIcons(projectInfo), [projectInfo])\n\n // for example when switching from version to task, task doesn't have reps tab\n // if reps tab was selected, set default to feed\n useEffect(() => {\n if (currentTab === 'files') {\n // check entity type is still version\n if (activeEntityType !== 'version') {\n setTab('feed')\n }\n }\n // Reset to feed if subtasks tab is selected but entity is not a task\n if (currentTab === 'subtasks' && activeEntityType !== 'task') {\n setTab('feed')\n }\n }, [activeEntityType, currentTab, scope])\n\n // now we get the full details data for selected entities\n let entitiesToQuery = activeEntities.length\n ? activeEntities.map((entity) => ({ id: entity.id, projectName: entity.projectName }))\n : // @ts-expect-error = not sure what's going on with activeEntitiesData, we should try and remove it\n activeEntitiesData.map((entity) => ({ id: entity.id, projectName: entity.projectName }))\n\n entitiesToQuery = entitiesToQuery.filter((entity) => entity.id)\n\n const {\n data: entityDetailsData = [],\n isFetching: isFetchingEntitiesDetails,\n isError,\n originalArgs,\n } = useGetEntitiesDetailsPanelQuery(\n { entityType: activeEntityType, entities: entitiesToQuery },\n {\n skip: !entitiesToQuery.length || !detailsPanelEntityTypes.includes(activeEntityType),\n },\n )\n\n // the entity changes then we close the slide out\n useEffect(() => {\n if (!isSlideOut) {\n closeSlideOut()\n }\n }, [originalArgs, isSlideOut])\n\n // fire onUriOpen once per context entity — a details refetch must not re-run the jump/filter reset\n const uriOpenFiredForId = useRef<string | null>(null)\n useEffect(() => {\n if (!contextEntities) uriOpenFiredForId.current = null\n }, [contextEntities])\n\n // if the details panel is opened via the uri, run callback\n useEffect(() => {\n if (isFetchingEntitiesDetails) return\n\n if (\n (contextEntities?.source === 'uri' || contextEntities?.source === 'url') &&\n contextEntities?.entities?.length &&\n !!onUriOpen\n ) {\n const targetId = contextEntities.entities[0].id\n if (uriOpenFiredForId.current === targetId) return\n\n const uriEntity = entityDetailsData.find((entity) => entity.id === targetId)\n if (!uriEntity) return\n\n uriOpenFiredForId.current = targetId\n onUriOpen(uriEntity, contextEntities.source)\n }\n }, [entityDetailsData, isFetchingEntitiesDetails, contextEntities, onUriOpen])\n\n // TODO: merge current entities data with fresh details data\n\n const allStatuses = getAllProjectStatuses(projectsInfo)\n\n // get the first project name and info to be used in the feed.\n const firstProject = activeProjectNames[0]\n const firstProjectInfo = projectsInfo[firstProject] || {}\n const firstEntityData = entityDetailsData[0] || {}\n // Use the last entity for URI sync\n const lastEntityData = entityDetailsData[entityDetailsData.length - 1]\n const lastProject = activeProjectNames[activeProjectNames.length - 1]\n\n // build the full entity path for the first entity\n const [entityPathSegments, entityPathVersions] = useGetEntityPath({\n entity: firstEntityData,\n entityType: activeEntityType,\n projectName: firstProject,\n isLoading: isFetchingEntitiesDetails,\n })\n\n const { setEntityUri, setUri } = useURIContext()\n // sync the uri when entity changes\n useEffect(() => {\n if (!lastEntityData?.parents) return\n if (!lastProject) return\n const { folderPath, taskName, versionName, productName } = extractEntityHierarchyFromParents(\n lastEntityData.parents,\n activeEntityType,\n lastEntityData.name,\n )\n\n setEntityUri({\n projectName: lastProject,\n folderPath: folderPath,\n taskName: taskName,\n productName: productName,\n versionName: versionName,\n })\n\n // unmount cleanup: clear uri\n return () => {\n setUri('')\n }\n }, [entityDetailsData, activeProjectNames, activeEntityType])\n\n // sync the details panel url (panel) with entity\n useDetailsPanelURLSync({\n entityData: lastEntityData,\n project: lastProject,\n activeEntityType,\n entitiesToQuery,\n })\n\n const clearSearchUrl = () => {\n // remove URL params when closing\n setSearchParams(\n (prev) => {\n const newParams = new URLSearchParams(prev)\n newParams.delete('project')\n newParams.delete('type')\n newParams.delete('id')\n return newParams\n },\n { replace: true },\n )\n }\n\n const handleClose = () => {\n onClose?.()\n // also remove any entities in context\n setEntities(null)\n // drop the uri so an in-flight resolve can't reopen the panel after close\n setUri('')\n clearSearchUrl()\n closeSlideOut()\n }\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && onClose) {\n // Don't trigger if we're in an input element\n const target = e.target as HTMLElement\n const isInputElement =\n ['INPUT', 'TEXTAREA', 'SELECT'].includes(target.tagName) || target.isContentEditable\n\n if (isInputElement) return\n\n // don't trigger if the viewer is open and panel not in slideout mode\n if (isSlideOut === false && (target.closest('#viewer-dialog') || !!slideOut)) return\n\n handleClose()\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [handleClose, isSlideOut, slideOut])\n\n const { requestPipWindow } = usePiPWindow()\n\n // Hoisted so ThumbnailUploadProvider (wrapping the toolbar) and EntityPanelUploader\n // (inside DetailsPanelHeader) share the same ref identity — otherwise the toolbar's\n // more-menu, which sits as a sibling above the header, can't reach the inputs.\n const thumbnailInputRef = useRef<HTMLInputElement>(null)\n const versionsInputRef = useRef<HTMLInputElement>(null)\n const canUploadVersion = entityDetailsData.length === 1 && activeEntityType !== 'representation'\n\n const shareEntityLabel = useMemo(() => {\n const name = firstEntityData?.label || firstEntityData?.name || ''\n const parents: string[] = firstEntityData?.parents || []\n const parts: (string | undefined)[] = [firstProject]\n switch (activeEntityType) {\n case 'folder':\n case 'task':\n case 'product':\n parts.push(parents.at(-1), name)\n break\n case 'version':\n parts.push(parents.at(-2), parents.at(-1), name)\n break\n case 'representation':\n parts.push(parents.at(-3), parents.at(-2), parents.at(-1), name)\n break\n default:\n parts.push(name)\n }\n return parts.filter(Boolean).join(' - ')\n }, [firstEntityData, activeEntityType, firstProject])\n\n const handleOpenPip = () => {\n openPip({\n entityType: activeEntityType,\n entities: entitiesToQuery,\n scope: scope,\n })\n requestPipWindow(500, 500)\n }\n\n const isCommentingEnabled = () => {\n // cannot comment on multiple projects\n if (activeProjectNames.length > 1) return false\n if (isGuest) {\n // Guest can only comment in review sessions (for now)\n if (!entityListId) return false\n // Guest must have at least one category set for list\n const guestHasCategory = Object.prototype.hasOwnProperty.call(\n guestCategories,\n user.attrib?.email || '',\n )\n if (!guestHasCategory) return false\n }\n return true\n }\n\n return (\n <ThumbnailUploadProvider\n thumbnailInputRef={thumbnailInputRef}\n versionsInputRef={versionsInputRef}\n canUploadVersion={canUploadVersion}\n >\n <Styled.Panel className=\"details-panel\">\n <Styled.Toolbar>\n {/* TODO FIX PATH */}\n <EntityPath\n segments={entityPathSegments}\n versions={entityPathVersions}\n projectName={firstProject}\n hideProjectName={isSlideOut}\n isLoading={isFetchingEntitiesDetails || !entityPathSegments.length}\n entityType={activeEntityType}\n scope={scope}\n // @ts-ignore\n entityTypeIcons={entityTypeIcons}\n />\n <Styled.RightTools className=\"right-tools\">\n <DetailsPanelMoreMenu\n entityType={activeEntityType}\n entityId={firstEntityData?.id}\n entityIds={entitiesToQuery.map((e) => e.id).filter(Boolean)}\n entityLabel={shareEntityLabel}\n projectName={firstProject}\n selectedEntities={entityDetailsData\n .filter((e) => !!e?.id)\n .map((e) => {\n const type = e.entityType || activeEntityType\n return {\n entityId: e.id,\n entityType: type,\n hasReviewables: !!e.hasReviewables,\n name: e.name,\n label: e.label,\n projectName: e.projectName || firstProject,\n folderId: type === 'task' ? e.folder?.id : undefined,\n }\n })}\n entityListsContext={entityListsContext}\n onOpenPip={handleOpenPip}\n onOpenViewer={onOpenViewer}\n productId={firstEntityData?.product?.id}\n taskId={firstEntityData?.task?.id}\n folderId={firstEntityData?.folder?.id}\n />\n <Watchers\n entities={entitiesToQuery}\n entityType={activeEntityType}\n options={projectUsers || []}\n onWatchersUpdate={onWatchersUpdate && onWatchersUpdate}\n userName={user.name}\n />\n\n {onClose && (\n <Button\n icon=\"close\"\n variant={'text'}\n onClick={handleClose}\n data-shortcut={'Escape'}\n />\n )}\n </Styled.RightTools>\n </Styled.Toolbar>\n\n <DetailsPanelHeader\n entityType={activeEntityType}\n entitySubTypes={activeEntitySubTypes}\n entities={entityDetailsData}\n users={projectUsers}\n disabledAssignees={disabledProjectUsers}\n disabledStatuses={disabledStatuses}\n tagsOptions={tagsOptions}\n isFetching={isFetchingEntitiesDetails}\n isCompact={isCompact}\n currentTab={currentTab}\n onTabChange={setTab}\n projectInfo={projectInfo}\n onOpenViewer={(args) => onOpenViewer?.(args)}\n onEntityFocus={onEntityFocus}\n thumbnailInputRef={thumbnailInputRef}\n versionsInputRef={versionsInputRef}\n />\n\n <ProjectContextProvider projectName={firstProject}>\n {isFeed && !isError && (\n <FeedWrapper\n entityType={activeEntityType}\n entities={entityDetailsData}\n activeUsers={activeProjectUsers || []}\n projectInfo={firstProjectInfo}\n projectName={firstProject}\n disabled={!isCommentingEnabled()}\n scope={scope}\n statuses={allStatuses}\n readOnly={false}\n entityListId={entityListId}\n annotations={annotations}\n removeAnnotation={removeAnnotation}\n exportAnnotationComposite={exportAnnotationComposite}\n isSlideOut={isSlideOut}\n />\n )}\n {currentTab === 'subtasks' &&\n activeEntityType === 'task' &&\n firstEntityData?.id &&\n SubtasksManager && (\n <DetailsPanelSubtasks\n projectName={firstProject}\n taskId={firstEntityData.id}\n subtasks={firstEntityData.task?.subtasks || []}\n SubtasksManager={SubtasksManager}\n useNavigate={useNavigate!}\n onNotFound={() => setTab('feed')} // if subtasks module is not found, switch to feed tab\n />\n )}\n {currentTab === 'files' && (\n <DetailsPanelFiles\n entities={entityDetailsData}\n scope={scope}\n isLoadingVersion={isFetchingEntitiesDetails}\n />\n )}\n {currentTab === 'details' && (\n <FeedContextWrapper\n entityType={activeEntityType}\n entities={entityDetailsData}\n activeUsers={activeProjectUsers || []}\n projectInfo={firstProjectInfo}\n projectName={firstProject}\n disabled={!isCommentingEnabled()}\n scope={scope}\n statuses={allStatuses}\n readOnly={false}\n annotations={annotations}\n removeAnnotation={removeAnnotation}\n exportAnnotationComposite={exportAnnotationComposite}\n >\n <DetailsPanelDetails\n entities={entityDetailsData}\n isLoading={isFetchingEntitiesDetails}\n />\n </FeedContextWrapper>\n )}\n </ProjectContextProvider>\n </Styled.Panel>\n </ThumbnailUploadProvider>\n )\n}\n\n// create a wrapper that checks if the details panel should be open or not based on isOpen prop and entities state\nexport const DetailsPanel = ({\n isOpen,\n entityType,\n ...props\n}: Omit<DetailsPanelProps, 'entityType'> & {\n entityType?: DetailsPanelEntityType\n isOpen: boolean\n}) => {\n const { entities } = useDetailsPanelContext()\n\n if (!isOpen && !entities) return null\n if (!entityType && !entities) return null\n\n // @ts-expect-error - entityType could be undefined but we check for entities above\n return <DetailsPanelInner {...props} entityType={entityType || entities?.entityType} />\n}\n"],"names":["entitiesWithoutFeed","DetailsPanelInner","entityType","entitySubTypes","entitiesData","entities","tagsOptions","disabledStatuses","projectUsers","disabledProjectUsers","activeProjectUsers","projectsInfo","projectNames","isSlideOut","style","scope","isCompact","onClose","onWatchersUpdate","onOpenViewer","onEntityFocus","onOpen","onUriOpen","annotations","removeAnnotation","exportAnnotationComposite","entityListId","guestCategories","entityListsContext","closeSlideOut","openPip","user","isGuest","contextEntities","setEntities","slideOut","useSearchParams","SubtasksManager","useNavigate","useDetailsPanelContext","currentTab","setTab","isFeed","useScopedDetailsPanel","_searchParams","setSearchParams","hasCalledOnOpen","useRef","activeEntityType","activeEntities","activeEntitySubTypes","activeEntitiesData","activeProjectNames","e","useEffect","projectInfo","useMemo","mergeProjectInfo","entityTypeIcons","buildEntityTypeIcons","entitiesToQuery","entity","entityDetailsData","isFetchingEntitiesDetails","isError","originalArgs","useGetEntitiesDetailsPanelQuery","detailsPanelEntityTypes","uriOpenFiredForId","targetId","uriEntity","allStatuses","getAllProjectStatuses","firstProject","firstProjectInfo","firstEntityData","lastEntityData","lastProject","entityPathSegments","entityPathVersions","useGetEntityPath","setEntityUri","setUri","useURIContext","folderPath","taskName","versionName","productName","extractEntityHierarchyFromParents","useDetailsPanelURLSync","clearSearchUrl","prev","newParams","handleClose","handleKeyDown","target","requestPipWindow","usePiPWindow","thumbnailInputRef","versionsInputRef","canUploadVersion","shareEntityLabel","name","parents","parts","handleOpenPip","isCommentingEnabled","jsx","ThumbnailUploadProvider","jsxs","Styled.Panel","Styled.Toolbar","EntityPath","Styled.RightTools","DetailsPanelMoreMenu","type","Watchers","Button","DetailsPanelHeader","args","ProjectContextProvider","FeedWrapper","DetailsPanelSubtasks","DetailsPanelFiles","FeedContextWrapper","DetailsPanelDetails","DetailsPanel","isOpen","props"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const A=require("react");require("lodash");require("react-toastify");require("uuid");const S=require("../../../../../util/pluralize.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/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/bundles/getBundles.cjs.js");require("../../../../../api/queries/bundles/updateBundles.cjs.js");require("../../../../../api/queries/cloud/cloud.cjs.js");require("../../../../../api/queries/columnStats/metricTargets.cjs.js");require("../../../../../api/queries/columnStats/groupCounts.cjs.js");require("../../../../../api/queries/config/getConfig.cjs.js");require("../../../../../api/queries/config/updateConfig.cjs.js");require("../../../../../api/queries/entities/getEntity.cjs.js");require("../../../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../../../api/queries/overview/getOverview.cjs.js");require("../../../../../api/queries/overview/updateOverview.cjs.js");require("../../../../../api/queries/versions/getVersionsProducts.cjs.js");require("../../../../../api/queries/links/getEntityLinks.cjs.js");require("../../../../../api/queries/entities/updateEntity.cjs.js");require("../../../../../api/queries/entityLists/getLists.cjs.js");require("../../../../../api/queries/entityLists/updateLists.cjs.js");require("../../../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../../../api/queries/entityLists/listItemsColumnStats.cjs.js");require("../../../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../../../api/queries/entityLists/listFolders.cjs.js");require("../../../../../api/queries/folders/getFolders.cjs.js");require("../../../../../api/queries/folders/getFolderDeleteInfo.cjs.js");require("../../../../../api/queries/grouping/getGrouping.cjs.js");require("../../../../../api/queries/links/updateLinks.cjs.js");require("../../../../../api/queries/links/getLinks.cjs.js");require("../../../../../api/queries/permissions/getPermissions.cjs.js");require("../../../../../api/queries/products/createProduct.cjs.js");require("../../../../../api/queries/products/getFolderProducts.cjs.js");require("../../../../../api/queries/project/getProject.cjs.js");require("../../../../../api/queries/project/updateProject.cjs.js");require("../../../../../api/queries/projectFolders/projectFolders.cjs.js");require("../../../../../api/queries/review/getReview.cjs.js");require("../../../../../api/queries/review/updateReview.cjs.js");require("../../../../../api/queries/share/share.cjs.js");require("../../../../../api/queries/system/getSystem.cjs.js");require("../../../../../api/queries/tasks/getTasks.cjs.js");require("../../../../../api/queries/tasks/updateTasks.cjs.js");require("../../../../../api/queries/teams/getTeams.cjs.js");require("../../../../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../../../../api/queries/users/getUsers.cjs.js");require("../../../../../api/queries/users/updateUsers.cjs.js");require("../../../../../api/queries/users/guests.cjs.js");require("../../../../../api/queries/versions/updateVersions.cjs.js");require("../../../../../api/queries/views/getViews.cjs.js");require("../../../../../api/queries/views/updateViews.cjs.js");require("../../../../../api/queries/watchers/getWatchers.cjs.js");require("../../../../../api/queries/uris/getUris.cjs.js");require("../../../../../util/pubsub.cjs.js");const z=(r,n,i)=>{const o=r==="folder"||r==="task"?"overview":r==="product"||r==="version"||r==="representation"?"products":null;return o?`${typeof window<"u"?window.location.origin:""}/projects/${i}/${o}?project=${i}&type=${r}&id=${n}`:null},I=({entityType:r,entityId:n,projectName:i,selectedEntities:o,deleteEntities:l,canUploadThumbnail:p,canUploadVersion:h,canOpenPip:v,canOpenViewer:b,canDelete:f,entityListsContext:t,onPip:g,onOpenViewer:w,onUploadThumbnail:k,onUploadVersion:_,onShare:$,onViewData:R,onDelete:C})=>{const u=A.useMemo(()=>o.length?o.filter(e=>!!e?.entityId).map(e=>({entityId:e.entityId,entityType:e.entityType||r,hasReviewables:e.hasReviewables})):n?[{entityId:n,entityType:r}]:[],[o,n,r]);return A.useMemo(()=>{const e=[];if(b&&e.push({id:"open-in-viewer",label:"Open in viewer",icon:"play_circle",onClick:w}),v&&e.push({id:"picture-in-picture",label:"Picture in picture",icon:"picture_in_picture",onClick:g}),p&&e.push({id:"upload-thumbnail",label:"Upload thumbnail",icon:"add_photo_alternate",onClick:k}),h&&e.push({id:"upload-version",label:"Upload version",icon:"upload",onClick:_}),t?.openAddToListDialog&&i&&u.length){const q=u[0]?.entityType||r,s=t.openAddToListDialog;if(e.push({id:"add-to-list",label:"Add to list",icon:"list_alt_add",onClick:()=>s(q,u)}),(q==="version"||q==="representation")&&t.hasReviewAddon){const a=u.some(M=>M.hasReviewables===!0);e.push({id:"add-to-review-list",label:"Add to review list",icon:"list_alt_add",disabled:!a,...a?{}:{"data-tooltip":"No reviewables on selected version"},onClick:()=>s(q,u,{isReview:!0})})}}const d=u[0],c=d?.entityId&&i?z(d.entityType||r,d.entityId,i):null;if(c&&e.push({id:"share",label:"Share",icon:"share",onClick:()=>$(c)}),e.push({id:"view-data",label:"View data",icon:"database",onClick:R}),f&&l.length>0){const q=new Set(l.map(a=>a.entityType)),s=q.size===1?[...q][0]:"item",m=l.length===1?`Delete ${s}`:`Delete ${S.pluralize(l.length,s)}`;e.push({id:"delete",label:m,icon:"delete",danger:!0,onClick:C})}return{items:e,shareLink:c}},[v,b,p,h,f,l,t,i,u,r,g,w,k,_,$,R,C])};exports.useMenuOptions=I;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const A=require("react");require("lodash");require("react-toastify");require("uuid");const S=require("../../../../../util/pluralize.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/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/bundles/getBundles.cjs.js");require("../../../../../api/queries/bundles/updateBundles.cjs.js");require("../../../../../api/queries/cloud/cloud.cjs.js");require("../../../../../api/queries/columnStats/metricTargets.cjs.js");require("../../../../../api/queries/columnStats/groupCounts.cjs.js");require("../../../../../api/queries/config/getConfig.cjs.js");require("../../../../../api/queries/config/updateConfig.cjs.js");require("../../../../../api/queries/entities/getEntity.cjs.js");require("../../../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../../../api/queries/overview/getOverview.cjs.js");require("../../../../../api/queries/overview/updateOverview.cjs.js");require("../../../../../api/queries/versions/getVersionsProducts.cjs.js");require("../../../../../api/queries/links/getEntityLinks.cjs.js");require("../../../../../api/queries/entities/updateEntity.cjs.js");require("../../../../../api/queries/entityLists/getLists.cjs.js");require("../../../../../api/queries/entityLists/updateLists.cjs.js");require("../../../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../../../api/queries/entityLists/listItemsColumnStats.cjs.js");require("../../../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../../../api/queries/entityLists/listFolders.cjs.js");require("../../../../../api/queries/folders/getFolders.cjs.js");require("../../../../../api/queries/folders/getFolderDeleteInfo.cjs.js");require("../../../../../api/queries/grouping/getGrouping.cjs.js");require("../../../../../api/queries/links/updateLinks.cjs.js");require("../../../../../api/queries/links/getLinks.cjs.js");require("../../../../../api/queries/permissions/getPermissions.cjs.js");require("../../../../../api/queries/products/createProduct.cjs.js");require("../../../../../api/queries/products/getFolderProducts.cjs.js");require("../../../../../api/queries/project/getProject.cjs.js");require("../../../../../api/queries/project/updateProject.cjs.js");require("../../../../../api/queries/projectFolders/projectFolders.cjs.js");require("../../../../../api/queries/review/getReview.cjs.js");require("../../../../../api/queries/review/updateReview.cjs.js");require("../../../../../api/queries/share/share.cjs.js");require("../../../../../api/queries/system/getSystem.cjs.js");require("../../../../../api/queries/tasks/getTasks.cjs.js");require("../../../../../api/queries/tasks/updateTasks.cjs.js");require("../../../../../api/queries/teams/getTeams.cjs.js");require("../../../../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../../../../api/queries/users/getUsers.cjs.js");require("../../../../../api/queries/users/updateUsers.cjs.js");require("../../../../../api/queries/users/guests.cjs.js");require("../../../../../api/queries/versions/updateVersions.cjs.js");require("../../../../../api/queries/views/getViews.cjs.js");require("../../../../../api/queries/views/updateViews.cjs.js");require("../../../../../api/queries/watchers/getWatchers.cjs.js");require("../../../../../api/queries/uris/getUris.cjs.js");require("../../../../../util/pubsub.cjs.js");const z=(r,n,i)=>{const o=r==="folder"||r==="task"?"overview":r==="product"||r==="version"||r==="representation"?"products":null;return o?`${typeof window<"u"?window.location.origin:""}/projects/${i}/${o}?project=${i}&type=${r}&id=${n}`:null},I=({entityType:r,entityId:n,projectName:i,selectedEntities:o,deleteEntities:l,canUploadThumbnail:p,canUploadVersion:h,canOpenPip:b,canOpenViewer:v,canDelete:f,entityListsContext:t,onPip:g,onOpenViewer:w,onUploadThumbnail:k,onUploadVersion:_,onShare:$,onViewData:R,onDelete:C})=>{const u=A.useMemo(()=>o.length?o.filter(e=>!!e?.entityId).map(e=>({entityId:e.entityId,entityType:e.entityType||r,hasReviewables:e.hasReviewables})):n?[{entityId:n,entityType:r}]:[],[o,n,r]);return A.useMemo(()=>{const e=[];if(v&&e.push({id:"open-in-viewer",label:"Open in viewer",icon:"play_circle",onClick:w}),b&&e.push({id:"picture-in-picture",label:"Picture in picture",icon:"picture_in_picture",onClick:g}),p&&e.push({id:"upload-thumbnail",label:"Upload thumbnail",icon:"add_photo_alternate",onClick:k}),h&&e.push({id:"upload-version",label:"Upload version",icon:"upload",onClick:_}),t?.openAddToListDialog&&i&&u.length){const q=u[0]?.entityType||r,s=t.openAddToListDialog;if(e.push({id:"add-to-list",label:"Add to list",icon:"list_alt_add",onClick:()=>s(q,u)}),(q==="version"||q==="representation")&&t.hasReviewAddon){const a=u.some(M=>M.hasReviewables===!0);e.push({id:"add-to-review-list",label:"Add to session",icon:"list_alt_add",disabled:!a,...a?{}:{"data-tooltip":"No reviewables on selected version"},onClick:()=>s(q,u,{isReview:!0})})}}const d=u[0],c=d?.entityId&&i?z(d.entityType||r,d.entityId,i):null;if(c&&e.push({id:"share",label:"Share",icon:"share",onClick:()=>$(c)}),e.push({id:"view-data",label:"View data",icon:"database",onClick:R}),f&&l.length>0){const q=new Set(l.map(a=>a.entityType)),s=q.size===1?[...q][0]:"item",m=l.length===1?`Delete ${s}`:`Delete ${S.pluralize(l.length,s)}`;e.push({id:"delete",label:m,icon:"delete",danger:!0,onClick:C})}return{items:e,shareLink:c}},[b,v,p,h,f,l,t,i,u,r,g,w,k,_,$,R,C])};exports.useMenuOptions=I;
2
2
  //# sourceMappingURL=useMenuOptions.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useMenuOptions.cjs.js","sources":["../../../../../../../../src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useMenuOptions.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport type { MenuItemType } from '@shared/components'\nimport type { DeletableEntity } from '@shared/context'\nimport { pluralize } from '@shared/util'\nimport type { DetailsPanelEntityListsContext, SelectedEntityRef, ListEntityRef } from '../types'\n\ninterface UseMenuOptionsParams {\n entityType: string\n entityId?: string\n projectName?: string\n selectedEntities: SelectedEntityRef[]\n // resolved delete target — drives both the delete gate and its label so they\n // stay in sync with whatever is actually deleted (cell selection in the tree table)\n deleteEntities: DeletableEntity[]\n canUploadThumbnail: boolean\n canUploadVersion: boolean\n canOpenPip: boolean\n canOpenViewer: boolean\n canDelete: boolean\n entityListsContext: DetailsPanelEntityListsContext | undefined\n onPip: () => void\n onOpenViewer: () => void\n onUploadThumbnail: () => void\n onUploadVersion: () => void\n onShare: (link: string) => void\n onViewData: () => void\n onDelete: () => void\n}\n\nexport interface MenuOptionsResult {\n items: MenuItemType[]\n shareLink: string | null\n}\n\n// folder/task open in Overview; product/version/representation open in Products.\nconst buildEntityShareLink = (\n entityType: string,\n entityId: string,\n projectName: string,\n): string | null => {\n const path =\n entityType === 'folder' || entityType === 'task'\n ? 'overview'\n : entityType === 'product' || entityType === 'version' || entityType === 'representation'\n ? 'products'\n : null\n if (!path) return null\n const origin = typeof window !== 'undefined' ? window.location.origin : ''\n return `${origin}/projects/${projectName}/${path}?project=${projectName}&type=${entityType}&id=${entityId}`\n}\n\nexport const useMenuOptions = ({\n entityType,\n entityId,\n projectName,\n selectedEntities,\n deleteEntities,\n canUploadThumbnail,\n canUploadVersion,\n canOpenPip,\n canOpenViewer,\n canDelete,\n entityListsContext,\n onPip,\n onOpenViewer,\n onUploadThumbnail,\n onUploadVersion,\n onShare,\n onViewData,\n onDelete,\n}: UseMenuOptionsParams): MenuOptionsResult => {\n const normalizedSelected = useMemo<ListEntityRef[]>(() => {\n if (selectedEntities.length) {\n return selectedEntities\n .filter((e) => !!e?.entityId)\n .map((e) => ({\n entityId: e.entityId,\n entityType: e.entityType || entityType,\n hasReviewables: e.hasReviewables,\n }))\n }\n if (entityId) return [{ entityId, entityType }]\n return []\n }, [selectedEntities, entityId, entityType])\n\n return useMemo<MenuOptionsResult>(() => {\n const items: MenuItemType[] = []\n\n if (canOpenViewer) {\n items.push({\n id: 'open-in-viewer',\n label: 'Open in viewer',\n icon: 'play_circle',\n onClick: onOpenViewer,\n })\n }\n\n if (canOpenPip) {\n items.push({\n id: 'picture-in-picture',\n label: 'Picture in picture',\n icon: 'picture_in_picture',\n onClick: onPip,\n })\n }\n\n if (canUploadThumbnail) {\n items.push({\n id: 'upload-thumbnail',\n label: 'Upload thumbnail',\n icon: 'add_photo_alternate',\n onClick: onUploadThumbnail,\n })\n }\n\n if (canUploadVersion) {\n items.push({\n id: 'upload-version',\n label: 'Upload version',\n icon: 'upload',\n onClick: onUploadVersion,\n })\n }\n\n if (entityListsContext?.openAddToListDialog && projectName && normalizedSelected.length) {\n const targetEntityType = normalizedSelected[0]?.entityType || entityType\n const openDialog = entityListsContext.openAddToListDialog\n\n items.push({\n id: 'add-to-list',\n label: 'Add to list',\n icon: 'list_alt_add',\n onClick: () => openDialog(targetEntityType, normalizedSelected),\n })\n\n // versions/representations can also go to review-session lists; gated on reviewables (YN-0683)\n const isVersionLike = targetEntityType === 'version' || targetEntityType === 'representation'\n if (isVersionLike && entityListsContext.hasReviewAddon) {\n const anyHasReviewables = normalizedSelected.some((e) => e.hasReviewables === true)\n items.push({\n id: 'add-to-review-list',\n label: 'Add to review list',\n icon: 'list_alt_add',\n disabled: !anyHasReviewables,\n ...(anyHasReviewables\n ? {}\n : { ['data-tooltip' as any]: 'No reviewables on selected version' }),\n onClick: () => openDialog(targetEntityType, normalizedSelected, { isReview: true }),\n })\n }\n }\n\n const shareTarget = normalizedSelected[0]\n const shareLink =\n shareTarget?.entityId && projectName\n ? buildEntityShareLink(\n shareTarget.entityType || entityType,\n shareTarget.entityId,\n projectName,\n )\n : null\n if (shareLink) {\n items.push({\n id: 'share',\n label: 'Share',\n icon: 'share',\n onClick: () => onShare(shareLink),\n })\n }\n\n items.push({\n id: 'view-data',\n label: 'View data',\n icon: 'database',\n onClick: onViewData,\n })\n\n // Delete stays at the very bottom, styled as a danger action.\n if (canDelete && deleteEntities.length > 0) {\n const types = new Set(deleteEntities.map((e) => e.entityType))\n const noun = types.size === 1 ? [...types][0] : 'item'\n const label =\n deleteEntities.length === 1\n ? `Delete ${noun}`\n : `Delete ${pluralize(deleteEntities.length, noun)}`\n items.push({\n id: 'delete',\n label,\n icon: 'delete',\n danger: true,\n onClick: onDelete,\n })\n }\n\n return { items, shareLink }\n }, [\n canOpenPip,\n canOpenViewer,\n canUploadThumbnail,\n canUploadVersion,\n canDelete,\n deleteEntities,\n entityListsContext,\n projectName,\n normalizedSelected,\n entityType,\n onPip,\n onOpenViewer,\n onUploadThumbnail,\n onUploadVersion,\n onShare,\n onViewData,\n onDelete,\n ])\n}\n"],"names":["buildEntityShareLink","entityType","entityId","projectName","path","useMenuOptions","selectedEntities","deleteEntities","canUploadThumbnail","canUploadVersion","canOpenPip","canOpenViewer","canDelete","entityListsContext","onPip","onOpenViewer","onUploadThumbnail","onUploadVersion","onShare","onViewData","onDelete","normalizedSelected","useMemo","items","targetEntityType","openDialog","anyHasReviewables","e","shareTarget","shareLink","types","noun","label","pluralize"],"mappings":"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"}
1
+ {"version":3,"file":"useMenuOptions.cjs.js","sources":["../../../../../../../../src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useMenuOptions.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport type { MenuItemType } from '@shared/components'\nimport type { DeletableEntity } from '@shared/context'\nimport { pluralize } from '@shared/util'\nimport type { DetailsPanelEntityListsContext, SelectedEntityRef, ListEntityRef } from '../types'\n\ninterface UseMenuOptionsParams {\n entityType: string\n entityId?: string\n projectName?: string\n selectedEntities: SelectedEntityRef[]\n // resolved delete target — drives both the delete gate and its label so they\n // stay in sync with whatever is actually deleted (cell selection in the tree table)\n deleteEntities: DeletableEntity[]\n canUploadThumbnail: boolean\n canUploadVersion: boolean\n canOpenPip: boolean\n canOpenViewer: boolean\n canDelete: boolean\n entityListsContext: DetailsPanelEntityListsContext | undefined\n onPip: () => void\n onOpenViewer: () => void\n onUploadThumbnail: () => void\n onUploadVersion: () => void\n onShare: (link: string) => void\n onViewData: () => void\n onDelete: () => void\n}\n\nexport interface MenuOptionsResult {\n items: MenuItemType[]\n shareLink: string | null\n}\n\n// folder/task open in Overview; product/version/representation open in Products.\nconst buildEntityShareLink = (\n entityType: string,\n entityId: string,\n projectName: string,\n): string | null => {\n const path =\n entityType === 'folder' || entityType === 'task'\n ? 'overview'\n : entityType === 'product' || entityType === 'version' || entityType === 'representation'\n ? 'products'\n : null\n if (!path) return null\n const origin = typeof window !== 'undefined' ? window.location.origin : ''\n return `${origin}/projects/${projectName}/${path}?project=${projectName}&type=${entityType}&id=${entityId}`\n}\n\nexport const useMenuOptions = ({\n entityType,\n entityId,\n projectName,\n selectedEntities,\n deleteEntities,\n canUploadThumbnail,\n canUploadVersion,\n canOpenPip,\n canOpenViewer,\n canDelete,\n entityListsContext,\n onPip,\n onOpenViewer,\n onUploadThumbnail,\n onUploadVersion,\n onShare,\n onViewData,\n onDelete,\n}: UseMenuOptionsParams): MenuOptionsResult => {\n const normalizedSelected = useMemo<ListEntityRef[]>(() => {\n if (selectedEntities.length) {\n return selectedEntities\n .filter((e) => !!e?.entityId)\n .map((e) => ({\n entityId: e.entityId,\n entityType: e.entityType || entityType,\n hasReviewables: e.hasReviewables,\n }))\n }\n if (entityId) return [{ entityId, entityType }]\n return []\n }, [selectedEntities, entityId, entityType])\n\n return useMemo<MenuOptionsResult>(() => {\n const items: MenuItemType[] = []\n\n if (canOpenViewer) {\n items.push({\n id: 'open-in-viewer',\n label: 'Open in viewer',\n icon: 'play_circle',\n onClick: onOpenViewer,\n })\n }\n\n if (canOpenPip) {\n items.push({\n id: 'picture-in-picture',\n label: 'Picture in picture',\n icon: 'picture_in_picture',\n onClick: onPip,\n })\n }\n\n if (canUploadThumbnail) {\n items.push({\n id: 'upload-thumbnail',\n label: 'Upload thumbnail',\n icon: 'add_photo_alternate',\n onClick: onUploadThumbnail,\n })\n }\n\n if (canUploadVersion) {\n items.push({\n id: 'upload-version',\n label: 'Upload version',\n icon: 'upload',\n onClick: onUploadVersion,\n })\n }\n\n if (entityListsContext?.openAddToListDialog && projectName && normalizedSelected.length) {\n const targetEntityType = normalizedSelected[0]?.entityType || entityType\n const openDialog = entityListsContext.openAddToListDialog\n\n items.push({\n id: 'add-to-list',\n label: 'Add to list',\n icon: 'list_alt_add',\n onClick: () => openDialog(targetEntityType, normalizedSelected),\n })\n\n // versions/representations can also go to review-session lists; gated on reviewables (YN-0683)\n const isVersionLike = targetEntityType === 'version' || targetEntityType === 'representation'\n if (isVersionLike && entityListsContext.hasReviewAddon) {\n const anyHasReviewables = normalizedSelected.some((e) => e.hasReviewables === true)\n items.push({\n id: 'add-to-review-list',\n label: 'Add to session',\n icon: 'list_alt_add',\n disabled: !anyHasReviewables,\n ...(anyHasReviewables\n ? {}\n : { ['data-tooltip' as any]: 'No reviewables on selected version' }),\n onClick: () => openDialog(targetEntityType, normalizedSelected, { isReview: true }),\n })\n }\n }\n\n const shareTarget = normalizedSelected[0]\n const shareLink =\n shareTarget?.entityId && projectName\n ? buildEntityShareLink(\n shareTarget.entityType || entityType,\n shareTarget.entityId,\n projectName,\n )\n : null\n if (shareLink) {\n items.push({\n id: 'share',\n label: 'Share',\n icon: 'share',\n onClick: () => onShare(shareLink),\n })\n }\n\n items.push({\n id: 'view-data',\n label: 'View data',\n icon: 'database',\n onClick: onViewData,\n })\n\n // Delete stays at the very bottom, styled as a danger action.\n if (canDelete && deleteEntities.length > 0) {\n const types = new Set(deleteEntities.map((e) => e.entityType))\n const noun = types.size === 1 ? [...types][0] : 'item'\n const label =\n deleteEntities.length === 1\n ? `Delete ${noun}`\n : `Delete ${pluralize(deleteEntities.length, noun)}`\n items.push({\n id: 'delete',\n label,\n icon: 'delete',\n danger: true,\n onClick: onDelete,\n })\n }\n\n return { items, shareLink }\n }, [\n canOpenPip,\n canOpenViewer,\n canUploadThumbnail,\n canUploadVersion,\n canDelete,\n deleteEntities,\n entityListsContext,\n projectName,\n normalizedSelected,\n entityType,\n onPip,\n onOpenViewer,\n onUploadThumbnail,\n onUploadVersion,\n onShare,\n onViewData,\n onDelete,\n ])\n}\n"],"names":["buildEntityShareLink","entityType","entityId","projectName","path","useMenuOptions","selectedEntities","deleteEntities","canUploadThumbnail","canUploadVersion","canOpenPip","canOpenViewer","canDelete","entityListsContext","onPip","onOpenViewer","onUploadThumbnail","onUploadVersion","onShare","onViewData","onDelete","normalizedSelected","useMemo","items","targetEntityType","openDialog","anyHasReviewables","e","shareTarget","shareLink","types","noun","label","pluralize"],"mappings":"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"}
@@ -162,7 +162,7 @@ const S = (o, l, r) => {
162
162
  const a = t.some((I) => I.hasReviewables === !0);
163
163
  i.push({
164
164
  id: "add-to-review-list",
165
- label: "Add to review list",
165
+ label: "Add to session",
166
166
  icon: "list_alt_add",
167
167
  disabled: !a,
168
168
  ...a ? {} : { "data-tooltip": "No reviewables on selected version" },
@@ -1 +1 @@
1
- {"version":3,"file":"useMenuOptions.es.js","sources":["../../../../../../../../src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useMenuOptions.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport type { MenuItemType } from '@shared/components'\nimport type { DeletableEntity } from '@shared/context'\nimport { pluralize } from '@shared/util'\nimport type { DetailsPanelEntityListsContext, SelectedEntityRef, ListEntityRef } from '../types'\n\ninterface UseMenuOptionsParams {\n entityType: string\n entityId?: string\n projectName?: string\n selectedEntities: SelectedEntityRef[]\n // resolved delete target — drives both the delete gate and its label so they\n // stay in sync with whatever is actually deleted (cell selection in the tree table)\n deleteEntities: DeletableEntity[]\n canUploadThumbnail: boolean\n canUploadVersion: boolean\n canOpenPip: boolean\n canOpenViewer: boolean\n canDelete: boolean\n entityListsContext: DetailsPanelEntityListsContext | undefined\n onPip: () => void\n onOpenViewer: () => void\n onUploadThumbnail: () => void\n onUploadVersion: () => void\n onShare: (link: string) => void\n onViewData: () => void\n onDelete: () => void\n}\n\nexport interface MenuOptionsResult {\n items: MenuItemType[]\n shareLink: string | null\n}\n\n// folder/task open in Overview; product/version/representation open in Products.\nconst buildEntityShareLink = (\n entityType: string,\n entityId: string,\n projectName: string,\n): string | null => {\n const path =\n entityType === 'folder' || entityType === 'task'\n ? 'overview'\n : entityType === 'product' || entityType === 'version' || entityType === 'representation'\n ? 'products'\n : null\n if (!path) return null\n const origin = typeof window !== 'undefined' ? window.location.origin : ''\n return `${origin}/projects/${projectName}/${path}?project=${projectName}&type=${entityType}&id=${entityId}`\n}\n\nexport const useMenuOptions = ({\n entityType,\n entityId,\n projectName,\n selectedEntities,\n deleteEntities,\n canUploadThumbnail,\n canUploadVersion,\n canOpenPip,\n canOpenViewer,\n canDelete,\n entityListsContext,\n onPip,\n onOpenViewer,\n onUploadThumbnail,\n onUploadVersion,\n onShare,\n onViewData,\n onDelete,\n}: UseMenuOptionsParams): MenuOptionsResult => {\n const normalizedSelected = useMemo<ListEntityRef[]>(() => {\n if (selectedEntities.length) {\n return selectedEntities\n .filter((e) => !!e?.entityId)\n .map((e) => ({\n entityId: e.entityId,\n entityType: e.entityType || entityType,\n hasReviewables: e.hasReviewables,\n }))\n }\n if (entityId) return [{ entityId, entityType }]\n return []\n }, [selectedEntities, entityId, entityType])\n\n return useMemo<MenuOptionsResult>(() => {\n const items: MenuItemType[] = []\n\n if (canOpenViewer) {\n items.push({\n id: 'open-in-viewer',\n label: 'Open in viewer',\n icon: 'play_circle',\n onClick: onOpenViewer,\n })\n }\n\n if (canOpenPip) {\n items.push({\n id: 'picture-in-picture',\n label: 'Picture in picture',\n icon: 'picture_in_picture',\n onClick: onPip,\n })\n }\n\n if (canUploadThumbnail) {\n items.push({\n id: 'upload-thumbnail',\n label: 'Upload thumbnail',\n icon: 'add_photo_alternate',\n onClick: onUploadThumbnail,\n })\n }\n\n if (canUploadVersion) {\n items.push({\n id: 'upload-version',\n label: 'Upload version',\n icon: 'upload',\n onClick: onUploadVersion,\n })\n }\n\n if (entityListsContext?.openAddToListDialog && projectName && normalizedSelected.length) {\n const targetEntityType = normalizedSelected[0]?.entityType || entityType\n const openDialog = entityListsContext.openAddToListDialog\n\n items.push({\n id: 'add-to-list',\n label: 'Add to list',\n icon: 'list_alt_add',\n onClick: () => openDialog(targetEntityType, normalizedSelected),\n })\n\n // versions/representations can also go to review-session lists; gated on reviewables (YN-0683)\n const isVersionLike = targetEntityType === 'version' || targetEntityType === 'representation'\n if (isVersionLike && entityListsContext.hasReviewAddon) {\n const anyHasReviewables = normalizedSelected.some((e) => e.hasReviewables === true)\n items.push({\n id: 'add-to-review-list',\n label: 'Add to review list',\n icon: 'list_alt_add',\n disabled: !anyHasReviewables,\n ...(anyHasReviewables\n ? {}\n : { ['data-tooltip' as any]: 'No reviewables on selected version' }),\n onClick: () => openDialog(targetEntityType, normalizedSelected, { isReview: true }),\n })\n }\n }\n\n const shareTarget = normalizedSelected[0]\n const shareLink =\n shareTarget?.entityId && projectName\n ? buildEntityShareLink(\n shareTarget.entityType || entityType,\n shareTarget.entityId,\n projectName,\n )\n : null\n if (shareLink) {\n items.push({\n id: 'share',\n label: 'Share',\n icon: 'share',\n onClick: () => onShare(shareLink),\n })\n }\n\n items.push({\n id: 'view-data',\n label: 'View data',\n icon: 'database',\n onClick: onViewData,\n })\n\n // Delete stays at the very bottom, styled as a danger action.\n if (canDelete && deleteEntities.length > 0) {\n const types = new Set(deleteEntities.map((e) => e.entityType))\n const noun = types.size === 1 ? [...types][0] : 'item'\n const label =\n deleteEntities.length === 1\n ? `Delete ${noun}`\n : `Delete ${pluralize(deleteEntities.length, noun)}`\n items.push({\n id: 'delete',\n label,\n icon: 'delete',\n danger: true,\n onClick: onDelete,\n })\n }\n\n return { items, shareLink }\n }, [\n canOpenPip,\n canOpenViewer,\n canUploadThumbnail,\n canUploadVersion,\n canDelete,\n deleteEntities,\n entityListsContext,\n projectName,\n normalizedSelected,\n entityType,\n onPip,\n onOpenViewer,\n onUploadThumbnail,\n onUploadVersion,\n onShare,\n onViewData,\n onDelete,\n ])\n}\n"],"names":["buildEntityShareLink","entityType","entityId","projectName","path","useMenuOptions","selectedEntities","deleteEntities","canUploadThumbnail","canUploadVersion","canOpenPip","canOpenViewer","canDelete","entityListsContext","onPip","onOpenViewer","onUploadThumbnail","onUploadVersion","onShare","onViewData","onDelete","normalizedSelected","useMemo","e","items","targetEntityType","openDialog","anyHasReviewables","shareTarget","shareLink","types","noun","label","pluralize"],"mappings":"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"}
1
+ {"version":3,"file":"useMenuOptions.es.js","sources":["../../../../../../../../src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useMenuOptions.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport type { MenuItemType } from '@shared/components'\nimport type { DeletableEntity } from '@shared/context'\nimport { pluralize } from '@shared/util'\nimport type { DetailsPanelEntityListsContext, SelectedEntityRef, ListEntityRef } from '../types'\n\ninterface UseMenuOptionsParams {\n entityType: string\n entityId?: string\n projectName?: string\n selectedEntities: SelectedEntityRef[]\n // resolved delete target — drives both the delete gate and its label so they\n // stay in sync with whatever is actually deleted (cell selection in the tree table)\n deleteEntities: DeletableEntity[]\n canUploadThumbnail: boolean\n canUploadVersion: boolean\n canOpenPip: boolean\n canOpenViewer: boolean\n canDelete: boolean\n entityListsContext: DetailsPanelEntityListsContext | undefined\n onPip: () => void\n onOpenViewer: () => void\n onUploadThumbnail: () => void\n onUploadVersion: () => void\n onShare: (link: string) => void\n onViewData: () => void\n onDelete: () => void\n}\n\nexport interface MenuOptionsResult {\n items: MenuItemType[]\n shareLink: string | null\n}\n\n// folder/task open in Overview; product/version/representation open in Products.\nconst buildEntityShareLink = (\n entityType: string,\n entityId: string,\n projectName: string,\n): string | null => {\n const path =\n entityType === 'folder' || entityType === 'task'\n ? 'overview'\n : entityType === 'product' || entityType === 'version' || entityType === 'representation'\n ? 'products'\n : null\n if (!path) return null\n const origin = typeof window !== 'undefined' ? window.location.origin : ''\n return `${origin}/projects/${projectName}/${path}?project=${projectName}&type=${entityType}&id=${entityId}`\n}\n\nexport const useMenuOptions = ({\n entityType,\n entityId,\n projectName,\n selectedEntities,\n deleteEntities,\n canUploadThumbnail,\n canUploadVersion,\n canOpenPip,\n canOpenViewer,\n canDelete,\n entityListsContext,\n onPip,\n onOpenViewer,\n onUploadThumbnail,\n onUploadVersion,\n onShare,\n onViewData,\n onDelete,\n}: UseMenuOptionsParams): MenuOptionsResult => {\n const normalizedSelected = useMemo<ListEntityRef[]>(() => {\n if (selectedEntities.length) {\n return selectedEntities\n .filter((e) => !!e?.entityId)\n .map((e) => ({\n entityId: e.entityId,\n entityType: e.entityType || entityType,\n hasReviewables: e.hasReviewables,\n }))\n }\n if (entityId) return [{ entityId, entityType }]\n return []\n }, [selectedEntities, entityId, entityType])\n\n return useMemo<MenuOptionsResult>(() => {\n const items: MenuItemType[] = []\n\n if (canOpenViewer) {\n items.push({\n id: 'open-in-viewer',\n label: 'Open in viewer',\n icon: 'play_circle',\n onClick: onOpenViewer,\n })\n }\n\n if (canOpenPip) {\n items.push({\n id: 'picture-in-picture',\n label: 'Picture in picture',\n icon: 'picture_in_picture',\n onClick: onPip,\n })\n }\n\n if (canUploadThumbnail) {\n items.push({\n id: 'upload-thumbnail',\n label: 'Upload thumbnail',\n icon: 'add_photo_alternate',\n onClick: onUploadThumbnail,\n })\n }\n\n if (canUploadVersion) {\n items.push({\n id: 'upload-version',\n label: 'Upload version',\n icon: 'upload',\n onClick: onUploadVersion,\n })\n }\n\n if (entityListsContext?.openAddToListDialog && projectName && normalizedSelected.length) {\n const targetEntityType = normalizedSelected[0]?.entityType || entityType\n const openDialog = entityListsContext.openAddToListDialog\n\n items.push({\n id: 'add-to-list',\n label: 'Add to list',\n icon: 'list_alt_add',\n onClick: () => openDialog(targetEntityType, normalizedSelected),\n })\n\n // versions/representations can also go to review-session lists; gated on reviewables (YN-0683)\n const isVersionLike = targetEntityType === 'version' || targetEntityType === 'representation'\n if (isVersionLike && entityListsContext.hasReviewAddon) {\n const anyHasReviewables = normalizedSelected.some((e) => e.hasReviewables === true)\n items.push({\n id: 'add-to-review-list',\n label: 'Add to session',\n icon: 'list_alt_add',\n disabled: !anyHasReviewables,\n ...(anyHasReviewables\n ? {}\n : { ['data-tooltip' as any]: 'No reviewables on selected version' }),\n onClick: () => openDialog(targetEntityType, normalizedSelected, { isReview: true }),\n })\n }\n }\n\n const shareTarget = normalizedSelected[0]\n const shareLink =\n shareTarget?.entityId && projectName\n ? buildEntityShareLink(\n shareTarget.entityType || entityType,\n shareTarget.entityId,\n projectName,\n )\n : null\n if (shareLink) {\n items.push({\n id: 'share',\n label: 'Share',\n icon: 'share',\n onClick: () => onShare(shareLink),\n })\n }\n\n items.push({\n id: 'view-data',\n label: 'View data',\n icon: 'database',\n onClick: onViewData,\n })\n\n // Delete stays at the very bottom, styled as a danger action.\n if (canDelete && deleteEntities.length > 0) {\n const types = new Set(deleteEntities.map((e) => e.entityType))\n const noun = types.size === 1 ? [...types][0] : 'item'\n const label =\n deleteEntities.length === 1\n ? `Delete ${noun}`\n : `Delete ${pluralize(deleteEntities.length, noun)}`\n items.push({\n id: 'delete',\n label,\n icon: 'delete',\n danger: true,\n onClick: onDelete,\n })\n }\n\n return { items, shareLink }\n }, [\n canOpenPip,\n canOpenViewer,\n canUploadThumbnail,\n canUploadVersion,\n canDelete,\n deleteEntities,\n entityListsContext,\n projectName,\n normalizedSelected,\n entityType,\n onPip,\n onOpenViewer,\n onUploadThumbnail,\n onUploadVersion,\n onShare,\n onViewData,\n onDelete,\n ])\n}\n"],"names":["buildEntityShareLink","entityType","entityId","projectName","path","useMenuOptions","selectedEntities","deleteEntities","canUploadThumbnail","canUploadVersion","canOpenPip","canOpenViewer","canDelete","entityListsContext","onPip","onOpenViewer","onUploadThumbnail","onUploadVersion","onShare","onViewData","onDelete","normalizedSelected","useMemo","e","items","targetEntityType","openDialog","anyHasReviewables","shareTarget","shareLink","types","noun","label","pluralize"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- "use strict";const l=require("../../../../../_virtual/jsx-runtime.cjs.js"),q=require("react"),v=require("@ynput/ayon-react-components"),k=require("styled-components"),b=require("../helpers/feedFilterAdapter.cjs.js"),j=require("../../../components/SearchFilter/filterDates.cjs.js");require("lodash");require("react-toastify");require("uuid");require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/dataImport.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/projectFolders.cjs.js");require("../../../api/generated/reviewables.cjs.js");require("../../../api/generated/services.cjs.js");require("../../../api/generated/system.cjs.js");require("../../../api/generated/tasks.cjs.js");require("../../../api/generated/teams.cjs.js");require("../../../api/generated/thumbnails.cjs.js");require("../../../api/generated/uRIs.cjs.js");require("../../../api/generated/users.cjs.js");require("../../../api/generated/versions.cjs.js");require("../../../api/generated/workfiles.cjs.js");require("../../../api/generated/ynputCloud.cjs.js");require("../../../api/generated/grouping.cjs.js");require("../../../api/generated/views.cjs.js");require("../../../api/queries/actions/getActions.cjs.js");require("../../../api/queries/activities/getActivities.cjs.js");require("../../../api/queries/activities/updateReaction.cjs.js");require("../../../api/queries/activities/getMentions.cjs.js");require("../../../api/queries/activities/getCategories.cjs.js");require("../../../api/queries/addons/getAddons.cjs.js");require("../../../api/queries/addons/updateAddons.cjs.js");require("../../../api/queries/attributes/getAttributes.cjs.js");require("../../../api/queries/attributes/updateAttributes.cjs.js");require("../../../api/queries/authentication/getAuthentication.cjs.js");require("../../../api/queries/bundles/getBundles.cjs.js");require("../../../api/queries/bundles/updateBundles.cjs.js");require("../../../api/queries/cloud/cloud.cjs.js");require("../../../api/queries/columnStats/metricTargets.cjs.js");require("../../../api/queries/columnStats/groupCounts.cjs.js");require("../../../api/queries/config/getConfig.cjs.js");require("../../../api/queries/config/updateConfig.cjs.js");require("../../../api/queries/entities/getEntity.cjs.js");require("../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../api/queries/overview/getOverview.cjs.js");require("../../../api/queries/overview/updateOverview.cjs.js");require("../../../api/queries/versions/getVersionsProducts.cjs.js");require("../../../api/queries/links/getEntityLinks.cjs.js");require("../../../api/queries/entities/updateEntity.cjs.js");require("../../../api/queries/entityLists/getLists.cjs.js");require("../../../api/queries/entityLists/updateLists.cjs.js");require("../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../api/queries/entityLists/listItemsColumnStats.cjs.js");require("../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../api/queries/entityLists/listFolders.cjs.js");require("../../../api/queries/folders/getFolders.cjs.js");require("../../../api/queries/folders/getFolderDeleteInfo.cjs.js");require("../../../api/queries/grouping/getGrouping.cjs.js");require("../../../api/queries/links/updateLinks.cjs.js");require("../../../api/queries/links/getLinks.cjs.js");require("../../../api/queries/permissions/getPermissions.cjs.js");require("../../../api/queries/products/createProduct.cjs.js");require("../../../api/queries/products/getFolderProducts.cjs.js");require("../../../api/queries/project/getProject.cjs.js");require("../../../api/queries/project/updateProject.cjs.js");require("../../../api/queries/projectFolders/projectFolders.cjs.js");require("../../../api/queries/review/getReview.cjs.js");require("../../../api/queries/review/updateReview.cjs.js");require("../../../api/queries/share/share.cjs.js");require("../../../api/queries/system/getSystem.cjs.js");require("../../../api/queries/tasks/getTasks.cjs.js");require("../../../api/queries/tasks/updateTasks.cjs.js");require("../../../api/queries/teams/getTeams.cjs.js");require("../../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../../api/queries/users/getUsers.cjs.js");require("../../../api/queries/users/updateUsers.cjs.js");require("../../../api/queries/users/guests.cjs.js");require("../../../api/queries/versions/updateVersions.cjs.js");require("../../../api/queries/views/getViews.cjs.js");require("../../../api/queries/views/updateViews.cjs.js");require("../../../api/queries/watchers/getWatchers.cjs.js");require("../../../api/queries/uris/getUris.cjs.js");require("../../../util/pubsub.cjs.js");require("../../../components/FeaturedVersionOrder/FeaturedVersionOrder.cjs.js");require("../../../context/RemoteModulesContext.cjs.js");require("../../../../node_modules/@module-federation/runtime/dist/index.cjs.js");require("../../../../../_virtual/semver.cjs.js");require("react-redux");require("custom-protocol-check");require("../../ProjectTreeTable/components/GroupSettingsFallback.cjs.js");require("../../../context/PowerpackContextInstance.cjs.js");require("../../../context/UriContext.cjs.js");require("../../../context/DetailsPanelContextInstance.cjs.js");require("../../../context/SubtasksModulesContextInstance.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/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/ProjectFoldersContextInstance.cjs.js");require("../../../context/EntityUpdatesContextInstance.cjs.js");require("../../ContextMenu/ContextMenuContext.cjs.js");;/* empty css */require("clsx");require("../context/FeedContext.cjs.js");require("./Tooltips/UserTooltipItem.cjs.js");require("./Tooltips/UserTooltip/UserTooltip.styled.cjs.js");require("./Tooltips/TeamTooltip/TeamTooltip.styled.cjs.js");require("./Tooltips/EntityTooltip/EntityTooltip.styled.cjs.js");require("./FileUploadPreview/FileUploadPreview.styled.cjs.js");require("./FileUploadPreview/Mimes/TextMime.cjs.js");require("react-markdown");require("remark-emoji");require("remark-gfm");require("remark-directive");require("remark-directive-rehype");require("./CommentInput/CommentInput.cjs.js");require("./ReactionContainer/Reactions.styled.cjs.js");require("./FilesGrid/FilesGrid.styled.cjs.js");require("./FileUploadCard/FileUploadCard.styled.cjs.js");require("./CommentInput/quillToMarkdown.cjs.js");require("./ActivityComment/ActivityComment.styled.cjs.js");require("./ActivityCheckbox/ActivityCheckbox.styled.cjs.js");require("../../../components/AddonLoadingScreen/AddonLoadingScreen.cjs.js");require("../../../../../node_modules/match-sorter/dist/match-sorter.esm.cjs.js");require("../../../components/AccessSearchInput/AccessSearchInput.styled.cjs.js");require("../../../components/AccessUser/AccessUser.cjs.js");require("../../../components/AttributeEditor/AttributeEditor.cjs.js");require("../../../components/AttributeEditor/attributeTypeMap.cjs.js");require("../../../components/Badge/Badge.cjs.js");require("../../../components/Chips/Chips.cjs.js");require("date-fns");require("../../../components/DateRangePicker/DateRangePicker.styled.cjs.js");require("../../../components/LinksManager/CellEditingDialog.cjs.js");require("../../../components/DeleteEntitiesConfirm/DeleteConfirmContent.cjs.js");require("../../../../../_virtual/index.cjs.js");require("../../../../../node_modules/refractor/lib/common.cjs.js");require("../../../../../node_modules/refractor/lib/all.cjs.js");;/* empty css */require("../../../components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js");require("../../../components/DetailsPanelDetails/DetailsPanelDetails.cjs.js");require("react-quill-ayon");require("../../../components/DetailsPanelDetails/BorderedSection.cjs.js");require("../../../components/QuillListStyles/QuillListStyles.cjs.js");require("../../../components/DetailsPanelDetails/DescriptionSection.styles.cjs.js");require("rehype-raw");require("../../../components/DetailsPanelDetails/hooks/useMentionSystem.cjs.js");require("./CommentInput/modules/index.cjs.js");require("../../../components/DetailsPanelDetails/DetailsSection.cjs.js");require("../../../components/DetailsPanelDetails/FieldLabel.cjs.js");require("../../../components/DoneCheckbox/DoneCheckbox.cjs.js");require("../../../components/EarlyPreview/EarlyPreview.cjs.js");require("../../../components/EmptyPlaceholder/EmptyPlaceholder.cjs.js");require("../../../components/EmptyPlaceholder/EmptyPlaceholderFlex.styled.cjs.js");require("../../../components/InfoMessage/InfoMessage.cjs.js");require("@dnd-kit/core");require("@dnd-kit/sortable");require("../../../components/EnumEditor/EnumEditor.styled.cjs.js");require("../../../components/EntityPanelUploader/EntityPanelUploader.styled.cjs.js");require("axios");require("../../../components/ReviewablesList/ReviewablesList.styled.cjs.js");require("../../../components/ReviewablesList/ReviewablesUpload.styled.cjs.js");require("../../../components/EntityPath/EntityPath.styled.cjs.js");require("../../../components/EntityPath/SegmentProvider.cjs.js");require("../../../components/Feedback/FeedbackContextInstance.cjs.js");require("../../../components/Feedback/SupportBubble.cjs.js");require("../../../components/FileThumbnail/FileThumbnail.cjs.js");require("../../../components/LegacyBadge/LegacyBadge.cjs.js");require("../../../components/LinksManager/LinksManager.styled.cjs.js");require("../../EntityPickerDialog/EntityPickerDialog.cjs.js");require("../../../components/Powerpack/PowerpackButton.cjs.js");require("../../../components/Powerpack/FreeTrialLink.cjs.js");require("../../../components/Powerpack/PowerpackDialog.styled.cjs.js");require("../../../components/Powerpack/CTAButton.cjs.js");require("../../../components/Powerpack/RequiredAddonVersion.cjs.js");require("../../../components/ProjectTableSettings/ProjectTableSettings.cjs.js");require("../../../components/SizeSlider/SizeSlider.cjs.js");require("react-router-dom");require("../../Slicer/components/Slicer.cjs.js");require("../../Slicer/context/SlicerContextInstance.cjs.js");require("../../Slicer/components/SlicerDropdownFallback.cjs.js");require("../../Slicer/hooks/useTableDataBySlice.cjs.js");require("../../../components/ReviewableCard/ReviewableCard.cjs.js");require("../../../components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js");require("../../../components/SettingsPanel/SettingsPanel.cjs.js");require("../../../components/SettingsPanel/SettingsPanelItemTemplate.cjs.js");require("../../../components/ShareOptionIcon/ShareOptionIcon.cjs.js");require("../../../components/SimpleFormDialog/SimpleFormDialog.cjs.js");require("../../../components/StyledLink/StyledLink.cjs.js");require("../../../components/SyncButton/SyncButton.cjs.js");require("../../../components/TableGridSwitch/TableGridSwitch.cjs.js");require("../../../components/Thumbnail/Thumbnail.styled.cjs.js");require("../../../components/Thumbnail/StackedThumbnails.cjs.js");require("../../../components/ThumbnailSimple/ThumbnailSimple.cjs.js");require("../../../components/VersionUploader/components/UploadVersionDialog.cjs.js");require("../../../components/VersionUploader/context/VersionUploadContextInstance.cjs.js");require("../../../components/Watchers/Watchers.cjs.js");require("../../../components/Menu/Menu.styled.cjs.js");require("../../../components/Menu/MenuItem.cjs.js");require("../../../components/ReviewablesSelector/ReviewablesSelector.cjs.js");require("../../../components/ColumnHeaderMenuUI.cjs.js");require("./ActivityReference/ActivityReference.styled.cjs.js");require("./ActivityStatus/ActivityStatus.cjs.js");require("./ActivityHeader/ActivityHeader.styled.cjs.js");require("./ActivityDate.cjs.js");require("./ActivityCategorySelect/CategoryTag.cjs.js");require("./ActivityStatusChange/ActivityStatusChange.styled.cjs.js");require("./ActivityStatusChange/ActivityStatusSecondary.cjs.js");require("./ActivityAssigneeChange/ActivityAssigneeChange.styled.cjs.js");require("./ActivityVersions/ActivityVersions.styled.cjs.js");require("./ActivityGroup/ActivityGroup.styled.cjs.js");require("./ActivityVersionReview/ActivityVersionReview.styled.cjs.js");require("./ActivityCategorySelect/ActivityCategorySelect.cjs.js");require("./ActivityCategorySelect/CategoryDropdownItem.cjs.js");require("../Feed.styled.cjs.js");require("@tanstack/react-virtual");require("@tanstack/react-table");require("../../ProjectTreeTable/widgets/CollapsedWidget.cjs.js");require("../../ProjectTreeTable/widgets/DateWidget.cjs.js");require("../../ProjectTreeTable/widgets/EnumWidget.cjs.js");require("../../ProjectTreeTable/widgets/EnumCellValue.cjs.js");require("../../ProjectTreeTable/widgets/TextWidget.cjs.js");require("../../ProjectTreeTable/widgets/MarkdownWidget.cjs.js");require("../../ProjectTreeTable/widgets/BooleanWidget.cjs.js");require("../../ProjectTreeTable/widgets/CellWidget.cjs.js");require("../../ProjectTreeTable/widgets/EntityNameWidget.cjs.js");require("../../ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js");require("../../ProjectTreeTable/widgets/ThumbnailWidget.cjs.js");require("../../ProjectTreeTable/widgets/LinksWidget.cjs.js");require("short-uuid");require("../../ProjectTreeTable/context/CellEditingContext.cjs.js");require("../../ProjectTreeTable/context/SelectionCellsContext.cjs.js");require("../../ProjectTreeTable/context/ProjectTableQueriesContext.cjs.js");require("../../ProjectTreeTable/context/ClipboardContext.cjs.js");require("../../ProjectTreeTable/context/ColumnSettingsContext.cjs.js");require("../../ProjectTreeTable/context/SelectedRowsContext.cjs.js");require("../../ProjectTreeTable/context/DetailsPanelEntityContext.cjs.js");require("../../ProjectTreeTable/context/ProjectDataContextInstance.cjs.js");require("../../ProjectTreeTable/context/ProjectTableContextInstance.cjs.js");require("../../ProjectTreeTable/widgets/EmptyWidget.cjs.js");require("../../ProjectTreeTable/widgets/ErrorWidget.cjs.js");require("../../ProjectTreeTable/ProjectTreeTable.styled.cjs.js");require("../../ProjectTreeTable/components/SelectionCell.cjs.js");require("../../ProjectTreeTable/components/RowSelectionHeader.cjs.js");require("../../ProjectTreeTable/widgets/LoadMoreWidget.cjs.js");require("../../ProjectTreeTable/components/HeaderActionButton.cjs.js");require("../../ProjectTreeTable/components/TableFooterRow.cjs.js");require("../../DetailsPanel/DetailsPanel.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelTabs/DetailsPanelTabs.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js");require("../../../components/PlayableIcon/PlayableIcon.cjs.js");require("../../DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js");require("../../DetailsPanel/components/DetailsPanelMoreMenu/components/ShareDialog.cjs.js");require("../../DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js");require("../../DetailsPanel/components/SubtasksSearchFilter/SubtasksSearchFilter.cjs.js");require("../../DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.styled.cjs.js");require("../../Actions/Actions.styled.cjs.js");require("../../Actions/ActionsDropdown/ActionsDropdown.cjs.js");require("../../Actions/ActionIcon.cjs.js");require("../../Views/ViewsMenu/ViewsMenu.cjs.js");require("../../Views/context/ViewsContextInstance.cjs.js");require("../../Views/Views.styled.cjs.js");require("../../Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js");require("../../ListTable/ListTableRow.cjs.js");require("../../ListTable/ListTable.styled.cjs.js");require("../../../context/DeleteEntitiesContext.cjs.js");const A=require("../../../components/SearchFilter/useDateRangeFilter.cjs.js"),E=require("../../../components/SearchFilter/CustomDateRangeDialog.cjs.js"),w=k.div`
1
+ "use strict";const d=require("../../../../../_virtual/jsx-runtime.cjs.js"),u=require("react"),E=require("@ynput/ayon-react-components"),k=require("styled-components"),F=require("../helpers/feedFilterAdapter.cjs.js"),w=require("../../../components/SearchFilter/filterDates.cjs.js");require("lodash");require("react-toastify");require("uuid");require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/dataImport.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/projectFolders.cjs.js");require("../../../api/generated/reviewables.cjs.js");require("../../../api/generated/services.cjs.js");require("../../../api/generated/system.cjs.js");require("../../../api/generated/tasks.cjs.js");require("../../../api/generated/teams.cjs.js");require("../../../api/generated/thumbnails.cjs.js");require("../../../api/generated/uRIs.cjs.js");require("../../../api/generated/users.cjs.js");require("../../../api/generated/versions.cjs.js");require("../../../api/generated/workfiles.cjs.js");require("../../../api/generated/ynputCloud.cjs.js");require("../../../api/generated/grouping.cjs.js");require("../../../api/generated/views.cjs.js");require("../../../api/queries/actions/getActions.cjs.js");require("../../../api/queries/activities/getActivities.cjs.js");require("../../../api/queries/activities/updateReaction.cjs.js");require("../../../api/queries/activities/getMentions.cjs.js");require("../../../api/queries/activities/getCategories.cjs.js");require("../../../api/queries/addons/getAddons.cjs.js");require("../../../api/queries/addons/updateAddons.cjs.js");require("../../../api/queries/attributes/getAttributes.cjs.js");require("../../../api/queries/attributes/updateAttributes.cjs.js");require("../../../api/queries/authentication/getAuthentication.cjs.js");require("../../../api/queries/bundles/getBundles.cjs.js");require("../../../api/queries/bundles/updateBundles.cjs.js");require("../../../api/queries/cloud/cloud.cjs.js");require("../../../api/queries/columnStats/metricTargets.cjs.js");require("../../../api/queries/columnStats/groupCounts.cjs.js");require("../../../api/queries/config/getConfig.cjs.js");require("../../../api/queries/config/updateConfig.cjs.js");require("../../../api/queries/entities/getEntity.cjs.js");require("../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../api/queries/overview/getOverview.cjs.js");require("../../../api/queries/overview/updateOverview.cjs.js");require("../../../api/queries/versions/getVersionsProducts.cjs.js");require("../../../api/queries/links/getEntityLinks.cjs.js");require("../../../api/queries/entities/updateEntity.cjs.js");require("../../../api/queries/entityLists/getLists.cjs.js");require("../../../api/queries/entityLists/updateLists.cjs.js");require("../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../api/queries/entityLists/listItemsColumnStats.cjs.js");require("../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../api/queries/entityLists/listFolders.cjs.js");require("../../../api/queries/folders/getFolders.cjs.js");require("../../../api/queries/folders/getFolderDeleteInfo.cjs.js");require("../../../api/queries/grouping/getGrouping.cjs.js");require("../../../api/queries/links/updateLinks.cjs.js");require("../../../api/queries/links/getLinks.cjs.js");require("../../../api/queries/permissions/getPermissions.cjs.js");require("../../../api/queries/products/createProduct.cjs.js");require("../../../api/queries/products/getFolderProducts.cjs.js");require("../../../api/queries/project/getProject.cjs.js");require("../../../api/queries/project/updateProject.cjs.js");require("../../../api/queries/projectFolders/projectFolders.cjs.js");require("../../../api/queries/review/getReview.cjs.js");require("../../../api/queries/review/updateReview.cjs.js");require("../../../api/queries/share/share.cjs.js");require("../../../api/queries/system/getSystem.cjs.js");require("../../../api/queries/tasks/getTasks.cjs.js");require("../../../api/queries/tasks/updateTasks.cjs.js");require("../../../api/queries/teams/getTeams.cjs.js");require("../../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../../api/queries/users/getUsers.cjs.js");require("../../../api/queries/users/updateUsers.cjs.js");require("../../../api/queries/users/guests.cjs.js");require("../../../api/queries/versions/updateVersions.cjs.js");require("../../../api/queries/views/getViews.cjs.js");require("../../../api/queries/views/updateViews.cjs.js");require("../../../api/queries/watchers/getWatchers.cjs.js");require("../../../api/queries/uris/getUris.cjs.js");require("../../../util/pubsub.cjs.js");require("../../../components/FeaturedVersionOrder/FeaturedVersionOrder.cjs.js");require("../../../context/RemoteModulesContext.cjs.js");require("../../../../node_modules/@module-federation/runtime/dist/index.cjs.js");require("../../../../../_virtual/semver.cjs.js");require("react-redux");require("custom-protocol-check");require("../../ProjectTreeTable/components/GroupSettingsFallback.cjs.js");require("../../../context/PowerpackContextInstance.cjs.js");require("../../../context/UriContext.cjs.js");require("../../../context/DetailsPanelContextInstance.cjs.js");require("../../../context/SubtasksModulesContextInstance.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/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/ProjectFoldersContextInstance.cjs.js");require("../../../context/EntityUpdatesContextInstance.cjs.js");require("../../ContextMenu/ContextMenuContext.cjs.js");;/* empty css */require("clsx");require("../context/FeedContext.cjs.js");require("./Tooltips/UserTooltipItem.cjs.js");require("./Tooltips/UserTooltip/UserTooltip.styled.cjs.js");require("./Tooltips/TeamTooltip/TeamTooltip.styled.cjs.js");require("./Tooltips/EntityTooltip/EntityTooltip.styled.cjs.js");require("./FileUploadPreview/FileUploadPreview.styled.cjs.js");require("./FileUploadPreview/Mimes/TextMime.cjs.js");require("react-markdown");require("remark-emoji");require("remark-gfm");require("remark-directive");require("remark-directive-rehype");require("./CommentInput/CommentInput.cjs.js");require("./ReactionContainer/Reactions.styled.cjs.js");require("./FilesGrid/FilesGrid.styled.cjs.js");require("./FileUploadCard/FileUploadCard.styled.cjs.js");require("./CommentInput/quillToMarkdown.cjs.js");require("./ActivityComment/ActivityComment.styled.cjs.js");require("./ActivityCheckbox/ActivityCheckbox.styled.cjs.js");require("../../../components/AddonLoadingScreen/AddonLoadingScreen.cjs.js");require("../../../../../node_modules/match-sorter/dist/match-sorter.esm.cjs.js");require("../../../components/AccessSearchInput/AccessSearchInput.styled.cjs.js");require("../../../components/AccessUser/AccessUser.cjs.js");require("../../../components/AttributeEditor/AttributeEditor.cjs.js");require("../../../components/AttributeEditor/attributeTypeMap.cjs.js");require("../../../components/Badge/Badge.cjs.js");require("../../../components/Chips/Chips.cjs.js");require("date-fns");require("../../../components/DateRangePicker/DateRangePicker.styled.cjs.js");require("../../../components/LinksManager/CellEditingDialog.cjs.js");require("../../../components/DeleteEntitiesConfirm/DeleteConfirmContent.cjs.js");require("../../../../../_virtual/index.cjs.js");require("../../../../../node_modules/refractor/lib/common.cjs.js");require("../../../../../node_modules/refractor/lib/all.cjs.js");;/* empty css */require("../../../components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js");require("../../../components/DetailsPanelDetails/DetailsPanelDetails.cjs.js");require("react-quill-ayon");require("../../../components/DetailsPanelDetails/BorderedSection.cjs.js");require("../../../components/QuillListStyles/QuillListStyles.cjs.js");require("../../../components/DetailsPanelDetails/DescriptionSection.styles.cjs.js");require("rehype-raw");require("../../../components/DetailsPanelDetails/hooks/useMentionSystem.cjs.js");require("./CommentInput/modules/index.cjs.js");require("../../../components/DetailsPanelDetails/DetailsSection.cjs.js");require("../../../components/DetailsPanelDetails/FieldLabel.cjs.js");require("../../../components/DoneCheckbox/DoneCheckbox.cjs.js");require("../../../components/EarlyPreview/EarlyPreview.cjs.js");require("../../../components/EmptyPlaceholder/EmptyPlaceholder.cjs.js");require("../../../components/EmptyPlaceholder/EmptyPlaceholderFlex.styled.cjs.js");require("../../../components/InfoMessage/InfoMessage.cjs.js");require("@dnd-kit/core");require("@dnd-kit/sortable");require("../../../components/EnumEditor/EnumEditor.styled.cjs.js");require("../../../components/EntityPanelUploader/EntityPanelUploader.styled.cjs.js");require("axios");require("../../../components/ReviewablesList/ReviewablesList.styled.cjs.js");require("../../../components/ReviewablesList/ReviewablesUpload.styled.cjs.js");require("../../../components/EntityPath/EntityPath.styled.cjs.js");require("../../../components/EntityPath/SegmentProvider.cjs.js");require("../../../components/Feedback/FeedbackContextInstance.cjs.js");require("../../../components/Feedback/SupportBubble.cjs.js");require("../../../components/FileThumbnail/FileThumbnail.cjs.js");require("../../../components/LegacyBadge/LegacyBadge.cjs.js");require("../../../components/LinksManager/LinksManager.styled.cjs.js");require("../../EntityPickerDialog/EntityPickerDialog.cjs.js");require("../../../components/Powerpack/PowerpackButton.cjs.js");require("../../../components/Powerpack/FreeTrialLink.cjs.js");require("../../../components/Powerpack/PowerpackDialog.styled.cjs.js");require("../../../components/Powerpack/CTAButton.cjs.js");require("../../../components/Powerpack/RequiredAddonVersion.cjs.js");require("../../../components/ProjectTableSettings/ProjectTableSettings.cjs.js");require("../../../components/SizeSlider/SizeSlider.cjs.js");require("react-router-dom");require("../../Slicer/components/Slicer.cjs.js");require("../../Slicer/context/SlicerContextInstance.cjs.js");require("../../Slicer/components/SlicerDropdownFallback.cjs.js");require("../../Slicer/hooks/useTableDataBySlice.cjs.js");require("../../../components/ReviewableCard/ReviewableCard.cjs.js");require("../../../components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js");require("../../../components/SettingsPanel/SettingsPanel.cjs.js");require("../../../components/SettingsPanel/SettingsPanelItemTemplate.cjs.js");require("../../../components/ShareOptionIcon/ShareOptionIcon.cjs.js");require("../../../components/SimpleFormDialog/SimpleFormDialog.cjs.js");require("../../../components/StyledLink/StyledLink.cjs.js");require("../../../components/SyncButton/SyncButton.cjs.js");require("../../../components/TableGridSwitch/TableGridSwitch.cjs.js");require("../../../components/Thumbnail/Thumbnail.styled.cjs.js");require("../../../components/Thumbnail/StackedThumbnails.cjs.js");require("../../../components/ThumbnailSimple/ThumbnailSimple.cjs.js");require("../../../components/VersionUploader/components/UploadVersionDialog.cjs.js");require("../../../components/VersionUploader/context/VersionUploadContextInstance.cjs.js");require("../../../components/Watchers/Watchers.cjs.js");require("../../../components/Menu/Menu.styled.cjs.js");require("../../../components/Menu/MenuItem.cjs.js");require("../../../components/ReviewablesSelector/ReviewablesSelector.cjs.js");require("../../../components/ColumnHeaderMenuUI.cjs.js");require("./ActivityReference/ActivityReference.styled.cjs.js");require("./ActivityStatus/ActivityStatus.cjs.js");require("./ActivityHeader/ActivityHeader.styled.cjs.js");require("./ActivityDate.cjs.js");require("./ActivityCategorySelect/CategoryTag.cjs.js");require("./ActivityStatusChange/ActivityStatusChange.styled.cjs.js");require("./ActivityStatusChange/ActivityStatusSecondary.cjs.js");require("./ActivityAssigneeChange/ActivityAssigneeChange.styled.cjs.js");require("./ActivityVersions/ActivityVersions.styled.cjs.js");require("./ActivityGroup/ActivityGroup.styled.cjs.js");require("./ActivityVersionReview/ActivityVersionReview.styled.cjs.js");require("./ActivityCategorySelect/ActivityCategorySelect.cjs.js");require("./ActivityCategorySelect/CategoryDropdownItem.cjs.js");require("../Feed.styled.cjs.js");require("@tanstack/react-virtual");require("@tanstack/react-table");require("../../ProjectTreeTable/widgets/CollapsedWidget.cjs.js");require("../../ProjectTreeTable/widgets/DateWidget.cjs.js");require("../../ProjectTreeTable/widgets/EnumWidget.cjs.js");require("../../ProjectTreeTable/widgets/EnumCellValue.cjs.js");require("../../ProjectTreeTable/widgets/TextWidget.cjs.js");require("../../ProjectTreeTable/widgets/MarkdownWidget.cjs.js");require("../../ProjectTreeTable/widgets/BooleanWidget.cjs.js");require("../../ProjectTreeTable/widgets/CellWidget.cjs.js");require("../../ProjectTreeTable/widgets/EntityNameWidget.cjs.js");require("../../ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js");require("../../ProjectTreeTable/widgets/ThumbnailWidget.cjs.js");require("../../ProjectTreeTable/widgets/LinksWidget.cjs.js");require("short-uuid");require("../../ProjectTreeTable/context/CellEditingContext.cjs.js");require("../../ProjectTreeTable/context/SelectionCellsContext.cjs.js");require("../../ProjectTreeTable/context/ProjectTableQueriesContext.cjs.js");require("../../ProjectTreeTable/context/ClipboardContext.cjs.js");require("../../ProjectTreeTable/context/ColumnSettingsContext.cjs.js");require("../../ProjectTreeTable/context/SelectedRowsContext.cjs.js");require("../../ProjectTreeTable/context/DetailsPanelEntityContext.cjs.js");require("../../ProjectTreeTable/context/ProjectDataContextInstance.cjs.js");require("../../ProjectTreeTable/context/ProjectTableContextInstance.cjs.js");require("../../ProjectTreeTable/widgets/EmptyWidget.cjs.js");require("../../ProjectTreeTable/widgets/ErrorWidget.cjs.js");require("../../ProjectTreeTable/ProjectTreeTable.styled.cjs.js");require("../../ProjectTreeTable/components/SelectionCell.cjs.js");require("../../ProjectTreeTable/components/RowSelectionHeader.cjs.js");require("../../ProjectTreeTable/widgets/LoadMoreWidget.cjs.js");require("../../ProjectTreeTable/components/HeaderActionButton.cjs.js");require("../../ProjectTreeTable/components/TableFooterRow.cjs.js");require("../../DetailsPanel/DetailsPanel.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelTabs/DetailsPanelTabs.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js");require("../../../components/PlayableIcon/PlayableIcon.cjs.js");require("../../DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js");require("../../DetailsPanel/components/DetailsPanelMoreMenu/components/ShareDialog.cjs.js");require("../../DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js");require("../../DetailsPanel/components/SubtasksSearchFilter/SubtasksSearchFilter.cjs.js");require("../../DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.styled.cjs.js");require("../../Actions/Actions.styled.cjs.js");require("../../Actions/ActionsDropdown/ActionsDropdown.cjs.js");require("../../Actions/ActionIcon.cjs.js");require("../../Views/ViewsMenu/ViewsMenu.cjs.js");require("../../Views/context/ViewsContextInstance.cjs.js");require("../../Views/Views.styled.cjs.js");require("../../Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js");require("../../ListTable/ListTableRow.cjs.js");require("../../ListTable/ListTable.styled.cjs.js");require("../../../context/DeleteEntitiesContext.cjs.js");const j=require("../../../components/SearchFilter/useDateRangeFilter.cjs.js"),A=require("../../../components/SearchFilter/CustomDateRangeDialog.cjs.js"),O=k.div`
2
2
  padding: 4px 8px;
3
3
  padding-bottom: 0;
4
4
  filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.25));
@@ -13,5 +13,5 @@
13
13
  opacity: 0.5;
14
14
  pointer-events: none;
15
15
  }
16
- `,O=({feedFilter:c,setFeedFilter:F,users:d,categories:s,supportsReviewSession:p,isLoading:_,checklistCount:a,onSearchTextChange:m})=>{const u=q.useMemo(()=>{const e=(i,y,S)=>({id:i,label:y,icon:S,type:"boolean",singleSelect:!0,values:[]});return[e("comments","Comments","chat"),e("versions","Versions","layers"),e("updates","Updates","arrow_circle_right"),e("checklists","Checklists","check_circle"),e("has_attachments","Attachments","attach_file"),...p?[e("in_review_session","Review session","subscriptions")]:[],...s.length?[{id:"category",label:"Category",icon:"label",type:"list_of_strings",operator:"OR",values:[{id:"__none__",label:"No category",icon:"crop_square"},...s.map(i=>({id:i.name,label:i.name,icon:"crop_square",color:i.color}))]}]:[],{id:"author",label:"User",icon:"person",type:"list_of_strings",operator:"OR",values:d.map(i=>({id:i.name,label:i.attrib?.fullName||i.name,img:`/api/users/${i.name}/avatar`}))},{id:"createdAt",label:"Posted date",icon:"calendar_today",type:"datetime",values:j.generateDateOptions()}]},[d,s,p]);let o="";a?.total&&a.total>0&&(o=`${a.checked}/${a.total}`);const R=q.useMemo(()=>["comments",{id:"checklists",label:o,tooltip:"Checklists"}],[o]),n=q.useMemo(()=>b.feedFilterToClientFilters(c,u),[c,u]),[t,h]=q.useState(n),g=q.useRef(null),r=A.useDateRangeFilter();q.useEffect(()=>{h(n)},[JSON.stringify(n)]);const C=e=>{F(b.clientFiltersToFeedFilter(e)),m?.("")},D=e=>{r.wrapFilterChange(e,t,h)},x=(e,f)=>{f||m?.(e)};return l.jsxRuntimeExports.jsxs(w,{className:_?"loading":void 0,children:[l.jsxRuntimeExports.jsx(v.SearchFilter,{ref:g,compact:!0,options:u,filters:t,onChange:D,onFinish:C,enableGlobalSearch:!0,enableMultipleSameFilters:!1,enableAutosuggestion:!0,onSearchChange:x,quickActions:R,placeholder:"Search and filter feed...",pt:{searchBar:{onClickCapture:e=>r.handleSearchBarClickCapture(e,t)},dropdown:{pt:{item:{onClick:e=>r.handleDropdownItemClick(e,t,u)}}}}}),l.jsxRuntimeExports.jsx(E.CustomDateRangeDialog,{isOpen:!!r.customRangeFilterId,header:u.find(e=>e.id===r.customRangeFilterId?.split("__")[0])?.label??"Custom range",startDate:r.customStartDate,endDate:r.customEndDate,onStartDateChange:r.setCustomStartDate,onEndDateChange:r.setCustomEndDate,onApply:()=>r.handleCustomRangeApply(t,u,C,g),onClose:r.handleCustomRangeClose})]})};module.exports=O;
16
+ `,b=u.forwardRef(({feedFilter:p,setFeedFilter:R,users:m,categories:o,supportsReviewSession:h,isLoading:_,checklistCount:n,onSearchTextChange:g})=>{const q=u.useMemo(()=>{const e=(r,v,S)=>({id:r,label:v,icon:S,type:"boolean",singleSelect:!0,values:[]});return[e("comments","Comments","chat"),e("versions","Versions","layers"),e("updates","Updates","arrow_circle_right"),e("checklists","Checklists","check_circle"),e("has_attachments","Attachments","attach_file"),...h?[e("in_review_session","Review session","subscriptions")]:[],...o.length?[{id:"category",label:"Category",icon:"label",type:"list_of_strings",operator:"OR",values:[{id:"__none__",label:"No category",icon:"crop_square"},...o.map(r=>({id:r.name,label:r.name,icon:"crop_square",color:r.color}))]}]:[],{id:"author",label:"User",icon:"person",type:"list_of_strings",operator:"OR",values:m.map(r=>({id:r.name,label:r.attrib?.fullName||r.name,img:`/api/users/${r.name}/avatar`}))},{id:"createdAt",label:"Posted date",icon:"calendar_today",type:"datetime",values:w.generateDateOptions()}]},[m,o,h]);let l="";n?.total&&n.total>0&&(l=`${n.checked}/${n.total}`);const D=u.useMemo(()=>["comments",{id:"checklists",label:l,tooltip:"Checklists"}],[l]),c=u.useMemo(()=>F.feedFilterToClientFilters(p,q),[p,q]),[t,f]=u.useState(c),i=j.useDateRangeFilter(),a=u.useRef(null);u.useEffect(()=>{f(c)},[JSON.stringify(c)]),u.useEffect(()=>{const e=s=>{const r=a.current?.getContainerElement();r&&!r.contains(s.target)&&a.current?.close()};return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[a]);const C=e=>{R(F.clientFiltersToFeedFilter(e)),g?.("")},x=e=>{i.wrapFilterChange(e,t,f)},y=(e,s)=>{s||g?.(e)};return d.jsxRuntimeExports.jsxs(O,{className:_?"loading":void 0,children:[d.jsxRuntimeExports.jsx(E.SearchFilter,{ref:a,compact:!0,options:q,filters:t,onChange:x,onFinish:C,enableGlobalSearch:!0,enableMultipleSameFilters:!1,enableAutosuggestion:!0,onSearchChange:y,quickActions:D,placeholder:"Search and filter feed...",pt:{searchBar:{onClickCapture:e=>i.handleSearchBarClickCapture(e,t)},dropdown:{pt:{item:{onClick:e=>i.handleDropdownItemClick(e,t,q)}}}}}),d.jsxRuntimeExports.jsx(A.CustomDateRangeDialog,{isOpen:!!i.customRangeFilterId,header:q.find(e=>e.id===i.customRangeFilterId?.split("__")[0])?.label??"Custom range",startDate:i.customStartDate,endDate:i.customEndDate,onStartDateChange:i.setCustomStartDate,onEndDateChange:i.setCustomEndDate,onApply:()=>i.handleCustomRangeApply(t,q,C,a),onClose:i.handleCustomRangeClose})]})});b.displayName="FeedSearchFilter";module.exports=b;
17
17
  //# sourceMappingURL=FeedSearchFilter.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FeedSearchFilter.cjs.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","CustomDateRangeDialog","o"],"mappings":"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"}
1
+ {"version":3,"file":"FeedSearchFilter.cjs.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","CustomDateRangeDialog","o"],"mappings":"60iBAeMA,EAAUC,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA4BjBC,EAAmBC,EAAAA,WACvB,CAAC,CACC,WAAAC,EACA,cAAAC,EACA,MAAAC,EACA,WAAAC,EACA,sBAAAC,EACA,UAAAC,EACA,eAAAC,EACA,mBAAAC,CAAA,IACI,CACJ,MAAMC,EAAoBC,EAAAA,QAAQ,IAAM,CAEtC,MAAMC,EAAU,CAACC,EAAYC,EAAeC,KAA0B,CACpE,GAAAF,EACA,MAAAC,EACA,KAAAC,EACA,KAAM,UACN,aAAc,GACd,OAAQ,CAAA,CAAC,GAqDX,MAlDuB,CACrBH,EAAQ,WAAY,WAAY,MAAM,EACtCA,EAAQ,WAAY,WAAY,QAAQ,EACxCA,EAAQ,UAAW,UAAW,oBAAoB,EAClDA,EAAQ,aAAc,aAAc,cAAc,EAClDA,EAAQ,kBAAmB,cAAe,aAAa,EACvD,GAAIN,EACA,CAACM,EAAQ,oBAAqB,iBAAkB,eAAe,CAAC,EAChE,CAAA,EACJ,GAAIP,EAAW,OACX,CACE,CACE,GAAI,WACJ,MAAO,WACP,KAAM,QACN,KAAM,kBACN,SAAU,KACV,OAAQ,CACN,CAAE,GAAI,WAAY,MAAO,cAAe,KAAM,aAAA,EAC9C,GAAGA,EAAW,IAAKW,IAAO,CACxB,GAAIA,EAAE,KACN,MAAOA,EAAE,KACT,KAAM,cACN,MAAOA,EAAE,KAAA,EACT,CAAA,CACJ,CACF,EAEF,CAAA,EACJ,CACE,GAAI,SACJ,MAAO,OACP,KAAM,SACN,KAAM,kBACN,SAAU,KACV,OAAQZ,EAAM,IAAKa,IAAO,CACxB,GAAIA,EAAE,KACN,MAAOA,EAAE,QAAQ,UAAYA,EAAE,KAC/B,IAAK,cAAcA,EAAE,IAAI,SAAA,EACzB,CAAA,EAEJ,CACE,GAAI,YACJ,MAAO,cACP,KAAM,iBACN,KAAM,WACN,OAAQC,EAAAA,oBAAA,CAAoB,CAC9B,CAIJ,EAAG,CAACd,EAAOC,EAAYC,CAAqB,CAAC,EAE7C,IAAIa,EAA0B,GAC1BX,GAAgB,OAASA,EAAe,MAAQ,IAClDW,EAAkB,GAAGX,EAAe,OAAO,IAAIA,EAAe,KAAK,IAIrE,MAAMY,EAA0CT,EAAAA,QAC9C,IAAM,CAAC,WAAY,CAAE,GAAI,aAAc,MAAOQ,EAAiB,QAAS,aAAc,EACtF,CAACA,CAAe,CAAA,EAGZE,EAAUV,EAAAA,QACd,IAAMW,EAAAA,0BAA0BpB,EAAYQ,CAAO,EACnD,CAACR,EAAYQ,CAAO,CAAA,EAGhB,CAACa,EAAcC,CAAe,EAAIC,EAAAA,SAAmBJ,CAAO,EAE5DK,EAAYC,EAAAA,mBAAA,EAEZC,EAAkBC,EAAAA,OAAwB,IAAI,EAEpDC,EAAAA,UAAU,IAAM,CACdN,EAAgBH,CAAO,CACzB,EAAG,CAAC,KAAK,UAAUA,CAAO,CAAC,CAAC,EAG5BS,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAsBC,GAAsB,CAChD,MAAMC,EAAkBL,EAAgB,SAAS,oBAAA,EAE7CK,GAAmB,CAACA,EAAgB,SAASD,EAAM,MAAc,GACnEJ,EAAgB,SAAS,MAAA,CAE7B,EAEA,gBAAS,iBAAiB,YAAaG,CAAkB,EAClD,IAAM,CACX,SAAS,oBAAoB,YAAaA,CAAkB,CAC9D,CACF,EAAG,CAACH,CAAe,CAAC,EAEpB,MAAMM,EAAgBC,GAAyB,CAC7ChC,EAAciC,EAAAA,0BAA0BD,CAAU,CAAC,EACnD1B,IAAqB,EAAE,CACzB,EAEM4B,EAAsBF,GAAyB,CACnDT,EAAU,iBAAiBS,EAAYZ,EAAcC,CAAe,CACtE,EAEMc,EAAmB,CAACC,EAAeC,IAA0B,CAE3DA,GACN/B,IAAqB8B,CAAK,CAC5B,EAEA,OACEE,EAAAA,kBAAAA,KAAC3C,EAAA,CAAQ,UAAWS,EAAY,UAAY,OAC1C,SAAA,CAAAmC,EAAAA,kBAAAA,IAACC,EAAAA,aAAA,CACC,IAAKf,EACL,QAAO,GACP,QAAAlB,EACA,QAASa,EACT,SAAUc,EACV,SAAUH,EACV,mBAAkB,GAClB,0BAA2B,GAC3B,qBAAsB,GACtB,eAAgBI,EAChB,aAAAlB,EACA,YAAY,4BACZ,GAAI,CACF,UAAW,CACT,eAAiB,GAAMM,EAAU,4BAA4B,EAAGH,CAAY,CAAA,EAE9E,SAAU,CACR,GAAI,CACF,KAAM,CACJ,QAAU,GAAMG,EAAU,wBAAwB,EAAGH,EAAcb,CAAO,CAAA,CAC5E,CACF,CACF,CACF,CAAA,EAEFgC,EAAAA,kBAAAA,IAACE,EAAAA,sBAAA,CACC,OAAQ,CAAC,CAAClB,EAAU,oBACpB,OACEhB,EAAQ,KAAMmC,GAAMA,EAAE,KAAOnB,EAAU,qBAAqB,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,OAC7E,eAEF,UAAWA,EAAU,gBACrB,QAASA,EAAU,cACnB,kBAAmBA,EAAU,mBAC7B,gBAAiBA,EAAU,iBAC3B,QAAS,IACPA,EAAU,uBAAuBH,EAAcb,EAASwB,EAAcN,CAAe,EAEvF,QAASF,EAAU,sBAAA,CAAA,CACrB,EACF,CAEJ,CACF,EAEA1B,EAAiB,YAAc"}