@ynput/ayon-frontend-shared 0.3.55 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/dist/_virtual/index.cjs4.js +1 -1
  2. package/dist/_virtual/index.cjs5.js +1 -1
  3. package/dist/_virtual/index.cjs6.js +1 -1
  4. package/dist/_virtual/index.cjs8.js +1 -1
  5. package/dist/_virtual/index.cjs9.js +1 -1
  6. package/dist/_virtual/index.es15.js +2 -2
  7. package/dist/_virtual/index.es4.js +5 -2
  8. package/dist/_virtual/index.es4.js.map +1 -1
  9. package/dist/_virtual/index.es5.js +2 -5
  10. package/dist/_virtual/index.es5.js.map +1 -1
  11. package/dist/_virtual/index.es6.js +2 -2
  12. package/dist/_virtual/index.es8.js +2 -5
  13. package/dist/_virtual/index.es8.js.map +1 -1
  14. package/dist/_virtual/index.es9.js +5 -2
  15. package/dist/_virtual/index.es9.js.map +1 -1
  16. package/dist/api.cjs.js +1 -1
  17. package/dist/api.es.js +193 -192
  18. package/dist/node_modules/match-sorter/dist/match-sorter.esm.cjs.js +1 -1
  19. package/dist/node_modules/match-sorter/dist/match-sorter.esm.es.js +1 -1
  20. package/dist/node_modules/parse-numeric-range/index.cjs.js +1 -1
  21. package/dist/node_modules/parse-numeric-range/index.es.js +1 -1
  22. package/dist/node_modules/remove-accents/index.cjs.js +1 -1
  23. package/dist/node_modules/remove-accents/index.cjs.js.map +1 -1
  24. package/dist/node_modules/remove-accents/index.es.js +1 -1
  25. package/dist/shared/node_modules/@module-federation/error-codes/dist/index.cjs.js +1 -1
  26. package/dist/shared/node_modules/@module-federation/error-codes/dist/index.es.js +1 -1
  27. package/dist/shared/node_modules/@module-federation/runtime/dist/index.cjs.js +1 -1
  28. package/dist/shared/node_modules/@module-federation/runtime/dist/index.es.js +1 -1
  29. package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.cjs.js +1 -1
  30. package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.es.js +1 -1
  31. package/dist/shared/node_modules/prop-types/index.cjs.js +1 -1
  32. package/dist/shared/node_modules/prop-types/index.cjs.js.map +1 -1
  33. package/dist/shared/node_modules/prop-types/index.es.js +1 -1
  34. package/dist/shared/node_modules/react-is/index.cjs.js +1 -1
  35. package/dist/shared/node_modules/react-is/index.es.js +1 -1
  36. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js +1 -1
  37. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.es.js +1 -1
  38. package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js +1 -1
  39. package/dist/shared/node_modules/react-transition-group/esm/Transition.es.js +1 -1
  40. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js +1 -1
  41. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.es.js +1 -1
  42. package/dist/shared/src/api/generated/graphql.cjs.js +4 -0
  43. package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
  44. package/dist/shared/src/api/generated/graphql.es.js +4 -0
  45. package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
  46. package/dist/shared/src/api/generated/graphqlLinks.cjs.js.map +1 -1
  47. package/dist/shared/src/api/generated/graphqlLinks.es.js.map +1 -1
  48. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js +1 -1
  49. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js.map +1 -1
  50. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js +17 -16
  51. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js.map +1 -1
  52. package/dist/shared/src/api/queries/entityLists/getLists.cjs.js +1 -1
  53. package/dist/shared/src/api/queries/entityLists/getLists.cjs.js.map +1 -1
  54. package/dist/shared/src/api/queries/entityLists/getLists.es.js +47 -47
  55. package/dist/shared/src/api/queries/entityLists/getLists.es.js.map +1 -1
  56. package/dist/shared/src/api/queries/folders/getFolders.cjs.js +1 -1
  57. package/dist/shared/src/api/queries/folders/getFolders.cjs.js.map +1 -1
  58. package/dist/shared/src/api/queries/folders/getFolders.es.js +20 -22
  59. package/dist/shared/src/api/queries/folders/getFolders.es.js.map +1 -1
  60. package/dist/shared/src/api/queries/overview/getOverview.cjs.js +1 -1
  61. package/dist/shared/src/api/queries/overview/getOverview.cjs.js.map +1 -1
  62. package/dist/shared/src/api/queries/overview/getOverview.es.js +92 -89
  63. package/dist/shared/src/api/queries/overview/getOverview.es.js.map +1 -1
  64. package/dist/shared/src/api/queries/project/getProject.cjs.js +1 -1
  65. package/dist/shared/src/api/queries/project/getProject.cjs.js.map +1 -1
  66. package/dist/shared/src/api/queries/project/getProject.es.js +1 -1
  67. package/dist/shared/src/api/queries/project/getProject.es.js.map +1 -1
  68. package/dist/shared/src/api/queries/users/getUsers.cjs.js +1 -1
  69. package/dist/shared/src/api/queries/users/getUsers.cjs.js.map +1 -1
  70. package/dist/shared/src/api/queries/users/getUsers.es.js +1 -1
  71. package/dist/shared/src/api/queries/users/getUsers.es.js.map +1 -1
  72. package/dist/shared/src/api/queries/versions/getVersionsProducts.cjs.js +1 -1
  73. package/dist/shared/src/api/queries/versions/getVersionsProducts.cjs.js.map +1 -1
  74. package/dist/shared/src/api/queries/versions/getVersionsProducts.es.js +23 -23
  75. package/dist/shared/src/api/queries/versions/getVersionsProducts.es.js.map +1 -1
  76. package/dist/shared/src/api/queries/versions/getVersionsProductsUtils.cjs.js +1 -1
  77. package/dist/shared/src/api/queries/versions/getVersionsProductsUtils.cjs.js.map +1 -1
  78. package/dist/shared/src/api/queries/versions/getVersionsProductsUtils.es.js +13 -13
  79. package/dist/shared/src/api/queries/versions/getVersionsProductsUtils.es.js.map +1 -1
  80. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js +3 -3
  81. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js.map +1 -1
  82. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js +51 -50
  83. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js.map +1 -1
  84. package/dist/shared/src/components/RemotePage/ProjectPageRemote.cjs.js +1 -1
  85. package/dist/shared/src/components/RemotePage/ProjectPageRemote.cjs.js.map +1 -1
  86. package/dist/shared/src/components/RemotePage/ProjectPageRemote.es.js +26 -24
  87. package/dist/shared/src/components/RemotePage/ProjectPageRemote.es.js.map +1 -1
  88. package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js +1 -1
  89. package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js.map +1 -1
  90. package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js +31 -18
  91. package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js.map +1 -1
  92. package/dist/shared/src/containers/ListTable/ListTableWidgets.cjs.js +1 -1
  93. package/dist/shared/src/containers/ListTable/ListTableWidgets.cjs.js.map +1 -1
  94. package/dist/shared/src/containers/ListTable/ListTableWidgets.es.js +62 -58
  95. package/dist/shared/src/containers/ListTable/ListTableWidgets.es.js.map +1 -1
  96. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
  97. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  98. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +21 -20
  99. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  100. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +1 -1
  101. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
  102. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +25 -24
  103. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
  104. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js +1 -1
  105. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -1
  106. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js +20 -19
  107. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
  108. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js +1 -1
  109. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js.map +1 -1
  110. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js +152 -133
  111. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js.map +1 -1
  112. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +2 -2
  113. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
  114. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +75 -73
  115. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
  116. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidget.cjs.js +1 -1
  117. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidget.cjs.js.map +1 -1
  118. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidget.es.js +21 -19
  119. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidget.es.js.map +1 -1
  120. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidgetInput.cjs.js +2 -2
  121. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidgetInput.cjs.js.map +1 -1
  122. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidgetInput.es.js +58 -43
  123. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidgetInput.es.js.map +1 -1
  124. package/dist/types/api/generated/graphql.d.ts +5 -0
  125. package/dist/types/api/generated/graphqlLinks.d.ts +1 -0
  126. package/dist/types/api/queries/entities/transformDetailsPanelData.d.ts +1 -0
  127. package/dist/types/api/queries/overview/getOverview.d.ts +2 -1
  128. package/dist/types/components/RemotePage/RemotePageWrapper.d.ts +25 -1
  129. package/dist/types/containers/ProjectTreeTable/types/table.d.ts +3 -1
  130. package/dist/types/containers/ProjectTreeTable/widgets/CellWidget.d.ts +1 -0
  131. package/dist/types/containers/ProjectTreeTable/widgets/DateWidget.d.ts +1 -0
  132. package/dist/types/containers/ProjectTreeTable/widgets/DateWidgetInput.d.ts +1 -0
  133. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"getOverview.es.js","sources":["../../../../../../src/api/queries/overview/getOverview.ts"],"sourcesContent":["import {\n gqlApi,\n GetTasksByParentQuery,\n GetTasksListQuery,\n GetFolderColumnStatsQuery,\n GetTaskColumnStatsQuery,\n foldersApi,\n SearchFoldersApiArg,\n GetTasksListQueryVariables,\n} from '@shared/api/generated'\nimport PubSub from '@shared/util/pubsub'\nimport { subscribeToThumbnailUpdates, ThumbnailUpdateMessage } from '@shared/util'\nimport { EditorTaskNode } from '@shared/containers/ProjectTreeTable'\nimport type { FieldStats } from '../columnStats'\nimport {\n normalizeFieldStats,\n mergeFieldStats,\n hasNewTargetFields,\n transformStatsError,\n} from '../columnStats'\nimport {\n DefinitionsFromApi,\n FetchBaseQueryError,\n OverrideResultType,\n TagTypesFromApi,\n} from '@reduxjs/toolkit/query'\n\nconst CACHE_TIME = 10 // seconds\n\n// parse attribs JSON string to object\nexport const parseAllAttribs = (allAttrib: string) => {\n try {\n return JSON.parse(allAttrib)\n } catch (e) {\n return {}\n }\n}\n\nconst transformFilteredEntitiesByParent = (response: GetTasksByParentQuery): EditorTaskNode[] => {\n if (!response.project) {\n return []\n }\n\n const tasks: EditorTaskNode[] = []\n for (const { node: taskNode } of response.project.tasks.edges) {\n tasks.push({\n ...taskNode,\n folderId: taskNode.folderId || 'root',\n attrib: parseAllAttribs(taskNode.allAttrib),\n entityId: taskNode.id,\n entityType: 'task',\n links: [],\n })\n }\n\n return tasks\n}\n\nconst getOverviewTaskTags = (\n result: EditorTaskNode[] | undefined = [],\n projectName: string,\n parentIds?: string | string[],\n) => {\n const taskTags = result?.map((task) => ({ type: 'overviewTask', id: task.id })) || []\n\n const parentTags = parentIds\n ? (Array.isArray(parentIds) ? parentIds : [parentIds]).map((id) => ({\n type: 'overviewTask',\n id,\n }))\n : []\n\n return [\n ...taskTags,\n ...parentTags,\n { type: 'overviewTask', id: projectName },\n { type: 'overviewTask', id: 'LIST' },\n ]\n}\n\nexport type GetTasksListResult = {\n pageInfo: GetTasksListQuery['project']['tasks']['pageInfo']\n tasks: EditorTaskNode[]\n}\nexport type GetTasksByParentResult = {\n pageInfo: GetTasksByParentQuery['project']['tasks']['pageInfo']\n tasks: EditorTaskNode[]\n}\n\nexport type GetTasksListArgs = {\n projectName: string\n filter?: string\n folderFilter?: string\n search?: string\n folderIds?: string[]\n taskIds?: string[]\n desc?: boolean\n sortBy?: string\n showComments?: boolean\n includeFolderChildren?: boolean\n}\n\nexport type GetGroupedTasksListResult = {\n tasks: EditorTaskNode[]\n}\n\nexport type GetGroupedTasksListArgs = {\n projectName: string\n groups: { filter: string; count: number; value: string }[]\n search?: string\n folderFilter?: string\n folderIds?: string[]\n desc?: boolean\n sortBy?: string\n groupCount?: number // optional override for all groups\n showComments?: boolean\n}\n\n// Define the page param type for infinite query\ntype TasksListPageParam = {\n cursor: string\n desc?: boolean\n}\n\ntype Definitions = DefinitionsFromApi<typeof gqlApi>\ntype TagTypes = TagTypesFromApi<typeof gqlApi>\ntype UpdatedDefinitions = Omit<Definitions, 'GetFilteredEntities'> & {\n GetTasksByParent: OverrideResultType<Definitions['GetTasksByParent'], GetTasksByParentResult>\n GetTasksList: OverrideResultType<Definitions['GetTasksList'], GetTasksListResult>\n GetFolderColumnStats: OverrideResultType<Definitions['GetFolderColumnStats'], FieldStats[]>\n GetTaskColumnStats: OverrideResultType<Definitions['GetTaskColumnStats'], FieldStats[]>\n}\n\n// GRAPHQL API\nconst enhancedApi = gqlApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n // This gets tasks for all parent folders provided\n // But in this case it will only ever receive one parent folder from the getOverviewTasksByFolders query\n // It is only used by getOverviewTasksByFolders in this file\n GetTasksByParent: {\n transformResponse: (res: GetTasksByParentQuery) => ({\n pageInfo: res?.project?.tasks?.pageInfo ?? { hasNextPage: false, endCursor: null },\n tasks: transformFilteredEntitiesByParent(res),\n }),\n providesTags: (result, _e, { parentIds, projectName }) =>\n getOverviewTaskTags(result?.tasks || [], projectName, parentIds),\n keepUnusedDataFor: CACHE_TIME,\n },\n GetTasksList: {\n transformResponse: (result: GetTasksListQuery) => ({\n tasks: transformFilteredEntitiesByParent(result),\n pageInfo: result.project.tasks.pageInfo,\n }),\n providesTags: (result, _e, { projectName }) =>\n getOverviewTaskTags(result?.tasks || [], projectName),\n keepUnusedDataFor: CACHE_TIME,\n },\n // footer stats: `targets` excluded from cache key + responses merged,\n // so column toggles reuse cache and only added targets refetch\n GetFolderColumnStats: {\n transformResponse: (res: GetFolderColumnStatsQuery) =>\n normalizeFieldStats(res?.project?.folders?.fieldStats ?? []),\n transformErrorResponse: (error: any) => transformStatsError(error, 'folder'),\n serializeQueryArgs: ({ queryArgs: { targets: _t, ...rest } }) => rest,\n merge: (cache, incoming) => mergeFieldStats(incoming, cache),\n forceRefetch: ({ currentArg, previousArg }) => hasNewTargetFields(currentArg, previousArg),\n providesTags: (_r, _e, { projectName }) => [{ type: 'folderColumnStats', id: projectName }],\n keepUnusedDataFor: CACHE_TIME,\n },\n GetTaskColumnStats: {\n transformResponse: (res: GetTaskColumnStatsQuery) =>\n normalizeFieldStats(res?.project?.tasks?.fieldStats ?? []),\n transformErrorResponse: (error: any) => transformStatsError(error, 'task'),\n serializeQueryArgs: ({ queryArgs: { targets: _t, ...rest } }) => rest,\n merge: (cache, incoming) => mergeFieldStats(incoming, cache),\n forceRefetch: ({ currentArg, previousArg }) => hasNewTargetFields(currentArg, previousArg),\n providesTags: (_r, _e, { projectName }) => [{ type: 'taskColumnStats', id: projectName }],\n keepUnusedDataFor: CACHE_TIME,\n },\n },\n})\n\n// REST FOLDERS API\nconst foldersApiEnhanced = foldersApi.enhanceEndpoints({\n endpoints: {\n searchFolders: {},\n },\n})\n\nexport const TASKS_INFINITE_QUERY_COUNT = 100 // Number of items to fetch per page\n\n// --- TRACKING REGISTRY FOR EMPTY FOLDERS (FILTER-AWARE) ---\nconst queriedFoldersRegistry: Record<string, Set<string>> = {}\n\nconst getCacheKey = (\n projectName: string,\n filter?: string,\n folderFilter?: string,\n search?: string,\n showComments?: boolean,\n) => {\n return JSON.stringify({ projectName, filter, folderFilter, search, showComments })\n}\n\nconst markFoldersAsQueried = (cacheKey: string, folderIds: string[]) => {\n if (!queriedFoldersRegistry[cacheKey]) {\n queriedFoldersRegistry[cacheKey] = new Set()\n }\n folderIds.forEach((id) => queriedFoldersRegistry[cacheKey].add(id))\n}\n\nconst getQueriedFolders = (cacheKey: string): Set<string> => {\n return queriedFoldersRegistry[cacheKey] || new Set()\n}\n\nconst injectedApi = enhancedApi.injectEndpoints({\n endpoints: (build) => ({\n // Each project has one cache for all the tasks of the expanded folders\n // Changing the expanded folders will trigger a refetch but not a new cache\n // Each expanded folder has it's own query that is looped over here\n // When new folders are expanded, the new tasks are fetched and we use the cache for the rest\n // This also solves the pagination issue of getting all tasks in one query, splitting it up in multiple queries to avoid pagination limits\n getOverviewTasksByFolders: build.query<\n EditorTaskNode[],\n {\n projectName: string\n parentIds: string[]\n filter?: string\n folderFilter?: string\n search?: string\n showComments?: boolean\n }\n >({\n async queryFn(\n { projectName, parentIds, filter, folderFilter, search, showComments },\n { dispatch, getState, forced },\n ) {\n try {\n const state = getState()\n const cacheArgs = { projectName, filter, folderFilter, search, showComments }\n\n // Select current flat cache state\n const currentCache = (injectedApi.endpoints as any).getOverviewTasksByFolders.select(\n cacheArgs,\n )(state)\n const cacheData: EditorTaskNode[] = currentCache?.data || []\n\n // 1. Generate a stable cache key matching RTK Query's serialization\n const cacheKey = getCacheKey(projectName, filter, folderFilter, search, showComments)\n\n // 2. Fetch our registry specific to THIS combination of search/filters\n const alreadyQueriedFolders = getQueriedFolders(cacheKey)\n\n // 3. Diffing: Only request folders that haven't hit the network under these specific filters\n // If forced, we ignore the registry and fetch all folders again, like a refresh\n const newFolderIds = forced\n ? parentIds\n : parentIds.filter((id) => !alreadyQueriedFolders.has(id))\n\n // Short-circuit if all expanded folders have been evaluated for this filter setup\n if (newFolderIds.length === 0) {\n return { data: cacheData }\n }\n\n const allNewTasks: EditorTaskNode[] = []\n const BATCH_SIZE = 100\n const TASK_PER_FOLDER = 20\n const MAX_PAGES_PER_BATCH = 10\n const MAX_FOLDERS = 1000\n const TASKS_PER_PAGE = BATCH_SIZE * TASK_PER_FOLDER\n\n if (newFolderIds.length > MAX_FOLDERS) {\n throw new Error(\n `Exceeded maximum folders count limit ${MAX_FOLDERS} (${newFolderIds.length}). Please reduce the number of expanded folders.`,\n )\n }\n\n // 5. Batch folder IDs into groups and process them sequentially\n for (let i = 0; i < newFolderIds.length; i += BATCH_SIZE) {\n const batchFolderIds = newFolderIds.slice(i, i + BATCH_SIZE)\n\n let hasNextPage = true\n let cursor: string | undefined = undefined\n let pageCount = 0\n\n while (hasNextPage && pageCount < MAX_PAGES_PER_BATCH) {\n pageCount++\n\n if (pageCount === MAX_PAGES_PER_BATCH) {\n throw new Error(\n `Exceeded maximum tasks count limit ${MAX_PAGES_PER_BATCH * TASKS_PER_PAGE}.`,\n )\n }\n\n const result = await dispatch(\n enhancedApi.endpoints.GetTasksByParent.initiate(\n {\n projectName,\n parentIds: batchFolderIds,\n filter,\n folderFilter,\n search,\n showComments: !!showComments,\n first: TASKS_PER_PAGE,\n after: cursor,\n },\n { forceRefetch: true },\n ),\n )\n\n if (result.error) throw result.error\n const data = result.data as GetTasksByParentResult\n\n const fetchedTasks = data?.tasks || []\n allNewTasks.push(...fetchedTasks)\n\n const pageInfo = data?.pageInfo\n hasNextPage = pageInfo?.hasNextPage || false\n cursor = pageInfo?.endCursor || undefined\n }\n }\n\n // 4. Only mark folders as queried if the network loops complete successfully\n markFoldersAsQueried(cacheKey, newFolderIds)\n\n // 5. Append new tasks to the existing flat array cache with task ID deduplication\n const finalTasks = [...cacheData, ...allNewTasks]\n const uniqueTasksMap = new Map(finalTasks.map((task) => [task.id, task]))\n\n return {\n data: Array.from(uniqueTasksMap.values()),\n }\n } catch (e: any) {\n console.error(e)\n const errorMessage =\n e.message || e.data?.message || JSON.stringify(e) || 'Unknown Fetch Error'\n return { error: { status: 'FETCH_ERROR', error: errorMessage } as FetchBaseQueryError }\n }\n },\n // keep one cache per project\n serializeQueryArgs: ({ queryArgs: { parentIds, ...rest } }) => ({\n ...rest,\n }),\n // Refetch when the page arg changes\n forceRefetch({ currentArg, previousArg }) {\n return JSON.stringify(currentArg) !== JSON.stringify(previousArg)\n },\n providesTags: (result, _e, { parentIds, projectName }) =>\n getOverviewTaskTags(result, projectName, parentIds),\n async onCacheEntryAdded(\n { projectName, parentIds, filter, folderFilter, search, showComments },\n { cacheDataLoaded, cacheEntryRemoved, updateCachedData, dispatch },\n ) {\n let token: any\n const pendingTaskIds = new Set<string>()\n const MAX_BATCH = 100\n const INTERVAL = 500\n let scheduled = false\n\n const schedule = () => {\n if (scheduled) return\n scheduled = true\n setTimeout(flush, INTERVAL)\n }\n\n const flush = async () => {\n scheduled = false\n if (!pendingTaskIds.size) return\n const batchIds = Array.from(pendingTaskIds).slice(0, MAX_BATCH)\n batchIds.forEach((id) => pendingTaskIds.delete(id))\n try {\n const res = await dispatch(\n enhancedApi.endpoints.GetTasksList.initiate(\n {\n projectName,\n taskIds: batchIds,\n showComments: !!showComments,\n } as any,\n { forceRefetch: true },\n ),\n ).unwrap()\n const returned = res.tasks || []\n const returnedMap = new Map(returned.map((t: EditorTaskNode) => [t.id, t]))\n\n updateCachedData((draft: EditorTaskNode[]) => {\n // update or add\n for (const task of returned) {\n const idx = draft.findIndex((t) => t.id === task.id)\n if (idx > -1) draft[idx] = task\n else draft.push(task)\n }\n // remove missing\n for (const id of batchIds) {\n if (!returnedMap.has(id)) {\n const idx = draft.findIndex((t) => t.id === id)\n if (idx > -1) draft.splice(idx, 1)\n }\n }\n })\n } catch (err) {\n console.error('Realtime overview batch update failed', err)\n } finally {\n if (pendingTaskIds.size) schedule()\n }\n }\n let unsubscribeThumbnails: (() => void) | undefined\n try {\n await cacheDataLoaded\n\n unsubscribeThumbnails = subscribeToThumbnailUpdates(\n (messages: ThumbnailUpdateMessage[]) => {\n updateCachedData((draft: EditorTaskNode[]) => {\n messages.forEach((message) => {\n if (message.summary.entityType === 'task' && message.summary.thumbnailHash) {\n const idx = draft.findIndex((t) => t.id === message.summary.entityId)\n if (idx > -1) {\n draft[idx].thumbnailHash = message.summary.thumbnailHash\n }\n }\n })\n })\n },\n ['task'],\n )\n\n const handlePubSub = async (_topic: string, message: any) => {\n const taskId = message?.summary?.entityId\n const parentId = message?.summary?.parentId\n if (!taskId || !parentId) return\n // Only react if the parent folder is part of the current expanded set\n if (!parentIds.includes(parentId)) return\n pendingTaskIds.add(taskId)\n schedule()\n }\n\n // Subscribe to task entity updates\n // NOTE: backend emits topics like 'entity.task.assignees_changed'.\n // Assuming PubSub supports prefix matching when subscribing without the suffix.\n token = PubSub.subscribe('entity.task', handlePubSub)\n } catch (e) {\n // cache entry removed before loaded - ignore\n }\n\n await cacheEntryRemoved\n\n // Evict tracking map memory entry completely when this RTK Query cache entry expires\n const deadCacheKey = getCacheKey(projectName, filter, folderFilter, search, showComments)\n delete queriedFoldersRegistry[deadCacheKey]\n\n if (token) PubSub.unsubscribe(token)\n if (unsubscribeThumbnails) unsubscribeThumbnails()\n },\n keepUnusedDataFor: CACHE_TIME,\n }),\n // searchFolders is a post so it's a bit annoying to consume\n // we wrap it in a queryFn to make it easier to consume as a query hook\n getSearchFolders: build.query<string[], SearchFoldersApiArg>({\n async queryFn({ projectName, folderSearchRequest }, { dispatch }) {\n try {\n const result = await dispatch(\n foldersApiEnhanced.endpoints.searchFolders.initiate({\n projectName,\n folderSearchRequest,\n }),\n )\n\n const data = result.data?.folderIds || []\n\n return { data }\n } catch (e: any) {\n console.error(e)\n const error = { status: 'FETCH_ERROR', error: e.message } as FetchBaseQueryError\n return { error }\n }\n },\n providesTags: (_r, _e, { projectName }) => [{ type: 'tasksFolder', id: projectName }],\n keepUnusedDataFor: CACHE_TIME,\n }),\n // Add new infinite query endpoint for tasks list\n getTasksListInfinite: build.infiniteQuery<\n GetTasksListResult,\n GetTasksListArgs,\n TasksListPageParam\n >({\n infiniteQueryOptions: {\n initialPageParam: { cursor: '', desc: false },\n // Calculate the next page param based on current page response and params\n getNextPageParam: (lastPage, _allPages, lastPageParam, _allPageParams) => {\n // Use the endCursor from the query as the next page param\n const pageInfo = lastPage.pageInfo\n const desc = lastPageParam.desc\n const hasNextPage = desc ? pageInfo.hasPreviousPage : pageInfo.hasNextPage\n\n if (!hasNextPage || !pageInfo.endCursor) return undefined\n\n return {\n cursor: pageInfo.endCursor,\n desc: lastPageParam.desc,\n }\n },\n },\n queryFn: async ({ queryArg, pageParam }, api) => {\n try {\n const {\n projectName,\n filter,\n folderFilter,\n search,\n folderIds,\n taskIds,\n sortBy,\n desc,\n showComments,\n includeFolderChildren,\n } = queryArg\n const { cursor } = pageParam\n\n // Build the query parameters for GetTasksList\n const queryParams: any = {\n projectName,\n filter,\n folderFilter,\n search,\n folderIds,\n taskIds,\n showComments: !!showComments,\n includeFolderChildren: includeFolderChildren !== false, // default to true\n }\n\n // Add cursor-based pagination\n if (sortBy) {\n queryParams.sortBy = sortBy\n if (desc) {\n queryParams.before = cursor || undefined\n queryParams.last = TASKS_INFINITE_QUERY_COUNT\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = TASKS_INFINITE_QUERY_COUNT\n }\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = TASKS_INFINITE_QUERY_COUNT\n }\n\n // Call the existing GetTasksList endpoint\n const result = await api.dispatch(\n enhancedApi.endpoints.GetTasksList.initiate(queryParams, { forceRefetch: true }),\n )\n\n if (result.error) throw result.error\n const fallback = {\n tasks: [],\n pageInfo: {\n hasNextPage: false,\n endCursor: null,\n startCursor: null,\n hasPreviousPage: false,\n },\n }\n\n // Return the tasks directly as required by the infinite query format\n return {\n data: result.data || fallback,\n }\n } catch (e: any) {\n console.error('Error in getTasksListInfinite queryFn:', e)\n return { error: { status: 'FETCH_ERROR', error: e.message } as FetchBaseQueryError }\n }\n },\n providesTags: (result, _e, { projectName }) =>\n getOverviewTaskTags(result?.pages.flatMap((p) => p.tasks) || [], projectName),\n async onCacheEntryAdded(\n arg,\n { cacheDataLoaded, cacheEntryRemoved, updateCachedData, dispatch },\n ) {\n let token: any\n const pendingTaskIds = new Set<string>()\n const MAX_BATCH = 100\n const INTERVAL = 500\n let scheduled = false\n\n const schedule = () => {\n if (scheduled) return\n scheduled = true\n setTimeout(flush, INTERVAL)\n }\n\n const flush = async () => {\n scheduled = false\n if (!pendingTaskIds.size) return\n const batchIds = Array.from(pendingTaskIds).slice(0, MAX_BATCH)\n batchIds.forEach((id) => pendingTaskIds.delete(id))\n try {\n const res = await dispatch(\n enhancedApi.endpoints.GetTasksList.initiate(\n {\n projectName: arg.projectName,\n taskIds: batchIds,\n folderIds: arg.folderIds,\n showComments: !!arg.showComments,\n } as any,\n { forceRefetch: true },\n ),\n ).unwrap()\n\n const returned = res.tasks || []\n const returnedMap = new Map(returned.map((t: EditorTaskNode) => [t.id, t]))\n\n updateCachedData((draft: { pages: GetTasksListResult[]; pageParams: any[] }) => {\n // update/insert\n for (const task of returned) {\n let located = false\n for (const page of draft.pages) {\n const idx = page.tasks.findIndex((t) => t.id === task.id)\n if (idx !== -1) {\n page.tasks[idx] = task\n located = true\n break\n }\n }\n if (!located) {\n if (draft.pages.length) draft.pages[0].tasks.unshift(task)\n else\n draft.pages.push({\n tasks: [task],\n pageInfo: {\n startCursor: null,\n endCursor: null,\n hasNextPage: false,\n hasPreviousPage: false,\n },\n })\n }\n }\n // remove any requested but missing tasks\n for (const id of batchIds) {\n if (returnedMap.has(id)) continue\n for (const page of draft.pages) {\n const idx = page.tasks.findIndex((t) => t.id === id)\n if (idx !== -1) {\n page.tasks.splice(idx, 1)\n break\n }\n }\n }\n })\n } catch (err) {\n console.error('Realtime infinite tasks batch update failed', err)\n } finally {\n if (pendingTaskIds.size) schedule()\n }\n }\n let unsubscribeThumbnails: (() => void) | undefined\n try {\n await cacheDataLoaded\n\n unsubscribeThumbnails = subscribeToThumbnailUpdates(\n (messages: ThumbnailUpdateMessage[]) => {\n updateCachedData((draft: { pages: GetTasksListResult[]; pageParams: any[] }) => {\n messages.forEach((message) => {\n if (message.summary.entityType === 'task' && message.summary.thumbnailHash) {\n for (const page of draft.pages) {\n const idx = page.tasks.findIndex((t) => t.id === message.summary.entityId)\n if (idx > -1) {\n page.tasks[idx].thumbnailHash = message.summary.thumbnailHash\n break\n }\n }\n }\n })\n })\n },\n ['task'],\n )\n\n const handlePubSub = async (_topic: string, message: any) => {\n const taskId = message?.summary?.entityId\n if (!taskId) return\n pendingTaskIds.add(taskId)\n schedule()\n }\n\n token = PubSub.subscribe('entity.task', handlePubSub)\n } catch (_) {\n // ignore\n }\n await cacheEntryRemoved\n if (token) PubSub.unsubscribe(token)\n if (unsubscribeThumbnails) unsubscribeThumbnails()\n },\n keepUnusedDataFor: CACHE_TIME,\n }),\n getGroupedTasksList: build.query<GetGroupedTasksListResult, GetGroupedTasksListArgs>({\n queryFn: async (\n {\n projectName,\n groups,\n search,\n folderFilter,\n folderIds,\n desc,\n sortBy,\n groupCount,\n showComments,\n },\n api,\n ) => {\n try {\n let promises = []\n // Folder-level filter keys that must go in folderFilter, not task filter\n const folderFilterKeys = new Set(['folderType'])\n\n for (const group of groups) {\n // Determine count for this group - use argument override, else group count, else default\n const count = groupCount || group.count || 500\n\n // Separate folder-level conditions from task-level conditions in the group filter\n let taskFilter: string | undefined = group.filter\n let mergedFolderFilter = folderFilter\n if (group.filter) {\n try {\n const parsed = JSON.parse(group.filter)\n const conditions = parsed.conditions || []\n const taskConditions = conditions.filter((c: any) => !folderFilterKeys.has(c.key))\n const folderConditions = conditions.filter((c: any) => folderFilterKeys.has(c.key))\n\n if (folderConditions.length > 0) {\n taskFilter = taskConditions.length\n ? JSON.stringify({ ...parsed, conditions: taskConditions })\n : undefined\n // Merge folder conditions with existing folderFilter, preserving metadata\n const existingFolderFilter = folderFilter ? JSON.parse(folderFilter) : null\n const existingConditions =\n existingFolderFilter && Array.isArray(existingFolderFilter.conditions)\n ? existingFolderFilter.conditions\n : []\n const allFolderConditions = [...existingConditions, ...folderConditions]\n mergedFolderFilter = JSON.stringify(\n existingFolderFilter\n ? { ...existingFolderFilter, conditions: allFolderConditions }\n : { conditions: allFolderConditions },\n )\n }\n } catch {\n // If parsing fails, use the original filter as-is\n }\n }\n\n const queryParams: GetTasksListQueryVariables = {\n projectName,\n filter: taskFilter,\n folderFilter: mergedFolderFilter,\n search,\n folderIds,\n sortBy: sortBy,\n showComments: !!showComments,\n // @ts-expect-error - we know group does not exist on query variables but we need it for later\n group: group.value,\n }\n if (desc) {\n queryParams.last = count\n } else {\n queryParams.first = count\n }\n\n const promise = api.dispatch(\n enhancedApi.endpoints.GetTasksList.initiate(queryParams, { forceRefetch: true }),\n )\n promises.push(promise)\n }\n\n const result = await Promise.all(promises)\n const tasks: EditorTaskNode[] = []\n for (const res of result) {\n if (res.error) throw res.error\n // get group value\n // @ts-expect-error - we know group does exist on res.originalArgs from line 319\n const groupValue = res.originalArgs?.group as string\n\n const hasNextPage =\n res.data?.pageInfo?.hasNextPage || res.data?.pageInfo?.hasPreviousPage || false\n const groupTasks =\n res.data?.tasks.map((task, i, a) => ({\n ...task,\n groups: [\n {\n value: groupValue,\n hasNextPage: i === a.length - 1 && hasNextPage ? groupValue : undefined, // Only add hasNextPage to the last task in the group\n },\n ],\n })) || []\n\n tasks.push(...groupTasks)\n }\n\n // Return the tasks directly as required by the query format\n return {\n data: {\n tasks,\n },\n }\n } catch (error: any) {\n console.error('Error in getGroupedTasksList queryFn:', error)\n return { error: { status: 'FETCH_ERROR', error: error.message } as FetchBaseQueryError }\n }\n },\n providesTags: (result, _e, { projectName }) =>\n getOverviewTaskTags(result?.tasks, projectName),\n keepUnusedDataFor: CACHE_TIME,\n }),\n }),\n})\n\nexport const {\n useGetOverviewTasksByFoldersQuery,\n useGetSearchFoldersQuery,\n useGetTasksListQuery,\n useGetTasksListInfiniteInfiniteQuery,\n useLazyGetTasksByParentQuery,\n useGetGroupedTasksListQuery,\n useGetFolderColumnStatsQuery,\n useGetTaskColumnStatsQuery,\n} = injectedApi\nexport default injectedApi\n"],"names":["CACHE_TIME","parseAllAttribs","allAttrib","transformFilteredEntitiesByParent","response","tasks","taskNode","getOverviewTaskTags","result","projectName","parentIds","taskTags","task","parentTags","id","enhancedApi","gqlApi","res","_e","normalizeFieldStats","error","transformStatsError","_t","rest","cache","incoming","mergeFieldStats","currentArg","previousArg","hasNewTargetFields","_r","foldersApiEnhanced","foldersApi","TASKS_INFINITE_QUERY_COUNT","queriedFoldersRegistry","getCacheKey","filter","folderFilter","search","showComments","markFoldersAsQueried","cacheKey","folderIds","getQueriedFolders","injectedApi","build","dispatch","getState","forced","state","cacheArgs","cacheData","alreadyQueriedFolders","newFolderIds","allNewTasks","BATCH_SIZE","TASK_PER_FOLDER","MAX_PAGES_PER_BATCH","MAX_FOLDERS","TASKS_PER_PAGE","i","batchFolderIds","hasNextPage","cursor","pageCount","data","fetchedTasks","pageInfo","finalTasks","uniqueTasksMap","e","cacheDataLoaded","cacheEntryRemoved","updateCachedData","token","pendingTaskIds","MAX_BATCH","INTERVAL","scheduled","schedule","flush","batchIds","returned","returnedMap","t","draft","idx","err","unsubscribeThumbnails","subscribeToThumbnailUpdates","messages","message","handlePubSub","_topic","taskId","parentId","PubSub","deadCacheKey","folderSearchRequest","lastPage","_allPages","lastPageParam","_allPageParams","queryArg","pageParam","api","taskIds","sortBy","desc","includeFolderChildren","queryParams","fallback","p","arg","located","page","groups","groupCount","promises","folderFilterKeys","group","count","taskFilter","mergedFolderFilter","parsed","conditions","taskConditions","c","folderConditions","existingFolderFilter","allFolderConditions","promise","groupValue","groupTasks","a","useGetOverviewTasksByFoldersQuery","useGetSearchFoldersQuery","useGetTasksListQuery","useGetTasksListInfiniteInfiniteQuery","useLazyGetTasksByParentQuery","useGetGroupedTasksListQuery","useGetFolderColumnStatsQuery","useGetTaskColumnStatsQuery"],"mappings":"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"}
