@ynput/ayon-frontend-shared 0.3.7 → 0.3.9
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/components.cjs.js +1 -1
- package/dist/components.es.js +109 -106
- package/dist/components.es.js.map +1 -1
- package/dist/shared/src/components/LinksManager/CellEditingDialog.cjs.js +2 -2
- package/dist/shared/src/components/LinksManager/CellEditingDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/LinksManager/CellEditingDialog.es.js +22 -21
- package/dist/shared/src/components/LinksManager/CellEditingDialog.es.js.map +1 -1
- package/dist/shared/src/components/SubtasksManager/SubtasksManagerWrapper.cjs.js +1 -1
- package/dist/shared/src/components/SubtasksManager/SubtasksManagerWrapper.cjs.js.map +1 -1
- package/dist/shared/src/components/SubtasksManager/SubtasksManagerWrapper.es.js +3 -12
- package/dist/shared/src/components/SubtasksManager/SubtasksManagerWrapper.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 +67 -65
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js +87 -81
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js +118 -109
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js +17 -16
- package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js.map +1 -1
- package/dist/types/components/LinksManager/CellEditingDialog.d.ts +1 -0
- package/dist/types/components/LinksManager/index.d.ts +1 -0
- package/dist/types/components/SubtasksManager/SubtasksManagerWrapper.d.ts +2 -2
- package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +5 -0
- package/dist/types/containers/ProjectTreeTable/context/ProjectTableProvider.d.ts +6 -1
- package/package.json +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { j as o } from "../../../../_virtual/jsx-runtime.es.js";
|
|
2
2
|
import { Button as z } from "@ynput/ayon-react-components";
|
|
3
|
-
import { useRef as
|
|
4
|
-
import
|
|
5
|
-
import { Panel as
|
|
3
|
+
import { useRef as xt, useEffect as s, useMemo as J } from "react";
|
|
4
|
+
import Nt from "./hooks/useDetailsPanelURLSync.es.js";
|
|
5
|
+
import { Panel as bt, Toolbar as Dt, RightTools as kt } from "./DetailsPanel.styled.es.js";
|
|
6
6
|
import "../../api/base/client.es.js";
|
|
7
7
|
import "../../api/generated/graphql.es.js";
|
|
8
8
|
import "../../api/generated/graphqlLinks.es.js";
|
|
@@ -56,8 +56,8 @@ import "../../api/queries/cloud/cloud.es.js";
|
|
|
56
56
|
import "../../api/queries/config/getConfig.es.js";
|
|
57
57
|
import "../../api/queries/config/updateConfig.es.js";
|
|
58
58
|
import "../../api/queries/entities/getEntity.es.js";
|
|
59
|
-
import { useGetEntitiesDetailsPanelQuery as
|
|
60
|
-
import { detailsPanelEntityTypes as
|
|
59
|
+
import { useGetEntitiesDetailsPanelQuery as vt } from "../../api/queries/entities/getEntityPanel.es.js";
|
|
60
|
+
import { detailsPanelEntityTypes as wt } from "../../api/queries/entities/transformDetailsPanelData.es.js";
|
|
61
61
|
import "../../api/queries/entities/updateEntity.es.js";
|
|
62
62
|
import "../../api/queries/entityLists/getLists.es.js";
|
|
63
63
|
import "../../api/queries/entityLists/updateLists.es.js";
|
|
@@ -108,7 +108,7 @@ import "../../components/DateRangePicker/DateRangePicker.styled.es.js";
|
|
|
108
108
|
import "../../components/LinksManager/CellEditingDialog.es.js";
|
|
109
109
|
import "react-toastify";
|
|
110
110
|
import "../../components/DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js";
|
|
111
|
-
import { DetailsPanelDetails as
|
|
111
|
+
import { DetailsPanelDetails as Ct } from "../../components/DetailsPanelDetails/DetailsPanelDetails.es.js";
|
|
112
112
|
import "../../components/DetailsPanelDetails/DetailsSection.es.js";
|
|
113
113
|
import "../../components/DetailsPanelDetails/FieldLabel.es.js";
|
|
114
114
|
import "../../components/DoneCheckbox/DoneCheckbox.es.js";
|
|
@@ -121,11 +121,11 @@ import "../Feed/context/FeedContext.es.js";
|
|
|
121
121
|
import "../Feed/components/Tooltips/UserTooltip/UserTooltip.styled.es.js";
|
|
122
122
|
import "../Feed/components/Tooltips/EntityTooltip/EntityTooltip.styled.es.js";
|
|
123
123
|
import "../../context/RemoteModulesContext.es.js";
|
|
124
|
-
import { useDetailsPanelContext as Y, useScopedDetailsPanel as
|
|
124
|
+
import { useDetailsPanelContext as Y, useScopedDetailsPanel as St } from "../../context/DetailsPanelContext.es.js";
|
|
125
125
|
import "../../context/SubtasksModulesContext.es.js";
|
|
126
126
|
import "../../context/ThumbnailUploaderContext.es.js";
|
|
127
127
|
import "../../context/SettingsPanelContext.es.js";
|
|
128
|
-
import { usePiPWindow as
|
|
128
|
+
import { usePiPWindow as Ft } from "../../context/pip/PiPProvider.es.js";
|
|
129
129
|
import "../../context/pip/PiPWrapper.es.js";
|
|
130
130
|
import "../../context/AddonProjectContext.es.js";
|
|
131
131
|
import "../../context/AddonContext.es.js";
|
|
@@ -134,9 +134,9 @@ import "../../context/MoveEntityContext.es.js";
|
|
|
134
134
|
import "../../context/MenuContext.es.js";
|
|
135
135
|
import "../../context/WebsocketContext.es.js";
|
|
136
136
|
import "../../context/GlobalContext.es.js";
|
|
137
|
-
import { ProjectContextProvider as
|
|
137
|
+
import { ProjectContextProvider as It } from "../../context/ProjectContext.es.js";
|
|
138
138
|
import "../../context/ProjectFoldersContext.es.js";
|
|
139
|
-
import { useURIContext as
|
|
139
|
+
import { useURIContext as Lt } from "../../context/UriContext.es.js";
|
|
140
140
|
import "../Feed/components/FileUploadPreview/FileUploadPreview.styled.es.js";
|
|
141
141
|
import "../Feed/components/FileUploadPreview/Mimes/TextMime.es.js";
|
|
142
142
|
import "react-markdown";
|
|
@@ -153,7 +153,7 @@ import "../Feed/components/ActivityComment/ActivityComment.styled.es.js";
|
|
|
153
153
|
import "../Feed/components/ActivityCheckbox/ActivityCheckbox.styled.es.js";
|
|
154
154
|
import "../Feed/components/ActivityReference/ActivityReference.styled.es.js";
|
|
155
155
|
import "uuid";
|
|
156
|
-
import { extractEntityHierarchyFromParents as
|
|
156
|
+
import { extractEntityHierarchyFromParents as Rt } from "../../util/extractEntityHierarchyFromParents.es.js";
|
|
157
157
|
import "../../util/pubsub.es.js";
|
|
158
158
|
import "react-router-dom";
|
|
159
159
|
import "../Feed/components/ActivityStatus/ActivityStatus.es.js";
|
|
@@ -211,14 +211,14 @@ import "../SimpleTable/SimpleTableRowTemplate.es.js";
|
|
|
211
211
|
import "../Slicer/hooks/useTableDataBySlice.es.js";
|
|
212
212
|
import "../Slicer/components/SlicerSearch.es.js";
|
|
213
213
|
import "../Slicer/context/SlicerContext.es.js";
|
|
214
|
-
import
|
|
215
|
-
import
|
|
216
|
-
import
|
|
217
|
-
import
|
|
218
|
-
import
|
|
219
|
-
import
|
|
220
|
-
import
|
|
221
|
-
import
|
|
214
|
+
import Ut from "./components/DetailsPanelHeader/DetailsPanelHeader.es.js";
|
|
215
|
+
import Wt from "./components/DetailsPanelFiles/DetailsPanelFiles.es.js";
|
|
216
|
+
import Ht from "./hooks/useGetEntityPath.es.js";
|
|
217
|
+
import At from "./helpers/getAllProjectsStatuses.es.js";
|
|
218
|
+
import Gt from "./containers/FeedWrapper.es.js";
|
|
219
|
+
import Ot from "./containers/FeedContextWrapper.es.js";
|
|
220
|
+
import Vt from "./helpers/mergeProjectInfo.es.js";
|
|
221
|
+
import _t from "./containers/DetailsPanelSubtasks.es.js";
|
|
222
222
|
import "./components/DetailsPanelHeader/DetailsPanelHeader.styled.es.js";
|
|
223
223
|
import "./components/DetailsPanelSlideOut/DetailsPanelSlideOut.styled.es.js";
|
|
224
224
|
import "./components/DetailsPanelFloating/DetailsPanelFloating.styled.es.js";
|
|
@@ -233,7 +233,7 @@ import "../../components/EntityPanelUploader/EntityPanelUploader.styled.es.js";
|
|
|
233
233
|
import "axios";
|
|
234
234
|
import "../../components/ReviewablesList/ReviewablesList.styled.es.js";
|
|
235
235
|
import "../../components/ReviewablesList/ReviewablesUpload.styled.es.js";
|
|
236
|
-
import { EntityPath as
|
|
236
|
+
import { EntityPath as Mt } from "../../components/EntityPath/EntityPath.es.js";
|
|
237
237
|
import "../../components/FeaturedVersionOrder/FeaturedVersionOrder.es.js";
|
|
238
238
|
import "../../components/Feedback/FeedbackContext.es.js";
|
|
239
239
|
import "../../components/Feedback/SupportBubble.es.js";
|
|
@@ -261,10 +261,10 @@ import "../../components/Thumbnail/StackedThumbnails.es.js";
|
|
|
261
261
|
import "../../components/ThumbnailSimple/ThumbnailSimple.es.js";
|
|
262
262
|
import "../../components/VersionUploader/components/UploadVersionDialog.es.js";
|
|
263
263
|
import "../../components/VersionUploader/context/VersionUploadContext.es.js";
|
|
264
|
-
import { Watchers as
|
|
264
|
+
import { Watchers as Qt } from "../../components/Watchers/Watchers.es.js";
|
|
265
265
|
import "../../components/Menu/Menu.styled.es.js";
|
|
266
266
|
import "../../components/Menu/MenuItem.es.js";
|
|
267
|
-
const
|
|
267
|
+
const qt = ["product", "representation"], Bt = ({
|
|
268
268
|
entityType: x,
|
|
269
269
|
entitySubTypes: P = [],
|
|
270
270
|
// entities is data we already have from kanban
|
|
@@ -279,7 +279,7 @@ const Qt = ["product", "representation"], qt = ({
|
|
|
279
279
|
projectsInfo: j = {},
|
|
280
280
|
projectNames: it = [],
|
|
281
281
|
isSlideOut: f = !1,
|
|
282
|
-
style:
|
|
282
|
+
style: Kt = {},
|
|
283
283
|
scope: a,
|
|
284
284
|
isCompact: rt = !1,
|
|
285
285
|
onClose: b,
|
|
@@ -305,17 +305,18 @@ const Qt = ["product", "representation"], qt = ({
|
|
|
305
305
|
setEntities: D,
|
|
306
306
|
slideOut: G,
|
|
307
307
|
useSearchParams: nt,
|
|
308
|
-
SubtasksManager: O
|
|
309
|
-
|
|
308
|
+
SubtasksManager: O,
|
|
309
|
+
useNavigate: at
|
|
310
|
+
} = Y(), { currentTab: p, setTab: y, isFeed: ct } = St(a), [Xt, lt] = nt(), V = xt(!1), r = e?.entityType ?? x, _ = e?.entities ?? n, ut = e?.entitySubTypes ?? P, dt = e?.entities ? [] : N, c = e?.entities ? e.entities.map((t) => t.projectName) : it;
|
|
310
311
|
s(() => {
|
|
311
312
|
F && !V.current && (V.current = !0, F());
|
|
312
313
|
}, []), s(() => {
|
|
313
|
-
|
|
314
|
+
qt.includes(r) && p !== "details" && y("details");
|
|
314
315
|
}, [r, p, y]), s(() => {
|
|
315
316
|
n.length && e && D(null);
|
|
316
317
|
}, [n, e, D]);
|
|
317
318
|
const g = J(
|
|
318
|
-
() =>
|
|
319
|
+
() => Vt(j, c),
|
|
319
320
|
[j, c]
|
|
320
321
|
), M = J(
|
|
321
322
|
() => ({
|
|
@@ -330,23 +331,23 @@ const Qt = ["product", "representation"], qt = ({
|
|
|
330
331
|
}, [r, p, a]);
|
|
331
332
|
let l = _.length ? _.map((t) => ({ id: t.id, projectName: t.projectName })) : (
|
|
332
333
|
// @ts-expect-error = not sure what's going on with activeEntitiesData, we should try and remove it
|
|
333
|
-
|
|
334
|
+
dt.map((t) => ({ id: t.id, projectName: t.projectName }))
|
|
334
335
|
);
|
|
335
336
|
l = l.filter((t) => t.id);
|
|
336
337
|
const {
|
|
337
338
|
data: m = [],
|
|
338
339
|
isFetching: u,
|
|
339
|
-
isError:
|
|
340
|
-
originalArgs:
|
|
341
|
-
} =
|
|
340
|
+
isError: ft,
|
|
341
|
+
originalArgs: yt
|
|
342
|
+
} = vt(
|
|
342
343
|
{ entityType: r, entities: l },
|
|
343
344
|
{
|
|
344
|
-
skip: !l.length || !
|
|
345
|
+
skip: !l.length || !wt.includes(r)
|
|
345
346
|
}
|
|
346
347
|
);
|
|
347
348
|
s(() => {
|
|
348
349
|
f || H();
|
|
349
|
-
}, [
|
|
350
|
+
}, [yt, f]), s(() => {
|
|
350
351
|
if (!u && e?.source && ["uri", "url"].includes(e.source) && e?.entities?.length && I) {
|
|
351
352
|
const t = m.find(
|
|
352
353
|
(i) => i.id === e.entities[0].id
|
|
@@ -355,36 +356,36 @@ const Qt = ["product", "representation"], qt = ({
|
|
|
355
356
|
I(t);
|
|
356
357
|
}
|
|
357
358
|
}, [m, u]);
|
|
358
|
-
const Q =
|
|
359
|
+
const Q = At(j), d = c[0], q = j[d] || {}, E = m[0] || {}, T = m[m.length - 1], k = c[c.length - 1], [B, ht] = Ht({
|
|
359
360
|
entity: E,
|
|
360
361
|
entityType: r,
|
|
361
362
|
projectName: d,
|
|
362
363
|
isLoading: u
|
|
363
|
-
}), { setEntityUri:
|
|
364
|
+
}), { setEntityUri: Pt, setUri: jt } = Lt();
|
|
364
365
|
s(() => {
|
|
365
366
|
if (!T?.parents || !k) return;
|
|
366
|
-
const { folderPath: t, taskName: i, versionName: h, productName: X } =
|
|
367
|
+
const { folderPath: t, taskName: i, versionName: h, productName: X } = Rt(
|
|
367
368
|
T.parents,
|
|
368
369
|
r,
|
|
369
370
|
T.name
|
|
370
371
|
);
|
|
371
|
-
return
|
|
372
|
+
return Pt({
|
|
372
373
|
projectName: k,
|
|
373
374
|
folderPath: t,
|
|
374
375
|
taskName: i,
|
|
375
376
|
productName: X,
|
|
376
377
|
versionName: h
|
|
377
378
|
}), () => {
|
|
378
|
-
|
|
379
|
+
jt("");
|
|
379
380
|
};
|
|
380
|
-
}, [m, c, r]),
|
|
381
|
+
}, [m, c, r]), Nt({
|
|
381
382
|
entityData: T,
|
|
382
383
|
project: k,
|
|
383
384
|
activeEntityType: r,
|
|
384
385
|
entitiesToQuery: l
|
|
385
386
|
});
|
|
386
|
-
const
|
|
387
|
-
|
|
387
|
+
const gt = () => {
|
|
388
|
+
lt(
|
|
388
389
|
(t) => {
|
|
389
390
|
const i = new URLSearchParams(t);
|
|
390
391
|
return i.delete("project"), i.delete("type"), i.delete("id"), i;
|
|
@@ -392,7 +393,7 @@ const Qt = ["product", "representation"], qt = ({
|
|
|
392
393
|
{ replace: !0 }
|
|
393
394
|
);
|
|
394
395
|
}, v = () => {
|
|
395
|
-
b?.(), D(null),
|
|
396
|
+
b?.(), D(null), gt(), H();
|
|
396
397
|
};
|
|
397
398
|
s(() => {
|
|
398
399
|
const t = (i) => {
|
|
@@ -404,23 +405,23 @@ const Qt = ["product", "representation"], qt = ({
|
|
|
404
405
|
};
|
|
405
406
|
return window.addEventListener("keydown", t), () => window.removeEventListener("keydown", t);
|
|
406
407
|
}, [v, f, G]);
|
|
407
|
-
const { requestPipWindow:
|
|
408
|
+
const { requestPipWindow: Et } = Ft(), Tt = () => {
|
|
408
409
|
pt({
|
|
409
410
|
entityType: r,
|
|
410
411
|
entities: l,
|
|
411
412
|
scope: a
|
|
412
|
-
}),
|
|
413
|
+
}), Et(500, 500);
|
|
413
414
|
}, K = () => !(c.length > 1 || st && (!W || !Object.prototype.hasOwnProperty.call(
|
|
414
415
|
mt,
|
|
415
416
|
A.attrib?.email || ""
|
|
416
417
|
)));
|
|
417
|
-
return /* @__PURE__ */ o.jsx(o.Fragment, { children: /* @__PURE__ */ o.jsxs(
|
|
418
|
-
/* @__PURE__ */ o.jsxs(
|
|
418
|
+
return /* @__PURE__ */ o.jsx(o.Fragment, { children: /* @__PURE__ */ o.jsxs(bt, { className: "details-panel", children: [
|
|
419
|
+
/* @__PURE__ */ o.jsxs(Dt, { children: [
|
|
419
420
|
/* @__PURE__ */ o.jsx(
|
|
420
|
-
|
|
421
|
+
Mt,
|
|
421
422
|
{
|
|
422
423
|
segments: B,
|
|
423
|
-
versions:
|
|
424
|
+
versions: ht,
|
|
424
425
|
projectName: d,
|
|
425
426
|
hideProjectName: f,
|
|
426
427
|
isLoading: u || !B.length,
|
|
@@ -429,9 +430,9 @@ const Qt = ["product", "representation"], qt = ({
|
|
|
429
430
|
entityTypeIcons: M
|
|
430
431
|
}
|
|
431
432
|
),
|
|
432
|
-
/* @__PURE__ */ o.jsxs(
|
|
433
|
+
/* @__PURE__ */ o.jsxs(kt, { className: "right-tools", children: [
|
|
433
434
|
/* @__PURE__ */ o.jsx(
|
|
434
|
-
|
|
435
|
+
Qt,
|
|
435
436
|
{
|
|
436
437
|
entities: l,
|
|
437
438
|
entityType: r,
|
|
@@ -446,7 +447,7 @@ const Qt = ["product", "representation"], qt = ({
|
|
|
446
447
|
icon: "picture_in_picture",
|
|
447
448
|
variant: "text",
|
|
448
449
|
"data-tooltip": "Picture in Picture",
|
|
449
|
-
onClick:
|
|
450
|
+
onClick: Tt
|
|
450
451
|
}
|
|
451
452
|
),
|
|
452
453
|
b && /* @__PURE__ */ o.jsx(
|
|
@@ -461,10 +462,10 @@ const Qt = ["product", "representation"], qt = ({
|
|
|
461
462
|
] })
|
|
462
463
|
] }),
|
|
463
464
|
/* @__PURE__ */ o.jsx(
|
|
464
|
-
|
|
465
|
+
Ut,
|
|
465
466
|
{
|
|
466
467
|
entityType: r,
|
|
467
|
-
entitySubTypes:
|
|
468
|
+
entitySubTypes: ut,
|
|
468
469
|
entities: m,
|
|
469
470
|
users: w,
|
|
470
471
|
disabledAssignees: tt,
|
|
@@ -479,9 +480,9 @@ const Qt = ["product", "representation"], qt = ({
|
|
|
479
480
|
onEntityFocus: et
|
|
480
481
|
}
|
|
481
482
|
),
|
|
482
|
-
/* @__PURE__ */ o.jsxs(
|
|
483
|
-
|
|
484
|
-
|
|
483
|
+
/* @__PURE__ */ o.jsxs(It, { projectName: d, children: [
|
|
484
|
+
ct && !ft && /* @__PURE__ */ o.jsx(
|
|
485
|
+
Gt,
|
|
485
486
|
{
|
|
486
487
|
entityType: r,
|
|
487
488
|
entities: m,
|
|
@@ -500,16 +501,17 @@ const Qt = ["product", "representation"], qt = ({
|
|
|
500
501
|
}
|
|
501
502
|
),
|
|
502
503
|
p === "subtasks" && r === "task" && E?.id && O && /* @__PURE__ */ o.jsx(
|
|
503
|
-
|
|
504
|
+
_t,
|
|
504
505
|
{
|
|
505
506
|
projectName: d,
|
|
506
507
|
taskId: E.id,
|
|
507
508
|
subtasks: E.task?.subtasks || [],
|
|
508
|
-
SubtasksManager: O
|
|
509
|
+
SubtasksManager: O,
|
|
510
|
+
useNavigate: at
|
|
509
511
|
}
|
|
510
512
|
),
|
|
511
513
|
p === "files" && /* @__PURE__ */ o.jsx(
|
|
512
|
-
|
|
514
|
+
Wt,
|
|
513
515
|
{
|
|
514
516
|
entities: m,
|
|
515
517
|
scope: a,
|
|
@@ -517,7 +519,7 @@ const Qt = ["product", "representation"], qt = ({
|
|
|
517
519
|
}
|
|
518
520
|
),
|
|
519
521
|
p === "details" && /* @__PURE__ */ o.jsx(
|
|
520
|
-
|
|
522
|
+
Ot,
|
|
521
523
|
{
|
|
522
524
|
entityType: r,
|
|
523
525
|
entities: m,
|
|
@@ -532,7 +534,7 @@ const Qt = ["product", "representation"], qt = ({
|
|
|
532
534
|
removeAnnotation: R,
|
|
533
535
|
exportAnnotationComposite: U,
|
|
534
536
|
children: /* @__PURE__ */ o.jsx(
|
|
535
|
-
|
|
537
|
+
Ct,
|
|
536
538
|
{
|
|
537
539
|
entities: m,
|
|
538
540
|
isLoading: u
|
|
@@ -542,16 +544,16 @@ const Qt = ["product", "representation"], qt = ({
|
|
|
542
544
|
)
|
|
543
545
|
] })
|
|
544
546
|
] }) });
|
|
545
|
-
},
|
|
547
|
+
}, Bm = ({
|
|
546
548
|
isOpen: x,
|
|
547
549
|
entityType: P,
|
|
548
550
|
...N
|
|
549
551
|
}) => {
|
|
550
552
|
const { entities: n } = Y();
|
|
551
|
-
return !x && !n || !P && !n ? null : /* @__PURE__ */ o.jsx(
|
|
553
|
+
return !x && !n || !P && !n ? null : /* @__PURE__ */ o.jsx(Bt, { ...N, entityType: P || n?.entityType });
|
|
552
554
|
};
|
|
553
555
|
export {
|
|
554
|
-
|
|
555
|
-
|
|
556
|
+
Bm as DetailsPanel,
|
|
557
|
+
qt as entitiesWithoutFeed
|
|
556
558
|
};
|
|
557
559
|
//# sourceMappingURL=DetailsPanel.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DetailsPanel.es.js","sources":["../../../../../src/containers/DetailsPanel/DetailsPanel.tsx"],"sourcesContent":["import { Button } from '@ynput/ayon-react-components'\nimport React, { useEffect, useMemo, useRef, useState } from 'react'\nimport useDetailsPanelURLSync from './hooks/useDetailsPanelURLSync'\nimport * as Styled from './DetailsPanel.styled'\n\n// shared\nimport { useGetEntitiesDetailsPanelQuery, detailsPanelEntityTypes } from '@shared/api'\nimport type { Tag, DetailsPanelEntityType, DetailsPanelEntityData } from '@shared/api'\nimport { DetailsPanelDetails, EntityPath, Watchers } from '@shared/components'\nimport { usePiPWindow } from '@shared/context/pip/PiPProvider'\nimport { extractEntityHierarchyFromParents } from '@shared/util'\nimport {\n ProjectContextProvider,\n ProjectModelWithProducts,\n useDetailsPanelContext,\n useScopedDetailsPanel,\n useURIContext,\n FeedFilter,\n} from '@shared/context'\n\nimport DetailsPanelHeader from './components/DetailsPanelHeader/DetailsPanelHeader'\nimport DetailsPanelFiles from './components/DetailsPanelFiles'\nimport useGetEntityPath from './hooks/useGetEntityPath'\nimport getAllProjectStatuses from './helpers/getAllProjectsStatuses'\nimport FeedWrapper from './containers/FeedWrapper'\nimport FeedContextWrapper from './containers/FeedContextWrapper'\nimport mergeProjectInfo from './helpers/mergeProjectInfo'\nimport DetailsPanelSubtasks from './containers/DetailsPanelSubtasks'\n\nexport const entitiesWithoutFeed = ['product', 'representation']\n\ntype User = { avatarUrl: string; name: string; fullName?: string }\n\nexport type DetailsPanelProps = {\n entityType: DetailsPanelEntityType\n entitySubTypes?: string[] // used to get actions before the entity has loaded\n entitiesData?: { id: string; label: string; type: DetailsPanelEntityType }[]\n entities?: { id: string; projectName: string }[]\n tagsOptions?: Tag[]\n disabledStatuses?: string[]\n projectUsers?: User[]\n disabledProjectUsers?: string[]\n activeProjectUsers?: string[]\n projectsInfo?: Record<string, ProjectModelWithProducts>\n projectNames?: string[]\n isSlideOut?: boolean\n style?: React.CSSProperties\n scope: string\n isCompact?: boolean\n onClose?: () => void\n onWatchersUpdate?: (added: any[], removed: any[]) => void\n onOpenViewer?: (entity: any) => void\n onEntityFocus?: (id: string, entityType: DetailsPanelEntityType) => void\n onOpen?: () => void\n onUriOpen?: (entity: DetailsPanelEntityData) => void\n // annotations\n annotations?: any\n removeAnnotation?: (id: string) => void\n exportAnnotationComposite?: (id: string) => Promise<Blob | null>\n entityListId?: string\n guestCategories?: Record<string, string> // only used for guests to find if they have access to any categories\n // optional tab state for independent tab management\n}\n\nconst DetailsPanelInner = ({\n entityType,\n entitySubTypes = [],\n // entities is data we already have from kanban\n entitiesData = [],\n // entityIds are used to get the full details data for the entities\n entities = [],\n tagsOptions = [],\n disabledStatuses,\n projectUsers,\n disabledProjectUsers,\n activeProjectUsers,\n projectsInfo = {},\n projectNames = [],\n isSlideOut = false,\n style = {},\n scope,\n isCompact = false,\n onClose,\n onWatchersUpdate,\n onOpenViewer,\n onEntityFocus,\n onOpen,\n onUriOpen, // when the details panel is opened from uri\n // annotations\n annotations,\n removeAnnotation,\n exportAnnotationComposite,\n entityListId,\n guestCategories = {},\n}: // optional tab state for independent tab management\nDetailsPanelProps) => {\n const {\n closeSlideOut,\n openPip,\n user,\n isGuest,\n entities: contextEntities,\n setEntities,\n slideOut,\n useSearchParams,\n SubtasksManager,\n } = useDetailsPanelContext()\n const { currentTab, setTab, isFeed } = useScopedDetailsPanel(scope)\n const [_searchParams, setSearchParams] = useSearchParams()\n const hasCalledOnOpen = useRef(false)\n\n // Use context entities if available, otherwise use props\n const activeEntityType = contextEntities?.entityType ?? entityType\n const activeEntities = contextEntities?.entities ?? entities\n const activeEntitySubTypes = contextEntities?.entitySubTypes ?? entitySubTypes\n const activeEntitiesData = contextEntities?.entities ? [] : entitiesData\n const activeProjectNames = contextEntities?.entities\n ? contextEntities.entities.map((e) => e.projectName)\n : projectNames\n\n // Fire onOpen callback once when component mounts and renders\n useEffect(() => {\n if (onOpen && !hasCalledOnOpen.current) {\n hasCalledOnOpen.current = true\n onOpen()\n }\n }, [])\n\n // Force details tab for specific entity types\n useEffect(() => {\n if (entitiesWithoutFeed.includes(activeEntityType) && currentTab !== 'details') {\n setTab('details')\n }\n }, [activeEntityType, currentTab, setTab])\n\n // once component is provided with specific entities, remove context entities to avoid conflicts\n useEffect(() => {\n if (entities.length && contextEntities) {\n setEntities(null)\n }\n }, [entities, contextEntities, setEntities])\n\n // reduce projectsInfo to selected projects and into one\n const projectInfo = useMemo(\n () => mergeProjectInfo(projectsInfo, activeProjectNames),\n [projectsInfo, activeProjectNames],\n )\n\n // build icons for entity types\n const entityTypeIcons = useMemo(\n () => ({\n task: projectInfo.taskTypes\n .filter((task) => !!task.icon)\n .reduce((acc, task) => ({ ...acc, [task.name]: task.icon }), {}),\n folder: projectInfo.folderTypes\n .filter((folder) => !!folder.icon)\n .reduce((acc, folder) => ({ ...acc, [folder.name]: folder.icon }), {}),\n product: projectInfo.productTypes\n .filter((product) => !!product.icon)\n .reduce((acc, product) => ({ ...acc, [product.name]: product.icon }), {}),\n }),\n [projectInfo],\n )\n\n // check if tab needs to be updated when entity type changes\n // for example when switching from version to task, task doesn't have reps tab\n // if reps tab was selected, set default to feed\n useEffect(() => {\n if (currentTab === 'files') {\n // check entity type is still version\n if (activeEntityType !== 'version') {\n setTab('feed')\n }\n }\n // Reset to feed if subtasks tab is selected but entity is not a task\n if (currentTab === 'subtasks' && activeEntityType !== 'task') {\n setTab('feed')\n }\n }, [activeEntityType, currentTab, scope])\n\n // now we get the full details data for selected entities\n let entitiesToQuery = activeEntities.length\n ? activeEntities.map((entity) => ({ id: entity.id, projectName: entity.projectName }))\n : // @ts-expect-error = not sure what's going on with activeEntitiesData, we should try and remove it\n activeEntitiesData.map((entity) => ({ id: entity.id, projectName: entity.projectName }))\n\n entitiesToQuery = entitiesToQuery.filter((entity) => entity.id)\n\n const {\n data: entityDetailsData = [],\n isFetching: isFetchingEntitiesDetails,\n isError,\n originalArgs,\n } = useGetEntitiesDetailsPanelQuery(\n { entityType: activeEntityType, entities: entitiesToQuery },\n {\n skip: !entitiesToQuery.length || !detailsPanelEntityTypes.includes(activeEntityType),\n },\n )\n\n // the entity changes then we close the slide out\n useEffect(() => {\n if (!isSlideOut) {\n closeSlideOut()\n }\n }, [originalArgs, isSlideOut])\n\n // if the details panel is opened vair the uri, run callback\n useEffect(() => {\n if (isFetchingEntitiesDetails) return\n\n if (\n contextEntities?.source &&\n ['uri', 'url'].includes(contextEntities.source) &&\n contextEntities?.entities?.length &&\n !!onUriOpen\n ) {\n const uriEntity = entityDetailsData.find(\n (entity) => entity.id === contextEntities.entities[0].id,\n )\n if (!uriEntity) return\n\n onUriOpen(uriEntity)\n }\n }, [entityDetailsData, isFetchingEntitiesDetails])\n\n // TODO: merge current entities data with fresh details data\n\n const allStatuses = getAllProjectStatuses(projectsInfo)\n\n // get the first project name and info to be used in the feed.\n const firstProject = activeProjectNames[0]\n const firstProjectInfo = projectsInfo[firstProject] || {}\n const firstEntityData = entityDetailsData[0] || {}\n // Use the last entity for URI sync\n const lastEntityData = entityDetailsData[entityDetailsData.length - 1]\n const lastProject = activeProjectNames[activeProjectNames.length - 1]\n\n // build the full entity path for the first entity\n const [entityPathSegments, entityPathVersions] = useGetEntityPath({\n entity: firstEntityData,\n entityType: activeEntityType,\n projectName: firstProject,\n isLoading: isFetchingEntitiesDetails,\n })\n\n const { setEntityUri, setUri } = useURIContext()\n // sync the uri when entity changes\n useEffect(() => {\n if (!lastEntityData?.parents) return\n if (!lastProject) return\n const { folderPath, taskName, versionName, productName } = extractEntityHierarchyFromParents(\n lastEntityData.parents,\n activeEntityType,\n lastEntityData.name,\n )\n\n setEntityUri({\n projectName: lastProject,\n folderPath: folderPath,\n taskName: taskName,\n productName: productName,\n versionName: versionName,\n })\n\n // unmount cleanup: clear uri\n return () => {\n setUri('')\n }\n }, [entityDetailsData, activeProjectNames, activeEntityType])\n\n // sync the details panel url (panel) with entity\n useDetailsPanelURLSync({\n entityData: lastEntityData,\n project: lastProject,\n activeEntityType,\n entitiesToQuery,\n })\n\n const clearSearchUrl = () => {\n // remove URL params when closing\n setSearchParams(\n (prev) => {\n const newParams = new URLSearchParams(prev)\n newParams.delete('project')\n newParams.delete('type')\n newParams.delete('id')\n return newParams\n },\n { replace: true },\n )\n }\n\n const handleClose = () => {\n onClose?.()\n // also remove any entities in context\n setEntities(null)\n clearSearchUrl()\n closeSlideOut()\n }\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && onClose) {\n // Don't trigger if we're in an input element\n const target = e.target as HTMLElement\n const isInputElement =\n ['INPUT', 'TEXTAREA', 'SELECT'].includes(target.tagName) || target.isContentEditable\n\n if (isInputElement) return\n\n // don't trigger if the viewer is open and panel not in slideout mode\n if (isSlideOut === false && (target.closest('#viewer-dialog') || !!slideOut)) return\n\n handleClose()\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [handleClose, isSlideOut, slideOut])\n\n const { requestPipWindow } = usePiPWindow()\n\n const handleOpenPip = () => {\n openPip({\n entityType: activeEntityType,\n entities: entitiesToQuery,\n scope: scope,\n })\n requestPipWindow(500, 500)\n }\n\n const isCommentingEnabled = () => {\n // cannot comment on multiple projects\n if (activeProjectNames.length > 1) return false\n if (isGuest) {\n // Guest can only comment in review sessions (for now)\n if (!entityListId) return false\n // Guest must have at least one category set for list\n const guestHasCategory = Object.prototype.hasOwnProperty.call(\n guestCategories,\n user.attrib?.email || '',\n )\n if (!guestHasCategory) return false\n }\n return true\n }\n\n return (\n <>\n <Styled.Panel className=\"details-panel\">\n <Styled.Toolbar>\n {/* TODO FIX PATH */}\n <EntityPath\n segments={entityPathSegments}\n versions={entityPathVersions}\n projectName={firstProject}\n hideProjectName={isSlideOut}\n isLoading={isFetchingEntitiesDetails || !entityPathSegments.length}\n entityType={activeEntityType}\n scope={scope}\n // @ts-ignore\n entityTypeIcons={entityTypeIcons}\n />\n <Styled.RightTools className=\"right-tools\">\n <Watchers\n entities={entitiesToQuery}\n entityType={activeEntityType}\n options={projectUsers || []}\n onWatchersUpdate={onWatchersUpdate && onWatchersUpdate}\n userName={user.name}\n />\n <Button\n icon=\"picture_in_picture\"\n variant={'text'}\n data-tooltip=\"Picture in Picture\"\n onClick={handleOpenPip}\n />\n\n {onClose && (\n <Button\n icon=\"close\"\n variant={'text'}\n onClick={handleClose}\n data-shortcut={'Escape'}\n />\n )}\n </Styled.RightTools>\n </Styled.Toolbar>\n\n <DetailsPanelHeader\n entityType={activeEntityType}\n entitySubTypes={activeEntitySubTypes}\n entities={entityDetailsData}\n users={projectUsers}\n disabledAssignees={disabledProjectUsers}\n disabledStatuses={disabledStatuses}\n tagsOptions={tagsOptions}\n isFetching={isFetchingEntitiesDetails}\n isCompact={isCompact}\n currentTab={currentTab}\n onTabChange={setTab}\n entityTypeIcons={entityTypeIcons}\n onOpenViewer={(args) => onOpenViewer?.(args)}\n onEntityFocus={onEntityFocus}\n />\n\n <ProjectContextProvider projectName={firstProject}>\n {isFeed && !isError && (\n <FeedWrapper\n entityType={activeEntityType}\n entities={entityDetailsData}\n activeUsers={activeProjectUsers || []}\n projectInfo={firstProjectInfo}\n projectName={firstProject}\n disabled={!isCommentingEnabled()}\n scope={scope}\n statuses={allStatuses}\n readOnly={false}\n entityListId={entityListId}\n annotations={annotations}\n removeAnnotation={removeAnnotation}\n exportAnnotationComposite={exportAnnotationComposite}\n isSlideOut={isSlideOut}\n />\n )}\n {currentTab === 'subtasks' &&\n activeEntityType === 'task' &&\n firstEntityData?.id &&\n SubtasksManager && (\n <DetailsPanelSubtasks\n projectName={firstProject}\n taskId={firstEntityData.id}\n subtasks={firstEntityData.task?.subtasks || []}\n SubtasksManager={SubtasksManager}\n />\n )}\n {currentTab === 'files' && (\n <DetailsPanelFiles\n entities={entityDetailsData}\n scope={scope}\n isLoadingVersion={isFetchingEntitiesDetails}\n />\n )}\n {currentTab === 'details' && (\n <FeedContextWrapper\n entityType={activeEntityType}\n entities={entityDetailsData}\n activeUsers={activeProjectUsers || []}\n projectInfo={firstProjectInfo}\n projectName={firstProject}\n disabled={!isCommentingEnabled()}\n scope={scope}\n statuses={allStatuses}\n readOnly={false}\n annotations={annotations}\n removeAnnotation={removeAnnotation}\n exportAnnotationComposite={exportAnnotationComposite}\n >\n <DetailsPanelDetails\n entities={entityDetailsData}\n isLoading={isFetchingEntitiesDetails}\n />\n </FeedContextWrapper>\n )}\n </ProjectContextProvider>\n </Styled.Panel>\n </>\n )\n}\n\n// create a wrapper that checks if the details panel should be open or not based on isOpen prop and entities state\nexport const DetailsPanel = ({\n isOpen,\n entityType,\n ...props\n}: Omit<DetailsPanelProps, 'entityType'> & {\n entityType?: DetailsPanelEntityType\n isOpen: boolean\n}) => {\n const { entities } = useDetailsPanelContext()\n\n if (!isOpen && !entities) return null\n if (!entityType && !entities) return null\n\n // @ts-expect-error - entityType could be undefined but we check for entities above\n return <DetailsPanelInner {...props} entityType={entityType || entities?.entityType} />\n}\n"],"names":["entitiesWithoutFeed","DetailsPanelInner","entityType","entitySubTypes","entitiesData","entities","tagsOptions","disabledStatuses","projectUsers","disabledProjectUsers","activeProjectUsers","projectsInfo","projectNames","isSlideOut","style","scope","isCompact","onClose","onWatchersUpdate","onOpenViewer","onEntityFocus","onOpen","onUriOpen","annotations","removeAnnotation","exportAnnotationComposite","entityListId","guestCategories","closeSlideOut","openPip","user","isGuest","contextEntities","setEntities","slideOut","useSearchParams","SubtasksManager","useDetailsPanelContext","currentTab","setTab","isFeed","useScopedDetailsPanel","_searchParams","setSearchParams","hasCalledOnOpen","useRef","activeEntityType","activeEntities","activeEntitySubTypes","activeEntitiesData","activeProjectNames","e","useEffect","projectInfo","useMemo","mergeProjectInfo","entityTypeIcons","task","acc","folder","product","entitiesToQuery","entity","entityDetailsData","isFetchingEntitiesDetails","isError","originalArgs","useGetEntitiesDetailsPanelQuery","detailsPanelEntityTypes","uriEntity","allStatuses","getAllProjectStatuses","firstProject","firstProjectInfo","firstEntityData","lastEntityData","lastProject","entityPathSegments","entityPathVersions","useGetEntityPath","setEntityUri","setUri","useURIContext","folderPath","taskName","versionName","productName","extractEntityHierarchyFromParents","useDetailsPanelURLSync","clearSearchUrl","prev","newParams","handleClose","handleKeyDown","target","requestPipWindow","usePiPWindow","handleOpenPip","isCommentingEnabled","jsxs","Styled.Panel","Styled.Toolbar","jsx","EntityPath","Styled.RightTools","Watchers","Button","DetailsPanelHeader","args","ProjectContextProvider","FeedWrapper","DetailsPanelSubtasks","DetailsPanelFiles","FeedContextWrapper","DetailsPanelDetails","DetailsPanel","isOpen","props"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DetailsPanel.es.js","sources":["../../../../../src/containers/DetailsPanel/DetailsPanel.tsx"],"sourcesContent":["import { Button } from '@ynput/ayon-react-components'\nimport React, { useEffect, useMemo, useRef, useState } from 'react'\nimport useDetailsPanelURLSync from './hooks/useDetailsPanelURLSync'\nimport * as Styled from './DetailsPanel.styled'\n\n// shared\nimport { useGetEntitiesDetailsPanelQuery, detailsPanelEntityTypes } from '@shared/api'\nimport type { Tag, DetailsPanelEntityType, DetailsPanelEntityData } from '@shared/api'\nimport { DetailsPanelDetails, EntityPath, Watchers } from '@shared/components'\nimport { usePiPWindow } from '@shared/context/pip/PiPProvider'\nimport { extractEntityHierarchyFromParents } from '@shared/util'\nimport {\n ProjectContextProvider,\n ProjectModelWithProducts,\n useDetailsPanelContext,\n useScopedDetailsPanel,\n useURIContext,\n FeedFilter,\n} from '@shared/context'\n\nimport DetailsPanelHeader from './components/DetailsPanelHeader/DetailsPanelHeader'\nimport DetailsPanelFiles from './components/DetailsPanelFiles'\nimport useGetEntityPath from './hooks/useGetEntityPath'\nimport getAllProjectStatuses from './helpers/getAllProjectsStatuses'\nimport FeedWrapper from './containers/FeedWrapper'\nimport FeedContextWrapper from './containers/FeedContextWrapper'\nimport mergeProjectInfo from './helpers/mergeProjectInfo'\nimport DetailsPanelSubtasks from './containers/DetailsPanelSubtasks'\n\nexport const entitiesWithoutFeed = ['product', 'representation']\n\ntype User = { avatarUrl: string; name: string; fullName?: string }\n\nexport type DetailsPanelProps = {\n entityType: DetailsPanelEntityType\n entitySubTypes?: string[] // used to get actions before the entity has loaded\n entitiesData?: { id: string; label: string; type: DetailsPanelEntityType }[]\n entities?: { id: string; projectName: string }[]\n tagsOptions?: Tag[]\n disabledStatuses?: string[]\n projectUsers?: User[]\n disabledProjectUsers?: string[]\n activeProjectUsers?: string[]\n projectsInfo?: Record<string, ProjectModelWithProducts>\n projectNames?: string[]\n isSlideOut?: boolean\n style?: React.CSSProperties\n scope: string\n isCompact?: boolean\n onClose?: () => void\n onWatchersUpdate?: (added: any[], removed: any[]) => void\n onOpenViewer?: (entity: any) => void\n onEntityFocus?: (id: string, entityType: DetailsPanelEntityType) => void\n onOpen?: () => void\n onUriOpen?: (entity: DetailsPanelEntityData) => void\n // annotations\n annotations?: any\n removeAnnotation?: (id: string) => void\n exportAnnotationComposite?: (id: string) => Promise<Blob | null>\n entityListId?: string\n guestCategories?: Record<string, string> // only used for guests to find if they have access to any categories\n // optional tab state for independent tab management\n}\n\nconst DetailsPanelInner = ({\n entityType,\n entitySubTypes = [],\n // entities is data we already have from kanban\n entitiesData = [],\n // entityIds are used to get the full details data for the entities\n entities = [],\n tagsOptions = [],\n disabledStatuses,\n projectUsers,\n disabledProjectUsers,\n activeProjectUsers,\n projectsInfo = {},\n projectNames = [],\n isSlideOut = false,\n style = {},\n scope,\n isCompact = false,\n onClose,\n onWatchersUpdate,\n onOpenViewer,\n onEntityFocus,\n onOpen,\n onUriOpen, // when the details panel is opened from uri\n // annotations\n annotations,\n removeAnnotation,\n exportAnnotationComposite,\n entityListId,\n guestCategories = {},\n}: // optional tab state for independent tab management\nDetailsPanelProps) => {\n const {\n closeSlideOut,\n openPip,\n user,\n isGuest,\n entities: contextEntities,\n setEntities,\n slideOut,\n useSearchParams,\n SubtasksManager,\n useNavigate,\n } = useDetailsPanelContext()\n const { currentTab, setTab, isFeed } = useScopedDetailsPanel(scope)\n const [_searchParams, setSearchParams] = useSearchParams()\n const hasCalledOnOpen = useRef(false)\n\n // Use context entities if available, otherwise use props\n const activeEntityType = contextEntities?.entityType ?? entityType\n const activeEntities = contextEntities?.entities ?? entities\n const activeEntitySubTypes = contextEntities?.entitySubTypes ?? entitySubTypes\n const activeEntitiesData = contextEntities?.entities ? [] : entitiesData\n const activeProjectNames = contextEntities?.entities\n ? contextEntities.entities.map((e) => e.projectName)\n : projectNames\n\n // Fire onOpen callback once when component mounts and renders\n useEffect(() => {\n if (onOpen && !hasCalledOnOpen.current) {\n hasCalledOnOpen.current = true\n onOpen()\n }\n }, [])\n\n // Force details tab for specific entity types\n useEffect(() => {\n if (entitiesWithoutFeed.includes(activeEntityType) && currentTab !== 'details') {\n setTab('details')\n }\n }, [activeEntityType, currentTab, setTab])\n\n // once component is provided with specific entities, remove context entities to avoid conflicts\n useEffect(() => {\n if (entities.length && contextEntities) {\n setEntities(null)\n }\n }, [entities, contextEntities, setEntities])\n\n // reduce projectsInfo to selected projects and into one\n const projectInfo = useMemo(\n () => mergeProjectInfo(projectsInfo, activeProjectNames),\n [projectsInfo, activeProjectNames],\n )\n\n // build icons for entity types\n const entityTypeIcons = useMemo(\n () => ({\n task: projectInfo.taskTypes\n .filter((task) => !!task.icon)\n .reduce((acc, task) => ({ ...acc, [task.name]: task.icon }), {}),\n folder: projectInfo.folderTypes\n .filter((folder) => !!folder.icon)\n .reduce((acc, folder) => ({ ...acc, [folder.name]: folder.icon }), {}),\n product: projectInfo.productTypes\n .filter((product) => !!product.icon)\n .reduce((acc, product) => ({ ...acc, [product.name]: product.icon }), {}),\n }),\n [projectInfo],\n )\n\n // check if tab needs to be updated when entity type changes\n // for example when switching from version to task, task doesn't have reps tab\n // if reps tab was selected, set default to feed\n useEffect(() => {\n if (currentTab === 'files') {\n // check entity type is still version\n if (activeEntityType !== 'version') {\n setTab('feed')\n }\n }\n // Reset to feed if subtasks tab is selected but entity is not a task\n if (currentTab === 'subtasks' && activeEntityType !== 'task') {\n setTab('feed')\n }\n }, [activeEntityType, currentTab, scope])\n\n // now we get the full details data for selected entities\n let entitiesToQuery = activeEntities.length\n ? activeEntities.map((entity) => ({ id: entity.id, projectName: entity.projectName }))\n : // @ts-expect-error = not sure what's going on with activeEntitiesData, we should try and remove it\n activeEntitiesData.map((entity) => ({ id: entity.id, projectName: entity.projectName }))\n\n entitiesToQuery = entitiesToQuery.filter((entity) => entity.id)\n\n const {\n data: entityDetailsData = [],\n isFetching: isFetchingEntitiesDetails,\n isError,\n originalArgs,\n } = useGetEntitiesDetailsPanelQuery(\n { entityType: activeEntityType, entities: entitiesToQuery },\n {\n skip: !entitiesToQuery.length || !detailsPanelEntityTypes.includes(activeEntityType),\n },\n )\n\n // the entity changes then we close the slide out\n useEffect(() => {\n if (!isSlideOut) {\n closeSlideOut()\n }\n }, [originalArgs, isSlideOut])\n\n // if the details panel is opened vair the uri, run callback\n useEffect(() => {\n if (isFetchingEntitiesDetails) return\n\n if (\n contextEntities?.source &&\n ['uri', 'url'].includes(contextEntities.source) &&\n contextEntities?.entities?.length &&\n !!onUriOpen\n ) {\n const uriEntity = entityDetailsData.find(\n (entity) => entity.id === contextEntities.entities[0].id,\n )\n if (!uriEntity) return\n\n onUriOpen(uriEntity)\n }\n }, [entityDetailsData, isFetchingEntitiesDetails])\n\n // TODO: merge current entities data with fresh details data\n\n const allStatuses = getAllProjectStatuses(projectsInfo)\n\n // get the first project name and info to be used in the feed.\n const firstProject = activeProjectNames[0]\n const firstProjectInfo = projectsInfo[firstProject] || {}\n const firstEntityData = entityDetailsData[0] || {}\n // Use the last entity for URI sync\n const lastEntityData = entityDetailsData[entityDetailsData.length - 1]\n const lastProject = activeProjectNames[activeProjectNames.length - 1]\n\n // build the full entity path for the first entity\n const [entityPathSegments, entityPathVersions] = useGetEntityPath({\n entity: firstEntityData,\n entityType: activeEntityType,\n projectName: firstProject,\n isLoading: isFetchingEntitiesDetails,\n })\n\n const { setEntityUri, setUri } = useURIContext()\n // sync the uri when entity changes\n useEffect(() => {\n if (!lastEntityData?.parents) return\n if (!lastProject) return\n const { folderPath, taskName, versionName, productName } = extractEntityHierarchyFromParents(\n lastEntityData.parents,\n activeEntityType,\n lastEntityData.name,\n )\n\n setEntityUri({\n projectName: lastProject,\n folderPath: folderPath,\n taskName: taskName,\n productName: productName,\n versionName: versionName,\n })\n\n // unmount cleanup: clear uri\n return () => {\n setUri('')\n }\n }, [entityDetailsData, activeProjectNames, activeEntityType])\n\n // sync the details panel url (panel) with entity\n useDetailsPanelURLSync({\n entityData: lastEntityData,\n project: lastProject,\n activeEntityType,\n entitiesToQuery,\n })\n\n const clearSearchUrl = () => {\n // remove URL params when closing\n setSearchParams(\n (prev) => {\n const newParams = new URLSearchParams(prev)\n newParams.delete('project')\n newParams.delete('type')\n newParams.delete('id')\n return newParams\n },\n { replace: true },\n )\n }\n\n const handleClose = () => {\n onClose?.()\n // also remove any entities in context\n setEntities(null)\n clearSearchUrl()\n closeSlideOut()\n }\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && onClose) {\n // Don't trigger if we're in an input element\n const target = e.target as HTMLElement\n const isInputElement =\n ['INPUT', 'TEXTAREA', 'SELECT'].includes(target.tagName) || target.isContentEditable\n\n if (isInputElement) return\n\n // don't trigger if the viewer is open and panel not in slideout mode\n if (isSlideOut === false && (target.closest('#viewer-dialog') || !!slideOut)) return\n\n handleClose()\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [handleClose, isSlideOut, slideOut])\n\n const { requestPipWindow } = usePiPWindow()\n\n const handleOpenPip = () => {\n openPip({\n entityType: activeEntityType,\n entities: entitiesToQuery,\n scope: scope,\n })\n requestPipWindow(500, 500)\n }\n\n const isCommentingEnabled = () => {\n // cannot comment on multiple projects\n if (activeProjectNames.length > 1) return false\n if (isGuest) {\n // Guest can only comment in review sessions (for now)\n if (!entityListId) return false\n // Guest must have at least one category set for list\n const guestHasCategory = Object.prototype.hasOwnProperty.call(\n guestCategories,\n user.attrib?.email || '',\n )\n if (!guestHasCategory) return false\n }\n return true\n }\n\n return (\n <>\n <Styled.Panel className=\"details-panel\">\n <Styled.Toolbar>\n {/* TODO FIX PATH */}\n <EntityPath\n segments={entityPathSegments}\n versions={entityPathVersions}\n projectName={firstProject}\n hideProjectName={isSlideOut}\n isLoading={isFetchingEntitiesDetails || !entityPathSegments.length}\n entityType={activeEntityType}\n scope={scope}\n // @ts-ignore\n entityTypeIcons={entityTypeIcons}\n />\n <Styled.RightTools className=\"right-tools\">\n <Watchers\n entities={entitiesToQuery}\n entityType={activeEntityType}\n options={projectUsers || []}\n onWatchersUpdate={onWatchersUpdate && onWatchersUpdate}\n userName={user.name}\n />\n <Button\n icon=\"picture_in_picture\"\n variant={'text'}\n data-tooltip=\"Picture in Picture\"\n onClick={handleOpenPip}\n />\n\n {onClose && (\n <Button\n icon=\"close\"\n variant={'text'}\n onClick={handleClose}\n data-shortcut={'Escape'}\n />\n )}\n </Styled.RightTools>\n </Styled.Toolbar>\n\n <DetailsPanelHeader\n entityType={activeEntityType}\n entitySubTypes={activeEntitySubTypes}\n entities={entityDetailsData}\n users={projectUsers}\n disabledAssignees={disabledProjectUsers}\n disabledStatuses={disabledStatuses}\n tagsOptions={tagsOptions}\n isFetching={isFetchingEntitiesDetails}\n isCompact={isCompact}\n currentTab={currentTab}\n onTabChange={setTab}\n entityTypeIcons={entityTypeIcons}\n onOpenViewer={(args) => onOpenViewer?.(args)}\n onEntityFocus={onEntityFocus}\n />\n\n <ProjectContextProvider projectName={firstProject}>\n {isFeed && !isError && (\n <FeedWrapper\n entityType={activeEntityType}\n entities={entityDetailsData}\n activeUsers={activeProjectUsers || []}\n projectInfo={firstProjectInfo}\n projectName={firstProject}\n disabled={!isCommentingEnabled()}\n scope={scope}\n statuses={allStatuses}\n readOnly={false}\n entityListId={entityListId}\n annotations={annotations}\n removeAnnotation={removeAnnotation}\n exportAnnotationComposite={exportAnnotationComposite}\n isSlideOut={isSlideOut}\n />\n )}\n {currentTab === 'subtasks' &&\n activeEntityType === 'task' &&\n firstEntityData?.id &&\n SubtasksManager && (\n <DetailsPanelSubtasks\n projectName={firstProject}\n taskId={firstEntityData.id}\n subtasks={firstEntityData.task?.subtasks || []}\n SubtasksManager={SubtasksManager}\n useNavigate={useNavigate!}\n />\n )}\n {currentTab === 'files' && (\n <DetailsPanelFiles\n entities={entityDetailsData}\n scope={scope}\n isLoadingVersion={isFetchingEntitiesDetails}\n />\n )}\n {currentTab === 'details' && (\n <FeedContextWrapper\n entityType={activeEntityType}\n entities={entityDetailsData}\n activeUsers={activeProjectUsers || []}\n projectInfo={firstProjectInfo}\n projectName={firstProject}\n disabled={!isCommentingEnabled()}\n scope={scope}\n statuses={allStatuses}\n readOnly={false}\n annotations={annotations}\n removeAnnotation={removeAnnotation}\n exportAnnotationComposite={exportAnnotationComposite}\n >\n <DetailsPanelDetails\n entities={entityDetailsData}\n isLoading={isFetchingEntitiesDetails}\n />\n </FeedContextWrapper>\n )}\n </ProjectContextProvider>\n </Styled.Panel>\n </>\n )\n}\n\n// create a wrapper that checks if the details panel should be open or not based on isOpen prop and entities state\nexport const DetailsPanel = ({\n isOpen,\n entityType,\n ...props\n}: Omit<DetailsPanelProps, 'entityType'> & {\n entityType?: DetailsPanelEntityType\n isOpen: boolean\n}) => {\n const { entities } = useDetailsPanelContext()\n\n if (!isOpen && !entities) return null\n if (!entityType && !entities) return null\n\n // @ts-expect-error - entityType could be undefined but we check for entities above\n return <DetailsPanelInner {...props} entityType={entityType || entities?.entityType} />\n}\n"],"names":["entitiesWithoutFeed","DetailsPanelInner","entityType","entitySubTypes","entitiesData","entities","tagsOptions","disabledStatuses","projectUsers","disabledProjectUsers","activeProjectUsers","projectsInfo","projectNames","isSlideOut","style","scope","isCompact","onClose","onWatchersUpdate","onOpenViewer","onEntityFocus","onOpen","onUriOpen","annotations","removeAnnotation","exportAnnotationComposite","entityListId","guestCategories","closeSlideOut","openPip","user","isGuest","contextEntities","setEntities","slideOut","useSearchParams","SubtasksManager","useNavigate","useDetailsPanelContext","currentTab","setTab","isFeed","useScopedDetailsPanel","_searchParams","setSearchParams","hasCalledOnOpen","useRef","activeEntityType","activeEntities","activeEntitySubTypes","activeEntitiesData","activeProjectNames","e","useEffect","projectInfo","useMemo","mergeProjectInfo","entityTypeIcons","task","acc","folder","product","entitiesToQuery","entity","entityDetailsData","isFetchingEntitiesDetails","isError","originalArgs","useGetEntitiesDetailsPanelQuery","detailsPanelEntityTypes","uriEntity","allStatuses","getAllProjectStatuses","firstProject","firstProjectInfo","firstEntityData","lastEntityData","lastProject","entityPathSegments","entityPathVersions","useGetEntityPath","setEntityUri","setUri","useURIContext","folderPath","taskName","versionName","productName","extractEntityHierarchyFromParents","useDetailsPanelURLSync","clearSearchUrl","prev","newParams","handleClose","handleKeyDown","target","requestPipWindow","usePiPWindow","handleOpenPip","isCommentingEnabled","jsxs","Styled.Panel","Styled.Toolbar","jsx","EntityPath","Styled.RightTools","Watchers","Button","DetailsPanelHeader","args","ProjectContextProvider","FeedWrapper","DetailsPanelSubtasks","DetailsPanelFiles","FeedContextWrapper","DetailsPanelDetails","DetailsPanel","isOpen","props"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DetailsPanelSubtasks.cjs.js","sources":["../../../../../../src/containers/DetailsPanel/containers/DetailsPanelSubtasks.tsx"],"sourcesContent":["import { SubtasksManagerWrapper, SubtasksManagerWrapperProps } from '@shared/components'\nimport { FC, useMemo, useState } from 'react'\nimport TabHeaderAndFilters, {\n FilterItem,\n} from '../components/TabHeaderAndFilters/TabHeaderAndFilters'\nimport {
|
|
1
|
+
{"version":3,"file":"DetailsPanelSubtasks.cjs.js","sources":["../../../../../../src/containers/DetailsPanel/containers/DetailsPanelSubtasks.tsx"],"sourcesContent":["import { SubtasksManagerWrapper, SubtasksManagerWrapperProps } from '@shared/components'\nimport { FC, useMemo, useState } from 'react'\nimport TabHeaderAndFilters, {\n FilterItem,\n} from '../components/TabHeaderAndFilters/TabHeaderAndFilters'\nimport { QueryFilter, useGetUsersQuery } from '@shared/api'\n\ninterface DetailsPanelSubtasksProps extends SubtasksManagerWrapperProps {}\n\nconst DetailsPanelSubtasks: FC<DetailsPanelSubtasksProps> = ({ ...props }) => {\n const [subtasksFilters, setSubtasksFilters] = useState<QueryFilter>({})\n const [selectedSubtaskIds, setSelectedSubtaskIds] = useState<string[]>([])\n\n const { data: users = [] } = useGetUsersQuery({})\n\n const filters = useMemo<FilterItem<string>[]>(\n () => [\n {\n id: 'search',\n icon: 'search',\n tooltip: 'Search',\n type: 'search',\n placeholder: 'Search subtasks...',\n },\n {\n id: 'assignees',\n icon: 'person',\n tooltip: 'Assignees',\n type: 'enum',\n options: users.map((u: any) => ({\n label: u.attrib?.fullName || u.name,\n value: u.name,\n icon: `/api/users/${u.name}/avatar`,\n })),\n operator: 'includesany',\n },\n {\n id: 'done',\n icon: 'check_circle',\n tooltip: 'Done',\n type: 'boolean',\n },\n ],\n [users],\n )\n\n return (\n <>\n <TabHeaderAndFilters\n label={`Subtasks (${props.subtasks?.length || 0})`}\n filters={filters}\n currentFilter={subtasksFilters}\n onFilterChange={setSubtasksFilters}\n />\n <SubtasksManagerWrapper\n {...props}\n style={{ padding: 8, height: 'unset' }}\n title={null}\n selectedSubtaskIds={selectedSubtaskIds}\n onSelectSubtasks={setSelectedSubtaskIds}\n filters={subtasksFilters}\n actionsPortalClassName=\"panel-header-filters\"\n />\n </>\n )\n}\n\nexport default DetailsPanelSubtasks\n"],"names":["DetailsPanelSubtasks","props","subtasksFilters","setSubtasksFilters","useState","selectedSubtaskIds","setSelectedSubtaskIds","users","useGetUsersQuery","filters","useMemo","u","jsxs","Fragment","jsx","TabHeaderAndFilters","SubtasksManagerWrapper"],"mappings":"qieASA,MAAMA,EAAsD,CAAC,CAAE,GAAGC,KAAY,CAC5E,KAAM,CAACC,EAAiBC,CAAkB,EAAIC,EAAAA,SAAsB,CAAA,CAAE,EAChE,CAACC,EAAoBC,CAAqB,EAAIF,EAAAA,SAAmB,CAAA,CAAE,EAEnE,CAAE,KAAMG,EAAQ,CAAA,GAAOC,EAAAA,iBAAiB,CAAA,CAAE,EAE1CC,EAAUC,EAAAA,QACd,IAAM,CACJ,CACE,GAAI,SACJ,KAAM,SACN,QAAS,SACT,KAAM,SACN,YAAa,oBAAA,EAEf,CACE,GAAI,YACJ,KAAM,SACN,QAAS,YACT,KAAM,OACN,QAASH,EAAM,IAAKI,IAAY,CAC9B,MAAOA,EAAE,QAAQ,UAAYA,EAAE,KAC/B,MAAOA,EAAE,KACT,KAAM,cAAcA,EAAE,IAAI,SAAA,EAC1B,EACF,SAAU,aAAA,EAEZ,CACE,GAAI,OACJ,KAAM,eACN,QAAS,OACT,KAAM,SAAA,CACR,EAEF,CAACJ,CAAK,CAAA,EAGR,OACEK,EAAAA,kBAAAA,KAAAC,6BAAA,CACE,SAAA,CAAAC,EAAAA,kBAAAA,IAACC,EAAA,CACC,MAAO,aAAad,EAAM,UAAU,QAAU,CAAC,IAC/C,QAAAQ,EACA,cAAeP,EACf,eAAgBC,CAAA,CAAA,EAElBW,EAAAA,kBAAAA,IAACE,EAAAA,uBAAA,CACE,GAAGf,EACJ,MAAO,CAAE,QAAS,EAAG,OAAQ,OAAA,EAC7B,MAAO,KACP,mBAAAI,EACA,iBAAkBC,EAClB,QAASJ,EACT,uBAAuB,sBAAA,CAAA,CACzB,EACF,CAEJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DetailsPanelSubtasks.es.js","sources":["../../../../../../src/containers/DetailsPanel/containers/DetailsPanelSubtasks.tsx"],"sourcesContent":["import { SubtasksManagerWrapper, SubtasksManagerWrapperProps } from '@shared/components'\nimport { FC, useMemo, useState } from 'react'\nimport TabHeaderAndFilters, {\n FilterItem,\n} from '../components/TabHeaderAndFilters/TabHeaderAndFilters'\nimport {
|
|
1
|
+
{"version":3,"file":"DetailsPanelSubtasks.es.js","sources":["../../../../../../src/containers/DetailsPanel/containers/DetailsPanelSubtasks.tsx"],"sourcesContent":["import { SubtasksManagerWrapper, SubtasksManagerWrapperProps } from '@shared/components'\nimport { FC, useMemo, useState } from 'react'\nimport TabHeaderAndFilters, {\n FilterItem,\n} from '../components/TabHeaderAndFilters/TabHeaderAndFilters'\nimport { QueryFilter, useGetUsersQuery } from '@shared/api'\n\ninterface DetailsPanelSubtasksProps extends SubtasksManagerWrapperProps {}\n\nconst DetailsPanelSubtasks: FC<DetailsPanelSubtasksProps> = ({ ...props }) => {\n const [subtasksFilters, setSubtasksFilters] = useState<QueryFilter>({})\n const [selectedSubtaskIds, setSelectedSubtaskIds] = useState<string[]>([])\n\n const { data: users = [] } = useGetUsersQuery({})\n\n const filters = useMemo<FilterItem<string>[]>(\n () => [\n {\n id: 'search',\n icon: 'search',\n tooltip: 'Search',\n type: 'search',\n placeholder: 'Search subtasks...',\n },\n {\n id: 'assignees',\n icon: 'person',\n tooltip: 'Assignees',\n type: 'enum',\n options: users.map((u: any) => ({\n label: u.attrib?.fullName || u.name,\n value: u.name,\n icon: `/api/users/${u.name}/avatar`,\n })),\n operator: 'includesany',\n },\n {\n id: 'done',\n icon: 'check_circle',\n tooltip: 'Done',\n type: 'boolean',\n },\n ],\n [users],\n )\n\n return (\n <>\n <TabHeaderAndFilters\n label={`Subtasks (${props.subtasks?.length || 0})`}\n filters={filters}\n currentFilter={subtasksFilters}\n onFilterChange={setSubtasksFilters}\n />\n <SubtasksManagerWrapper\n {...props}\n style={{ padding: 8, height: 'unset' }}\n title={null}\n selectedSubtaskIds={selectedSubtaskIds}\n onSelectSubtasks={setSelectedSubtaskIds}\n filters={subtasksFilters}\n actionsPortalClassName=\"panel-header-filters\"\n />\n </>\n )\n}\n\nexport default DetailsPanelSubtasks\n"],"names":["DetailsPanelSubtasks","props","subtasksFilters","setSubtasksFilters","useState","selectedSubtaskIds","setSelectedSubtaskIds","users","useGetUsersQuery","filters","useMemo","u","jsxs","Fragment","jsx","TabHeaderAndFilters","SubtasksManagerWrapper"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,MAAMA,KAAsD,CAAC,EAAE,GAAGC,QAAY;AAC5E,QAAM,CAACC,GAAiBC,CAAkB,IAAIC,EAAsB,CAAA,CAAE,GAChE,CAACC,GAAoBC,CAAqB,IAAIF,EAAmB,CAAA,CAAE,GAEnE,EAAE,MAAMG,IAAQ,CAAA,MAAOC,EAAiB,CAAA,CAAE,GAE1CC,IAAUC;AAAA,IACd,MAAM;AAAA,MACJ;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,MAEf;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,MAAM;AAAA,QACN,SAASH,EAAM,IAAI,CAACI,OAAY;AAAA,UAC9B,OAAOA,EAAE,QAAQ,YAAYA,EAAE;AAAA,UAC/B,OAAOA,EAAE;AAAA,UACT,MAAM,cAAcA,EAAE,IAAI;AAAA,QAAA,EAC1B;AAAA,QACF,UAAU;AAAA,MAAA;AAAA,MAEZ;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,IAEF,CAACJ,CAAK;AAAA,EAAA;AAGR,SACEK,gBAAAA,EAAAA,KAAAC,YAAA,EACE,UAAA;AAAA,IAAAC,gBAAAA,EAAAA;AAAAA,MAACC;AAAA,MAAA;AAAA,QACC,OAAO,aAAad,EAAM,UAAU,UAAU,CAAC;AAAA,QAC/C,SAAAQ;AAAA,QACA,eAAeP;AAAA,QACf,gBAAgBC;AAAA,MAAA;AAAA,IAAA;AAAA,IAElBW,gBAAAA,EAAAA;AAAAA,MAACE;AAAA,MAAA;AAAA,QACE,GAAGf;AAAA,QACJ,OAAO,EAAE,SAAS,GAAG,QAAQ,QAAA;AAAA,QAC7B,OAAO;AAAA,QACP,oBAAAI;AAAA,QACA,kBAAkBC;AAAA,QAClB,SAASJ;AAAA,QACT,wBAAuB;AAAA,MAAA;AAAA,IAAA;AAAA,EACzB,GACF;AAEJ;"}
|