@ynput/ayon-frontend-shared 0.3.0 → 0.3.1
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.
- package/dist/_virtual/index.cjs10.js +1 -1
- package/dist/_virtual/index.cjs11.js +1 -1
- package/dist/_virtual/index.cjs12.js +1 -1
- package/dist/_virtual/index.cjs4.js +1 -1
- package/dist/_virtual/index.cjs5.js +1 -1
- package/dist/_virtual/index.es10.js +3 -3
- package/dist/_virtual/index.es11.js +5 -5
- package/dist/_virtual/index.es12.js +5 -5
- package/dist/_virtual/index.es4.js +2 -5
- package/dist/_virtual/index.es4.js.map +1 -1
- package/dist/_virtual/index.es5.js +5 -2
- package/dist/_virtual/index.es5.js.map +1 -1
- package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
- package/dist/node_modules/rehype/node_modules/vfile/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype/node_modules/vfile/lib/index.es.js +1 -1
- package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
- package/dist/node_modules/remove-accents/index.cjs.js +1 -1
- package/dist/node_modules/remove-accents/index.es.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.es.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/Transition.es.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.es.js +1 -1
- package/dist/shared/src/api/queries/overview/getOverview.cjs.js +1 -1
- package/dist/shared/src/api/queries/overview/getOverview.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/overview/getOverview.es.js +95 -95
- package/dist/shared/src/api/queries/overview/getOverview.es.js.map +1 -1
- package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js +1 -1
- package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js.map +1 -1
- package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js +14 -11
- package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js.map +1 -1
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +1 -1
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -1
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +42 -41
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +23 -23
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +65 -64
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +16 -16
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js +3 -3
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js +142 -146
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +24 -24
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js +141 -132
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +35 -28
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.es.js.map +1 -1
- package/dist/shared/src/context/AddonContext.cjs.js.map +1 -1
- package/dist/shared/src/context/AddonContext.es.js.map +1 -1
- package/dist/shared/src/context/ProjectFoldersContext.cjs.js +1 -1
- package/dist/shared/src/context/ProjectFoldersContext.cjs.js.map +1 -1
- package/dist/shared/src/context/ProjectFoldersContext.es.js +62 -49
- package/dist/shared/src/context/ProjectFoldersContext.es.js.map +1 -1
- package/dist/types/api/queries/overview/getOverview.d.ts +1 -0
- package/dist/types/components/RemotePage/RemotePageWrapper.d.ts +1 -0
- package/dist/types/components/SearchFilter/useBuildFilterOptions.d.ts +1 -0
- package/dist/types/containers/ProjectTreeTable/hooks/useFetchOverviewData.d.ts +2 -1
- package/dist/types/containers/ProjectTreeTable/hooks/useQueryFilters.d.ts +4 -1
- package/dist/types/context/AddonContext.d.ts +1 -0
- package/dist/types/context/ProjectFoldersContext.d.ts +1 -0
- package/package.json +1 -1
|
@@ -63,7 +63,7 @@ import "../../../api/queries/grouping/getGrouping.es.js";
|
|
|
63
63
|
import "../../../api/queries/links/updateLinks.es.js";
|
|
64
64
|
import "../../../api/queries/links/getLinks.es.js";
|
|
65
65
|
import { useGetEntityLinksQuery as N } from "../../../api/queries/links/getEntityLinks.es.js";
|
|
66
|
-
import { useGetOverviewTasksByFoldersQuery as
|
|
66
|
+
import { useGetOverviewTasksByFoldersQuery as xt, useGetSearchFoldersQuery as Ft, useGetTasksListInfiniteInfiniteQuery as zt, useGetGroupedTasksListQuery as Ut } from "../../../api/queries/overview/getOverview.es.js";
|
|
67
67
|
import "../../../api/queries/overview/updateOverview.es.js";
|
|
68
68
|
import "../../../api/queries/versions/getVersionsProducts.es.js";
|
|
69
69
|
import "../../../api/queries/permissions/getPermissions.es.js";
|
|
@@ -83,7 +83,7 @@ import "../../../api/queries/views/getViews.es.js";
|
|
|
83
83
|
import "../../../api/queries/views/updateViews.es.js";
|
|
84
84
|
import "../../../api/queries/watchers/getWatchers.es.js";
|
|
85
85
|
import "../../../api/queries/uris/getUris.es.js";
|
|
86
|
-
import { useMemo as
|
|
86
|
+
import { useMemo as c, useState as vt, useEffect as Gt } from "react";
|
|
87
87
|
import "../../../context/RemoteModulesContext.es.js";
|
|
88
88
|
import "../../../../../_virtual/runtime.es.js";
|
|
89
89
|
import "../../../../../_virtual/semver.es.js";
|
|
@@ -103,19 +103,19 @@ import "../../../context/MenuContext.es.js";
|
|
|
103
103
|
import "../../../context/WebsocketContext.es.js";
|
|
104
104
|
import "../../../context/GlobalContext.es.js";
|
|
105
105
|
import "../../../context/ProjectContext.es.js";
|
|
106
|
-
import { useProjectFoldersContext as
|
|
106
|
+
import { useProjectFoldersContext as Dt } from "../../../context/ProjectFoldersContext.es.js";
|
|
107
107
|
import "../../../context/UriContext.es.js";
|
|
108
108
|
import "react-redux";
|
|
109
109
|
import "custom-protocol-check";
|
|
110
110
|
import { useGroupedPagination as Et } from "../../../hooks/useGroupedPagination.es.js";
|
|
111
111
|
import "../components/GroupSettingsFallback.es.js";
|
|
112
112
|
import "uuid";
|
|
113
|
-
import { getGroupByDataType as
|
|
113
|
+
import { getGroupByDataType as bt } from "../../../util/getGroupByDataType.es.js";
|
|
114
114
|
import "../../../util/pubsub.es.js";
|
|
115
|
-
import { determineLoadingTaskFolders as
|
|
116
|
-
import { isGroupId as
|
|
115
|
+
import { determineLoadingTaskFolders as Qt } from "../utils/loadingUtils.es.js";
|
|
116
|
+
import { isGroupId as V, GROUP_BY_ID as Ct } from "./useBuildGroupByTableData.es.js";
|
|
117
117
|
const Je = ({
|
|
118
|
-
projectName:
|
|
118
|
+
projectName: f,
|
|
119
119
|
selectedFolders: g,
|
|
120
120
|
// comes from the slicer
|
|
121
121
|
taskFilters: o,
|
|
@@ -123,39 +123,40 @@ const Je = ({
|
|
|
123
123
|
sorting: D,
|
|
124
124
|
groupBy: p,
|
|
125
125
|
taskGroups: y = [],
|
|
126
|
-
|
|
126
|
+
taskGroupsCount: Y,
|
|
127
|
+
expanded: k,
|
|
127
128
|
showHierarchy: m,
|
|
128
|
-
attribFields:
|
|
129
|
-
modules:
|
|
129
|
+
attribFields: J,
|
|
130
|
+
modules: K
|
|
130
131
|
}) => {
|
|
131
|
-
const { getGroupQueries:
|
|
132
|
-
folders:
|
|
133
|
-
isLoading:
|
|
134
|
-
isUninitialized:
|
|
135
|
-
refetch:
|
|
136
|
-
} =
|
|
137
|
-
data:
|
|
138
|
-
isFetching:
|
|
139
|
-
refetch:
|
|
140
|
-
isUninitialized:
|
|
141
|
-
} =
|
|
132
|
+
const { getGroupQueries: E, isLoading: b } = K, {
|
|
133
|
+
folders: l,
|
|
134
|
+
isLoading: X,
|
|
135
|
+
isUninitialized: Z,
|
|
136
|
+
refetch: $
|
|
137
|
+
} = Dt(), M = Object.entries(k).filter(([, t]) => t).filter(([t]) => !V(t)).map(([t]) => t), {
|
|
138
|
+
data: u = [],
|
|
139
|
+
isFetching: Q,
|
|
140
|
+
refetch: j,
|
|
141
|
+
isUninitialized: H
|
|
142
|
+
} = xt(
|
|
142
143
|
{
|
|
143
|
-
projectName:
|
|
144
|
-
parentIds:
|
|
144
|
+
projectName: f,
|
|
145
|
+
parentIds: M,
|
|
145
146
|
filter: o.filterString,
|
|
146
147
|
folderFilter: d.filterString,
|
|
147
148
|
search: o.search
|
|
148
149
|
},
|
|
149
|
-
{ skip: !
|
|
150
|
-
),
|
|
151
|
-
data:
|
|
150
|
+
{ skip: !M.length || !m }
|
|
151
|
+
), C = !o.filterString && !d.filterString && !o.search && !d.search || !l.length || !m, {
|
|
152
|
+
data: T,
|
|
152
153
|
isUninitialized: B,
|
|
153
|
-
isFetching:
|
|
154
|
-
isUninitialized:
|
|
155
|
-
refetch:
|
|
156
|
-
} =
|
|
154
|
+
isFetching: tt,
|
|
155
|
+
isUninitialized: it,
|
|
156
|
+
refetch: et
|
|
157
|
+
} = Ft(
|
|
157
158
|
{
|
|
158
|
-
projectName:
|
|
159
|
+
projectName: f,
|
|
159
160
|
folderSearchRequest: {
|
|
160
161
|
taskFilter: o.filter?.conditions?.length ? o.filter : void 0,
|
|
161
162
|
taskSearch: o.search,
|
|
@@ -164,182 +165,190 @@ const Je = ({
|
|
|
164
165
|
}
|
|
165
166
|
},
|
|
166
167
|
{
|
|
167
|
-
skip:
|
|
168
|
+
skip: C
|
|
168
169
|
}
|
|
169
|
-
),
|
|
170
|
+
), rt = c(() => {
|
|
170
171
|
const t = /* @__PURE__ */ new Set();
|
|
171
|
-
return
|
|
172
|
-
if (!
|
|
173
|
-
t.add(
|
|
172
|
+
return l.forEach((r) => {
|
|
173
|
+
if (!r.parentId) {
|
|
174
|
+
t.add(r.id);
|
|
174
175
|
return;
|
|
175
176
|
}
|
|
176
|
-
const
|
|
177
|
-
(
|
|
177
|
+
const s = r.parentId, a = g.includes(r.id);
|
|
178
|
+
(k[s] === !0 || a) && t.add(r.id);
|
|
178
179
|
}), t;
|
|
179
|
-
}, [
|
|
180
|
-
data:
|
|
181
|
-
refetch:
|
|
182
|
-
isUninitialized:
|
|
180
|
+
}, [l, T, C, k, g]), {
|
|
181
|
+
data: O = [],
|
|
182
|
+
refetch: st,
|
|
183
|
+
isUninitialized: ot
|
|
183
184
|
} = N({
|
|
184
|
-
projectName:
|
|
185
|
-
entityIds: Array.from(
|
|
185
|
+
projectName: f,
|
|
186
|
+
entityIds: Array.from(rt),
|
|
186
187
|
entityType: "folder"
|
|
187
|
-
}),
|
|
188
|
-
const t = /* @__PURE__ */ new Map(),
|
|
189
|
-
...
|
|
190
|
-
entityId:
|
|
188
|
+
}), S = c(() => {
|
|
189
|
+
const t = /* @__PURE__ */ new Map(), r = (s) => ({
|
|
190
|
+
...s,
|
|
191
|
+
entityId: s.id,
|
|
191
192
|
entityType: "folder",
|
|
192
|
-
links:
|
|
193
|
+
links: O?.find((e) => e.id === s.id)?.links || []
|
|
193
194
|
});
|
|
194
|
-
if (!B &&
|
|
195
|
-
const
|
|
196
|
-
for (const i of
|
|
197
|
-
|
|
195
|
+
if (!B && T && l.length) {
|
|
196
|
+
const s = /* @__PURE__ */ new Set();
|
|
197
|
+
for (const i of T)
|
|
198
|
+
s.add(i);
|
|
198
199
|
const a = /* @__PURE__ */ new Map();
|
|
199
|
-
for (const i of
|
|
200
|
+
for (const i of l)
|
|
200
201
|
a.set(i.id, i);
|
|
201
202
|
const e = (i) => {
|
|
202
203
|
const n = a.get(i);
|
|
203
|
-
n && n.parentId && (
|
|
204
|
+
n && n.parentId && (s.add(n.parentId), e(n.parentId));
|
|
204
205
|
};
|
|
205
|
-
for (const i of
|
|
206
|
+
for (const i of T)
|
|
206
207
|
e(i);
|
|
207
|
-
for (const i of
|
|
208
|
-
|
|
208
|
+
for (const i of l)
|
|
209
|
+
s.has(i.id) && t.set(i.id, r(i));
|
|
209
210
|
} else
|
|
210
|
-
for (const
|
|
211
|
-
t.set(
|
|
211
|
+
for (const s of l)
|
|
212
|
+
t.set(s.id, r(s));
|
|
212
213
|
if (g.length) {
|
|
213
|
-
const
|
|
214
|
+
const s = g.map((e) => t.get(e)?.path).filter(Boolean), a = /* @__PURE__ */ new Map();
|
|
214
215
|
return t.forEach((e, i) => {
|
|
215
|
-
const n = e.path,
|
|
216
|
-
let
|
|
217
|
-
for (let
|
|
218
|
-
const
|
|
219
|
-
if (
|
|
220
|
-
|
|
216
|
+
const n = e.path, I = n.split("/");
|
|
217
|
+
let L = !1;
|
|
218
|
+
for (let P = 0; P < I.length; P++) {
|
|
219
|
+
const Mt = I.slice(0, P + 1).join("/");
|
|
220
|
+
if (s.some((St) => St === Mt)) {
|
|
221
|
+
L = !0;
|
|
221
222
|
break;
|
|
222
223
|
}
|
|
223
224
|
}
|
|
224
|
-
const
|
|
225
|
-
(
|
|
225
|
+
const G = s.some(
|
|
226
|
+
(P) => n.startsWith(P + "/")
|
|
226
227
|
);
|
|
227
|
-
(
|
|
228
|
+
(L || G) && a.set(i, r(e));
|
|
228
229
|
}), a;
|
|
229
230
|
}
|
|
230
231
|
return t;
|
|
231
|
-
}, [
|
|
232
|
-
expandedFoldersTasks:
|
|
233
|
-
expandedParentIds:
|
|
234
|
-
foldersMap:
|
|
235
|
-
}) : {}, [
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
}, [D,
|
|
239
|
-
const
|
|
232
|
+
}, [l, T, B, g, O]), nt = c(() => Q ? Qt({
|
|
233
|
+
expandedFoldersTasks: u,
|
|
234
|
+
expandedParentIds: M,
|
|
235
|
+
foldersMap: S
|
|
236
|
+
}) : {}, [Q, u, M, S]), [A, at] = vt("");
|
|
237
|
+
Gt(() => {
|
|
238
|
+
A && at("");
|
|
239
|
+
}, [D, A]);
|
|
240
|
+
const h = { ...D[0] }, x = h?.id === "name" && !m ? "path" : h?.id === "subType" ? "taskType" : h?.id, _ = g.length ? Array.from(S.keys()) : void 0, {
|
|
240
241
|
data: U,
|
|
241
|
-
isLoading:
|
|
242
|
-
isFetching:
|
|
243
|
-
fetchNextPage:
|
|
244
|
-
hasNextPage:
|
|
245
|
-
isFetchingNextPage:
|
|
246
|
-
isUninitialized:
|
|
247
|
-
refetch:
|
|
248
|
-
} =
|
|
242
|
+
isLoading: pt,
|
|
243
|
+
isFetching: Ot,
|
|
244
|
+
fetchNextPage: dt,
|
|
245
|
+
hasNextPage: mt,
|
|
246
|
+
isFetchingNextPage: lt,
|
|
247
|
+
isUninitialized: ct,
|
|
248
|
+
refetch: ft
|
|
249
|
+
} = zt(
|
|
249
250
|
{
|
|
250
|
-
projectName:
|
|
251
|
+
projectName: f,
|
|
251
252
|
filter: o.filterString,
|
|
252
253
|
folderFilter: d.filterString,
|
|
253
254
|
search: o.search,
|
|
254
|
-
folderIds:
|
|
255
|
+
folderIds: _,
|
|
255
256
|
sortBy: x ? x.replace("_", ".") : void 0,
|
|
256
|
-
desc: !!
|
|
257
|
+
desc: !!h?.desc
|
|
257
258
|
},
|
|
258
259
|
{
|
|
259
260
|
skip: m,
|
|
260
261
|
initialPageParam: {
|
|
261
262
|
cursor: "",
|
|
262
|
-
desc: !!
|
|
263
|
+
desc: !!h?.desc
|
|
263
264
|
}
|
|
264
265
|
}
|
|
265
|
-
),
|
|
266
|
+
), F = c(() => U?.pages ? U.pages.flatMap((t) => t.tasks || []) : [], [U?.pages]), { pageCounts: v, incrementPageCount: gt } = Et({
|
|
266
267
|
groups: y
|
|
267
|
-
}),
|
|
268
|
+
}), ut = bt(p, J), w = c(() => Object.entries(k).filter(([, t]) => t).filter(([t]) => V(t)).map(([t]) => t.slice(Ct.length)), [k]), W = c(() => p ? (E?.({
|
|
268
269
|
groups: y,
|
|
269
270
|
taskGroups: y,
|
|
270
271
|
// deprecated, but keep for backward compatibility
|
|
271
272
|
filters: o.filter,
|
|
272
273
|
groupBy: p,
|
|
273
274
|
groupPageCounts: v
|
|
274
|
-
}) ?? [] : [], [
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
275
|
+
}) ?? []).filter((r) => w.includes(r.value)) : [], [
|
|
276
|
+
p,
|
|
277
|
+
y,
|
|
278
|
+
v,
|
|
279
|
+
ut,
|
|
280
|
+
o.filter,
|
|
281
|
+
E,
|
|
282
|
+
w
|
|
283
|
+
]), {
|
|
284
|
+
data: { tasks: z = [] } = {},
|
|
285
|
+
isUninitialized: ht,
|
|
286
|
+
refetch: kt
|
|
287
|
+
} = Ut(
|
|
280
288
|
{
|
|
281
|
-
projectName:
|
|
289
|
+
projectName: f,
|
|
282
290
|
groups: W,
|
|
283
291
|
sortBy: x ? x.replace("_", ".") : void 0,
|
|
284
|
-
desc: !!
|
|
292
|
+
desc: !!h?.desc,
|
|
285
293
|
search: o.search,
|
|
286
294
|
folderFilter: d.filterString,
|
|
287
|
-
folderIds:
|
|
295
|
+
folderIds: _,
|
|
296
|
+
groupCount: Y
|
|
288
297
|
},
|
|
289
298
|
{
|
|
290
299
|
skip: !p || !W.length || b
|
|
291
300
|
}
|
|
292
|
-
),
|
|
293
|
-
const t = m ?
|
|
294
|
-
return new Set(t.map((
|
|
295
|
-
}, [
|
|
301
|
+
), R = c(() => {
|
|
302
|
+
const t = m ? u : p ? z : F;
|
|
303
|
+
return new Set(t.map((r) => r.id));
|
|
304
|
+
}, [u, m, F, z, p]), {
|
|
296
305
|
data: q = [],
|
|
297
|
-
refetch:
|
|
298
|
-
isUninitialized:
|
|
306
|
+
refetch: Tt,
|
|
307
|
+
isUninitialized: It
|
|
299
308
|
} = N(
|
|
300
309
|
{
|
|
301
|
-
projectName:
|
|
302
|
-
entityIds: Array.from(
|
|
310
|
+
projectName: f,
|
|
311
|
+
entityIds: Array.from(R),
|
|
303
312
|
entityType: "task"
|
|
304
313
|
},
|
|
305
314
|
{
|
|
306
|
-
skip:
|
|
315
|
+
skip: R.size === 0
|
|
307
316
|
}
|
|
308
|
-
),
|
|
309
|
-
p ? t && t in v && (console.log("fetching next page for group:", t),
|
|
310
|
-
}, { tasksMap:
|
|
311
|
-
const t = /* @__PURE__ */ new Map(),
|
|
317
|
+
), Lt = (t) => {
|
|
318
|
+
p ? t && t in v && (console.log("fetching next page for group:", t), gt(t)) : mt && (console.log("fetching next page"), dt());
|
|
319
|
+
}, { tasksMap: Pt, tasksByFolderMap: yt } = c(() => {
|
|
320
|
+
const t = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map(), s = (e) => ({
|
|
312
321
|
...e,
|
|
313
322
|
entityId: e.id,
|
|
314
323
|
entityType: "task",
|
|
315
324
|
links: q?.find((i) => i.id === e.id)?.links || []
|
|
316
|
-
}), a = m ?
|
|
325
|
+
}), a = m ? u : p ? z : F;
|
|
317
326
|
for (const e of a) {
|
|
318
327
|
const i = e.id, n = e.folderId;
|
|
319
328
|
if (t.has(i)) {
|
|
320
|
-
const
|
|
321
|
-
...T,
|
|
329
|
+
const I = t.get(i), L = s(e), G = {
|
|
322
330
|
...I,
|
|
323
|
-
|
|
331
|
+
...L,
|
|
332
|
+
groups: [...I.groups || [], ...L.groups || []]
|
|
324
333
|
};
|
|
325
|
-
t.set(i,
|
|
334
|
+
t.set(i, G);
|
|
326
335
|
} else
|
|
327
|
-
t.set(i,
|
|
328
|
-
|
|
336
|
+
t.set(i, s(e));
|
|
337
|
+
r.has(n) ? r.get(n).push(i) : r.set(n, [i]);
|
|
329
338
|
}
|
|
330
|
-
return { tasksMap: t, tasksByFolderMap:
|
|
331
|
-
}, [
|
|
339
|
+
return { tasksMap: t, tasksByFolderMap: r };
|
|
340
|
+
}, [u, m, F, z, q]);
|
|
332
341
|
return {
|
|
333
|
-
foldersMap:
|
|
334
|
-
tasksMap:
|
|
335
|
-
tasksByFolderMap:
|
|
336
|
-
isLoadingAll:
|
|
342
|
+
foldersMap: S,
|
|
343
|
+
tasksMap: Pt,
|
|
344
|
+
tasksByFolderMap: yt,
|
|
345
|
+
isLoadingAll: X || pt || tt || b,
|
|
337
346
|
// these all show a full loading state
|
|
338
|
-
isLoadingMore:
|
|
339
|
-
loadingTasks:
|
|
340
|
-
fetchNextPage:
|
|
347
|
+
isLoadingMore: lt,
|
|
348
|
+
loadingTasks: nt,
|
|
349
|
+
fetchNextPage: Lt,
|
|
341
350
|
reloadTableData: () => {
|
|
342
|
-
|
|
351
|
+
Z || $(), H || j(), it || et(), ct || ft(), ht || kt(), ot || st(), It || Tt();
|
|
343
352
|
}
|
|
344
353
|
};
|
|
345
354
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFetchOverviewData.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useFetchOverviewData.ts"],"sourcesContent":["import {\n useGetGroupedTasksListQuery,\n useGetOverviewTasksByFoldersQuery,\n useGetSearchFoldersQuery,\n useGetTasksListInfiniteInfiniteQuery,\n} from '@shared/api'\nimport type { FolderListItem, GetGroupedTasksListArgs, EntityGroup, QueryFilter } from '@shared/api'\nimport { useGroupedPagination } from '@shared/hooks'\nimport { getGroupByDataType } from '@shared/util'\nimport { EditorTaskNode, FolderNodeMap, MatchingFolder, TaskNodeMap } from '../types/table'\nimport { useEffect, useMemo, useState } from 'react'\nimport { ExpandedState, SortingState } from '@tanstack/react-table'\nimport { determineLoadingTaskFolders } from '../utils/loadingUtils'\nimport { LoadingTasks } from '../types'\nimport { TasksByFolderMap } from '../utils'\nimport { TableGroupBy } from '../context'\nimport { isGroupId } from '../hooks/useBuildGroupByTableData'\nimport { ProjectTableAttribute } from '../hooks/useAttributesList'\nimport { ProjectTableModulesType } from '@shared/hooks'\nimport { useGetEntityLinksQuery } from '@shared/api'\nimport { useProjectFoldersContext } from '@shared/context'\n\ntype QueryFilterParams = {\n filter: QueryFilter | undefined\n filterString?: string\n search?: string\n}\n\ntype useFetchOverviewDataData = {\n foldersMap: FolderNodeMap\n tasksMap: TaskNodeMap\n tasksByFolderMap: TasksByFolderMap\n isLoadingAll: boolean // the whole table is a loading state\n isLoadingMore: boolean // loading more tasks\n loadingTasks: LoadingTasks // show number of loading tasks per folder or root\n fetchNextPage: (value?: string) => void\n reloadTableData: () => void\n}\n\ntype Params = {\n projectName: string\n selectedFolders: string[] // folders selected in the slicer (hierarchy)\n taskFilters: QueryFilterParams // filters for tasks\n folderFilters: QueryFilterParams // filters for folders\n sorting: SortingState\n groupBy: TableGroupBy | undefined\n taskGroups: EntityGroup[]\n expanded: ExpandedState\n showHierarchy: boolean\n attribFields: ProjectTableAttribute[]\n modules: ProjectTableModulesType\n}\n\nexport const useFetchOverviewData = ({\n projectName,\n selectedFolders, // comes from the slicer\n taskFilters,\n folderFilters,\n sorting,\n groupBy,\n taskGroups = [],\n expanded,\n showHierarchy,\n attribFields,\n modules,\n}: Params): useFetchOverviewDataData => {\n const { getGroupQueries, isLoading: isLoadingModules } = modules\n\n const {\n folders,\n isLoading: isLoadingFolders,\n isUninitialized: isUninitializedFolders,\n refetch: refetchFolders,\n } = useProjectFoldersContext()\n\n // console.log('Folder count:', folders.length)\n const expandedParentIds = Object.entries(expanded)\n .filter(([, isExpanded]) => isExpanded)\n .filter(([id]) => !isGroupId(id)) // filter out the root folder\n .map(([id]) => id)\n\n const {\n data: expandedFoldersTasks = [],\n isFetching: isFetchingExpandedFoldersTasks,\n refetch: refetchExpandedFoldersTasks,\n isUninitialized: isUninitializedExpandedFoldersTasks,\n } = useGetOverviewTasksByFoldersQuery(\n {\n projectName,\n parentIds: expandedParentIds,\n filter: taskFilters.filterString,\n folderFilter: folderFilters.filterString,\n search: taskFilters.search,\n },\n { skip: !expandedParentIds.length || !showHierarchy },\n )\n\n const skipFoldersByTaskFilter =\n (!taskFilters.filterString &&\n !folderFilters.filterString &&\n !taskFilters.search &&\n !folderFilters.search) ||\n !folders.length ||\n !showHierarchy\n // get folders that would be left if the filters were applied for tasks\n const {\n data: foldersByTaskFilter,\n isUninitialized,\n isFetching: isFetchingTasksFolders,\n isUninitialized: isUninitializedTasksFolders,\n refetch: refetchTasksFolders,\n } = useGetSearchFoldersQuery(\n {\n projectName,\n folderSearchRequest: {\n taskFilter: taskFilters.filter?.conditions?.length ? taskFilters.filter : undefined,\n taskSearch: taskFilters.search,\n folderFilter: folderFilters.filter?.conditions?.length ? folderFilters.filter : undefined,\n folderSearch: folderFilters.search,\n },\n },\n {\n skip: skipFoldersByTaskFilter,\n },\n )\n\n // create a list of folders that are current visible in the table\n // root folders are always visible\n // then a folder is visible if it's parent is expanded\n const visibleFolders = useMemo(() => {\n const visibleSet = new Set<string>()\n\n // Check each folder in the map\n folders.forEach((folder) => {\n // Root folders are always visible\n if (!folder.parentId) {\n visibleSet.add(folder.id)\n return\n }\n\n // Check if parent is expanded\n const parentId = folder.parentId as string\n const isSelectedInSlicer = selectedFolders.includes(folder.id as string)\n const expandedMap = expanded as Record<string, boolean>\n if (expandedMap[parentId] === true || isSelectedInSlicer) {\n visibleSet.add(folder.id)\n }\n })\n\n return visibleSet\n }, [folders, foldersByTaskFilter, skipFoldersByTaskFilter, expanded, selectedFolders])\n\n // get all links for visible folders\n const {\n data: foldersLinks = [],\n refetch: refetchFoldersLinks,\n isUninitialized: isUninitializedFoldersLinks,\n } = useGetEntityLinksQuery({\n projectName,\n entityIds: Array.from(visibleFolders),\n entityType: 'folder',\n })\n\n // create a map of folders by id for efficient lookups\n const foldersMap: FolderNodeMap = useMemo(() => {\n const map = new Map()\n\n const addExtraDataToFolder = (folder: FolderListItem) => {\n // add any extra data to folder\n const folderWithExtraData: MatchingFolder = {\n ...folder,\n entityId: folder.id,\n entityType: 'folder',\n links: foldersLinks?.find((link) => link.id === folder.id)?.links || [],\n }\n return folderWithExtraData\n }\n\n // If we have task filters and folders to filter\n if (!isUninitialized && foldersByTaskFilter && folders.length) {\n // Create a set for efficient lookups of filtered folder IDs\n const relevantFolderIds = new Set<string>()\n\n // First pass: Add all folders from the task filter\n for (const folderId of foldersByTaskFilter) {\n relevantFolderIds.add(folderId)\n }\n\n // Create a map of folders by ID for parentId lookups\n const foldersByIdMap = new Map<string, (typeof folders)[0]>()\n for (const folder of folders) {\n foldersByIdMap.set(folder.id as string, folder)\n }\n\n // Second pass: Add all parent folders of filtered folders\n const addParents = (folderId: string) => {\n const folder = foldersByIdMap.get(folderId)\n if (folder && folder.parentId) {\n relevantFolderIds.add(folder.parentId as string)\n addParents(folder.parentId as string)\n }\n }\n\n // Process each filtered folder to add its parents\n for (const folderId of foldersByTaskFilter) {\n addParents(folderId)\n }\n\n // Third pass: Build the final map using only relevant folders\n for (const folder of folders) {\n if (relevantFolderIds.has(folder.id as string)) {\n map.set(folder.id as string, addExtraDataToFolder(folder))\n }\n }\n } else {\n // No filtering, include all folders\n for (const folder of folders) {\n map.set(folder.id as string, addExtraDataToFolder(folder))\n }\n }\n\n // Filter by selected folders if needed\n if (selectedFolders.length) {\n const selectedPaths = selectedFolders\n .map((id) => map.get(id)?.path)\n .filter(Boolean) as string[]\n\n // Create a new map that only contains selected folders and their children\n const filteredMap = new Map()\n\n // For each folder, check if it should be included\n map.forEach((folder, folderId) => {\n const folderPath = folder.path as string\n\n // Include if it's a parent or the folder itself\n const folderPathParts = folderPath.split('/')\n let isParentOrSelf = false\n\n for (let i = 0; i < folderPathParts.length; i++) {\n const partialPath = folderPathParts.slice(0, i + 1).join('/')\n if (selectedPaths.some((p) => p === partialPath)) {\n isParentOrSelf = true\n break\n }\n }\n\n // Include if it's a child of any selected folder\n const isChild = selectedPaths.some((selectedPath) =>\n folderPath.startsWith(selectedPath + '/'),\n )\n\n if (isParentOrSelf || isChild) {\n filteredMap.set(folderId, addExtraDataToFolder(folder))\n }\n })\n\n return filteredMap\n }\n\n return map\n }, [folders, foldersByTaskFilter, isUninitialized, selectedFolders, foldersLinks])\n\n // calculate partial loading states\n const loadingTasksForParents = useMemo(() => {\n if (isFetchingExpandedFoldersTasks) {\n return determineLoadingTaskFolders({\n expandedFoldersTasks,\n expandedParentIds,\n foldersMap,\n })\n } else return {}\n }, [isFetchingExpandedFoldersTasks, expandedFoldersTasks, expandedParentIds, foldersMap])\n\n const [tasksListCursor, setTasksListCursor] = useState('')\n\n // every time the sorting changes, reset the cursor\n useEffect(() => {\n if (tasksListCursor) setTasksListCursor('')\n }, [sorting, tasksListCursor])\n\n // Create sort params for infinite query\n const singleSort = { ...sorting[0] }\n // if task list and sorting by name, sort by path instead\n const sortByPath = singleSort?.id === 'name' && !showHierarchy\n const sortId = sortByPath ? 'path' : singleSort?.id === 'subType' ? 'taskType' : singleSort?.id\n const tasksFolderIdsParams = selectedFolders.length ? Array.from(foldersMap.keys()) : undefined\n\n // Use the new infinite query hook for tasks list with correct name\n const {\n data: tasksListInfiniteData,\n isLoading: isLoadingTasksList,\n isFetching: isFetchingTasksList,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage: isFetchingNextPageTasksList,\n isUninitialized: isUninitializedTasksList,\n refetch: refetchTasksList,\n } = useGetTasksListInfiniteInfiniteQuery(\n {\n projectName,\n filter: taskFilters.filterString,\n folderFilter: folderFilters.filterString,\n search: taskFilters.search,\n folderIds: tasksFolderIdsParams,\n sortBy: sortId ? sortId.replace('_', '.') : undefined,\n desc: !!singleSort?.desc,\n },\n {\n skip: showHierarchy,\n initialPageParam: {\n cursor: '',\n desc: !!singleSort?.desc,\n },\n },\n )\n\n // Extract tasks from infinite query data correctly\n const tasksList = useMemo(() => {\n if (!tasksListInfiniteData?.pages) return []\n return tasksListInfiniteData.pages.flatMap((page) => page.tasks || [])\n }, [tasksListInfiniteData?.pages])\n\n const { pageCounts: groupPageCounts, incrementPageCount } = useGroupedPagination({\n groups: taskGroups,\n })\n\n // for grouped tasks, we fetch all tasks for each group\n // we do this by building a list of groups with filters for that group\n const groupByDataType = getGroupByDataType(groupBy, attribFields)\n\n // get group queries from powerpack\n const groupQueries: GetGroupedTasksListArgs['groups'] = useMemo(() => {\n return groupBy\n ? getGroupQueries?.({\n groups: taskGroups,\n taskGroups, // deprecated, but keep for backward compatibility\n filters: taskFilters.filter,\n groupBy,\n groupPageCounts,\n }) ?? []\n : []\n }, [groupBy, taskGroups, groupPageCounts, groupByDataType, taskFilters.filter, getGroupQueries])\n\n const {\n data: { tasks: groupTasks = [] } = {},\n isFetching: isFetchingGroups,\n isUninitialized: isUninitializedGroupedTasks,\n refetch: refetchGroupedTasks,\n } = useGetGroupedTasksListQuery(\n {\n projectName,\n groups: groupQueries,\n sortBy: sortId ? sortId.replace('_', '.') : undefined,\n desc: !!singleSort?.desc,\n search: taskFilters.search,\n folderFilter: folderFilters.filterString,\n folderIds: tasksFolderIdsParams,\n },\n {\n skip: !groupBy || !groupQueries.length || isLoadingModules,\n },\n )\n\n // Get visible tasks for link fetching\n const visibleTasks = useMemo(() => {\n const allTasks = showHierarchy ? expandedFoldersTasks : groupBy ? groupTasks : tasksList\n return new Set(allTasks.map((task) => task.id))\n }, [expandedFoldersTasks, showHierarchy, tasksList, groupTasks, groupBy])\n\n // Get all links for visible tasks\n const {\n data: tasksLinks = [],\n refetch: refetchTasksLinks,\n isUninitialized: isUninitializedTasksLinks,\n } = useGetEntityLinksQuery(\n {\n projectName,\n entityIds: Array.from(visibleTasks),\n entityType: 'task',\n },\n {\n skip: visibleTasks.size === 0,\n },\n )\n\n const handleFetchNextPage = (group?: string) => {\n if (groupBy) {\n if (group && group in groupPageCounts) {\n console.log('fetching next page for group:', group)\n incrementPageCount(group)\n }\n } else if (hasNextPage) {\n console.log('fetching next page')\n fetchNextPage()\n }\n }\n\n // tasksMaps is a map of tasks by task ID\n // tasksByFolderMap is a map of tasks by folder ID\n const { tasksMap, tasksByFolderMap } = useMemo(() => {\n const tasksMap: TaskNodeMap = new Map()\n const tasksByFolderMap: TasksByFolderMap = new Map()\n\n const addExtraDataToTask = (task: EditorTaskNode) => ({\n ...task,\n entityId: task.id,\n entityType: 'task' as const,\n links: tasksLinks?.find((link) => link.id === task.id)?.links || [],\n })\n\n // either show the hierarchy or the flat list of tasks\n const allTasks = showHierarchy ? expandedFoldersTasks : groupBy ? groupTasks : tasksList\n for (const task of allTasks) {\n const taskId = task.id as string\n const folderId = task.folderId as string\n\n if (tasksMap.has(taskId)) {\n // merge specific data if the task already exists\n const existingTask = tasksMap.get(taskId) as EditorTaskNode\n const currentTask = addExtraDataToTask(task)\n const mergedTask = {\n ...existingTask,\n ...currentTask,\n groups: [...(existingTask.groups || []), ...(currentTask.groups || [])],\n }\n\n tasksMap.set(taskId, mergedTask)\n } else {\n tasksMap.set(taskId, addExtraDataToTask(task))\n }\n\n if (tasksByFolderMap.has(folderId)) {\n tasksByFolderMap.get(folderId)!.push(taskId)\n } else {\n tasksByFolderMap.set(folderId, [taskId])\n }\n }\n\n return { tasksMap, tasksByFolderMap }\n }, [expandedFoldersTasks, showHierarchy, tasksList, groupTasks, tasksLinks])\n\n // reload all data for all queries\n const reloadTableData = () => {\n // only reload if there is data\n if (!isUninitializedFolders) refetchFolders()\n if (!isUninitializedExpandedFoldersTasks) refetchExpandedFoldersTasks()\n if (!isUninitializedTasksFolders) refetchTasksFolders()\n if (!isUninitializedTasksList) refetchTasksList()\n if (!isUninitializedGroupedTasks) refetchGroupedTasks()\n if (!isUninitializedFoldersLinks) refetchFoldersLinks()\n if (!isUninitializedTasksLinks) refetchTasksLinks()\n }\n\n return {\n foldersMap: foldersMap,\n tasksMap: tasksMap,\n tasksByFolderMap: tasksByFolderMap,\n isLoadingAll:\n isLoadingFolders ||\n isLoadingTasksList ||\n isFetchingTasksFolders ||\n isFetchingGroups ||\n isLoadingModules, // these all show a full loading state\n isLoadingMore: isFetchingNextPageTasksList,\n loadingTasks: loadingTasksForParents,\n fetchNextPage: handleFetchNextPage,\n reloadTableData,\n }\n}\n"],"names":["useFetchOverviewData","projectName","selectedFolders","taskFilters","folderFilters","sorting","groupBy","taskGroups","expanded","showHierarchy","attribFields","modules","getGroupQueries","isLoadingModules","folders","isLoadingFolders","isUninitializedFolders","refetchFolders","useProjectFoldersContext","expandedParentIds","isExpanded","id","isGroupId","expandedFoldersTasks","isFetchingExpandedFoldersTasks","refetchExpandedFoldersTasks","isUninitializedExpandedFoldersTasks","useGetOverviewTasksByFoldersQuery","skipFoldersByTaskFilter","foldersByTaskFilter","isUninitialized","isFetchingTasksFolders","isUninitializedTasksFolders","refetchTasksFolders","useGetSearchFoldersQuery","visibleFolders","useMemo","visibleSet","folder","parentId","isSelectedInSlicer","foldersLinks","refetchFoldersLinks","isUninitializedFoldersLinks","useGetEntityLinksQuery","foldersMap","map","addExtraDataToFolder","link","relevantFolderIds","folderId","foldersByIdMap","addParents","selectedPaths","filteredMap","folderPath","folderPathParts","isParentOrSelf","i","partialPath","p","isChild","selectedPath","loadingTasksForParents","determineLoadingTaskFolders","tasksListCursor","setTasksListCursor","useState","useEffect","singleSort","sortId","tasksFolderIdsParams","tasksListInfiniteData","isLoadingTasksList","isFetchingTasksList","fetchNextPage","hasNextPage","isFetchingNextPageTasksList","isUninitializedTasksList","refetchTasksList","useGetTasksListInfiniteInfiniteQuery","tasksList","page","groupPageCounts","incrementPageCount","useGroupedPagination","groupByDataType","getGroupByDataType","groupQueries","groupTasks","isFetchingGroups","isUninitializedGroupedTasks","refetchGroupedTasks","useGetGroupedTasksListQuery","visibleTasks","allTasks","task","tasksLinks","refetchTasksLinks","isUninitializedTasksLinks","handleFetchNextPage","group","tasksMap","tasksByFolderMap","addExtraDataToTask","taskId","existingTask","currentTask","mergedTask"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useFetchOverviewData.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useFetchOverviewData.ts"],"sourcesContent":["import {\n useGetGroupedTasksListQuery,\n useGetOverviewTasksByFoldersQuery,\n useGetSearchFoldersQuery,\n useGetTasksListInfiniteInfiniteQuery,\n} from '@shared/api'\nimport type { FolderListItem, GetGroupedTasksListArgs, EntityGroup, QueryFilter } from '@shared/api'\nimport { useGroupedPagination } from '@shared/hooks'\nimport { getGroupByDataType } from '@shared/util'\nimport { EditorTaskNode, FolderNodeMap, MatchingFolder, TaskNodeMap } from '../types/table'\nimport { useEffect, useMemo, useState } from 'react'\nimport { ExpandedState, SortingState } from '@tanstack/react-table'\nimport { determineLoadingTaskFolders } from '../utils/loadingUtils'\nimport { LoadingTasks } from '../types'\nimport { TasksByFolderMap } from '../utils'\nimport { TableGroupBy } from '../context'\nimport { isGroupId, GROUP_BY_ID } from '../hooks/useBuildGroupByTableData'\nimport { ProjectTableAttribute } from '../hooks/useAttributesList'\nimport { ProjectTableModulesType } from '@shared/hooks'\nimport { useGetEntityLinksQuery } from '@shared/api'\nimport { useProjectFoldersContext } from '@shared/context'\n\ntype QueryFilterParams = {\n filter: QueryFilter | undefined\n filterString?: string\n search?: string\n}\n\ntype useFetchOverviewDataData = {\n foldersMap: FolderNodeMap\n tasksMap: TaskNodeMap\n tasksByFolderMap: TasksByFolderMap\n isLoadingAll: boolean // the whole table is a loading state\n isLoadingMore: boolean // loading more tasks\n loadingTasks: LoadingTasks // show number of loading tasks per folder or root\n fetchNextPage: (value?: string) => void\n reloadTableData: () => void\n}\n\ntype Params = {\n projectName: string\n selectedFolders: string[] // folders selected in the slicer (hierarchy)\n taskFilters: QueryFilterParams // filters for tasks\n folderFilters: QueryFilterParams // filters for folders\n sorting: SortingState\n groupBy: TableGroupBy | undefined\n taskGroups: EntityGroup[]\n taskGroupsCount?: number // override for number of items per group\n expanded: ExpandedState\n showHierarchy: boolean\n attribFields: ProjectTableAttribute[]\n modules: ProjectTableModulesType\n}\n\nexport const useFetchOverviewData = ({\n projectName,\n selectedFolders, // comes from the slicer\n taskFilters,\n folderFilters,\n sorting,\n groupBy,\n taskGroups = [],\n taskGroupsCount,\n expanded,\n showHierarchy,\n attribFields,\n modules,\n}: Params): useFetchOverviewDataData => {\n const { getGroupQueries, isLoading: isLoadingModules } = modules\n\n const {\n folders,\n isLoading: isLoadingFolders,\n isUninitialized: isUninitializedFolders,\n refetch: refetchFolders,\n } = useProjectFoldersContext()\n\n // console.log('Folder count:', folders.length)\n const expandedParentIds = Object.entries(expanded)\n .filter(([, isExpanded]) => isExpanded)\n .filter(([id]) => !isGroupId(id)) // filter out the root folder\n .map(([id]) => id)\n\n const {\n data: expandedFoldersTasks = [],\n isFetching: isFetchingExpandedFoldersTasks,\n refetch: refetchExpandedFoldersTasks,\n isUninitialized: isUninitializedExpandedFoldersTasks,\n } = useGetOverviewTasksByFoldersQuery(\n {\n projectName,\n parentIds: expandedParentIds,\n filter: taskFilters.filterString,\n folderFilter: folderFilters.filterString,\n search: taskFilters.search,\n },\n { skip: !expandedParentIds.length || !showHierarchy },\n )\n\n const skipFoldersByTaskFilter =\n (!taskFilters.filterString &&\n !folderFilters.filterString &&\n !taskFilters.search &&\n !folderFilters.search) ||\n !folders.length ||\n !showHierarchy\n // get folders that would be left if the filters were applied for tasks\n const {\n data: foldersByTaskFilter,\n isUninitialized,\n isFetching: isFetchingTasksFolders,\n isUninitialized: isUninitializedTasksFolders,\n refetch: refetchTasksFolders,\n } = useGetSearchFoldersQuery(\n {\n projectName,\n folderSearchRequest: {\n taskFilter: taskFilters.filter?.conditions?.length ? taskFilters.filter : undefined,\n taskSearch: taskFilters.search,\n folderFilter: folderFilters.filter?.conditions?.length ? folderFilters.filter : undefined,\n folderSearch: folderFilters.search,\n },\n },\n {\n skip: skipFoldersByTaskFilter,\n },\n )\n\n // create a list of folders that are current visible in the table\n // root folders are always visible\n // then a folder is visible if it's parent is expanded\n const visibleFolders = useMemo(() => {\n const visibleSet = new Set<string>()\n\n // Check each folder in the map\n folders.forEach((folder) => {\n // Root folders are always visible\n if (!folder.parentId) {\n visibleSet.add(folder.id)\n return\n }\n\n // Check if parent is expanded\n const parentId = folder.parentId as string\n const isSelectedInSlicer = selectedFolders.includes(folder.id as string)\n const expandedMap = expanded as Record<string, boolean>\n if (expandedMap[parentId] === true || isSelectedInSlicer) {\n visibleSet.add(folder.id)\n }\n })\n\n return visibleSet\n }, [folders, foldersByTaskFilter, skipFoldersByTaskFilter, expanded, selectedFolders])\n\n // get all links for visible folders\n const {\n data: foldersLinks = [],\n refetch: refetchFoldersLinks,\n isUninitialized: isUninitializedFoldersLinks,\n } = useGetEntityLinksQuery({\n projectName,\n entityIds: Array.from(visibleFolders),\n entityType: 'folder',\n })\n\n // create a map of folders by id for efficient lookups\n const foldersMap: FolderNodeMap = useMemo(() => {\n const map = new Map()\n\n const addExtraDataToFolder = (folder: FolderListItem) => {\n // add any extra data to folder\n const folderWithExtraData: MatchingFolder = {\n ...folder,\n entityId: folder.id,\n entityType: 'folder',\n links: foldersLinks?.find((link) => link.id === folder.id)?.links || [],\n }\n return folderWithExtraData\n }\n\n // If we have task filters and folders to filter\n if (!isUninitialized && foldersByTaskFilter && folders.length) {\n // Create a set for efficient lookups of filtered folder IDs\n const relevantFolderIds = new Set<string>()\n\n // First pass: Add all folders from the task filter\n for (const folderId of foldersByTaskFilter) {\n relevantFolderIds.add(folderId)\n }\n\n // Create a map of folders by ID for parentId lookups\n const foldersByIdMap = new Map<string, (typeof folders)[0]>()\n for (const folder of folders) {\n foldersByIdMap.set(folder.id as string, folder)\n }\n\n // Second pass: Add all parent folders of filtered folders\n const addParents = (folderId: string) => {\n const folder = foldersByIdMap.get(folderId)\n if (folder && folder.parentId) {\n relevantFolderIds.add(folder.parentId as string)\n addParents(folder.parentId as string)\n }\n }\n\n // Process each filtered folder to add its parents\n for (const folderId of foldersByTaskFilter) {\n addParents(folderId)\n }\n\n // Third pass: Build the final map using only relevant folders\n for (const folder of folders) {\n if (relevantFolderIds.has(folder.id as string)) {\n map.set(folder.id as string, addExtraDataToFolder(folder))\n }\n }\n } else {\n // No filtering, include all folders\n for (const folder of folders) {\n map.set(folder.id as string, addExtraDataToFolder(folder))\n }\n }\n\n // Filter by selected folders if needed\n if (selectedFolders.length) {\n const selectedPaths = selectedFolders\n .map((id) => map.get(id)?.path)\n .filter(Boolean) as string[]\n\n // Create a new map that only contains selected folders and their children\n const filteredMap = new Map()\n\n // For each folder, check if it should be included\n map.forEach((folder, folderId) => {\n const folderPath = folder.path as string\n\n // Include if it's a parent or the folder itself\n const folderPathParts = folderPath.split('/')\n let isParentOrSelf = false\n\n for (let i = 0; i < folderPathParts.length; i++) {\n const partialPath = folderPathParts.slice(0, i + 1).join('/')\n if (selectedPaths.some((p) => p === partialPath)) {\n isParentOrSelf = true\n break\n }\n }\n\n // Include if it's a child of any selected folder\n const isChild = selectedPaths.some((selectedPath) =>\n folderPath.startsWith(selectedPath + '/'),\n )\n\n if (isParentOrSelf || isChild) {\n filteredMap.set(folderId, addExtraDataToFolder(folder))\n }\n })\n\n return filteredMap\n }\n\n return map\n }, [folders, foldersByTaskFilter, isUninitialized, selectedFolders, foldersLinks])\n\n // calculate partial loading states\n const loadingTasksForParents = useMemo(() => {\n if (isFetchingExpandedFoldersTasks) {\n return determineLoadingTaskFolders({\n expandedFoldersTasks,\n expandedParentIds,\n foldersMap,\n })\n } else return {}\n }, [isFetchingExpandedFoldersTasks, expandedFoldersTasks, expandedParentIds, foldersMap])\n\n const [tasksListCursor, setTasksListCursor] = useState('')\n\n // every time the sorting changes, reset the cursor\n useEffect(() => {\n if (tasksListCursor) setTasksListCursor('')\n }, [sorting, tasksListCursor])\n\n // Create sort params for infinite query\n const singleSort = { ...sorting[0] }\n // if task list and sorting by name, sort by path instead\n const sortByPath = singleSort?.id === 'name' && !showHierarchy\n const sortId = sortByPath ? 'path' : singleSort?.id === 'subType' ? 'taskType' : singleSort?.id\n const tasksFolderIdsParams = selectedFolders.length ? Array.from(foldersMap.keys()) : undefined\n\n // Use the new infinite query hook for tasks list with correct name\n const {\n data: tasksListInfiniteData,\n isLoading: isLoadingTasksList,\n isFetching: isFetchingTasksList,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage: isFetchingNextPageTasksList,\n isUninitialized: isUninitializedTasksList,\n refetch: refetchTasksList,\n } = useGetTasksListInfiniteInfiniteQuery(\n {\n projectName,\n filter: taskFilters.filterString,\n folderFilter: folderFilters.filterString,\n search: taskFilters.search,\n folderIds: tasksFolderIdsParams,\n sortBy: sortId ? sortId.replace('_', '.') : undefined,\n desc: !!singleSort?.desc,\n },\n {\n skip: showHierarchy,\n initialPageParam: {\n cursor: '',\n desc: !!singleSort?.desc,\n },\n },\n )\n\n // Extract tasks from infinite query data correctly\n const tasksList = useMemo(() => {\n if (!tasksListInfiniteData?.pages) return []\n return tasksListInfiniteData.pages.flatMap((page) => page.tasks || [])\n }, [tasksListInfiniteData?.pages])\n\n const { pageCounts: groupPageCounts, incrementPageCount } = useGroupedPagination({\n groups: taskGroups,\n })\n\n // for grouped tasks, we fetch all tasks for each group\n // we do this by building a list of groups with filters for that group\n const groupByDataType = getGroupByDataType(groupBy, attribFields)\n\n // get expanded group values from the expanded state\n // group IDs are formatted as `_GROUP_<value>` so we extract the values\n const expandedGroupValues = useMemo(() => {\n return Object.entries(expanded)\n .filter(([, isExpanded]) => isExpanded)\n .filter(([id]) => isGroupId(id))\n .map(([id]) => id.slice(GROUP_BY_ID.length))\n }, [expanded])\n\n // get group queries from powerpack, filtered to only include expanded groups\n const groupQueries: GetGroupedTasksListArgs['groups'] = useMemo(() => {\n if (!groupBy) return []\n\n const allGroupQueries =\n getGroupQueries?.({\n groups: taskGroups,\n taskGroups, // deprecated, but keep for backward compatibility\n filters: taskFilters.filter,\n groupBy,\n groupPageCounts,\n }) ?? []\n\n // Only fetch tasks for groups that are expanded\n return allGroupQueries.filter((group) => expandedGroupValues.includes(group.value))\n }, [\n groupBy,\n taskGroups,\n groupPageCounts,\n groupByDataType,\n taskFilters.filter,\n getGroupQueries,\n expandedGroupValues,\n ])\n\n const {\n data: { tasks: groupTasks = [] } = {},\n isUninitialized: isUninitializedGroupedTasks,\n refetch: refetchGroupedTasks,\n } = useGetGroupedTasksListQuery(\n {\n projectName,\n groups: groupQueries,\n sortBy: sortId ? sortId.replace('_', '.') : undefined,\n desc: !!singleSort?.desc,\n search: taskFilters.search,\n folderFilter: folderFilters.filterString,\n folderIds: tasksFolderIdsParams,\n groupCount: taskGroupsCount,\n },\n {\n skip: !groupBy || !groupQueries.length || isLoadingModules,\n },\n )\n\n // Get visible tasks for link fetching\n const visibleTasks = useMemo(() => {\n const allTasks = showHierarchy ? expandedFoldersTasks : groupBy ? groupTasks : tasksList\n return new Set(allTasks.map((task) => task.id))\n }, [expandedFoldersTasks, showHierarchy, tasksList, groupTasks, groupBy])\n\n // Get all links for visible tasks\n const {\n data: tasksLinks = [],\n refetch: refetchTasksLinks,\n isUninitialized: isUninitializedTasksLinks,\n } = useGetEntityLinksQuery(\n {\n projectName,\n entityIds: Array.from(visibleTasks),\n entityType: 'task',\n },\n {\n skip: visibleTasks.size === 0,\n },\n )\n\n const handleFetchNextPage = (group?: string) => {\n if (groupBy) {\n if (group && group in groupPageCounts) {\n console.log('fetching next page for group:', group)\n incrementPageCount(group)\n }\n } else if (hasNextPage) {\n console.log('fetching next page')\n fetchNextPage()\n }\n }\n\n // tasksMaps is a map of tasks by task ID\n // tasksByFolderMap is a map of tasks by folder ID\n const { tasksMap, tasksByFolderMap } = useMemo(() => {\n const tasksMap: TaskNodeMap = new Map()\n const tasksByFolderMap: TasksByFolderMap = new Map()\n\n const addExtraDataToTask = (task: EditorTaskNode) => ({\n ...task,\n entityId: task.id,\n entityType: 'task' as const,\n links: tasksLinks?.find((link) => link.id === task.id)?.links || [],\n })\n\n // either show the hierarchy or the flat list of tasks\n const allTasks = showHierarchy ? expandedFoldersTasks : groupBy ? groupTasks : tasksList\n for (const task of allTasks) {\n const taskId = task.id as string\n const folderId = task.folderId as string\n\n if (tasksMap.has(taskId)) {\n // merge specific data if the task already exists\n const existingTask = tasksMap.get(taskId) as EditorTaskNode\n const currentTask = addExtraDataToTask(task)\n const mergedTask = {\n ...existingTask,\n ...currentTask,\n groups: [...(existingTask.groups || []), ...(currentTask.groups || [])],\n }\n\n tasksMap.set(taskId, mergedTask)\n } else {\n tasksMap.set(taskId, addExtraDataToTask(task))\n }\n\n if (tasksByFolderMap.has(folderId)) {\n tasksByFolderMap.get(folderId)!.push(taskId)\n } else {\n tasksByFolderMap.set(folderId, [taskId])\n }\n }\n\n return { tasksMap, tasksByFolderMap }\n }, [expandedFoldersTasks, showHierarchy, tasksList, groupTasks, tasksLinks])\n\n // reload all data for all queries\n const reloadTableData = () => {\n // only reload if there is data\n if (!isUninitializedFolders) refetchFolders()\n if (!isUninitializedExpandedFoldersTasks) refetchExpandedFoldersTasks()\n if (!isUninitializedTasksFolders) refetchTasksFolders()\n if (!isUninitializedTasksList) refetchTasksList()\n if (!isUninitializedGroupedTasks) refetchGroupedTasks()\n if (!isUninitializedFoldersLinks) refetchFoldersLinks()\n if (!isUninitializedTasksLinks) refetchTasksLinks()\n }\n\n return {\n foldersMap: foldersMap,\n tasksMap: tasksMap,\n tasksByFolderMap: tasksByFolderMap,\n isLoadingAll:\n isLoadingFolders || isLoadingTasksList || isFetchingTasksFolders || isLoadingModules, // these all show a full loading state\n isLoadingMore: isFetchingNextPageTasksList,\n loadingTasks: loadingTasksForParents,\n fetchNextPage: handleFetchNextPage,\n reloadTableData,\n }\n}\n"],"names":["useFetchOverviewData","projectName","selectedFolders","taskFilters","folderFilters","sorting","groupBy","taskGroups","taskGroupsCount","expanded","showHierarchy","attribFields","modules","getGroupQueries","isLoadingModules","folders","isLoadingFolders","isUninitializedFolders","refetchFolders","useProjectFoldersContext","expandedParentIds","isExpanded","id","isGroupId","expandedFoldersTasks","isFetchingExpandedFoldersTasks","refetchExpandedFoldersTasks","isUninitializedExpandedFoldersTasks","useGetOverviewTasksByFoldersQuery","skipFoldersByTaskFilter","foldersByTaskFilter","isUninitialized","isFetchingTasksFolders","isUninitializedTasksFolders","refetchTasksFolders","useGetSearchFoldersQuery","visibleFolders","useMemo","visibleSet","folder","parentId","isSelectedInSlicer","foldersLinks","refetchFoldersLinks","isUninitializedFoldersLinks","useGetEntityLinksQuery","foldersMap","map","addExtraDataToFolder","link","relevantFolderIds","folderId","foldersByIdMap","addParents","selectedPaths","filteredMap","folderPath","folderPathParts","isParentOrSelf","i","partialPath","p","isChild","selectedPath","loadingTasksForParents","determineLoadingTaskFolders","tasksListCursor","setTasksListCursor","useState","useEffect","singleSort","sortId","tasksFolderIdsParams","tasksListInfiniteData","isLoadingTasksList","isFetchingTasksList","fetchNextPage","hasNextPage","isFetchingNextPageTasksList","isUninitializedTasksList","refetchTasksList","useGetTasksListInfiniteInfiniteQuery","tasksList","page","groupPageCounts","incrementPageCount","useGroupedPagination","groupByDataType","getGroupByDataType","expandedGroupValues","GROUP_BY_ID","groupQueries","group","groupTasks","isUninitializedGroupedTasks","refetchGroupedTasks","useGetGroupedTasksListQuery","visibleTasks","allTasks","task","tasksLinks","refetchTasksLinks","isUninitializedTasksLinks","handleFetchNextPage","tasksMap","tasksByFolderMap","addExtraDataToTask","taskId","existingTask","currentTask","mergedTask"],"mappings":"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"}
|