1
+ {"version":3,"file":"getOverview.es.js","sources":["../../../../../../src/api/queries/overview/getOverview.ts"],"sourcesContent":["import {\n gqlApi,\n GetTasksByParentQuery,\n GetTasksListQuery,\n GetFolderColumnStatsQuery,\n GetTaskColumnStatsQuery,\n foldersApi,\n SearchFoldersApiArg,\n GetTasksListQueryVariables,\n} from '@shared/api/generated'\nimport PubSub from '@shared/util/pubsub'\nimport { subscribeToThumbnailUpdates, ThumbnailUpdateMessage } from '@shared/util'\nimport { EditorTaskNode } from '@shared/containers/ProjectTreeTable'\nimport type { FieldStats } from '../columnStats'\nimport {\n normalizeFieldStats,\n mergeFieldStats,\n hasNewTargetFields,\n transformStatsError,\n} from '../columnStats'\nimport {\n DefinitionsFromApi,\n FetchBaseQueryError,\n OverrideResultType,\n TagTypesFromApi,\n} from '@reduxjs/toolkit/query'\n\nconst CACHE_TIME = 10 // seconds\n\n// parse attribs JSON string to object\nexport const parseJSONField = (allAttrib: string | null | undefined): Record<string, unknown> => {\n if (!allAttrib) return {}\n try {\n return JSON.parse(allAttrib)\n } catch (e) {\n return {}\n }\n}\n// backwards compatibility for old API\nexport const parseAllAttribs = parseJSONField\n\nconst transformFilteredEntitiesByParent = (response: GetTasksByParentQuery): EditorTaskNode[] => {\n if (!response.project) {\n return []\n }\n\n const tasks: EditorTaskNode[] = []\n for (const { node: taskNode } of response.project.tasks.edges) {\n tasks.push({\n ...taskNode,\n folderId: taskNode.folderId || 'root',\n attrib: parseJSONField(taskNode.allAttrib),\n data: parseJSONField(taskNode.data),\n entityId: taskNode.id,\n entityType: 'task',\n links: [],\n })\n }\n\n return tasks\n}\n\nconst getOverviewTaskTags = (\n result: EditorTaskNode[] | undefined = [],\n projectName: string,\n parentIds?: string | string[],\n) => {\n const taskTags = result?.map((task) => ({ type: 'overviewTask', id: task.id })) || []\n\n const parentTags = parentIds\n ? (Array.isArray(parentIds) ? parentIds : [parentIds]).map((id) => ({\n type: 'overviewTask',\n id,\n }))\n : []\n\n return [\n ...taskTags,\n ...parentTags,\n { type: 'overviewTask', id: projectName },\n { type: 'overviewTask', id: 'LIST' },\n ]\n}\n\nexport type GetTasksListResult = {\n pageInfo: GetTasksListQuery['project']['tasks']['pageInfo']\n tasks: EditorTaskNode[]\n}\nexport type GetTasksByParentResult = {\n pageInfo: GetTasksByParentQuery['project']['tasks']['pageInfo']\n tasks: EditorTaskNode[]\n}\n\nexport type GetTasksListArgs = {\n projectName: string\n filter?: string\n folderFilter?: string\n search?: string\n folderIds?: string[]\n taskIds?: string[]\n desc?: boolean\n sortBy?: string\n showComments?: boolean\n includeFolderChildren?: boolean\n}\n\nexport type GetGroupedTasksListResult = {\n tasks: EditorTaskNode[]\n}\n\nexport type GetGroupedTasksListArgs = {\n projectName: string\n groups: { filter: string; count: number; value: string }[]\n search?: string\n folderFilter?: string\n folderIds?: string[]\n desc?: boolean\n sortBy?: string\n groupCount?: number // optional override for all groups\n showComments?: boolean\n}\n\n// Define the page param type for infinite query\ntype TasksListPageParam = {\n cursor: string\n desc?: boolean\n}\n\ntype Definitions = DefinitionsFromApi<typeof gqlApi>\ntype TagTypes = TagTypesFromApi<typeof gqlApi>\ntype UpdatedDefinitions = Omit<Definitions, 'GetFilteredEntities'> & {\n GetTasksByParent: OverrideResultType<Definitions['GetTasksByParent'], GetTasksByParentResult>\n GetTasksList: OverrideResultType<Definitions['GetTasksList'], GetTasksListResult>\n GetFolderColumnStats: OverrideResultType<Definitions['GetFolderColumnStats'], FieldStats[]>\n GetTaskColumnStats: OverrideResultType<Definitions['GetTaskColumnStats'], FieldStats[]>\n}\n\n// GRAPHQL API\nconst enhancedApi = gqlApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n // This gets tasks for all parent folders provided\n // But in this case it will only ever receive one parent folder from the getOverviewTasksByFolders query\n // It is only used by getOverviewTasksByFolders in this file\n GetTasksByParent: {\n transformResponse: (res: GetTasksByParentQuery) => ({\n pageInfo: res?.project?.tasks?.pageInfo ?? { hasNextPage: false, endCursor: null },\n tasks: transformFilteredEntitiesByParent(res),\n }),\n providesTags: (result, _e, { parentIds, projectName }) =>\n getOverviewTaskTags(result?.tasks || [], projectName, parentIds),\n keepUnusedDataFor: CACHE_TIME,\n },\n GetTasksList: {\n transformResponse: (result: GetTasksListQuery) => ({\n tasks: transformFilteredEntitiesByParent(result),\n pageInfo: result.project.tasks.pageInfo,\n }),\n providesTags: (result, _e, { projectName }) =>\n getOverviewTaskTags(result?.tasks || [], projectName),\n keepUnusedDataFor: CACHE_TIME,\n },\n // footer stats: `targets` excluded from cache key + responses merged,\n // so column toggles reuse cache and only added targets refetch\n GetFolderColumnStats: {\n transformResponse: (res: GetFolderColumnStatsQuery) =>\n normalizeFieldStats(res?.project?.folders?.fieldStats ?? []),\n transformErrorResponse: (error: any) => transformStatsError(error, 'folder'),\n serializeQueryArgs: ({ queryArgs: { targets: _t, ...rest } }) => rest,\n merge: (cache, incoming) => mergeFieldStats(incoming, cache),\n forceRefetch: ({ currentArg, previousArg }) => hasNewTargetFields(currentArg, previousArg),\n providesTags: (_r, _e, { projectName }) => [{ type: 'folderColumnStats', id: projectName }],\n keepUnusedDataFor: CACHE_TIME,\n },\n GetTaskColumnStats: {\n transformResponse: (res: GetTaskColumnStatsQuery) =>\n normalizeFieldStats(res?.project?.tasks?.fieldStats ?? []),\n transformErrorResponse: (error: any) => transformStatsError(error, 'task'),\n serializeQueryArgs: ({ queryArgs: { targets: _t, ...rest } }) => rest,\n merge: (cache, incoming) => mergeFieldStats(incoming, cache),\n forceRefetch: ({ currentArg, previousArg }) => hasNewTargetFields(currentArg, previousArg),\n providesTags: (_r, _e, { projectName }) => [{ type: 'taskColumnStats', id: projectName }],\n keepUnusedDataFor: CACHE_TIME,\n },\n },\n})\n\n// REST FOLDERS API\nconst foldersApiEnhanced = foldersApi.enhanceEndpoints({\n endpoints: {\n searchFolders: {},\n },\n})\n\nexport const TASKS_INFINITE_QUERY_COUNT = 100 // Number of items to fetch per page\n\n// --- TRACKING REGISTRY FOR EMPTY FOLDERS (FILTER-AWARE) ---\nconst queriedFoldersRegistry: Record<string, Set<string>> = {}\n\nconst getCacheKey = (\n projectName: string,\n filter?: string,\n folderFilter?: string,\n search?: string,\n showComments?: boolean,\n) => {\n return JSON.stringify({ projectName, filter, folderFilter, search, showComments })\n}\n\nconst markFoldersAsQueried = (cacheKey: string, folderIds: string[]) => {\n if (!queriedFoldersRegistry[cacheKey]) {\n queriedFoldersRegistry[cacheKey] = new Set()\n }\n folderIds.forEach((id) => queriedFoldersRegistry[cacheKey].add(id))\n}\n\nconst getQueriedFolders = (cacheKey: string): Set<string> => {\n return queriedFoldersRegistry[cacheKey] || new Set()\n}\n\nconst injectedApi = enhancedApi.injectEndpoints({\n endpoints: (build) => ({\n // Each project has one cache for all the tasks of the expanded folders\n // Changing the expanded folders will trigger a refetch but not a new cache\n // Each expanded folder has it's own query that is looped over here\n // When new folders are expanded, the new tasks are fetched and we use the cache for the rest\n // This also solves the pagination issue of getting all tasks in one query, splitting it up in multiple queries to avoid pagination limits\n getOverviewTasksByFolders: build.query<\n EditorTaskNode[],\n {\n projectName: string\n parentIds: string[]\n filter?: string\n folderFilter?: string\n search?: string\n showComments?: boolean\n }\n >({\n async queryFn(\n { projectName, parentIds, filter, folderFilter, search, showComments },\n { dispatch, getState, forced },\n ) {\n try {\n const state = getState()\n const cacheArgs = { projectName, filter, folderFilter, search, showComments }\n\n // Select current flat cache state\n const currentCache = (injectedApi.endpoints as any).getOverviewTasksByFolders.select(\n cacheArgs,\n )(state)\n const cacheData: EditorTaskNode[] = currentCache?.data || []\n\n // 1. Generate a stable cache key matching RTK Query's serialization\n const cacheKey = getCacheKey(projectName, filter, folderFilter, search, showComments)\n\n // 2. Fetch our registry specific to THIS combination of search/filters\n const alreadyQueriedFolders = getQueriedFolders(cacheKey)\n\n // 3. Diffing: Only request folders that haven't hit the network under these specific filters\n // If forced, we ignore the registry and fetch all folders again, like a refresh\n const newFolderIds = forced\n ? parentIds\n : parentIds.filter((id) => !alreadyQueriedFolders.has(id))\n\n // Short-circuit if all expanded folders have been evaluated for this filter setup\n if (newFolderIds.length === 0) {\n return { data: cacheData }\n }\n\n const allNewTasks: EditorTaskNode[] = []\n const BATCH_SIZE = 100\n const TASK_PER_FOLDER = 20\n const MAX_PAGES_PER_BATCH = 10\n const MAX_FOLDERS = 1000\n const TASKS_PER_PAGE = BATCH_SIZE * TASK_PER_FOLDER\n\n if (newFolderIds.length > MAX_FOLDERS) {\n throw new Error(\n `Exceeded maximum folders count limit ${MAX_FOLDERS} (${newFolderIds.length}). Please reduce the number of expanded folders.`,\n )\n }\n\n // 5. Batch folder IDs into groups and process them sequentially\n for (let i = 0; i < newFolderIds.length; i += BATCH_SIZE) {\n const batchFolderIds = newFolderIds.slice(i, i + BATCH_SIZE)\n\n let hasNextPage = true\n let cursor: string | undefined = undefined\n let pageCount = 0\n\n while (hasNextPage && pageCount < MAX_PAGES_PER_BATCH) {\n pageCount++\n\n if (pageCount === MAX_PAGES_PER_BATCH) {\n throw new Error(\n `Exceeded maximum tasks count limit ${MAX_PAGES_PER_BATCH * TASKS_PER_PAGE}.`,\n )\n }\n\n const result = await dispatch(\n enhancedApi.endpoints.GetTasksByParent.initiate(\n {\n projectName,\n parentIds: batchFolderIds,\n filter,\n folderFilter,\n search,\n showComments: !!showComments,\n first: TASKS_PER_PAGE,\n after: cursor,\n },\n { forceRefetch: true },\n ),\n )\n\n if (result.error) throw result.error\n const data = result.data as GetTasksByParentResult\n\n const fetchedTasks = data?.tasks || []\n allNewTasks.push(...fetchedTasks)\n\n const pageInfo = data?.pageInfo\n hasNextPage = pageInfo?.hasNextPage || false\n cursor = pageInfo?.endCursor || undefined\n }\n }\n\n // 4. Only mark folders as queried if the network loops complete successfully\n markFoldersAsQueried(cacheKey, newFolderIds)\n\n // 5. Append new tasks to the existing flat array cache with task ID deduplication\n const finalTasks = [...cacheData, ...allNewTasks]\n const uniqueTasksMap = new Map(finalTasks.map((task) => [task.id, task]))\n\n return {\n data: Array.from(uniqueTasksMap.values()),\n }\n } catch (e: any) {\n console.error(e)\n const errorMessage =\n e.message || e.data?.message || JSON.stringify(e) || 'Unknown Fetch Error'\n return { error: { status: 'FETCH_ERROR', error: errorMessage } as FetchBaseQueryError }\n }\n },\n // keep one cache per project\n serializeQueryArgs: ({ queryArgs: { parentIds, ...rest } }) => ({\n ...rest,\n }),\n // Refetch when the page arg changes\n forceRefetch({ currentArg, previousArg }) {\n return JSON.stringify(currentArg) !== JSON.stringify(previousArg)\n },\n providesTags: (result, _e, { parentIds, projectName }) =>\n getOverviewTaskTags(result, projectName, parentIds),\n async onCacheEntryAdded(\n { projectName, parentIds, filter, folderFilter, search, showComments },\n { cacheDataLoaded, cacheEntryRemoved, updateCachedData, dispatch },\n ) {\n let token: any\n const pendingTaskIds = new Set<string>()\n const MAX_BATCH = 100\n const INTERVAL = 500\n let scheduled = false\n\n const schedule = () => {\n if (scheduled) return\n scheduled = true\n setTimeout(flush, INTERVAL)\n }\n\n const flush = async () => {\n scheduled = false\n if (!pendingTaskIds.size) return\n const batchIds = Array.from(pendingTaskIds).slice(0, MAX_BATCH)\n batchIds.forEach((id) => pendingTaskIds.delete(id))\n try {\n const res = await dispatch(\n enhancedApi.endpoints.GetTasksList.initiate(\n {\n projectName,\n taskIds: batchIds,\n showComments: !!showComments,\n } as any,\n { forceRefetch: true },\n ),\n ).unwrap()\n const returned = res.tasks || []\n const returnedMap = new Map(returned.map((t: EditorTaskNode) => [t.id, t]))\n\n updateCachedData((draft: EditorTaskNode[]) => {\n // update or add\n for (const task of returned) {\n const idx = draft.findIndex((t) => t.id === task.id)\n if (idx > -1) draft[idx] = task\n else draft.push(task)\n }\n // remove missing\n for (const id of batchIds) {\n if (!returnedMap.has(id)) {\n const idx = draft.findIndex((t) => t.id === id)\n if (idx > -1) draft.splice(idx, 1)\n }\n }\n })\n } catch (err) {\n console.error('Realtime overview batch update failed', err)\n } finally {\n if (pendingTaskIds.size) schedule()\n }\n }\n let unsubscribeThumbnails: (() => void) | undefined\n try {\n await cacheDataLoaded\n\n unsubscribeThumbnails = subscribeToThumbnailUpdates(\n (messages: ThumbnailUpdateMessage[]) => {\n updateCachedData((draft: EditorTaskNode[]) => {\n messages.forEach((message) => {\n if (message.summary.entityType === 'task' && message.summary.thumbnailHash) {\n const idx = draft.findIndex((t) => t.id === message.summary.entityId)\n if (idx > -1) {\n draft[idx].thumbnailHash = message.summary.thumbnailHash\n }\n }\n })\n })\n },\n ['task'],\n )\n\n const handlePubSub = async (_topic: string, message: any) => {\n const taskId = message?.summary?.entityId\n const parentId = message?.summary?.parentId\n if (!taskId || !parentId) return\n // Only react if the parent folder is part of the current expanded set\n if (!parentIds.includes(parentId)) return\n pendingTaskIds.add(taskId)\n schedule()\n }\n\n // Subscribe to task entity updates\n // NOTE: backend emits topics like 'entity.task.assignees_changed'.\n // Assuming PubSub supports prefix matching when subscribing without the suffix.\n token = PubSub.subscribe('entity.task', handlePubSub)\n } catch (e) {\n // cache entry removed before loaded - ignore\n }\n\n await cacheEntryRemoved\n\n // Evict tracking map memory entry completely when this RTK Query cache entry expires\n const deadCacheKey = getCacheKey(projectName, filter, folderFilter, search, showComments)\n delete queriedFoldersRegistry[deadCacheKey]\n\n if (token) PubSub.unsubscribe(token)\n if (unsubscribeThumbnails) unsubscribeThumbnails()\n },\n keepUnusedDataFor: CACHE_TIME,\n }),\n // searchFolders is a post so it's a bit annoying to consume\n // we wrap it in a queryFn to make it easier to consume as a query hook\n getSearchFolders: build.query<string[], SearchFoldersApiArg>({\n async queryFn({ projectName, folderSearchRequest }, { dispatch }) {\n try {\n const result = await dispatch(\n foldersApiEnhanced.endpoints.searchFolders.initiate({\n projectName,\n folderSearchRequest,\n }),\n )\n\n const data = result.data?.folderIds || []\n\n return { data }\n } catch (e: any) {\n console.error(e)\n const error = { status: 'FETCH_ERROR', error: e.message } as FetchBaseQueryError\n return { error }\n }\n },\n providesTags: (_r, _e, { projectName }) => [{ type: 'tasksFolder', id: projectName }],\n keepUnusedDataFor: CACHE_TIME,\n }),\n // Add new infinite query endpoint for tasks list\n getTasksListInfinite: build.infiniteQuery<\n GetTasksListResult,\n GetTasksListArgs,\n TasksListPageParam\n >({\n infiniteQueryOptions: {\n initialPageParam: { cursor: '', desc: false },\n // Calculate the next page param based on current page response and params\n getNextPageParam: (lastPage, _allPages, lastPageParam, _allPageParams) => {\n // Use the endCursor from the query as the next page param\n const pageInfo = lastPage.pageInfo\n const desc = lastPageParam.desc\n const hasNextPage = desc ? pageInfo.hasPreviousPage : pageInfo.hasNextPage\n\n if (!hasNextPage || !pageInfo.endCursor) return undefined\n\n return {\n cursor: pageInfo.endCursor,\n desc: lastPageParam.desc,\n }\n },\n },\n queryFn: async ({ queryArg, pageParam }, api) => {\n try {\n const {\n projectName,\n filter,\n folderFilter,\n search,\n folderIds,\n taskIds,\n sortBy,\n desc,\n showComments,\n includeFolderChildren,\n } = queryArg\n const { cursor } = pageParam\n\n // Build the query parameters for GetTasksList\n const queryParams: any = {\n projectName,\n filter,\n folderFilter,\n search,\n folderIds,\n taskIds,\n showComments: !!showComments,\n includeFolderChildren: includeFolderChildren !== false, // default to true\n }\n\n // Add cursor-based pagination\n if (sortBy) {\n queryParams.sortBy = sortBy\n if (desc) {\n queryParams.before = cursor || undefined\n queryParams.last = TASKS_INFINITE_QUERY_COUNT\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = TASKS_INFINITE_QUERY_COUNT\n }\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = TASKS_INFINITE_QUERY_COUNT\n }\n\n // Call the existing GetTasksList endpoint\n const result = await api.dispatch(\n enhancedApi.endpoints.GetTasksList.initiate(queryParams, { forceRefetch: true }),\n )\n\n if (result.error) throw result.error\n const fallback = {\n tasks: [],\n pageInfo: {\n hasNextPage: false,\n endCursor: null,\n startCursor: null,\n hasPreviousPage: false,\n },\n }\n\n // Return the tasks directly as required by the infinite query format\n return {\n data: result.data || fallback,\n }\n } catch (e: any) {\n console.error('Error in getTasksListInfinite queryFn:', e)\n return { error: { status: 'FETCH_ERROR', error: e.message } as FetchBaseQueryError }\n }\n },\n providesTags: (result, _e, { projectName }) =>\n getOverviewTaskTags(result?.pages.flatMap((p) => p.tasks) || [], projectName),\n async onCacheEntryAdded(\n arg,\n { cacheDataLoaded, cacheEntryRemoved, updateCachedData, dispatch },\n ) {\n let token: any\n const pendingTaskIds = new Set<string>()\n const MAX_BATCH = 100\n const INTERVAL = 500\n let scheduled = false\n\n const schedule = () => {\n if (scheduled) return\n scheduled = true\n setTimeout(flush, INTERVAL)\n }\n\n const flush = async () => {\n scheduled = false\n if (!pendingTaskIds.size) return\n const batchIds = Array.from(pendingTaskIds).slice(0, MAX_BATCH)\n batchIds.forEach((id) => pendingTaskIds.delete(id))\n try {\n const res = await dispatch(\n enhancedApi.endpoints.GetTasksList.initiate(\n {\n projectName: arg.projectName,\n taskIds: batchIds,\n folderIds: arg.folderIds,\n showComments: !!arg.showComments,\n } as any,\n { forceRefetch: true },\n ),\n ).unwrap()\n\n const returned = res.tasks || []\n const returnedMap = new Map(returned.map((t: EditorTaskNode) => [t.id, t]))\n\n updateCachedData((draft: { pages: GetTasksListResult[]; pageParams: any[] }) => {\n // update/insert\n for (const task of returned) {\n let located = false\n for (const page of draft.pages) {\n const idx = page.tasks.findIndex((t) => t.id === task.id)\n if (idx !== -1) {\n page.tasks[idx] = task\n located = true\n break\n }\n }\n if (!located) {\n if (draft.pages.length) draft.pages[0].tasks.unshift(task)\n else\n draft.pages.push({\n tasks: [task],\n pageInfo: {\n startCursor: null,\n endCursor: null,\n hasNextPage: false,\n hasPreviousPage: false,\n },\n })\n }\n }\n // remove any requested but missing tasks\n for (const id of batchIds) {\n if (returnedMap.has(id)) continue\n for (const page of draft.pages) {\n const idx = page.tasks.findIndex((t) => t.id === id)\n if (idx !== -1) {\n page.tasks.splice(idx, 1)\n break\n }\n }\n }\n })\n } catch (err) {\n console.error('Realtime infinite tasks batch update failed', err)\n } finally {\n if (pendingTaskIds.size) schedule()\n }\n }\n let unsubscribeThumbnails: (() => void) | undefined\n try {\n await cacheDataLoaded\n\n unsubscribeThumbnails = subscribeToThumbnailUpdates(\n (messages: ThumbnailUpdateMessage[]) => {\n updateCachedData((draft: { pages: GetTasksListResult[]; pageParams: any[] }) => {\n messages.forEach((message) => {\n if (message.summary.entityType === 'task' && message.summary.thumbnailHash) {\n for (const page of draft.pages) {\n const idx = page.tasks.findIndex((t) => t.id === message.summary.entityId)\n if (idx > -1) {\n page.tasks[idx].thumbnailHash = message.summary.thumbnailHash\n break\n }\n }\n }\n })\n })\n },\n ['task'],\n )\n\n const handlePubSub = async (_topic: string, message: any) => {\n const taskId = message?.summary?.entityId\n if (!taskId) return\n pendingTaskIds.add(taskId)\n schedule()\n }\n\n token = PubSub.subscribe('entity.task', handlePubSub)\n } catch (_) {\n // ignore\n }\n await cacheEntryRemoved\n if (token) PubSub.unsubscribe(token)\n if (unsubscribeThumbnails) unsubscribeThumbnails()\n },\n keepUnusedDataFor: CACHE_TIME,\n }),\n getGroupedTasksList: build.query<GetGroupedTasksListResult, GetGroupedTasksListArgs>({\n queryFn: async (\n {\n projectName,\n groups,\n search,\n folderFilter,\n folderIds,\n desc,\n sortBy,\n groupCount,\n showComments,\n },\n api,\n ) => {\n try {\n let promises = []\n // Folder-level filter keys that must go in folderFilter, not task filter\n const folderFilterKeys = new Set(['folderType'])\n\n for (const group of groups) {\n // Determine count for this group - use argument override, else group count, else default\n const count = groupCount || group.count || 500\n\n // Separate folder-level conditions from task-level conditions in the group filter\n let taskFilter: string | undefined = group.filter\n let mergedFolderFilter = folderFilter\n if (group.filter) {\n try {\n const parsed = JSON.parse(group.filter)\n const conditions = parsed.conditions || []\n const taskConditions = conditions.filter((c: any) => !folderFilterKeys.has(c.key))\n const folderConditions = conditions.filter((c: any) => folderFilterKeys.has(c.key))\n\n if (folderConditions.length > 0) {\n taskFilter = taskConditions.length\n ? JSON.stringify({ ...parsed, conditions: taskConditions })\n : undefined\n // Merge folder conditions with existing folderFilter, preserving metadata\n const existingFolderFilter = folderFilter ? JSON.parse(folderFilter) : null\n const existingConditions =\n existingFolderFilter && Array.isArray(existingFolderFilter.conditions)\n ? existingFolderFilter.conditions\n : []\n const allFolderConditions = [...existingConditions, ...folderConditions]\n mergedFolderFilter = JSON.stringify(\n existingFolderFilter\n ? { ...existingFolderFilter, conditions: allFolderConditions }\n : { conditions: allFolderConditions },\n )\n }\n } catch {\n // If parsing fails, use the original filter as-is\n }\n }\n\n const queryParams: GetTasksListQueryVariables = {\n projectName,\n filter: taskFilter,\n folderFilter: mergedFolderFilter,\n search,\n folderIds,\n sortBy: sortBy,\n showComments: !!showComments,\n // @ts-expect-error - we know group does not exist on query variables but we need it for later\n group: group.value,\n }\n if (desc) {\n queryParams.last = count\n } else {\n queryParams.first = count\n }\n\n const promise = api.dispatch(\n enhancedApi.endpoints.GetTasksList.initiate(queryParams, { forceRefetch: true }),\n )\n promises.push(promise)\n }\n\n const result = await Promise.all(promises)\n const tasks: EditorTaskNode[] = []\n for (const res of result) {\n if (res.error) throw res.error\n // get group value\n // @ts-expect-error - we know group does exist on res.originalArgs from line 319\n const groupValue = res.originalArgs?.group as string\n\n const hasNextPage =\n res.data?.pageInfo?.hasNextPage || res.data?.pageInfo?.hasPreviousPage || false\n const groupTasks =\n res.data?.tasks.map((task, i, a) => ({\n ...task,\n groups: [\n {\n value: groupValue,\n hasNextPage: i === a.length - 1 && hasNextPage ? groupValue : undefined, // Only add hasNextPage to the last task in the group\n },\n ],\n })) || []\n\n tasks.push(...groupTasks)\n }\n\n // Return the tasks directly as required by the query format\n return {\n data: {\n tasks,\n },\n }\n } catch (error: any) {\n console.error('Error in getGroupedTasksList queryFn:', error)\n return { error: { status: 'FETCH_ERROR', error: error.message } as FetchBaseQueryError }\n }\n },\n providesTags: (result, _e, { projectName }) =>\n getOverviewTaskTags(result?.tasks, projectName),\n keepUnusedDataFor: CACHE_TIME,\n }),\n }),\n})\n\nexport const {\n useGetOverviewTasksByFoldersQuery,\n useGetSearchFoldersQuery,\n useGetTasksListQuery,\n useGetTasksListInfiniteInfiniteQuery,\n useLazyGetTasksByParentQuery,\n useGetGroupedTasksListQuery,\n useGetFolderColumnStatsQuery,\n useGetTaskColumnStatsQuery,\n} = injectedApi\nexport default injectedApi\n"],"names":["CACHE_TIME","parseJSONField","allAttrib","parseAllAttribs","transformFilteredEntitiesByParent","response","tasks","taskNode","getOverviewTaskTags","result","projectName","parentIds","taskTags","task","parentTags","id","enhancedApi","gqlApi","res","_e","normalizeFieldStats","error","transformStatsError","_t","rest","cache","incoming","mergeFieldStats","currentArg","previousArg","hasNewTargetFields","_r","foldersApiEnhanced","foldersApi","TASKS_INFINITE_QUERY_COUNT","queriedFoldersRegistry","getCacheKey","filter","folderFilter","search","showComments","markFoldersAsQueried","cacheKey","folderIds","getQueriedFolders","injectedApi","build","dispatch","getState","forced","state","cacheArgs","cacheData","alreadyQueriedFolders","newFolderIds","allNewTasks","BATCH_SIZE","TASK_PER_FOLDER","MAX_PAGES_PER_BATCH","MAX_FOLDERS","TASKS_PER_PAGE","i","batchFolderIds","hasNextPage","cursor","pageCount","data","fetchedTasks","pageInfo","finalTasks","uniqueTasksMap","e","cacheDataLoaded","cacheEntryRemoved","updateCachedData","token","pendingTaskIds","MAX_BATCH","INTERVAL","scheduled","schedule","flush","batchIds","returned","returnedMap","t","draft","idx","err","unsubscribeThumbnails","subscribeToThumbnailUpdates","messages","message","handlePubSub","_topic","taskId","parentId","PubSub","deadCacheKey","folderSearchRequest","lastPage","_allPages","lastPageParam","_allPageParams","queryArg","pageParam","api","taskIds","sortBy","desc","includeFolderChildren","queryParams","fallback","p","arg","located","page","groups","groupCount","promises","folderFilterKeys","group","count","taskFilter","mergedFolderFilter","parsed","conditions","taskConditions","c","folderConditions","existingFolderFilter","allFolderConditions","promise","groupValue","groupTasks","a","useGetOverviewTasksByFoldersQuery","useGetSearchFoldersQuery","useGetTasksListQuery","useGetTasksListInfiniteInfiniteQuery","useLazyGetTasksByParentQuery","useGetGroupedTasksListQuery","useGetFolderColumnStatsQuery","useGetTaskColumnStatsQuery"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require("../../base/client.cjs.js");const p=require("../../generated/graphql.cjs.js");require("../../generated/graphqlLinks.cjs.js");require("../../generated/access.cjs.js");require("../../generated/actions.cjs.js");require("../../generated/activityFeed.cjs.js");require("../../generated/addons.cjs.js");require("../../generated/anatomy.cjs.js");require("../../generated/attributes.cjs.js");require("../../generated/authentication.cjs.js");require("../../generated/bundles.cjs.js");require("../../generated/configuration.cjs.js");require("../../generated/dataImport.cjs.js");require("../../generated/desktop.cjs.js");require("../../generated/entityLists.cjs.js");require("../../generated/events.cjs.js");require("../../generated/files.cjs.js");require("../../generated/folders.cjs.js");require("../../generated/inbox.cjs.js");require("../../generated/links.cjs.js");require("../../generated/market.cjs.js");require("../../generated/onboarding.cjs.js");require("../../generated/operations.cjs.js");require("../../generated/products.cjs.js");require("../../generated/projectDashboard.cjs.js");const q=require("../../generated/projects.cjs.js");require("../../generated/projectFolders.cjs.js");require("../../generated/reviewables.cjs.js");require("../../generated/services.cjs.js");require("../../generated/system.cjs.js");require("../../generated/tasks.cjs.js");require("../../generated/teams.cjs.js");require("../../generated/thumbnails.cjs.js");require("../../generated/uRIs.cjs.js");require("../../generated/users.cjs.js");require("../../generated/versions.cjs.js");require("../../generated/workfiles.cjs.js");require("../../generated/ynputCloud.cjs.js");require("../../generated/grouping.cjs.js");require("../../generated/views.cjs.js");const d=require("../overview/getOverview.cjs.js");require("../overview/updateOverview.cjs.js");require("../versions/getVersionsProducts.cjs.js");require("../links/getEntityLinks.cjs.js");const a=q.api.enhanceEndpoints({endpoints:{getProject:{transformErrorResponse:e=>e.data.detail||`Error ${e.status}`,providesTags:(e,t,{projectName:r})=>[{type:"project",id:r}]},listProjects:{transformResponse:e=>e?.projects||[],transformErrorResponse:e=>e.data.detail||`Error ${e.status}`,providesTags:(e,t,{active:r})=>[{type:"project"},{type:"projects",id:(r??!1).toString()},{type:"projects",id:"LIST"}]},getProjectAnatomy:{providesTags:(e,t,{projectName:r})=>[{type:"project",id:r}]}}}),{useGetProjectQuery:j,useListProjectsQuery:P,useGetProjectAnatomyQuery:l}=a,u=2e3,n=p.api.enhanceEndpoints({endpoints:{GetProjects:{transformResponse:e=>({projects:e.projects.edges.map(t=>({...t.node,attrib:d.parseAllAttribs(t.node.allAttrib)})),pageInfo:e.projects.pageInfo})}}}),c=n.injectEndpoints({endpoints:e=>({getProjectsInfinite:e.infiniteQuery({infiniteQueryOptions:{initialPageParam:{cursor:"",last:u},getNextPageParam:t=>{const{pageInfo:r}=t;if(!(!r.hasPreviousPage||!r.endCursor))return{cursor:r.endCursor,last:u}}},queryFn:async({queryArg:t,pageParam:r},s)=>{try{const i={...t,before:r?.cursor||void 0,last:r?.last},o=await s.dispatch(n.endpoints.GetProjects.initiate(i,{forceRefetch:!0}));if(o.error)throw o.error;return{data:o.data||{projects:[],pageInfo:{hasNextPage:!1,endCursor:null,startCursor:null,hasPreviousPage:!1}}}}catch(i){return console.error("Error in getProjectsInfinite queryFn:",i),{error:{status:"FETCH_ERROR",error:i.message}}}},providesTags:t=>{const r=t?.pages.flatMap(s=>s.projects)||[];return[{type:"project",id:"LIST"},...r.map(s=>({type:"project",id:s.name}))]}})}),overrideExisting:!0}),{useGetProjectsInfiniteInfiniteQuery:f}=c;exports.PROJECTS_PER_PAGE=u;exports.default=a;exports.getProjectsGraphql=c;exports.useGetProjectAnatomyQuery=l;exports.useGetProjectQuery=j;exports.useGetProjectsInfiniteInfiniteQuery=f;exports.useListProjectsQuery=P;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require("../../base/client.cjs.js");const p=require("../../generated/graphql.cjs.js");require("../../generated/graphqlLinks.cjs.js");require("../../generated/access.cjs.js");require("../../generated/actions.cjs.js");require("../../generated/activityFeed.cjs.js");require("../../generated/addons.cjs.js");require("../../generated/anatomy.cjs.js");require("../../generated/attributes.cjs.js");require("../../generated/authentication.cjs.js");require("../../generated/bundles.cjs.js");require("../../generated/configuration.cjs.js");require("../../generated/dataImport.cjs.js");require("../../generated/desktop.cjs.js");require("../../generated/entityLists.cjs.js");require("../../generated/events.cjs.js");require("../../generated/files.cjs.js");require("../../generated/folders.cjs.js");require("../../generated/inbox.cjs.js");require("../../generated/links.cjs.js");require("../../generated/market.cjs.js");require("../../generated/onboarding.cjs.js");require("../../generated/operations.cjs.js");require("../../generated/products.cjs.js");require("../../generated/projectDashboard.cjs.js");const q=require("../../generated/projects.cjs.js");require("../../generated/projectFolders.cjs.js");require("../../generated/reviewables.cjs.js");require("../../generated/services.cjs.js");require("../../generated/system.cjs.js");require("../../generated/tasks.cjs.js");require("../../generated/teams.cjs.js");require("../../generated/thumbnails.cjs.js");require("../../generated/uRIs.cjs.js");require("../../generated/users.cjs.js");require("../../generated/versions.cjs.js");require("../../generated/workfiles.cjs.js");require("../../generated/ynputCloud.cjs.js");require("../../generated/grouping.cjs.js");require("../../generated/views.cjs.js");const d=require("../overview/getOverview.cjs.js");require("../overview/updateOverview.cjs.js");require("../versions/getVersionsProducts.cjs.js");require("../links/getEntityLinks.cjs.js");const a=q.api.enhanceEndpoints({endpoints:{getProject:{transformErrorResponse:e=>e.data.detail||`Error ${e.status}`,providesTags:(e,t,{projectName:r})=>[{type:"project",id:r}]},listProjects:{transformResponse:e=>e?.projects||[],transformErrorResponse:e=>e.data.detail||`Error ${e.status}`,providesTags:(e,t,{active:r})=>[{type:"project"},{type:"projects",id:(r??!1).toString()},{type:"projects",id:"LIST"}]},getProjectAnatomy:{providesTags:(e,t,{projectName:r})=>[{type:"project",id:r}]}}}),{useGetProjectQuery:j,useListProjectsQuery:P,useGetProjectAnatomyQuery:l}=a,u=2e3,n=p.api.enhanceEndpoints({endpoints:{GetProjects:{transformResponse:e=>({projects:e.projects.edges.map(t=>({...t.node,attrib:d.parseJSONField(t.node.allAttrib)})),pageInfo:e.projects.pageInfo})}}}),c=n.injectEndpoints({endpoints:e=>({getProjectsInfinite:e.infiniteQuery({infiniteQueryOptions:{initialPageParam:{cursor:"",last:u},getNextPageParam:t=>{const{pageInfo:r}=t;if(!(!r.hasPreviousPage||!r.endCursor))return{cursor:r.endCursor,last:u}}},queryFn:async({queryArg:t,pageParam:r},s)=>{try{const i={...t,before:r?.cursor||void 0,last:r?.last},o=await s.dispatch(n.endpoints.GetProjects.initiate(i,{forceRefetch:!0}));if(o.error)throw o.error;return{data:o.data||{projects:[],pageInfo:{hasNextPage:!1,endCursor:null,startCursor:null,hasPreviousPage:!1}}}}catch(i){return console.error("Error in getProjectsInfinite queryFn:",i),{error:{status:"FETCH_ERROR",error:i.message}}}},providesTags:t=>{const r=t?.pages.flatMap(s=>s.projects)||[];return[{type:"project",id:"LIST"},...r.map(s=>({type:"project",id:s.name}))]}})}),overrideExisting:!0}),{useGetProjectsInfiniteInfiniteQuery:f}=c;exports.PROJECTS_PER_PAGE=u;exports.default=a;exports.getProjectsGraphql=c;exports.useGetProjectAnatomyQuery=l;exports.useGetProjectQuery=j;exports.useGetProjectsInfiniteInfiniteQuery=f;exports.useListProjectsQuery=P;
2
2
  //# sourceMappingURL=getProject.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getProject.cjs.js","sources":["../../../../../../src/api/queries/project/getProject.ts"],"sourcesContent":["import {\n projectsApi,\n ListProjectsApiResponse,\n ListProjectsItemModel,\n gqlApi,\n GetProjectsQuery,\n GetProjectsQueryVariables,\n ProjectFragmentFragment,\n} from '@shared/api/generated'\n\nimport {\n DefinitionsFromApi,\n FetchBaseQueryError,\n OverrideResultType,\n TagTypesFromApi,\n} from '@reduxjs/toolkit/query'\nimport { parseAllAttribs } from '../overview'\ntype Definitions = DefinitionsFromApi<typeof projectsApi>\ntype TagTypes = TagTypesFromApi<typeof projectsApi>\n// update the definitions to include the new types\ntype UpdatedDefinitions = Omit<Definitions, 'getProject'> & {\n listProjects: OverrideResultType<Definitions['listProjects'], ListProjectsItemModel[]>\n}\n\nconst enhancedProject = projectsApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n getProject: {\n transformErrorResponse: (error: any) => error.data.detail || `Error ${error.status}`,\n providesTags: (_res, _error, { projectName }) => [{ type: 'project', id: projectName }],\n },\n listProjects: {\n transformResponse: (res: ListProjectsApiResponse) => res?.projects || [],\n transformErrorResponse: (error: any) => error.data.detail || `Error ${error.status}`,\n providesTags: (_res, _error, { active }) => [\n { type: 'project' },\n { type: 'projects', id: (active ?? false).toString() },\n { type: 'projects', id: 'LIST' },\n ],\n },\n getProjectAnatomy: {\n providesTags: (_res, _error, { projectName }) => [{ type: 'project', id: projectName }],\n },\n },\n})\n\n// REST EXPORTS\nexport const { useGetProjectQuery, useListProjectsQuery, useGetProjectAnatomyQuery } =\n enhancedProject\n\n// GRAPHQL\nexport type Project = ProjectFragmentFragment & { attrib: Record<string, any> }\nexport type GetProjectsResult = {\n projects: Project[]\n pageInfo: GetProjectsQuery['projects']['pageInfo']\n}\n\ntype GQLDefinitions = DefinitionsFromApi<typeof gqlApi>\n// update the definitions to include the new types\ntype GQLUpdatedDefinitions = Omit<GQLDefinitions, 'GetProjects'> & {\n GetProjects: OverrideResultType<GQLDefinitions['GetProjects'], GetProjectsResult>\n}\n// it is impossible to group by folder or search with pagination, so just load tons and hope no one has more than 5 k projects.\nexport const PROJECTS_PER_PAGE = 2000\n\n// enhance graphql - used only for the infinite query below\nconst enhancedGraphql = gqlApi.enhanceEndpoints<TagTypes, GQLUpdatedDefinitions>({\n endpoints: {\n GetProjects: {\n transformResponse: (res: GetProjectsQuery): GetProjectsResult => ({\n projects: res.projects.edges.map((edge) => ({\n ...edge.node,\n attrib: parseAllAttribs(edge.node.allAttrib),\n })),\n pageInfo: res.projects.pageInfo,\n }),\n },\n },\n})\n\ntype ProjectsPageParam = { cursor: string; last?: number }\n\nexport const getProjectsGraphql = enhancedGraphql.injectEndpoints({\n endpoints: (build) => ({\n getProjectsInfinite: build.infiniteQuery<\n GetProjectsResult,\n Omit<GetProjectsQueryVariables, 'last' | 'before'>,\n ProjectsPageParam\n >({\n infiniteQueryOptions: {\n initialPageParam: { cursor: '', last: PROJECTS_PER_PAGE },\n getNextPageParam: (lastPage) => {\n const { pageInfo } = lastPage\n if (!pageInfo.hasPreviousPage || !pageInfo.endCursor) return undefined\n return {\n cursor: pageInfo.endCursor,\n last: PROJECTS_PER_PAGE,\n }\n },\n },\n queryFn: async ({ queryArg, pageParam }, api) => {\n try {\n const queryParams: GetProjectsQueryVariables = {\n ...queryArg,\n before: pageParam?.cursor || undefined,\n last: pageParam?.last,\n }\n\n const result = await api.dispatch(\n enhancedGraphql.endpoints.GetProjects.initiate(queryParams, { forceRefetch: true }),\n )\n\n if (result.error) throw result.error\n\n return {\n data: result.data || {\n projects: [],\n pageInfo: {\n hasNextPage: false,\n endCursor: null,\n startCursor: null,\n hasPreviousPage: false,\n },\n },\n }\n } catch (e: any) {\n console.error('Error in getProjectsInfinite queryFn:', e)\n return { error: { status: 'FETCH_ERROR', error: e.message } as FetchBaseQueryError }\n }\n },\n providesTags: (result) => {\n const projects = result?.pages.flatMap((page) => page.projects) || []\n return [\n { type: 'project', id: 'LIST' },\n ...projects.map((project) => ({ type: 'project' as const, id: project.name })),\n ]\n },\n }),\n }),\n overrideExisting: true,\n})\n\nexport const { useGetProjectsInfiniteInfiniteQuery } = getProjectsGraphql\n\nexport default enhancedProject\n"],"names":["enhancedProject","projectsApi","error","_res","_error","projectName","res","active","useGetProjectQuery","useListProjectsQuery","useGetProjectAnatomyQuery","PROJECTS_PER_PAGE","enhancedGraphql","gqlApi","edge","parseAllAttribs","getProjectsGraphql","build","lastPage","pageInfo","queryArg","pageParam","api","queryParams","result","e","projects","page","project","useGetProjectsInfiniteInfiniteQuery"],"mappings":"m/DAwBA,MAAMA,EAAkBC,EAAAA,IAAY,iBAA+C,CACjF,UAAW,CACT,WAAY,CACV,uBAAyBC,GAAeA,EAAM,KAAK,QAAU,SAASA,EAAM,MAAM,GAClF,aAAc,CAACC,EAAMC,EAAQ,CAAE,YAAAC,CAAA,IAAkB,CAAC,CAAE,KAAM,UAAW,GAAIA,EAAa,CAAA,EAExF,aAAc,CACZ,kBAAoBC,GAAiCA,GAAK,UAAY,CAAA,EACtE,uBAAyBJ,GAAeA,EAAM,KAAK,QAAU,SAASA,EAAM,MAAM,GAClF,aAAc,CAACC,EAAMC,EAAQ,CAAE,OAAAG,KAAa,CAC1C,CAAE,KAAM,SAAA,EACR,CAAE,KAAM,WAAY,IAAKA,GAAU,IAAO,UAAS,EACnD,CAAE,KAAM,WAAY,GAAI,MAAA,CAAO,CACjC,EAEF,kBAAmB,CACjB,aAAc,CAACJ,EAAMC,EAAQ,CAAE,YAAAC,CAAA,IAAkB,CAAC,CAAE,KAAM,UAAW,GAAIA,EAAa,CAAA,CACxF,CAEJ,CAAC,EAGY,CAAE,mBAAAG,EAAoB,qBAAAC,EAAsB,0BAAAC,GACvDV,EAeWW,EAAoB,IAG3BC,EAAkBC,EAAAA,IAAO,iBAAkD,CAC/E,UAAW,CACT,YAAa,CACX,kBAAoBP,IAA8C,CAChE,SAAUA,EAAI,SAAS,MAAM,IAAKQ,IAAU,CAC1C,GAAGA,EAAK,KACR,OAAQC,EAAAA,gBAAgBD,EAAK,KAAK,SAAS,CAAA,EAC3C,EACF,SAAUR,EAAI,SAAS,QAAA,EACzB,CACF,CAEJ,CAAC,EAIYU,EAAqBJ,EAAgB,gBAAgB,CAChE,UAAYK,IAAW,CACrB,oBAAqBA,EAAM,cAIzB,CACA,qBAAsB,CACpB,iBAAkB,CAAE,OAAQ,GAAI,KAAMN,CAAA,EACtC,iBAAmBO,GAAa,CAC9B,KAAM,CAAE,SAAAC,GAAaD,EACrB,GAAI,GAACC,EAAS,iBAAmB,CAACA,EAAS,WAC3C,MAAO,CACL,OAAQA,EAAS,UACjB,KAAMR,CAAA,CAEV,CAAA,EAEF,QAAS,MAAO,CAAE,SAAAS,EAAU,UAAAC,CAAA,EAAaC,IAAQ,CAC/C,GAAI,CACF,MAAMC,EAAyC,CAC7C,GAAGH,EACH,OAAQC,GAAW,QAAU,OAC7B,KAAMA,GAAW,IAAA,EAGbG,EAAS,MAAMF,EAAI,SACvBV,EAAgB,UAAU,YAAY,SAASW,EAAa,CAAE,aAAc,GAAM,CAAA,EAGpF,GAAIC,EAAO,MAAO,MAAMA,EAAO,MAE/B,MAAO,CACL,KAAMA,EAAO,MAAQ,CACnB,SAAU,CAAA,EACV,SAAU,CACR,YAAa,GACb,UAAW,KACX,YAAa,KACb,gBAAiB,EAAA,CACnB,CACF,CAEJ,OAASC,EAAQ,CACf,eAAQ,MAAM,wCAAyCA,CAAC,EACjD,CAAE,MAAO,CAAE,OAAQ,cAAe,MAAOA,EAAE,QAAQ,CAC5D,CACF,EACA,aAAeD,GAAW,CACxB,MAAME,EAAWF,GAAQ,MAAM,QAASG,GAASA,EAAK,QAAQ,GAAK,CAAA,EACnE,MAAO,CACL,CAAE,KAAM,UAAW,GAAI,MAAA,EACvB,GAAGD,EAAS,IAAKE,IAAa,CAAE,KAAM,UAAoB,GAAIA,EAAQ,MAAO,CAAA,CAEjF,CAAA,CACD,CAAA,GAEH,iBAAkB,EACpB,CAAC,EAEY,CAAE,oCAAAC,GAAwCb"}
1
+ {"version":3,"file":"getProject.cjs.js","sources":["../../../../../../src/api/queries/project/getProject.ts"],"sourcesContent":["import {\n projectsApi,\n ListProjectsApiResponse,\n ListProjectsItemModel,\n gqlApi,\n GetProjectsQuery,\n GetProjectsQueryVariables,\n ProjectFragmentFragment,\n} from '@shared/api/generated'\n\nimport {\n DefinitionsFromApi,\n FetchBaseQueryError,\n OverrideResultType,\n TagTypesFromApi,\n} from '@reduxjs/toolkit/query'\nimport { parseJSONField } from '../overview'\ntype Definitions = DefinitionsFromApi<typeof projectsApi>\ntype TagTypes = TagTypesFromApi<typeof projectsApi>\n// update the definitions to include the new types\ntype UpdatedDefinitions = Omit<Definitions, 'getProject'> & {\n listProjects: OverrideResultType<Definitions['listProjects'], ListProjectsItemModel[]>\n}\n\nconst enhancedProject = projectsApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n getProject: {\n transformErrorResponse: (error: any) => error.data.detail || `Error ${error.status}`,\n providesTags: (_res, _error, { projectName }) => [{ type: 'project', id: projectName }],\n },\n listProjects: {\n transformResponse: (res: ListProjectsApiResponse) => res?.projects || [],\n transformErrorResponse: (error: any) => error.data.detail || `Error ${error.status}`,\n providesTags: (_res, _error, { active }) => [\n { type: 'project' },\n { type: 'projects', id: (active ?? false).toString() },\n { type: 'projects', id: 'LIST' },\n ],\n },\n getProjectAnatomy: {\n providesTags: (_res, _error, { projectName }) => [{ type: 'project', id: projectName }],\n },\n },\n})\n\n// REST EXPORTS\nexport const { useGetProjectQuery, useListProjectsQuery, useGetProjectAnatomyQuery } =\n enhancedProject\n\n// GRAPHQL\nexport type Project = ProjectFragmentFragment & { attrib: Record<string, any> }\nexport type GetProjectsResult = {\n projects: Project[]\n pageInfo: GetProjectsQuery['projects']['pageInfo']\n}\n\ntype GQLDefinitions = DefinitionsFromApi<typeof gqlApi>\n// update the definitions to include the new types\ntype GQLUpdatedDefinitions = Omit<GQLDefinitions, 'GetProjects'> & {\n GetProjects: OverrideResultType<GQLDefinitions['GetProjects'], GetProjectsResult>\n}\n// it is impossible to group by folder or search with pagination, so just load tons and hope no one has more than 5 k projects.\nexport const PROJECTS_PER_PAGE = 2000\n\n// enhance graphql - used only for the infinite query below\nconst enhancedGraphql = gqlApi.enhanceEndpoints<TagTypes, GQLUpdatedDefinitions>({\n endpoints: {\n GetProjects: {\n transformResponse: (res: GetProjectsQuery): GetProjectsResult => ({\n projects: res.projects.edges.map((edge) => ({\n ...edge.node,\n attrib: parseJSONField(edge.node.allAttrib),\n })),\n pageInfo: res.projects.pageInfo,\n }),\n },\n },\n})\n\ntype ProjectsPageParam = { cursor: string; last?: number }\n\nexport const getProjectsGraphql = enhancedGraphql.injectEndpoints({\n endpoints: (build) => ({\n getProjectsInfinite: build.infiniteQuery<\n GetProjectsResult,\n Omit<GetProjectsQueryVariables, 'last' | 'before'>,\n ProjectsPageParam\n >({\n infiniteQueryOptions: {\n initialPageParam: { cursor: '', last: PROJECTS_PER_PAGE },\n getNextPageParam: (lastPage) => {\n const { pageInfo } = lastPage\n if (!pageInfo.hasPreviousPage || !pageInfo.endCursor) return undefined\n return {\n cursor: pageInfo.endCursor,\n last: PROJECTS_PER_PAGE,\n }\n },\n },\n queryFn: async ({ queryArg, pageParam }, api) => {\n try {\n const queryParams: GetProjectsQueryVariables = {\n ...queryArg,\n before: pageParam?.cursor || undefined,\n last: pageParam?.last,\n }\n\n const result = await api.dispatch(\n enhancedGraphql.endpoints.GetProjects.initiate(queryParams, { forceRefetch: true }),\n )\n\n if (result.error) throw result.error\n\n return {\n data: result.data || {\n projects: [],\n pageInfo: {\n hasNextPage: false,\n endCursor: null,\n startCursor: null,\n hasPreviousPage: false,\n },\n },\n }\n } catch (e: any) {\n console.error('Error in getProjectsInfinite queryFn:', e)\n return { error: { status: 'FETCH_ERROR', error: e.message } as FetchBaseQueryError }\n }\n },\n providesTags: (result) => {\n const projects = result?.pages.flatMap((page) => page.projects) || []\n return [\n { type: 'project', id: 'LIST' },\n ...projects.map((project) => ({ type: 'project' as const, id: project.name })),\n ]\n },\n }),\n }),\n overrideExisting: true,\n})\n\nexport const { useGetProjectsInfiniteInfiniteQuery } = getProjectsGraphql\n\nexport default enhancedProject\n"],"names":["enhancedProject","projectsApi","error","_res","_error","projectName","res","active","useGetProjectQuery","useListProjectsQuery","useGetProjectAnatomyQuery","PROJECTS_PER_PAGE","enhancedGraphql","gqlApi","edge","parseJSONField","getProjectsGraphql","build","lastPage","pageInfo","queryArg","pageParam","api","queryParams","result","e","projects","page","project","useGetProjectsInfiniteInfiniteQuery"],"mappings":"m/DAwBA,MAAMA,EAAkBC,EAAAA,IAAY,iBAA+C,CACjF,UAAW,CACT,WAAY,CACV,uBAAyBC,GAAeA,EAAM,KAAK,QAAU,SAASA,EAAM,MAAM,GAClF,aAAc,CAACC,EAAMC,EAAQ,CAAE,YAAAC,CAAA,IAAkB,CAAC,CAAE,KAAM,UAAW,GAAIA,EAAa,CAAA,EAExF,aAAc,CACZ,kBAAoBC,GAAiCA,GAAK,UAAY,CAAA,EACtE,uBAAyBJ,GAAeA,EAAM,KAAK,QAAU,SAASA,EAAM,MAAM,GAClF,aAAc,CAACC,EAAMC,EAAQ,CAAE,OAAAG,KAAa,CAC1C,CAAE,KAAM,SAAA,EACR,CAAE,KAAM,WAAY,IAAKA,GAAU,IAAO,UAAS,EACnD,CAAE,KAAM,WAAY,GAAI,MAAA,CAAO,CACjC,EAEF,kBAAmB,CACjB,aAAc,CAACJ,EAAMC,EAAQ,CAAE,YAAAC,CAAA,IAAkB,CAAC,CAAE,KAAM,UAAW,GAAIA,EAAa,CAAA,CACxF,CAEJ,CAAC,EAGY,CAAE,mBAAAG,EAAoB,qBAAAC,EAAsB,0BAAAC,GACvDV,EAeWW,EAAoB,IAG3BC,EAAkBC,EAAAA,IAAO,iBAAkD,CAC/E,UAAW,CACT,YAAa,CACX,kBAAoBP,IAA8C,CAChE,SAAUA,EAAI,SAAS,MAAM,IAAKQ,IAAU,CAC1C,GAAGA,EAAK,KACR,OAAQC,EAAAA,eAAeD,EAAK,KAAK,SAAS,CAAA,EAC1C,EACF,SAAUR,EAAI,SAAS,QAAA,EACzB,CACF,CAEJ,CAAC,EAIYU,EAAqBJ,EAAgB,gBAAgB,CAChE,UAAYK,IAAW,CACrB,oBAAqBA,EAAM,cAIzB,CACA,qBAAsB,CACpB,iBAAkB,CAAE,OAAQ,GAAI,KAAMN,CAAA,EACtC,iBAAmBO,GAAa,CAC9B,KAAM,CAAE,SAAAC,GAAaD,EACrB,GAAI,GAACC,EAAS,iBAAmB,CAACA,EAAS,WAC3C,MAAO,CACL,OAAQA,EAAS,UACjB,KAAMR,CAAA,CAEV,CAAA,EAEF,QAAS,MAAO,CAAE,SAAAS,EAAU,UAAAC,CAAA,EAAaC,IAAQ,CAC/C,GAAI,CACF,MAAMC,EAAyC,CAC7C,GAAGH,EACH,OAAQC,GAAW,QAAU,OAC7B,KAAMA,GAAW,IAAA,EAGbG,EAAS,MAAMF,EAAI,SACvBV,EAAgB,UAAU,YAAY,SAASW,EAAa,CAAE,aAAc,GAAM,CAAA,EAGpF,GAAIC,EAAO,MAAO,MAAMA,EAAO,MAE/B,MAAO,CACL,KAAMA,EAAO,MAAQ,CACnB,SAAU,CAAA,EACV,SAAU,CACR,YAAa,GACb,UAAW,KACX,YAAa,KACb,gBAAiB,EAAA,CACnB,CACF,CAEJ,OAASC,EAAQ,CACf,eAAQ,MAAM,wCAAyCA,CAAC,EACjD,CAAE,MAAO,CAAE,OAAQ,cAAe,MAAOA,EAAE,QAAQ,CAC5D,CACF,EACA,aAAeD,GAAW,CACxB,MAAME,EAAWF,GAAQ,MAAM,QAASG,GAASA,EAAK,QAAQ,GAAK,CAAA,EACnE,MAAO,CACL,CAAE,KAAM,UAAW,GAAI,MAAA,EACvB,GAAGD,EAAS,IAAKE,IAAa,CAAE,KAAM,UAAoB,GAAIA,EAAQ,MAAO,CAAA,CAEjF,CAAA,CACD,CAAA,GAEH,iBAAkB,EACpB,CAAC,EAEY,CAAE,oCAAAC,GAAwCb"}
@@ -38,7 +38,7 @@ import "../../generated/workfiles.es.js";
38
38
  import "../../generated/ynputCloud.es.js";
39
39
  import "../../generated/grouping.es.js";
40
40
  import "../../generated/views.es.js";
41
- import { parseAllAttribs as c } from "../overview/getOverview.es.js";
41
+ import { parseJSONField as c } from "../overview/getOverview.es.js";
42
42
  import "../overview/updateOverview.es.js";
43
43
  import "../versions/getVersionsProducts.es.js";
44
44
  import "../links/getEntityLinks.es.js";
@@ -1 +1 @@
1
- {"version":3,"file":"getProject.es.js","sources":["../../../../../../src/api/queries/project/getProject.ts"],"sourcesContent":["import {\n projectsApi,\n ListProjectsApiResponse,\n ListProjectsItemModel,\n gqlApi,\n GetProjectsQuery,\n GetProjectsQueryVariables,\n ProjectFragmentFragment,\n} from '@shared/api/generated'\n\nimport {\n DefinitionsFromApi,\n FetchBaseQueryError,\n OverrideResultType,\n TagTypesFromApi,\n} from '@reduxjs/toolkit/query'\nimport { parseAllAttribs } from '../overview'\ntype Definitions = DefinitionsFromApi<typeof projectsApi>\ntype TagTypes = TagTypesFromApi<typeof projectsApi>\n// update the definitions to include the new types\ntype UpdatedDefinitions = Omit<Definitions, 'getProject'> & {\n listProjects: OverrideResultType<Definitions['listProjects'], ListProjectsItemModel[]>\n}\n\nconst enhancedProject = projectsApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n getProject: {\n transformErrorResponse: (error: any) => error.data.detail || `Error ${error.status}`,\n providesTags: (_res, _error, { projectName }) => [{ type: 'project', id: projectName }],\n },\n listProjects: {\n transformResponse: (res: ListProjectsApiResponse) => res?.projects || [],\n transformErrorResponse: (error: any) => error.data.detail || `Error ${error.status}`,\n providesTags: (_res, _error, { active }) => [\n { type: 'project' },\n { type: 'projects', id: (active ?? false).toString() },\n { type: 'projects', id: 'LIST' },\n ],\n },\n getProjectAnatomy: {\n providesTags: (_res, _error, { projectName }) => [{ type: 'project', id: projectName }],\n },\n },\n})\n\n// REST EXPORTS\nexport const { useGetProjectQuery, useListProjectsQuery, useGetProjectAnatomyQuery } =\n enhancedProject\n\n// GRAPHQL\nexport type Project = ProjectFragmentFragment & { attrib: Record<string, any> }\nexport type GetProjectsResult = {\n projects: Project[]\n pageInfo: GetProjectsQuery['projects']['pageInfo']\n}\n\ntype GQLDefinitions = DefinitionsFromApi<typeof gqlApi>\n// update the definitions to include the new types\ntype GQLUpdatedDefinitions = Omit<GQLDefinitions, 'GetProjects'> & {\n GetProjects: OverrideResultType<GQLDefinitions['GetProjects'], GetProjectsResult>\n}\n// it is impossible to group by folder or search with pagination, so just load tons and hope no one has more than 5 k projects.\nexport const PROJECTS_PER_PAGE = 2000\n\n// enhance graphql - used only for the infinite query below\nconst enhancedGraphql = gqlApi.enhanceEndpoints<TagTypes, GQLUpdatedDefinitions>({\n endpoints: {\n GetProjects: {\n transformResponse: (res: GetProjectsQuery): GetProjectsResult => ({\n projects: res.projects.edges.map((edge) => ({\n ...edge.node,\n attrib: parseAllAttribs(edge.node.allAttrib),\n })),\n pageInfo: res.projects.pageInfo,\n }),\n },\n },\n})\n\ntype ProjectsPageParam = { cursor: string; last?: number }\n\nexport const getProjectsGraphql = enhancedGraphql.injectEndpoints({\n endpoints: (build) => ({\n getProjectsInfinite: build.infiniteQuery<\n GetProjectsResult,\n Omit<GetProjectsQueryVariables, 'last' | 'before'>,\n ProjectsPageParam\n >({\n infiniteQueryOptions: {\n initialPageParam: { cursor: '', last: PROJECTS_PER_PAGE },\n getNextPageParam: (lastPage) => {\n const { pageInfo } = lastPage\n if (!pageInfo.hasPreviousPage || !pageInfo.endCursor) return undefined\n return {\n cursor: pageInfo.endCursor,\n last: PROJECTS_PER_PAGE,\n }\n },\n },\n queryFn: async ({ queryArg, pageParam }, api) => {\n try {\n const queryParams: GetProjectsQueryVariables = {\n ...queryArg,\n before: pageParam?.cursor || undefined,\n last: pageParam?.last,\n }\n\n const result = await api.dispatch(\n enhancedGraphql.endpoints.GetProjects.initiate(queryParams, { forceRefetch: true }),\n )\n\n if (result.error) throw result.error\n\n return {\n data: result.data || {\n projects: [],\n pageInfo: {\n hasNextPage: false,\n endCursor: null,\n startCursor: null,\n hasPreviousPage: false,\n },\n },\n }\n } catch (e: any) {\n console.error('Error in getProjectsInfinite queryFn:', e)\n return { error: { status: 'FETCH_ERROR', error: e.message } as FetchBaseQueryError }\n }\n },\n providesTags: (result) => {\n const projects = result?.pages.flatMap((page) => page.projects) || []\n return [\n { type: 'project', id: 'LIST' },\n ...projects.map((project) => ({ type: 'project' as const, id: project.name })),\n ]\n },\n }),\n }),\n overrideExisting: true,\n})\n\nexport const { useGetProjectsInfiniteInfiniteQuery } = getProjectsGraphql\n\nexport default enhancedProject\n"],"names":["enhancedProject","projectsApi","error","_res","_error","projectName","res","active","useGetProjectQuery","useListProjectsQuery","useGetProjectAnatomyQuery","PROJECTS_PER_PAGE","enhancedGraphql","gqlApi","edge","parseAllAttribs","getProjectsGraphql","build","lastPage","pageInfo","queryArg","pageParam","api","queryParams","result","e","projects","page","project","useGetProjectsInfiniteInfiniteQuery"],"mappings":"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"}
1
+ {"version":3,"file":"getProject.es.js","sources":["../../../../../../src/api/queries/project/getProject.ts"],"sourcesContent":["import {\n projectsApi,\n ListProjectsApiResponse,\n ListProjectsItemModel,\n gqlApi,\n GetProjectsQuery,\n GetProjectsQueryVariables,\n ProjectFragmentFragment,\n} from '@shared/api/generated'\n\nimport {\n DefinitionsFromApi,\n FetchBaseQueryError,\n OverrideResultType,\n TagTypesFromApi,\n} from '@reduxjs/toolkit/query'\nimport { parseJSONField } from '../overview'\ntype Definitions = DefinitionsFromApi<typeof projectsApi>\ntype TagTypes = TagTypesFromApi<typeof projectsApi>\n// update the definitions to include the new types\ntype UpdatedDefinitions = Omit<Definitions, 'getProject'> & {\n listProjects: OverrideResultType<Definitions['listProjects'], ListProjectsItemModel[]>\n}\n\nconst enhancedProject = projectsApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n getProject: {\n transformErrorResponse: (error: any) => error.data.detail || `Error ${error.status}`,\n providesTags: (_res, _error, { projectName }) => [{ type: 'project', id: projectName }],\n },\n listProjects: {\n transformResponse: (res: ListProjectsApiResponse) => res?.projects || [],\n transformErrorResponse: (error: any) => error.data.detail || `Error ${error.status}`,\n providesTags: (_res, _error, { active }) => [\n { type: 'project' },\n { type: 'projects', id: (active ?? false).toString() },\n { type: 'projects', id: 'LIST' },\n ],\n },\n getProjectAnatomy: {\n providesTags: (_res, _error, { projectName }) => [{ type: 'project', id: projectName }],\n },\n },\n})\n\n// REST EXPORTS\nexport const { useGetProjectQuery, useListProjectsQuery, useGetProjectAnatomyQuery } =\n enhancedProject\n\n// GRAPHQL\nexport type Project = ProjectFragmentFragment & { attrib: Record<string, any> }\nexport type GetProjectsResult = {\n projects: Project[]\n pageInfo: GetProjectsQuery['projects']['pageInfo']\n}\n\ntype GQLDefinitions = DefinitionsFromApi<typeof gqlApi>\n// update the definitions to include the new types\ntype GQLUpdatedDefinitions = Omit<GQLDefinitions, 'GetProjects'> & {\n GetProjects: OverrideResultType<GQLDefinitions['GetProjects'], GetProjectsResult>\n}\n// it is impossible to group by folder or search with pagination, so just load tons and hope no one has more than 5 k projects.\nexport const PROJECTS_PER_PAGE = 2000\n\n// enhance graphql - used only for the infinite query below\nconst enhancedGraphql = gqlApi.enhanceEndpoints<TagTypes, GQLUpdatedDefinitions>({\n endpoints: {\n GetProjects: {\n transformResponse: (res: GetProjectsQuery): GetProjectsResult => ({\n projects: res.projects.edges.map((edge) => ({\n ...edge.node,\n attrib: parseJSONField(edge.node.allAttrib),\n })),\n pageInfo: res.projects.pageInfo,\n }),\n },\n },\n})\n\ntype ProjectsPageParam = { cursor: string; last?: number }\n\nexport const getProjectsGraphql = enhancedGraphql.injectEndpoints({\n endpoints: (build) => ({\n getProjectsInfinite: build.infiniteQuery<\n GetProjectsResult,\n Omit<GetProjectsQueryVariables, 'last' | 'before'>,\n ProjectsPageParam\n >({\n infiniteQueryOptions: {\n initialPageParam: { cursor: '', last: PROJECTS_PER_PAGE },\n getNextPageParam: (lastPage) => {\n const { pageInfo } = lastPage\n if (!pageInfo.hasPreviousPage || !pageInfo.endCursor) return undefined\n return {\n cursor: pageInfo.endCursor,\n last: PROJECTS_PER_PAGE,\n }\n },\n },\n queryFn: async ({ queryArg, pageParam }, api) => {\n try {\n const queryParams: GetProjectsQueryVariables = {\n ...queryArg,\n before: pageParam?.cursor || undefined,\n last: pageParam?.last,\n }\n\n const result = await api.dispatch(\n enhancedGraphql.endpoints.GetProjects.initiate(queryParams, { forceRefetch: true }),\n )\n\n if (result.error) throw result.error\n\n return {\n data: result.data || {\n projects: [],\n pageInfo: {\n hasNextPage: false,\n endCursor: null,\n startCursor: null,\n hasPreviousPage: false,\n },\n },\n }\n } catch (e: any) {\n console.error('Error in getProjectsInfinite queryFn:', e)\n return { error: { status: 'FETCH_ERROR', error: e.message } as FetchBaseQueryError }\n }\n },\n providesTags: (result) => {\n const projects = result?.pages.flatMap((page) => page.projects) || []\n return [\n { type: 'project', id: 'LIST' },\n ...projects.map((project) => ({ type: 'project' as const, id: project.name })),\n ]\n },\n }),\n }),\n overrideExisting: true,\n})\n\nexport const { useGetProjectsInfiniteInfiniteQuery } = getProjectsGraphql\n\nexport default enhancedProject\n"],"names":["enhancedProject","projectsApi","error","_res","_error","projectName","res","active","useGetProjectQuery","useListProjectsQuery","useGetProjectAnatomyQuery","PROJECTS_PER_PAGE","enhancedGraphql","gqlApi","edge","parseJSONField","getProjectsGraphql","build","lastPage","pageInfo","queryArg","pageParam","api","queryParams","result","e","projects","page","project","useGetProjectsInfiniteInfiniteQuery"],"mappings":"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"}
@@ -72,5 +72,5 @@ query Assignees($projectName: String) {
72
72
  }
73
73
  }
74
74
  }
75
- }`,m=n.api.enhanceEndpoints({endpoints:{getCurrentUser:{providesTags:[{type:"user",id:"LIST"}]},getUser:{providesTags:r=>r?[{type:"user",id:r.name}]:[{type:"user",id:"LIST"}]},getUserSessions:{transformResponse:r=>r?.sessions,providesTags:(r,e,{userName:s})=>[{type:"session",id:s}]}}}),y=a.api.injectEndpoints({endpoints:r=>({getUsers:r.query({query:()=>({url:"/graphql",method:"POST",body:{query:d,variables:{}}}),transformResponse:(e,s,{selfName:i})=>{if(e?.errors)throw console.log(e.errors),new Error(e.errors[0].message);return e?.data?.users.edges.filter(t=>t.node.name!=="CloudServiceWorker").map(t=>({...t.node,self:t.node.name===i,avatarUrl:`/api/users/${t.node.name}/avatar`,accessGroups:t.node.accessGroups?JSON.parse(t.node.accessGroups):{},attrib:u.parseAllAttribs(t.node.allAttrib)}))},providesTags:e=>e?[...e.map(s=>({type:"user",id:s.name})),{type:"user",id:"LIST"}]:[{type:"user",id:"LIST"}]}),getUserByName:r.query({query:({name:e})=>({url:"/graphql",method:"POST",body:{query:o,variables:{name:e}}}),transformResponse:e=>e?.data?.users.edges.map(s=>({...s.node,avatarUrl:`/api/users/${s.node?.name}/avatar`,attrib:u.parseAllAttribs(s.node.allAttrib)})),providesTags:e=>e?[...e.map(s=>({type:"user",id:s.name})),{type:"user",id:"LIST"}]:["user",{type:"user",id:"LIST"}]}),getUsersAssignee:r.query({query:({names:e,projectName:s})=>({url:"/graphql",method:"POST",body:{query:e?p:l,variables:{names:e,projectName:s}}}),transformResponse:e=>e?.data?.users.edges.flatMap(s=>{if(!s.node)return[];const i=s.node;return{name:i.name,fullName:i.attrib?.fullName,avatarUrl:`/api/users/${i.name}/avatar`}}),providesTags:e=>e?[...e.map(s=>({type:"user",id:s.name})),{type:"user",id:"LIST"}]:[{type:"user",id:"LIST"}]})}),overrideExisting:!0}),g=y.enhanceEndpoints({endpoints:{GetAllProjectUsersAsAssignee:{transformResponse:r=>r.users.edges.map(e=>({name:e.node.name,fullName:e.node.attrib.fullName,updatedAt:e.node.updatedAt})),providesTags:r=>r?[{type:"user",id:"LIST"},...r.map(e=>({type:"user",id:e.name}))]:[{type:"user",id:"LIST"}]},GetActiveUsersCount:{transformResponse:r=>r.users.edges.filter(e=>e.node.active&&!e.node.isGuest).length,providesTags:[{type:"user",id:"LIST"}]},GetAllAssignees:{transformResponse:r=>r.users.edges.map(e=>({name:e.node.name,fullName:e.node.attrib.fullName,updatedAt:e.node.updatedAt})),providesTags:r=>r?[{type:"user",id:"LIST"},...r.map(e=>({type:"user",id:e.name}))]:[{type:"user",id:"LIST"}]}}}),{useGetAllProjectUsersAsAssigneeQuery:q,useLazyGetAllProjectUsersAsAssigneeQuery:A,useGetActiveUsersCountQuery:c,useGetAllAssigneesQuery:S,useGetUsersQuery:U,useGetUserByNameQuery:v,useGetUsersAssigneeQuery:G}=g,{useGetUserSessionsQuery:f,useGetCurrentUserQuery:T,useGetUserQuery:Q}=m;exports.useGetActiveUsersCountQuery=c;exports.useGetAllAssigneesQuery=S;exports.useGetAllProjectUsersAsAssigneeQuery=q;exports.useGetCurrentUserQuery=T;exports.useGetUserByNameQuery=v;exports.useGetUserQuery=Q;exports.useGetUserSessionsQuery=f;exports.useGetUsersAssigneeQuery=G;exports.useGetUsersQuery=U;exports.useLazyGetAllProjectUsersAsAssigneeQuery=A;
75
+ }`,m=n.api.enhanceEndpoints({endpoints:{getCurrentUser:{providesTags:[{type:"user",id:"LIST"}]},getUser:{providesTags:r=>r?[{type:"user",id:r.name}]:[{type:"user",id:"LIST"}]},getUserSessions:{transformResponse:r=>r?.sessions,providesTags:(r,e,{userName:s})=>[{type:"session",id:s}]}}}),y=a.api.injectEndpoints({endpoints:r=>({getUsers:r.query({query:()=>({url:"/graphql",method:"POST",body:{query:d,variables:{}}}),transformResponse:(e,s,{selfName:i})=>{if(e?.errors)throw console.log(e.errors),new Error(e.errors[0].message);return e?.data?.users.edges.filter(t=>t.node.name!=="CloudServiceWorker").map(t=>({...t.node,self:t.node.name===i,avatarUrl:`/api/users/${t.node.name}/avatar`,accessGroups:t.node.accessGroups?JSON.parse(t.node.accessGroups):{},attrib:u.parseJSONField(t.node.allAttrib)}))},providesTags:e=>e?[...e.map(s=>({type:"user",id:s.name})),{type:"user",id:"LIST"}]:[{type:"user",id:"LIST"}]}),getUserByName:r.query({query:({name:e})=>({url:"/graphql",method:"POST",body:{query:o,variables:{name:e}}}),transformResponse:e=>e?.data?.users.edges.map(s=>({...s.node,avatarUrl:`/api/users/${s.node?.name}/avatar`,attrib:u.parseJSONField(s.node.allAttrib)})),providesTags:e=>e?[...e.map(s=>({type:"user",id:s.name})),{type:"user",id:"LIST"}]:["user",{type:"user",id:"LIST"}]}),getUsersAssignee:r.query({query:({names:e,projectName:s})=>({url:"/graphql",method:"POST",body:{query:e?p:l,variables:{names:e,projectName:s}}}),transformResponse:e=>e?.data?.users.edges.flatMap(s=>{if(!s.node)return[];const i=s.node;return{name:i.name,fullName:i.attrib?.fullName,avatarUrl:`/api/users/${i.name}/avatar`}}),providesTags:e=>e?[...e.map(s=>({type:"user",id:s.name})),{type:"user",id:"LIST"}]:[{type:"user",id:"LIST"}]})}),overrideExisting:!0}),g=y.enhanceEndpoints({endpoints:{GetAllProjectUsersAsAssignee:{transformResponse:r=>r.users.edges.map(e=>({name:e.node.name,fullName:e.node.attrib.fullName,updatedAt:e.node.updatedAt})),providesTags:r=>r?[{type:"user",id:"LIST"},...r.map(e=>({type:"user",id:e.name}))]:[{type:"user",id:"LIST"}]},GetActiveUsersCount:{transformResponse:r=>r.users.edges.filter(e=>e.node.active&&!e.node.isGuest).length,providesTags:[{type:"user",id:"LIST"}]},GetAllAssignees:{transformResponse:r=>r.users.edges.map(e=>({name:e.node.name,fullName:e.node.attrib.fullName,updatedAt:e.node.updatedAt})),providesTags:r=>r?[{type:"user",id:"LIST"},...r.map(e=>({type:"user",id:e.name}))]:[{type:"user",id:"LIST"}]}}}),{useGetAllProjectUsersAsAssigneeQuery:q,useLazyGetAllProjectUsersAsAssigneeQuery:c,useGetActiveUsersCountQuery:A,useGetAllAssigneesQuery:S,useGetUsersQuery:U,useGetUserByNameQuery:v,useGetUsersAssigneeQuery:G}=g,{useGetUserSessionsQuery:f,useGetCurrentUserQuery:T,useGetUserQuery:Q}=m;exports.useGetActiveUsersCountQuery=A;exports.useGetAllAssigneesQuery=S;exports.useGetAllProjectUsersAsAssigneeQuery=q;exports.useGetCurrentUserQuery=T;exports.useGetUserByNameQuery=v;exports.useGetUserQuery=Q;exports.useGetUserSessionsQuery=f;exports.useGetUsersAssigneeQuery=G;exports.useGetUsersQuery=U;exports.useLazyGetAllProjectUsersAsAssigneeQuery=c;
76
76
  //# sourceMappingURL=getUsers.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getUsers.cjs.js","sources":["../../../../../../src/api/queries/users/getUsers.ts"],"sourcesContent":["import { GetCurrentUserApiResponse, gqlApi, usersApi } from '@shared/api/generated'\nimport type {\n GetActiveUsersCountQuery,\n GetAllAssigneesQuery,\n GetAllProjectUsersAsAssigneeQuery,\n} from '@shared/api/generated'\nimport { DefinitionsFromApi, OverrideResultType, TagTypesFromApi } from '@reduxjs/toolkit/query'\nimport { parseAllAttribs } from '../overview'\n\nconst USER_BY_NAME_QUERY = `\n query UserList($name:String!) {\n users(name: $name) {\n edges {\n node {\n name\n isAdmin\n isManager\n isService\n isDeveloper\n isStagingAllowed\n isGuest\n active\n accessGroups\n defaultAccessGroups\n hasPassword\n disablePasswordLogin\n allAttrib\n }\n }\n }\n }\n`\nconst USERS_QUERY = `\n query UserList {\n users(last: 2000, isSupport: false) {\n edges {\n node {\n name\n isAdmin\n isManager\n isService\n isDeveloper\n isStagingAllowed\n isGuest\n active\n userPool\n accessGroups\n defaultAccessGroups\n hasPassword\n disablePasswordLogin\n inviteSentAt\n inviteAcceptedAt\n createdAt\n updatedAt\n apiKeyPreview\n allAttrib\n }\n }\n }\n }\n`\n\nconst ASSIGNEES_BY_NAME_QUERY = `\nquery Assignees($names: [String!]!){\n users(names: $names, isSupport: false) {\n edges {\n node {\n name\n attrib {\n fullName\n }\n }\n }\n}\n}`\nconst ASSIGNEES_QUERY = `\nquery Assignees($projectName: String) {\n users(last: 2000 projectName: $projectName, isSupport: false) {\n edges {\n node {\n name\n attrib {\n fullName\n }\n }\n }\n}\n}`\n\ninterface GetCurrentUserResult extends GetCurrentUserApiResponse {\n uiExposureLevel: number\n}\n\ntype RestDefinitions = DefinitionsFromApi<typeof usersApi>\ntype RestTagTypes = TagTypesFromApi<typeof usersApi>\n// update the definitions to include the new types\ntype RestUpdatedDefinitions = Omit<RestDefinitions, 'getCurrentUser'> & {\n getCurrentUser: OverrideResultType<RestDefinitions['getCurrentUser'], GetCurrentUserResult>\n}\n\nconst enhancedApi = usersApi.enhanceEndpoints<RestTagTypes, RestUpdatedDefinitions>({\n endpoints: {\n getCurrentUser: {\n providesTags: [{ type: 'user', id: 'LIST' }],\n },\n getUser: {\n providesTags: (res) =>\n res ? [{ type: 'user', id: res.name }] : [{ type: 'user', id: 'LIST' }],\n },\n getUserSessions: {\n transformResponse: (res: any) => res?.sessions,\n providesTags: (_res, _g, { userName }) => [{ type: 'session', id: userName }],\n },\n },\n})\n\nconst injectedApi = gqlApi.injectEndpoints({\n endpoints: (build) => ({\n getUsers: build.query({\n query: () => ({\n url: '/graphql',\n method: 'POST',\n body: {\n query: USERS_QUERY,\n variables: {},\n },\n }),\n transformResponse: (res: any, _meta, { selfName }) => {\n if (res?.errors) {\n console.log(res.errors)\n throw new Error(res.errors[0].message)\n }\n\n return res?.data?.users.edges\n .filter((e: any) => e.node.name !== 'CloudServiceWorker')\n .map((e: any) => ({\n ...e.node,\n self: e.node.name === selfName,\n avatarUrl: `/api/users/${e.node.name}/avatar`,\n accessGroups: e.node.accessGroups ? JSON.parse(e.node.accessGroups) : {},\n attrib: parseAllAttribs(e.node.allAttrib),\n }))\n },\n providesTags: (users) =>\n users\n ? [...users.map((e: any) => ({ type: 'user', id: e.name })), { type: 'user', id: 'LIST' }]\n : [{ type: 'user', id: 'LIST' }],\n }),\n getUserByName: build.query({\n query: ({ name }) => ({\n url: '/graphql',\n method: 'POST',\n body: {\n query: USER_BY_NAME_QUERY,\n variables: { name },\n },\n }),\n transformResponse: (res: any) =>\n res?.data?.users.edges.map((e: any) => ({\n ...e.node,\n avatarUrl: `/api/users/${e.node?.name}/avatar`,\n attrib: parseAllAttribs(e.node.allAttrib),\n })),\n providesTags: (res) =>\n res\n ? [...res.map((e: any) => ({ type: 'user', id: e.name })), { type: 'user', id: 'LIST' }]\n : ['user', { type: 'user', id: 'LIST' }],\n }),\n getUsersAssignee: build.query({\n query: ({ names, projectName }) => ({\n url: '/graphql',\n method: 'POST',\n body: {\n query: names ? ASSIGNEES_BY_NAME_QUERY : ASSIGNEES_QUERY,\n variables: { names, projectName },\n },\n }),\n transformResponse: (res: any) =>\n res?.data?.users.edges.flatMap((u: any) => {\n if (!u.node) return []\n\n const n = u.node\n\n return {\n name: n.name,\n fullName: n.attrib?.fullName,\n avatarUrl: `/api/users/${n.name}/avatar`,\n }\n }),\n providesTags: (res) =>\n res\n ? [\n ...res.map((user: any) => ({ type: 'user', id: user.name })),\n { type: 'user', id: 'LIST' },\n ]\n : [{ type: 'user', id: 'LIST' }],\n }),\n }),\n overrideExisting: true,\n})\n\ntype AssigneeNode = GetAllProjectUsersAsAssigneeQuery['users']['edges'][0]['node']\nexport type Assignee = {\n name: AssigneeNode['name']\n fullName: AssigneeNode['attrib']['fullName']\n updatedAt: AssigneeNode['updatedAt']\n}\nexport type Assignees = Assignee[]\n\ntype Definitions = DefinitionsFromApi<typeof gqlApi>\ntype TagTypes = TagTypesFromApi<typeof gqlApi>\n// update the definitions to include the new types\ntype UpdatedDefinitions = Omit<Definitions, 'GetAllProjectUsersAsAssignee'> & {\n GetAllProjectUsersAsAssignee: OverrideResultType<\n Definitions['GetAllProjectUsersAsAssignee'],\n Assignees\n >\n GetActiveUsersCount: OverrideResultType<Definitions['GetActiveUsersCount'], number>\n GetAllAssignees: OverrideResultType<Definitions['GetAllAssignees'], Assignees>\n}\n\nconst gqlUsers = injectedApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n GetAllProjectUsersAsAssignee: {\n transformResponse: (res: GetAllProjectUsersAsAssigneeQuery) =>\n res.users.edges.map((e) => ({\n name: e.node.name,\n fullName: e.node.attrib.fullName,\n updatedAt: e.node.updatedAt,\n })),\n providesTags: (res) =>\n res\n ? [{ type: 'user', id: 'LIST' }, ...res.map((e) => ({ type: 'user', id: e.name }))]\n : [{ type: 'user', id: 'LIST' }],\n },\n GetActiveUsersCount: {\n transformResponse: (res: GetActiveUsersCountQuery) =>\n res.users.edges.filter((e) => e.node.active && !e.node.isGuest).length,\n providesTags: [{ type: 'user', id: 'LIST' }],\n },\n GetAllAssignees: {\n transformResponse: (res: GetAllAssigneesQuery) =>\n res.users.edges.map((e) => ({\n name: e.node.name,\n fullName: e.node.attrib.fullName,\n updatedAt: e.node.updatedAt,\n })),\n providesTags: (res) =>\n res\n ? [{ type: 'user', id: 'LIST' }, ...res.map((e) => ({ type: 'user', id: e.name }))]\n : [{ type: 'user', id: 'LIST' }],\n },\n },\n})\n\nexport const {\n useGetAllProjectUsersAsAssigneeQuery,\n useLazyGetAllProjectUsersAsAssigneeQuery,\n useGetActiveUsersCountQuery,\n useGetAllAssigneesQuery,\n useGetUsersQuery,\n useGetUserByNameQuery,\n useGetUsersAssigneeQuery,\n} = gqlUsers\n\nexport const { useGetUserSessionsQuery, useGetCurrentUserQuery, useGetUserQuery } = enhancedApi\nexport default injectedApi\n"],"names":["USER_BY_NAME_QUERY","USERS_QUERY","ASSIGNEES_BY_NAME_QUERY","ASSIGNEES_QUERY","enhancedApi","usersApi","res","_res","_g","userName","injectedApi","gqlApi","build","_meta","selfName","e","parseAllAttribs","users","name","names","projectName","u","n","user","gqlUsers","useGetAllProjectUsersAsAssigneeQuery","useLazyGetAllProjectUsersAsAssigneeQuery","useGetActiveUsersCountQuery","useGetAllAssigneesQuery","useGetUsersQuery","useGetUserByNameQuery","useGetUsersAssigneeQuery","useGetUserSessionsQuery","useGetCurrentUserQuery","useGetUserQuery"],"mappings":"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"}
1
+ {"version":3,"file":"getUsers.cjs.js","sources":["../../../../../../src/api/queries/users/getUsers.ts"],"sourcesContent":["import { GetCurrentUserApiResponse, gqlApi, usersApi } from '@shared/api/generated'\nimport type {\n GetActiveUsersCountQuery,\n GetAllAssigneesQuery,\n GetAllProjectUsersAsAssigneeQuery,\n} from '@shared/api/generated'\nimport { DefinitionsFromApi, OverrideResultType, TagTypesFromApi } from '@reduxjs/toolkit/query'\nimport { parseJSONField } from '../overview'\n\nconst USER_BY_NAME_QUERY = `\n query UserList($name:String!) {\n users(name: $name) {\n edges {\n node {\n name\n isAdmin\n isManager\n isService\n isDeveloper\n isStagingAllowed\n isGuest\n active\n accessGroups\n defaultAccessGroups\n hasPassword\n disablePasswordLogin\n allAttrib\n }\n }\n }\n }\n`\nconst USERS_QUERY = `\n query UserList {\n users(last: 2000, isSupport: false) {\n edges {\n node {\n name\n isAdmin\n isManager\n isService\n isDeveloper\n isStagingAllowed\n isGuest\n active\n userPool\n accessGroups\n defaultAccessGroups\n hasPassword\n disablePasswordLogin\n inviteSentAt\n inviteAcceptedAt\n createdAt\n updatedAt\n apiKeyPreview\n allAttrib\n }\n }\n }\n }\n`\n\nconst ASSIGNEES_BY_NAME_QUERY = `\nquery Assignees($names: [String!]!){\n users(names: $names, isSupport: false) {\n edges {\n node {\n name\n attrib {\n fullName\n }\n }\n }\n}\n}`\nconst ASSIGNEES_QUERY = `\nquery Assignees($projectName: String) {\n users(last: 2000 projectName: $projectName, isSupport: false) {\n edges {\n node {\n name\n attrib {\n fullName\n }\n }\n }\n}\n}`\n\ninterface GetCurrentUserResult extends GetCurrentUserApiResponse {\n uiExposureLevel: number\n}\n\ntype RestDefinitions = DefinitionsFromApi<typeof usersApi>\ntype RestTagTypes = TagTypesFromApi<typeof usersApi>\n// update the definitions to include the new types\ntype RestUpdatedDefinitions = Omit<RestDefinitions, 'getCurrentUser'> & {\n getCurrentUser: OverrideResultType<RestDefinitions['getCurrentUser'], GetCurrentUserResult>\n}\n\nconst enhancedApi = usersApi.enhanceEndpoints<RestTagTypes, RestUpdatedDefinitions>({\n endpoints: {\n getCurrentUser: {\n providesTags: [{ type: 'user', id: 'LIST' }],\n },\n getUser: {\n providesTags: (res) =>\n res ? [{ type: 'user', id: res.name }] : [{ type: 'user', id: 'LIST' }],\n },\n getUserSessions: {\n transformResponse: (res: any) => res?.sessions,\n providesTags: (_res, _g, { userName }) => [{ type: 'session', id: userName }],\n },\n },\n})\n\nconst injectedApi = gqlApi.injectEndpoints({\n endpoints: (build) => ({\n getUsers: build.query({\n query: () => ({\n url: '/graphql',\n method: 'POST',\n body: {\n query: USERS_QUERY,\n variables: {},\n },\n }),\n transformResponse: (res: any, _meta, { selfName }) => {\n if (res?.errors) {\n console.log(res.errors)\n throw new Error(res.errors[0].message)\n }\n\n return res?.data?.users.edges\n .filter((e: any) => e.node.name !== 'CloudServiceWorker')\n .map((e: any) => ({\n ...e.node,\n self: e.node.name === selfName,\n avatarUrl: `/api/users/${e.node.name}/avatar`,\n accessGroups: e.node.accessGroups ? JSON.parse(e.node.accessGroups) : {},\n attrib: parseJSONField(e.node.allAttrib),\n }))\n },\n providesTags: (users) =>\n users\n ? [...users.map((e: any) => ({ type: 'user', id: e.name })), { type: 'user', id: 'LIST' }]\n : [{ type: 'user', id: 'LIST' }],\n }),\n getUserByName: build.query({\n query: ({ name }) => ({\n url: '/graphql',\n method: 'POST',\n body: {\n query: USER_BY_NAME_QUERY,\n variables: { name },\n },\n }),\n transformResponse: (res: any) =>\n res?.data?.users.edges.map((e: any) => ({\n ...e.node,\n avatarUrl: `/api/users/${e.node?.name}/avatar`,\n attrib: parseJSONField(e.node.allAttrib),\n })),\n providesTags: (res) =>\n res\n ? [...res.map((e: any) => ({ type: 'user', id: e.name })), { type: 'user', id: 'LIST' }]\n : ['user', { type: 'user', id: 'LIST' }],\n }),\n getUsersAssignee: build.query({\n query: ({ names, projectName }) => ({\n url: '/graphql',\n method: 'POST',\n body: {\n query: names ? ASSIGNEES_BY_NAME_QUERY : ASSIGNEES_QUERY,\n variables: { names, projectName },\n },\n }),\n transformResponse: (res: any) =>\n res?.data?.users.edges.flatMap((u: any) => {\n if (!u.node) return []\n\n const n = u.node\n\n return {\n name: n.name,\n fullName: n.attrib?.fullName,\n avatarUrl: `/api/users/${n.name}/avatar`,\n }\n }),\n providesTags: (res) =>\n res\n ? [\n ...res.map((user: any) => ({ type: 'user', id: user.name })),\n { type: 'user', id: 'LIST' },\n ]\n : [{ type: 'user', id: 'LIST' }],\n }),\n }),\n overrideExisting: true,\n})\n\ntype AssigneeNode = GetAllProjectUsersAsAssigneeQuery['users']['edges'][0]['node']\nexport type Assignee = {\n name: AssigneeNode['name']\n fullName: AssigneeNode['attrib']['fullName']\n updatedAt: AssigneeNode['updatedAt']\n}\nexport type Assignees = Assignee[]\n\ntype Definitions = DefinitionsFromApi<typeof gqlApi>\ntype TagTypes = TagTypesFromApi<typeof gqlApi>\n// update the definitions to include the new types\ntype UpdatedDefinitions = Omit<Definitions, 'GetAllProjectUsersAsAssignee'> & {\n GetAllProjectUsersAsAssignee: OverrideResultType<\n Definitions['GetAllProjectUsersAsAssignee'],\n Assignees\n >\n GetActiveUsersCount: OverrideResultType<Definitions['GetActiveUsersCount'], number>\n GetAllAssignees: OverrideResultType<Definitions['GetAllAssignees'], Assignees>\n}\n\nconst gqlUsers = injectedApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n GetAllProjectUsersAsAssignee: {\n transformResponse: (res: GetAllProjectUsersAsAssigneeQuery) =>\n res.users.edges.map((e) => ({\n name: e.node.name,\n fullName: e.node.attrib.fullName,\n updatedAt: e.node.updatedAt,\n })),\n providesTags: (res) =>\n res\n ? [{ type: 'user', id: 'LIST' }, ...res.map((e) => ({ type: 'user', id: e.name }))]\n : [{ type: 'user', id: 'LIST' }],\n },\n GetActiveUsersCount: {\n transformResponse: (res: GetActiveUsersCountQuery) =>\n res.users.edges.filter((e) => e.node.active && !e.node.isGuest).length,\n providesTags: [{ type: 'user', id: 'LIST' }],\n },\n GetAllAssignees: {\n transformResponse: (res: GetAllAssigneesQuery) =>\n res.users.edges.map((e) => ({\n name: e.node.name,\n fullName: e.node.attrib.fullName,\n updatedAt: e.node.updatedAt,\n })),\n providesTags: (res) =>\n res\n ? [{ type: 'user', id: 'LIST' }, ...res.map((e) => ({ type: 'user', id: e.name }))]\n : [{ type: 'user', id: 'LIST' }],\n },\n },\n})\n\nexport const {\n useGetAllProjectUsersAsAssigneeQuery,\n useLazyGetAllProjectUsersAsAssigneeQuery,\n useGetActiveUsersCountQuery,\n useGetAllAssigneesQuery,\n useGetUsersQuery,\n useGetUserByNameQuery,\n useGetUsersAssigneeQuery,\n} = gqlUsers\n\nexport const { useGetUserSessionsQuery, useGetCurrentUserQuery, useGetUserQuery } = enhancedApi\nexport default injectedApi\n"],"names":["USER_BY_NAME_QUERY","USERS_QUERY","ASSIGNEES_BY_NAME_QUERY","ASSIGNEES_QUERY","enhancedApi","usersApi","res","_res","_g","userName","injectedApi","gqlApi","build","_meta","selfName","e","parseJSONField","users","name","names","projectName","u","n","user","gqlUsers","useGetAllProjectUsersAsAssigneeQuery","useLazyGetAllProjectUsersAsAssigneeQuery","useGetActiveUsersCountQuery","useGetAllAssigneesQuery","useGetUsersQuery","useGetUserByNameQuery","useGetUsersAssigneeQuery","useGetUserSessionsQuery","useGetCurrentUserQuery","useGetUserQuery"],"mappings":"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"}
@@ -38,7 +38,7 @@ import "../../generated/workfiles.es.js";
38
38
  import "../../generated/ynputCloud.es.js";
39
39
  import "../../generated/grouping.es.js";
40
40
  import "../../generated/views.es.js";
41
- import { parseAllAttribs as o } from "../overview/getOverview.es.js";
41
+ import { parseJSONField as o } from "../overview/getOverview.es.js";
42
42
  import "../overview/updateOverview.es.js";
43
43
  import "../versions/getVersionsProducts.es.js";
44
44
  import "../links/getEntityLinks.es.js";
@@ -1 +1 @@
1
- {"version":3,"file":"getUsers.es.js","sources":["../../../../../../src/api/queries/users/getUsers.ts"],"sourcesContent":["import { GetCurrentUserApiResponse, gqlApi, usersApi } from '@shared/api/generated'\nimport type {\n GetActiveUsersCountQuery,\n GetAllAssigneesQuery,\n GetAllProjectUsersAsAssigneeQuery,\n} from '@shared/api/generated'\nimport { DefinitionsFromApi, OverrideResultType, TagTypesFromApi } from '@reduxjs/toolkit/query'\nimport { parseAllAttribs } from '../overview'\n\nconst USER_BY_NAME_QUERY = `\n query UserList($name:String!) {\n users(name: $name) {\n edges {\n node {\n name\n isAdmin\n isManager\n isService\n isDeveloper\n isStagingAllowed\n isGuest\n active\n accessGroups\n defaultAccessGroups\n hasPassword\n disablePasswordLogin\n allAttrib\n }\n }\n }\n }\n`\nconst USERS_QUERY = `\n query UserList {\n users(last: 2000, isSupport: false) {\n edges {\n node {\n name\n isAdmin\n isManager\n isService\n isDeveloper\n isStagingAllowed\n isGuest\n active\n userPool\n accessGroups\n defaultAccessGroups\n hasPassword\n disablePasswordLogin\n inviteSentAt\n inviteAcceptedAt\n createdAt\n updatedAt\n apiKeyPreview\n allAttrib\n }\n }\n }\n }\n`\n\nconst ASSIGNEES_BY_NAME_QUERY = `\nquery Assignees($names: [String!]!){\n users(names: $names, isSupport: false) {\n edges {\n node {\n name\n attrib {\n fullName\n }\n }\n }\n}\n}`\nconst ASSIGNEES_QUERY = `\nquery Assignees($projectName: String) {\n users(last: 2000 projectName: $projectName, isSupport: false) {\n edges {\n node {\n name\n attrib {\n fullName\n }\n }\n }\n}\n}`\n\ninterface GetCurrentUserResult extends GetCurrentUserApiResponse {\n uiExposureLevel: number\n}\n\ntype RestDefinitions = DefinitionsFromApi<typeof usersApi>\ntype RestTagTypes = TagTypesFromApi<typeof usersApi>\n// update the definitions to include the new types\ntype RestUpdatedDefinitions = Omit<RestDefinitions, 'getCurrentUser'> & {\n getCurrentUser: OverrideResultType<RestDefinitions['getCurrentUser'], GetCurrentUserResult>\n}\n\nconst enhancedApi = usersApi.enhanceEndpoints<RestTagTypes, RestUpdatedDefinitions>({\n endpoints: {\n getCurrentUser: {\n providesTags: [{ type: 'user', id: 'LIST' }],\n },\n getUser: {\n providesTags: (res) =>\n res ? [{ type: 'user', id: res.name }] : [{ type: 'user', id: 'LIST' }],\n },\n getUserSessions: {\n transformResponse: (res: any) => res?.sessions,\n providesTags: (_res, _g, { userName }) => [{ type: 'session', id: userName }],\n },\n },\n})\n\nconst injectedApi = gqlApi.injectEndpoints({\n endpoints: (build) => ({\n getUsers: build.query({\n query: () => ({\n url: '/graphql',\n method: 'POST',\n body: {\n query: USERS_QUERY,\n variables: {},\n },\n }),\n transformResponse: (res: any, _meta, { selfName }) => {\n if (res?.errors) {\n console.log(res.errors)\n throw new Error(res.errors[0].message)\n }\n\n return res?.data?.users.edges\n .filter((e: any) => e.node.name !== 'CloudServiceWorker')\n .map((e: any) => ({\n ...e.node,\n self: e.node.name === selfName,\n avatarUrl: `/api/users/${e.node.name}/avatar`,\n accessGroups: e.node.accessGroups ? JSON.parse(e.node.accessGroups) : {},\n attrib: parseAllAttribs(e.node.allAttrib),\n }))\n },\n providesTags: (users) =>\n users\n ? [...users.map((e: any) => ({ type: 'user', id: e.name })), { type: 'user', id: 'LIST' }]\n : [{ type: 'user', id: 'LIST' }],\n }),\n getUserByName: build.query({\n query: ({ name }) => ({\n url: '/graphql',\n method: 'POST',\n body: {\n query: USER_BY_NAME_QUERY,\n variables: { name },\n },\n }),\n transformResponse: (res: any) =>\n res?.data?.users.edges.map((e: any) => ({\n ...e.node,\n avatarUrl: `/api/users/${e.node?.name}/avatar`,\n attrib: parseAllAttribs(e.node.allAttrib),\n })),\n providesTags: (res) =>\n res\n ? [...res.map((e: any) => ({ type: 'user', id: e.name })), { type: 'user', id: 'LIST' }]\n : ['user', { type: 'user', id: 'LIST' }],\n }),\n getUsersAssignee: build.query({\n query: ({ names, projectName }) => ({\n url: '/graphql',\n method: 'POST',\n body: {\n query: names ? ASSIGNEES_BY_NAME_QUERY : ASSIGNEES_QUERY,\n variables: { names, projectName },\n },\n }),\n transformResponse: (res: any) =>\n res?.data?.users.edges.flatMap((u: any) => {\n if (!u.node) return []\n\n const n = u.node\n\n return {\n name: n.name,\n fullName: n.attrib?.fullName,\n avatarUrl: `/api/users/${n.name}/avatar`,\n }\n }),\n providesTags: (res) =>\n res\n ? [\n ...res.map((user: any) => ({ type: 'user', id: user.name })),\n { type: 'user', id: 'LIST' },\n ]\n : [{ type: 'user', id: 'LIST' }],\n }),\n }),\n overrideExisting: true,\n})\n\ntype AssigneeNode = GetAllProjectUsersAsAssigneeQuery['users']['edges'][0]['node']\nexport type Assignee = {\n name: AssigneeNode['name']\n fullName: AssigneeNode['attrib']['fullName']\n updatedAt: AssigneeNode['updatedAt']\n}\nexport type Assignees = Assignee[]\n\ntype Definitions = DefinitionsFromApi<typeof gqlApi>\ntype TagTypes = TagTypesFromApi<typeof gqlApi>\n// update the definitions to include the new types\ntype UpdatedDefinitions = Omit<Definitions, 'GetAllProjectUsersAsAssignee'> & {\n GetAllProjectUsersAsAssignee: OverrideResultType<\n Definitions['GetAllProjectUsersAsAssignee'],\n Assignees\n >\n GetActiveUsersCount: OverrideResultType<Definitions['GetActiveUsersCount'], number>\n GetAllAssignees: OverrideResultType<Definitions['GetAllAssignees'], Assignees>\n}\n\nconst gqlUsers = injectedApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n GetAllProjectUsersAsAssignee: {\n transformResponse: (res: GetAllProjectUsersAsAssigneeQuery) =>\n res.users.edges.map((e) => ({\n name: e.node.name,\n fullName: e.node.attrib.fullName,\n updatedAt: e.node.updatedAt,\n })),\n providesTags: (res) =>\n res\n ? [{ type: 'user', id: 'LIST' }, ...res.map((e) => ({ type: 'user', id: e.name }))]\n : [{ type: 'user', id: 'LIST' }],\n },\n GetActiveUsersCount: {\n transformResponse: (res: GetActiveUsersCountQuery) =>\n res.users.edges.filter((e) => e.node.active && !e.node.isGuest).length,\n providesTags: [{ type: 'user', id: 'LIST' }],\n },\n GetAllAssignees: {\n transformResponse: (res: GetAllAssigneesQuery) =>\n res.users.edges.map((e) => ({\n name: e.node.name,\n fullName: e.node.attrib.fullName,\n updatedAt: e.node.updatedAt,\n })),\n providesTags: (res) =>\n res\n ? [{ type: 'user', id: 'LIST' }, ...res.map((e) => ({ type: 'user', id: e.name }))]\n : [{ type: 'user', id: 'LIST' }],\n },\n },\n})\n\nexport const {\n useGetAllProjectUsersAsAssigneeQuery,\n useLazyGetAllProjectUsersAsAssigneeQuery,\n useGetActiveUsersCountQuery,\n useGetAllAssigneesQuery,\n useGetUsersQuery,\n useGetUserByNameQuery,\n useGetUsersAssigneeQuery,\n} = gqlUsers\n\nexport const { useGetUserSessionsQuery, useGetCurrentUserQuery, useGetUserQuery } = enhancedApi\nexport default injectedApi\n"],"names":["USER_BY_NAME_QUERY","USERS_QUERY","ASSIGNEES_BY_NAME_QUERY","ASSIGNEES_QUERY","enhancedApi","usersApi","res","_res","_g","userName","injectedApi","gqlApi","build","_meta","selfName","e","parseAllAttribs","users","name","names","projectName","u","n","user","gqlUsers","useGetAllProjectUsersAsAssigneeQuery","useLazyGetAllProjectUsersAsAssigneeQuery","useGetActiveUsersCountQuery","useGetAllAssigneesQuery","useGetUsersQuery","useGetUserByNameQuery","useGetUsersAssigneeQuery","useGetUserSessionsQuery","useGetCurrentUserQuery","useGetUserQuery"],"mappings":"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"}
1
+ {"version":3,"file":"getUsers.es.js","sources":["../../../../../../src/api/queries/users/getUsers.ts"],"sourcesContent":["import { GetCurrentUserApiResponse, gqlApi, usersApi } from '@shared/api/generated'\nimport type {\n GetActiveUsersCountQuery,\n GetAllAssigneesQuery,\n GetAllProjectUsersAsAssigneeQuery,\n} from '@shared/api/generated'\nimport { DefinitionsFromApi, OverrideResultType, TagTypesFromApi } from '@reduxjs/toolkit/query'\nimport { parseJSONField } from '../overview'\n\nconst USER_BY_NAME_QUERY = `\n query UserList($name:String!) {\n users(name: $name) {\n edges {\n node {\n name\n isAdmin\n isManager\n isService\n isDeveloper\n isStagingAllowed\n isGuest\n active\n accessGroups\n defaultAccessGroups\n hasPassword\n disablePasswordLogin\n allAttrib\n }\n }\n }\n }\n`\nconst USERS_QUERY = `\n query UserList {\n users(last: 2000, isSupport: false) {\n edges {\n node {\n name\n isAdmin\n isManager\n isService\n isDeveloper\n isStagingAllowed\n isGuest\n active\n userPool\n accessGroups\n defaultAccessGroups\n hasPassword\n disablePasswordLogin\n inviteSentAt\n inviteAcceptedAt\n createdAt\n updatedAt\n apiKeyPreview\n allAttrib\n }\n }\n }\n }\n`\n\nconst ASSIGNEES_BY_NAME_QUERY = `\nquery Assignees($names: [String!]!){\n users(names: $names, isSupport: false) {\n edges {\n node {\n name\n attrib {\n fullName\n }\n }\n }\n}\n}`\nconst ASSIGNEES_QUERY = `\nquery Assignees($projectName: String) {\n users(last: 2000 projectName: $projectName, isSupport: false) {\n edges {\n node {\n name\n attrib {\n fullName\n }\n }\n }\n}\n}`\n\ninterface GetCurrentUserResult extends GetCurrentUserApiResponse {\n uiExposureLevel: number\n}\n\ntype RestDefinitions = DefinitionsFromApi<typeof usersApi>\ntype RestTagTypes = TagTypesFromApi<typeof usersApi>\n// update the definitions to include the new types\ntype RestUpdatedDefinitions = Omit<RestDefinitions, 'getCurrentUser'> & {\n getCurrentUser: OverrideResultType<RestDefinitions['getCurrentUser'], GetCurrentUserResult>\n}\n\nconst enhancedApi = usersApi.enhanceEndpoints<RestTagTypes, RestUpdatedDefinitions>({\n endpoints: {\n getCurrentUser: {\n providesTags: [{ type: 'user', id: 'LIST' }],\n },\n getUser: {\n providesTags: (res) =>\n res ? [{ type: 'user', id: res.name }] : [{ type: 'user', id: 'LIST' }],\n },\n getUserSessions: {\n transformResponse: (res: any) => res?.sessions,\n providesTags: (_res, _g, { userName }) => [{ type: 'session', id: userName }],\n },\n },\n})\n\nconst injectedApi = gqlApi.injectEndpoints({\n endpoints: (build) => ({\n getUsers: build.query({\n query: () => ({\n url: '/graphql',\n method: 'POST',\n body: {\n query: USERS_QUERY,\n variables: {},\n },\n }),\n transformResponse: (res: any, _meta, { selfName }) => {\n if (res?.errors) {\n console.log(res.errors)\n throw new Error(res.errors[0].message)\n }\n\n return res?.data?.users.edges\n .filter((e: any) => e.node.name !== 'CloudServiceWorker')\n .map((e: any) => ({\n ...e.node,\n self: e.node.name === selfName,\n avatarUrl: `/api/users/${e.node.name}/avatar`,\n accessGroups: e.node.accessGroups ? JSON.parse(e.node.accessGroups) : {},\n attrib: parseJSONField(e.node.allAttrib),\n }))\n },\n providesTags: (users) =>\n users\n ? [...users.map((e: any) => ({ type: 'user', id: e.name })), { type: 'user', id: 'LIST' }]\n : [{ type: 'user', id: 'LIST' }],\n }),\n getUserByName: build.query({\n query: ({ name }) => ({\n url: '/graphql',\n method: 'POST',\n body: {\n query: USER_BY_NAME_QUERY,\n variables: { name },\n },\n }),\n transformResponse: (res: any) =>\n res?.data?.users.edges.map((e: any) => ({\n ...e.node,\n avatarUrl: `/api/users/${e.node?.name}/avatar`,\n attrib: parseJSONField(e.node.allAttrib),\n })),\n providesTags: (res) =>\n res\n ? [...res.map((e: any) => ({ type: 'user', id: e.name })), { type: 'user', id: 'LIST' }]\n : ['user', { type: 'user', id: 'LIST' }],\n }),\n getUsersAssignee: build.query({\n query: ({ names, projectName }) => ({\n url: '/graphql',\n method: 'POST',\n body: {\n query: names ? ASSIGNEES_BY_NAME_QUERY : ASSIGNEES_QUERY,\n variables: { names, projectName },\n },\n }),\n transformResponse: (res: any) =>\n res?.data?.users.edges.flatMap((u: any) => {\n if (!u.node) return []\n\n const n = u.node\n\n return {\n name: n.name,\n fullName: n.attrib?.fullName,\n avatarUrl: `/api/users/${n.name}/avatar`,\n }\n }),\n providesTags: (res) =>\n res\n ? [\n ...res.map((user: any) => ({ type: 'user', id: user.name })),\n { type: 'user', id: 'LIST' },\n ]\n : [{ type: 'user', id: 'LIST' }],\n }),\n }),\n overrideExisting: true,\n})\n\ntype AssigneeNode = GetAllProjectUsersAsAssigneeQuery['users']['edges'][0]['node']\nexport type Assignee = {\n name: AssigneeNode['name']\n fullName: AssigneeNode['attrib']['fullName']\n updatedAt: AssigneeNode['updatedAt']\n}\nexport type Assignees = Assignee[]\n\ntype Definitions = DefinitionsFromApi<typeof gqlApi>\ntype TagTypes = TagTypesFromApi<typeof gqlApi>\n// update the definitions to include the new types\ntype UpdatedDefinitions = Omit<Definitions, 'GetAllProjectUsersAsAssignee'> & {\n GetAllProjectUsersAsAssignee: OverrideResultType<\n Definitions['GetAllProjectUsersAsAssignee'],\n Assignees\n >\n GetActiveUsersCount: OverrideResultType<Definitions['GetActiveUsersCount'], number>\n GetAllAssignees: OverrideResultType<Definitions['GetAllAssignees'], Assignees>\n}\n\nconst gqlUsers = injectedApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n GetAllProjectUsersAsAssignee: {\n transformResponse: (res: GetAllProjectUsersAsAssigneeQuery) =>\n res.users.edges.map((e) => ({\n name: e.node.name,\n fullName: e.node.attrib.fullName,\n updatedAt: e.node.updatedAt,\n })),\n providesTags: (res) =>\n res\n ? [{ type: 'user', id: 'LIST' }, ...res.map((e) => ({ type: 'user', id: e.name }))]\n : [{ type: 'user', id: 'LIST' }],\n },\n GetActiveUsersCount: {\n transformResponse: (res: GetActiveUsersCountQuery) =>\n res.users.edges.filter((e) => e.node.active && !e.node.isGuest).length,\n providesTags: [{ type: 'user', id: 'LIST' }],\n },\n GetAllAssignees: {\n transformResponse: (res: GetAllAssigneesQuery) =>\n res.users.edges.map((e) => ({\n name: e.node.name,\n fullName: e.node.attrib.fullName,\n updatedAt: e.node.updatedAt,\n })),\n providesTags: (res) =>\n res\n ? [{ type: 'user', id: 'LIST' }, ...res.map((e) => ({ type: 'user', id: e.name }))]\n : [{ type: 'user', id: 'LIST' }],\n },\n },\n})\n\nexport const {\n useGetAllProjectUsersAsAssigneeQuery,\n useLazyGetAllProjectUsersAsAssigneeQuery,\n useGetActiveUsersCountQuery,\n useGetAllAssigneesQuery,\n useGetUsersQuery,\n useGetUserByNameQuery,\n useGetUsersAssigneeQuery,\n} = gqlUsers\n\nexport const { useGetUserSessionsQuery, useGetCurrentUserQuery, useGetUserQuery } = enhancedApi\nexport default injectedApi\n"],"names":["USER_BY_NAME_QUERY","USERS_QUERY","ASSIGNEES_BY_NAME_QUERY","ASSIGNEES_QUERY","enhancedApi","usersApi","res","_res","_g","userName","injectedApi","gqlApi","build","_meta","selfName","e","parseJSONField","users","name","names","projectName","u","n","user","gqlUsers","useGetAllProjectUsersAsAssigneeQuery","useLazyGetAllProjectUsersAsAssigneeQuery","useGetActiveUsersCountQuery","useGetAllAssigneesQuery","useGetUsersQuery","useGetUserByNameQuery","useGetUsersAssigneeQuery","useGetUserSessionsQuery","useGetCurrentUserQuery","useGetUserQuery"],"mappings":"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"}