@manta-eu/react 0.8.1 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/chart/ForecastLegend.d.ts.map +1 -1
- package/dist/components/chart/ForecastLegend.js +10 -2
- package/dist/components/chart/ForecastLegend.js.map +1 -1
- package/dist/components/chart/forecast-model.d.ts.map +1 -1
- package/dist/components/chart/forecast-model.js.map +1 -1
- package/dist/components/chat-view/Chat.js +2 -2
- package/dist/components/file-dropzone/index.d.ts +25 -0
- package/dist/components/file-dropzone/index.d.ts.map +1 -0
- package/dist/components/file-dropzone/index.js +70 -0
- package/dist/components/file-dropzone/index.js.map +1 -0
- package/dist/components/planning/plan-detail-utils.d.ts.map +1 -1
- package/dist/components/planning/plan-detail-utils.js +2 -0
- package/dist/components/planning/plan-detail-utils.js.map +1 -1
- package/dist/components/toast/index.d.ts +1 -0
- package/dist/components/toast/index.d.ts.map +1 -1
- package/dist/components/toast/index.js +1 -0
- package/dist/components/toast/index.js.map +1 -1
- package/dist/globals.css +27 -0
- package/dist/graph/NodeDetailPanel/TypeSummaryPanel.d.ts.map +1 -1
- package/dist/graph/NodeDetailPanel/TypeSummaryPanel.js.map +1 -1
- package/dist/hooks/use-sparql-construct.d.ts +2 -0
- package/dist/hooks/use-sparql-construct.d.ts.map +1 -1
- package/dist/hooks/use-sparql-construct.js +2 -1
- package/dist/hooks/use-sparql-construct.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/datastore-route-table.d.ts +3 -0
- package/dist/lib/datastore-route-table.d.ts.map +1 -1
- package/dist/lib/datastore-route-table.js +3 -0
- package/dist/lib/datastore-route-table.js.map +1 -1
- package/dist/lib/hooks/{useChatUpload.d.ts → useFileUpload.d.ts} +3 -3
- package/dist/lib/hooks/{useChatUpload.d.ts.map → useFileUpload.d.ts.map} +1 -1
- package/dist/lib/hooks/{useChatUpload.js → useFileUpload.js} +2 -2
- package/dist/lib/hooks/{useChatUpload.js.map → useFileUpload.js.map} +1 -1
- package/dist/routes/data-collection/index.d.ts +3 -0
- package/dist/routes/data-collection/index.d.ts.map +1 -0
- package/dist/routes/data-collection/index.js +43 -0
- package/dist/routes/data-collection/index.js.map +1 -0
- package/dist/routes/data-explorer/components/DataExplorerLayout.d.ts.map +1 -1
- package/dist/routes/data-explorer/components/DataExplorerLayout.js +5 -2
- package/dist/routes/data-explorer/components/DataExplorerLayout.js.map +1 -1
- package/dist/routes/data-explorer/components/Rail.d.ts.map +1 -1
- package/dist/routes/data-explorer/components/Rail.js +3 -3
- package/dist/routes/data-explorer/components/Rail.js.map +1 -1
- package/dist/routes/data-explorer/components/uploads/IngestRunsList.d.ts +8 -0
- package/dist/routes/data-explorer/components/uploads/IngestRunsList.d.ts.map +1 -0
- package/dist/routes/data-explorer/components/uploads/IngestRunsList.js +18 -0
- package/dist/routes/data-explorer/components/uploads/IngestRunsList.js.map +1 -0
- package/dist/routes/data-explorer/components/uploads/IngestStateStatus.d.ts +14 -0
- package/dist/routes/data-explorer/components/uploads/IngestStateStatus.d.ts.map +1 -0
- package/dist/routes/data-explorer/components/uploads/IngestStateStatus.js +33 -0
- package/dist/routes/data-explorer/components/uploads/IngestStateStatus.js.map +1 -0
- package/dist/routes/data-explorer/components/uploads/UploadedFilesList.d.ts +8 -0
- package/dist/routes/data-explorer/components/uploads/UploadedFilesList.d.ts.map +1 -0
- package/dist/routes/data-explorer/components/uploads/UploadedFilesList.js +34 -0
- package/dist/routes/data-explorer/components/uploads/UploadedFilesList.js.map +1 -0
- package/dist/routes/data-explorer/components/uploads/UploadsPages.d.ts +7 -0
- package/dist/routes/data-explorer/components/uploads/UploadsPages.d.ts.map +1 -0
- package/dist/routes/data-explorer/components/uploads/UploadsPages.js +35 -0
- package/dist/routes/data-explorer/components/uploads/UploadsPages.js.map +1 -0
- package/dist/routes/data-explorer/index.d.ts +1 -0
- package/dist/routes/data-explorer/index.d.ts.map +1 -1
- package/dist/routes/data-explorer/index.js +1 -0
- package/dist/routes/data-explorer/index.js.map +1 -1
- package/dist/routes/data-explorer/namespaces.d.ts +4 -0
- package/dist/routes/data-explorer/namespaces.d.ts.map +1 -1
- package/dist/routes/data-explorer/namespaces.js +6 -1
- package/dist/routes/data-explorer/namespaces.js.map +1 -1
- package/dist/routes/data-explorer/uploads.d.ts +56 -0
- package/dist/routes/data-explorer/uploads.d.ts.map +1 -0
- package/dist/routes/data-explorer/uploads.js +140 -0
- package/dist/routes/data-explorer/uploads.js.map +1 -0
- package/dist/routes/datastores/components/LinkUnlinkedDatastoreDialog.d.ts +1 -0
- package/dist/routes/datastores/components/LinkUnlinkedDatastoreDialog.d.ts.map +1 -1
- package/dist/routes/datastores/components/LinkUnlinkedDatastoreDialog.js +16 -9
- package/dist/routes/datastores/components/LinkUnlinkedDatastoreDialog.js.map +1 -1
- package/dist/routes/datastores/components/StatusBadge.d.ts +7 -8
- package/dist/routes/datastores/components/StatusBadge.d.ts.map +1 -1
- package/dist/routes/datastores/components/StatusBadge.js +17 -1
- package/dist/routes/datastores/components/StatusBadge.js.map +1 -1
- package/dist/routes/datastores/flatten.d.ts +6 -1
- package/dist/routes/datastores/flatten.d.ts.map +1 -1
- package/dist/routes/datastores/flatten.js +37 -2
- package/dist/routes/datastores/flatten.js.map +1 -1
- package/dist/routes/datastores/hooks/useDatastoreColumns.d.ts +2 -0
- package/dist/routes/datastores/hooks/useDatastoreColumns.d.ts.map +1 -1
- package/dist/routes/datastores/hooks/useDatastoreColumns.js +8 -4
- package/dist/routes/datastores/hooks/useDatastoreColumns.js.map +1 -1
- package/dist/routes/datastores/index.d.ts.map +1 -1
- package/dist/routes/datastores/index.js +53 -18
- package/dist/routes/datastores/index.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.d.ts +3 -0
- package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.js +38 -0
- package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.js.map +1 -0
- package/dist/routes/integrations/components/connect-forms/google-merchant-center-account-tree.d.ts +4 -0
- package/dist/routes/integrations/components/connect-forms/google-merchant-center-account-tree.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/google-merchant-center-account-tree.js +32 -0
- package/dist/routes/integrations/components/connect-forms/google-merchant-center-account-tree.js.map +1 -0
- package/dist/routes/integrations/components/connect-forms/setup-account-unavailable-reason.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/setup-account-unavailable-reason.js +1 -0
- package/dist/routes/integrations/components/connect-forms/setup-account-unavailable-reason.js.map +1 -1
- package/dist/routes/integrations/connect-forms.d.ts +1 -0
- package/dist/routes/integrations/connect-forms.d.ts.map +1 -1
- package/dist/routes/integrations/connect-forms.js +1 -0
- package/dist/routes/integrations/connect-forms.js.map +1 -1
- package/dist/routes/integrations/connection-view.d.ts.map +1 -1
- package/dist/routes/integrations/connection-view.js +1 -0
- package/dist/routes/integrations/connection-view.js.map +1 -1
- package/dist/shared/graph-derived-queries.d.ts.map +1 -1
- package/dist/shared/graph-derived-queries.js +2 -1
- package/dist/shared/graph-derived-queries.js.map +1 -1
- package/package.json +21 -9
- package/src/app-subpaths.json +1 -0
- package/src/components/chart/ForecastLegend.tsx +15 -13
- package/src/components/chart/forecast-model.ts +6 -8
- package/src/components/chat-view/Chat.tsx +2 -2
- package/src/components/file-dropzone/index.tsx +165 -0
- package/src/components/planning/plan-detail-utils.tsx +2 -0
- package/src/components/toast/index.tsx +1 -0
- package/src/graph/NodeDetailPanel/TypeSummaryPanel.tsx +12 -14
- package/src/hooks/use-sparql-construct.ts +4 -2
- package/src/index.ts +1 -0
- package/src/lib/datastore-route-table.ts +6 -0
- package/src/lib/hooks/{useChatUpload.ts → useFileUpload.ts} +2 -2
- package/src/routes/data-collection/index.tsx +82 -0
- package/src/routes/data-explorer/components/DataExplorerLayout.tsx +5 -2
- package/src/routes/data-explorer/components/Rail.tsx +13 -2
- package/src/routes/data-explorer/components/uploads/IngestRunsList.tsx +63 -0
- package/src/routes/data-explorer/components/uploads/IngestStateStatus.tsx +45 -0
- package/src/routes/data-explorer/components/uploads/UploadedFilesList.tsx +93 -0
- package/src/routes/data-explorer/components/uploads/UploadsPages.tsx +80 -0
- package/src/routes/data-explorer/index.tsx +6 -0
- package/src/routes/data-explorer/namespaces.ts +7 -1
- package/src/routes/data-explorer/uploads.ts +205 -0
- package/src/routes/datastores/components/LinkUnlinkedDatastoreDialog.tsx +49 -10
- package/src/routes/datastores/components/StatusBadge.tsx +22 -7
- package/src/routes/datastores/flatten.ts +50 -2
- package/src/routes/datastores/hooks/useDatastoreColumns.tsx +21 -1
- package/src/routes/datastores/index.tsx +64 -13
- package/src/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.tsx +61 -0
- package/src/routes/integrations/components/connect-forms/google-merchant-center-account-tree.ts +38 -0
- package/src/routes/integrations/components/connect-forms/setup-account-unavailable-reason.ts +1 -0
- package/src/routes/integrations/connect-forms.ts +1 -0
- package/src/routes/integrations/connection-view.ts +1 -0
- package/src/shared/graph-derived-queries.ts +2 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { userIriPrefix } from "@manta-eu/client/shared/stakeholder-iri";
|
|
2
|
+
import { isIngestableExtension } from "@manta-eu/client/shared/upload";
|
|
3
|
+
import { ingestManual } from "@manta-eu/ldo";
|
|
4
|
+
import { ingest, nfo, nmo, prov } from "@manta-eu/ldo/namespaces";
|
|
5
|
+
import { getExtension } from "@manta-eu/lib/file";
|
|
6
|
+
import { useQueryClient } from "@tanstack/react-query";
|
|
7
|
+
import { useCallback, useMemo } from "react";
|
|
8
|
+
import { bindingCount, bindingValue, useSparqlSelect } from "#ldo-ui";
|
|
9
|
+
export const uploadsLimit = 500;
|
|
10
|
+
export const ingestPollIntervalMs = 15_000;
|
|
11
|
+
const uploadsQueryKey = ["uploaded-files"];
|
|
12
|
+
const ingestStatuses = new Set(["ingested", "unparsable", "gone", "too_large"]);
|
|
13
|
+
function isIngestStatus(value) {
|
|
14
|
+
return value !== undefined && ingestStatuses.has(value);
|
|
15
|
+
}
|
|
16
|
+
// Operators see every file node; members see the files a user uploaded.
|
|
17
|
+
export function uploadedFilesQuery(includeAllFiles) {
|
|
18
|
+
const uploaderPattern = includeAllFiles
|
|
19
|
+
? `OPTIONAL { ?file <${prov.wasAttributedTo}> ?uploader }`
|
|
20
|
+
: `?file <${prov.wasAttributedTo}> ?uploader .
|
|
21
|
+
FILTER(STRSTARTS(STR(?uploader), "${userIriPrefix}"))`;
|
|
22
|
+
return `SELECT ?file ?fileName ?mediaType ?byteSize ?extension ?uploadedAt ?uploader ?purpose WHERE {
|
|
23
|
+
?file a <${nfo.FileDataObject}> .
|
|
24
|
+
FILTER(isIRI(?file))
|
|
25
|
+
${uploaderPattern}
|
|
26
|
+
OPTIONAL { ?file <${nfo.fileName}> ?fileName }
|
|
27
|
+
OPTIONAL { ?file <${nmo.contentMimeType}> ?mediaType }
|
|
28
|
+
OPTIONAL { ?file <${nfo.fileSize}> ?byteSize }
|
|
29
|
+
OPTIONAL { ?file <${nfo.fileExtension}> ?extension }
|
|
30
|
+
OPTIONAL { ?file <${prov.generatedAtTime}> ?uploadedAt }
|
|
31
|
+
OPTIONAL { ?file <${ingestManual.uploadPurpose}> ?purpose }
|
|
32
|
+
}
|
|
33
|
+
ORDER BY DESC(STR(?uploadedAt)) STR(?file)
|
|
34
|
+
LIMIT ${uploadsLimit}`;
|
|
35
|
+
}
|
|
36
|
+
export const ingestRunsQuery = `SELECT ?run ?file ?status ?endedAt ?recordsRead ?recordsDropped ?dataset WHERE {
|
|
37
|
+
?run a <${ingest.IngestRun}> ;
|
|
38
|
+
<${prov.used}> ?file ;
|
|
39
|
+
<${ingest.status}> ?status .
|
|
40
|
+
FILTER(isIRI(?run))
|
|
41
|
+
OPTIONAL { ?run <${prov.endedAtTime}> ?endedAt }
|
|
42
|
+
OPTIONAL { ?run <${ingest.recordsRead}> ?recordsRead }
|
|
43
|
+
OPTIONAL { ?run <${ingest.recordsDropped}> ?recordsDropped }
|
|
44
|
+
OPTIONAL { ?run <${prov.generated}> ?dataset }
|
|
45
|
+
}
|
|
46
|
+
ORDER BY DESC(STR(?endedAt)) STR(?run)
|
|
47
|
+
LIMIT ${uploadsLimit}`;
|
|
48
|
+
export function uploadedFilesFromBindings(bindings) {
|
|
49
|
+
const files = new Map();
|
|
50
|
+
for (const binding of bindings) {
|
|
51
|
+
const iri = bindingValue(binding, "file");
|
|
52
|
+
if (!iri || files.has(iri))
|
|
53
|
+
continue;
|
|
54
|
+
const fileName = bindingValue(binding, "fileName") ?? iri;
|
|
55
|
+
files.set(iri, {
|
|
56
|
+
iri,
|
|
57
|
+
fileName,
|
|
58
|
+
mediaType: bindingValue(binding, "mediaType"),
|
|
59
|
+
byteSize: bindingCount(binding, "byteSize"),
|
|
60
|
+
extension: bindingValue(binding, "extension") ?? getExtension(fileName),
|
|
61
|
+
uploadedAt: bindingValue(binding, "uploadedAt"),
|
|
62
|
+
uploader: bindingValue(binding, "uploader"),
|
|
63
|
+
purpose: bindingValue(binding, "purpose"),
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return [...files.values()];
|
|
67
|
+
}
|
|
68
|
+
export function ingestRunsFromBindings(bindings) {
|
|
69
|
+
const runs = new Map();
|
|
70
|
+
for (const binding of bindings) {
|
|
71
|
+
const iri = bindingValue(binding, "run");
|
|
72
|
+
const file = bindingValue(binding, "file");
|
|
73
|
+
const status = bindingValue(binding, "status");
|
|
74
|
+
if (!iri || !file || !isIngestStatus(status) || runs.has(iri))
|
|
75
|
+
continue;
|
|
76
|
+
runs.set(iri, {
|
|
77
|
+
iri,
|
|
78
|
+
file,
|
|
79
|
+
status,
|
|
80
|
+
endedAt: bindingValue(binding, "endedAt"),
|
|
81
|
+
recordsRead: bindingCount(binding, "recordsRead"),
|
|
82
|
+
recordsDropped: bindingCount(binding, "recordsDropped"),
|
|
83
|
+
dataset: bindingValue(binding, "dataset"),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return [...runs.values()];
|
|
87
|
+
}
|
|
88
|
+
export function latestRunByFile(runs) {
|
|
89
|
+
const latest = new Map();
|
|
90
|
+
for (const run of runs) {
|
|
91
|
+
const current = latest.get(run.file);
|
|
92
|
+
if (!current || (run.endedAt ?? "") > (current.endedAt ?? ""))
|
|
93
|
+
latest.set(run.file, run);
|
|
94
|
+
}
|
|
95
|
+
return latest;
|
|
96
|
+
}
|
|
97
|
+
// Only a file recorded with the "file" purpose is picked up by ingest; a bundle or an older upload is only stored.
|
|
98
|
+
export function fileIngestState(file, run) {
|
|
99
|
+
if (run)
|
|
100
|
+
return { kind: "run", run };
|
|
101
|
+
return file.purpose === "file" && isIngestableExtension(file.extension) ? { kind: "waiting" } : { kind: "stored" };
|
|
102
|
+
}
|
|
103
|
+
export function filesWithIngestState(files, runs) {
|
|
104
|
+
const latest = latestRunByFile(runs);
|
|
105
|
+
return files.map((file) => ({ ...file, state: fileIngestState(file, latest.get(file.iri)) }));
|
|
106
|
+
}
|
|
107
|
+
export function hasWaitingFile(files) {
|
|
108
|
+
return files.some((file) => file.state.kind === "waiting");
|
|
109
|
+
}
|
|
110
|
+
export function useUploads(options) {
|
|
111
|
+
const { includeAllFiles } = options;
|
|
112
|
+
const filesQuery = useSparqlSelect({
|
|
113
|
+
query: uploadedFilesQuery(includeAllFiles),
|
|
114
|
+
queryKey: [...uploadsQueryKey, "files", includeAllFiles],
|
|
115
|
+
});
|
|
116
|
+
const files = useMemo(() => uploadedFilesFromBindings(filesQuery.data ?? []), [filesQuery.data]);
|
|
117
|
+
const runsQuery = useSparqlSelect({
|
|
118
|
+
query: ingestRunsQuery,
|
|
119
|
+
queryKey: [...uploadsQueryKey, "runs"],
|
|
120
|
+
refetchInterval: (query) => hasWaitingFile(filesWithIngestState(files, ingestRunsFromBindings(query.state.data ?? [])))
|
|
121
|
+
? ingestPollIntervalMs
|
|
122
|
+
: false,
|
|
123
|
+
});
|
|
124
|
+
const runs = useMemo(() => ingestRunsFromBindings(runsQuery.data ?? []), [runsQuery.data]);
|
|
125
|
+
const filesWithState = useMemo(() => filesWithIngestState(files, runs), [files, runs]);
|
|
126
|
+
const fileByIri = useMemo(() => new Map(files.map((file) => [file.iri, file])), [files]);
|
|
127
|
+
return {
|
|
128
|
+
files: filesWithState,
|
|
129
|
+
runs,
|
|
130
|
+
fileByIri,
|
|
131
|
+
hasWaiting: hasWaitingFile(filesWithState),
|
|
132
|
+
isLoading: filesQuery.isLoading || runsQuery.isLoading,
|
|
133
|
+
error: filesQuery.error ?? runsQuery.error,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
export function useInvalidateUploads() {
|
|
137
|
+
const queryClient = useQueryClient();
|
|
138
|
+
return useCallback(() => queryClient.invalidateQueries({ queryKey: uploadsQueryKey }), [queryClient]);
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=uploads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uploads.js","sourceRoot":"","sources":["../../../src/routes/data-explorer/uploads.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ export type SuggestedLinkTarget = {
|
|
|
6
6
|
export type LinkUnlinkedDatastoreDialogProps = {
|
|
7
7
|
datastoreId: string;
|
|
8
8
|
organizationNames: string[];
|
|
9
|
+
groupPathsByOrganization: Map<string, string[]>;
|
|
9
10
|
existingOrganizationNames: Set<string>;
|
|
10
11
|
suggestedMatch?: SuggestedLinkTarget;
|
|
11
12
|
onClose: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkUnlinkedDatastoreDialog.d.ts","sourceRoot":"","sources":["../../../../src/routes/datastores/components/LinkUnlinkedDatastoreDialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LinkUnlinkedDatastoreDialog.d.ts","sourceRoot":"","sources":["../../../../src/routes/datastores/components/LinkUnlinkedDatastoreDialog.tsx"],"names":[],"mappings":"AAwBA,MAAM,MAAM,mBAAmB,GAAG;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,wBAAwB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAChD,yBAAyB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAMF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,gCAAgC,2CA6KlF"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useLinkUnlinkedDatastoreMutation, useDatastoreTreeQuery, useUnlinkedDatastoresQuery } from "@manta-eu/client";
|
|
3
3
|
import { parseError } from "@manta-eu/client/shared/error-utils";
|
|
4
|
+
import { normalizeGroupPath, pathSegments } from "@manta-eu/client/shared/team";
|
|
4
5
|
import { isPresent } from "@manta-eu/lib/present";
|
|
5
6
|
import { useQueryClient } from "@tanstack/react-query";
|
|
6
7
|
import { useState } from "react";
|
|
@@ -14,21 +15,27 @@ import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, D
|
|
|
14
15
|
import { RadioGroup, RadioGroupItem } from "#components/radio/index";
|
|
15
16
|
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "#components/select/index";
|
|
16
17
|
import { useMantaClient } from "#providers/index";
|
|
18
|
+
const organizationRootPath = "/";
|
|
17
19
|
export function LinkUnlinkedDatastoreDialog(props) {
|
|
18
|
-
const { datastoreId, organizationNames, existingOrganizationNames, suggestedMatch, onClose } = props;
|
|
20
|
+
const { datastoreId, organizationNames, groupPathsByOrganization, existingOrganizationNames, suggestedMatch, onClose, } = props;
|
|
19
21
|
const { mantaClient } = useMantaClient();
|
|
20
22
|
const queryClient = useQueryClient();
|
|
21
23
|
const [mode, setMode] = useState(suggestedMatch ? "existing" : "new");
|
|
22
24
|
const [organizationName, setOrganizationName] = useState("");
|
|
23
25
|
const [existingOrganizationName, setExistingOrganizationName] = useState(suggestedMatch?.organizationName ?? "");
|
|
24
26
|
const [name, setName] = useState(suggestedMatch?.name ?? "");
|
|
27
|
+
const [parentGroupPath, setParentGroupPath] = useState(suggestedMatch ? normalizeGroupPath(suggestedMatch.parentPath.join("/")) : organizationRootPath);
|
|
28
|
+
const parentGroupPaths = groupPathsByOrganization.get(existingOrganizationName) ?? [];
|
|
29
|
+
const offeredParentGroupPath = parentGroupPaths.includes(parentGroupPath) ? parentGroupPath : organizationRootPath;
|
|
25
30
|
const linkMutation = useLinkUnlinkedDatastoreMutation(mantaClient, {
|
|
26
31
|
onSuccess: (result) => {
|
|
27
32
|
if (result.linkUnlinkedDatastore.success) {
|
|
28
33
|
void queryClient.invalidateQueries({ queryKey: useDatastoreTreeQuery.getKey() });
|
|
29
34
|
void queryClient.invalidateQueries({ queryKey: useUnlinkedDatastoresQuery.getKey() });
|
|
30
35
|
void queryClient.invalidateQueries({ queryKey: ["DatastoreProvisioningStatuses"] });
|
|
31
|
-
toast.success(
|
|
36
|
+
toast.success(result.linkUnlinkedDatastore.pending
|
|
37
|
+
? `Linked to '${datastoreId}', which is still being built`
|
|
38
|
+
: `Linked to the existing datastore '${datastoreId}'`);
|
|
32
39
|
toastProviderWarning(result.linkUnlinkedDatastore.providerWarning);
|
|
33
40
|
onClose();
|
|
34
41
|
}
|
|
@@ -46,11 +53,11 @@ export function LinkUnlinkedDatastoreDialog(props) {
|
|
|
46
53
|
const tenantCheck = useTenantOrganizationCheck(mode === "new" ? organizationName : "", existingOrganizationNames);
|
|
47
54
|
const canSubmit = mode === "new" ? !!organizationName.trim() && !tenantCheck.blocked : !!existingOrganizationName;
|
|
48
55
|
const atExistingOrganizationRoot = mode === "existing" && !name.trim();
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
56
|
+
const parentPath = pathSegments(offeredParentGroupPath);
|
|
57
|
+
function selectOrganization(organization) {
|
|
58
|
+
setExistingOrganizationName(organization);
|
|
59
|
+
setParentGroupPath(organizationRootPath);
|
|
60
|
+
}
|
|
54
61
|
function submit() {
|
|
55
62
|
if (!canSubmit)
|
|
56
63
|
return;
|
|
@@ -77,12 +84,12 @@ export function LinkUnlinkedDatastoreDialog(props) {
|
|
|
77
84
|
: {
|
|
78
85
|
datastoreId,
|
|
79
86
|
organizationName: existingOrganizationName,
|
|
80
|
-
...(isPresent(
|
|
87
|
+
...(isPresent(parentPath) ? { parentPath } : {}),
|
|
81
88
|
name: name.trim(),
|
|
82
89
|
atOrganizationRoot: false,
|
|
83
90
|
};
|
|
84
91
|
linkMutation.mutate({ input });
|
|
85
92
|
}
|
|
86
|
-
return (_jsx(Dialog, { open: true, onOpenChange: (nextOpen) => !nextOpen && onClose(), children: _jsxs(DialogContent, { className: "flex flex-col overflow-hidden", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { text: "Link datastore" }), _jsx(DialogDescription, { children: `Link the existing datastore '${datastoreId}' to an organization or group.` })] }), _jsxs(RadioGroup, { value: mode, onValueChange: (v) => setMode(v), className: "flex gap-4 items-center", children: [_jsx(RadioGroupItem, { value: "new", label: "New organization" }), _jsx(RadioGroupItem, { value: "existing", label: "Existing organization", disabled: !isPresent(organizationNames) })] }), mode === "new" ? (_jsxs(_Fragment, { children: [_jsx(Input, { autoFocus: true, label: "Organization name", placeholder: "e.g. Acme Corp", value: organizationName, onChange: (event) => setOrganizationName(event.target.value) }), isPresent(tenantCheck.hint) ? (_jsx("span", { className: "typography-caption text-muted-foreground", children: tenantCheck.hint })) : null] })) : (_jsxs(_Fragment, { children: [_jsxs(Select, { value: existingOrganizationName, onValueChange:
|
|
93
|
+
return (_jsx(Dialog, { open: true, onOpenChange: (nextOpen) => !nextOpen && onClose(), children: _jsxs(DialogContent, { className: "flex flex-col overflow-hidden", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { text: "Link datastore" }), _jsx(DialogDescription, { children: `Link the existing datastore '${datastoreId}' to an organization or group.` })] }), _jsxs(RadioGroup, { value: mode, onValueChange: (v) => setMode(v), className: "flex gap-4 items-center", children: [_jsx(RadioGroupItem, { value: "new", label: "New organization" }), _jsx(RadioGroupItem, { value: "existing", label: "Existing organization", disabled: !isPresent(organizationNames) })] }), mode === "new" ? (_jsxs(_Fragment, { children: [_jsx(Input, { autoFocus: true, label: "Organization name", placeholder: "e.g. Acme Corp", value: organizationName, onChange: (event) => setOrganizationName(event.target.value) }), isPresent(tenantCheck.hint) ? (_jsx("span", { className: "typography-caption text-muted-foreground", children: tenantCheck.hint })) : null] })) : (_jsxs(_Fragment, { children: [_jsxs(Select, { value: existingOrganizationName, onValueChange: selectOrganization, children: [_jsx(SelectTrigger, { label: "Organization", id: "link-organization", children: _jsx(SelectValue, { placeholder: "Select an organization\u2026" }) }), _jsx(SelectContent, { children: organizationNames.map((orgName) => (_jsx(SelectItem, { value: orgName, children: orgName }, orgName))) })] }), isPresent(parentGroupPaths) && (_jsxs(Select, { value: offeredParentGroupPath, onValueChange: setParentGroupPath, disabled: atExistingOrganizationRoot, children: [_jsx(SelectTrigger, { label: "Under", id: "link-parent-group", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: organizationRootPath, children: "Organization root" }), parentGroupPaths.map((path) => (_jsx(SelectItem, { value: path, children: path }, path)))] })] })), _jsx(Input, { label: "Datastore name", placeholder: "Leave empty to link to the organization root", value: name, onChange: (event) => setName(event.target.value) })] })), _jsxs(DialogFooter, { children: [_jsx(Button, { variant: "tertiary", onClick: onClose, children: "Cancel" }), _jsx(Button, { onClick: submit, disabled: !canSubmit || linkMutation.isPending, children: "Link" })] })] }) }));
|
|
87
94
|
}
|
|
88
95
|
//# sourceMappingURL=LinkUnlinkedDatastoreDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkUnlinkedDatastoreDialog.js","sourceRoot":"","sources":["../../../../src/routes/datastores/components/LinkUnlinkedDatastoreDialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,gCAAgC,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AACvH,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EACL,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACzG,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"LinkUnlinkedDatastoreDialog.js","sourceRoot":"","sources":["../../../../src/routes/datastores/components/LinkUnlinkedDatastoreDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
import { type DatastoreStatus, type DatastoreStatusCategory } from "#components/datastore-management/tree";
|
|
2
|
-
export type DatastoreStatusFilterValue = "noDatastore" | "checking" | DatastoreStatusCategory;
|
|
3
|
-
|
|
2
|
+
export type DatastoreStatusFilterValue = "noDatastore" | "checking" | "notBuilt" | DatastoreStatusCategory;
|
|
3
|
+
type StatusNode = {
|
|
4
4
|
datastoreId?: string;
|
|
5
5
|
removed: boolean;
|
|
6
6
|
isUnlinked?: boolean;
|
|
7
|
-
|
|
7
|
+
unbuilt?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare function datastoreStatusFilterValue(node: StatusNode, status?: DatastoreStatus): DatastoreStatusFilterValue;
|
|
8
10
|
export declare const datastoreStatusFilterOptions: {
|
|
9
11
|
id: "ALL" | DatastoreStatusFilterValue;
|
|
10
12
|
label: string;
|
|
11
13
|
}[];
|
|
12
14
|
export type DatastoreStatusBadgeProps = {
|
|
13
|
-
node:
|
|
14
|
-
datastoreId?: string;
|
|
15
|
-
removed: boolean;
|
|
16
|
-
isUnlinked?: boolean;
|
|
17
|
-
};
|
|
15
|
+
node: StatusNode;
|
|
18
16
|
status?: DatastoreStatus;
|
|
19
17
|
};
|
|
20
18
|
export declare function DatastoreStatusBadge(props: DatastoreStatusBadgeProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export {};
|
|
21
20
|
//# sourceMappingURL=StatusBadge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBadge.d.ts","sourceRoot":"","sources":["../../../../src/routes/datastores/components/StatusBadge.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StatusBadge.d.ts","sourceRoot":"","sources":["../../../../src/routes/datastores/components/StatusBadge.tsx"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC7B,MAAM,uCAAuC,CAAC;AAE/C,MAAM,MAAM,0BAA0B,GAAG,aAAa,GAAG,UAAU,GAAG,UAAU,GAAG,uBAAuB,CAAC;AAE3G,KAAK,UAAU,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtG,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,0BAA0B,CAIjH;AAgDD,eAAO,MAAM,4BAA4B,EAAE;IAAE,EAAE,EAAE,KAAK,GAAG,0BAA0B,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAGnG,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,2CAapE"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { enableDatastoreRemoval } from "@manta-eu/client/shared/constants";
|
|
2
3
|
import { isPresent } from "@manta-eu/lib/present";
|
|
3
4
|
import { LoaderCircle } from "lucide-react";
|
|
4
5
|
import { Badge } from "#components/badge/index";
|
|
@@ -6,6 +7,8 @@ import { datastoreStatusCategory, } from "#components/datastore-management/tree"
|
|
|
6
7
|
export function datastoreStatusFilterValue(node, status) {
|
|
7
8
|
if (!isPresent(node.datastoreId))
|
|
8
9
|
return "noDatastore";
|
|
10
|
+
if (node.unbuilt === true && status?.exists !== true)
|
|
11
|
+
return "notBuilt";
|
|
9
12
|
return datastoreStatusCategory(node, status) ?? "checking";
|
|
10
13
|
}
|
|
11
14
|
// The only place these strings live: the badge and the filter dropdown both read from here.
|
|
@@ -22,16 +25,29 @@ const badgeConfigByFilterValue = {
|
|
|
22
25
|
variant: "destructive",
|
|
23
26
|
title: "This id never reached the datastore registry, so nothing will build it. Provision it again.",
|
|
24
27
|
},
|
|
28
|
+
notBuilt: {
|
|
29
|
+
label: "Not built",
|
|
30
|
+
variant: "warning",
|
|
31
|
+
title: "Registered in Infisical, but no datastore exists for it. Link it to build it, or delete it.",
|
|
32
|
+
},
|
|
25
33
|
offline: { label: "Offline", variant: "destructive" },
|
|
26
34
|
unavailable: { label: "Status unavailable", variant: "copy" },
|
|
27
35
|
checking: { label: "Checking…", variant: "copy", spinning: true },
|
|
28
|
-
removed:
|
|
36
|
+
removed: enableDatastoreRemoval
|
|
37
|
+
? { label: "Removed", variant: "copy" }
|
|
38
|
+
: {
|
|
39
|
+
label: "Removed",
|
|
40
|
+
variant: "warning",
|
|
41
|
+
title: "Out of use: a permanent delete stopped partway, or it was removed before removal was turned off. " +
|
|
42
|
+
"Delete it permanently only if it should go for good.",
|
|
43
|
+
},
|
|
29
44
|
noDatastore: { label: "No datastore", variant: "copy" },
|
|
30
45
|
};
|
|
31
46
|
const filterOptionOrder = [
|
|
32
47
|
"ready",
|
|
33
48
|
"materializing",
|
|
34
49
|
"notRegistered",
|
|
50
|
+
"notBuilt",
|
|
35
51
|
"offline",
|
|
36
52
|
"unavailable",
|
|
37
53
|
"removed",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBadge.js","sourceRoot":"","sources":["../../../../src/routes/datastores/components/StatusBadge.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAqB,MAAM,yBAAyB,CAAC;AACnE,OAAO,EACL,uBAAuB,GAGxB,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"StatusBadge.js","sourceRoot":"","sources":["../../../../src/routes/datastores/components/StatusBadge.tsx"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,7 @@ export type DatastoreRow = {
|
|
|
17
17
|
mirrored?: boolean;
|
|
18
18
|
isRealmDefault?: boolean;
|
|
19
19
|
isUnlinked?: boolean;
|
|
20
|
+
unbuilt?: boolean;
|
|
20
21
|
};
|
|
21
22
|
export declare function realmDefaultRow(datastoreId: Realm): DatastoreRow;
|
|
22
23
|
export declare function isUnmirroredOrganization(row: DatastoreRow): boolean;
|
|
@@ -29,10 +30,14 @@ export type DatastoreRowVisibility = {
|
|
|
29
30
|
export declare function visibleDatastoreRows(rows: DatastoreRow[], visibility: DatastoreRowVisibility): DatastoreRow[];
|
|
30
31
|
export declare function nestedDatastoreNamesByRowId(rows: DatastoreRow[]): Map<string, string[]>;
|
|
31
32
|
export declare function hiddenRowCount(rows: DatastoreRow[], visibility: DatastoreRowVisibility, key: keyof DatastoreRowVisibility, shownCount: number): number;
|
|
33
|
+
export declare function hiddenRemovedRowCount(rows: DatastoreRow[], visibility: DatastoreRowVisibility): number;
|
|
32
34
|
export declare function organizationNameKey(name: string): string;
|
|
33
35
|
export declare function existingOrganizationNameKeys(rows: DatastoreRow[]): Set<string>;
|
|
34
36
|
export declare function organizationNames(rows: DatastoreRow[]): string[];
|
|
37
|
+
export declare function removedSubtreeRowIds(rows: DatastoreRow[]): Set<string>;
|
|
38
|
+
export declare function outsideRemovedSubtrees(rows: DatastoreRow[]): DatastoreRow[];
|
|
39
|
+
export declare function organizationGroupPaths(rows: DatastoreRow[]): Map<string, string[]>;
|
|
35
40
|
export declare function visibilityForStatusFilter(visibility: DatastoreRowVisibility, status: DatastoreStatusFilterValue | "ALL"): DatastoreRowVisibility;
|
|
36
|
-
export declare function unlinkedDatastoreRow(datastoreId: string): DatastoreRow;
|
|
41
|
+
export declare function unlinkedDatastoreRow(datastoreId: string, built?: boolean): DatastoreRow;
|
|
37
42
|
export declare function toDatastoreRows(nodes: GQLDatastoreTreeNode[]): DatastoreRow[];
|
|
38
43
|
//# sourceMappingURL=flatten.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flatten.d.ts","sourceRoot":"","sources":["../../../src/routes/datastores/flatten.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAmB,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAGlE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAG3E,MAAM,MAAM,YAAY,GAAG;IAEzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAE1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"flatten.d.ts","sourceRoot":"","sources":["../../../src/routes/datastores/flatten.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,6 +63,12 @@ export function hiddenRowCount(rows, visibility, key, shownCount) {
|
|
|
63
63
|
return 0;
|
|
64
64
|
return visibleDatastoreRows(rows, { ...visibility, [key]: true }).length - shownCount;
|
|
65
65
|
}
|
|
66
|
+
export function hiddenRemovedRowCount(rows, visibility) {
|
|
67
|
+
if (visibility.showArchived)
|
|
68
|
+
return 0;
|
|
69
|
+
const shown = new Set(visibleDatastoreRows(rows, visibility));
|
|
70
|
+
return rows.filter((row) => row.removed && !shown.has(row) && matchesVisibility(row, { ...visibility, showArchived: true })).length;
|
|
71
|
+
}
|
|
66
72
|
// Matches Keycloak's own org lookup (ensureOrganization), which is case-insensitive and trims too.
|
|
67
73
|
export function organizationNameKey(name) {
|
|
68
74
|
return name.trim().toLowerCase();
|
|
@@ -73,14 +79,42 @@ export function existingOrganizationNameKeys(rows) {
|
|
|
73
79
|
export function organizationNames(rows) {
|
|
74
80
|
return [...new Set(rows.filter((row) => row.isOrganization).map((row) => row.organizationName))].sort();
|
|
75
81
|
}
|
|
82
|
+
export function removedSubtreeRowIds(rows) {
|
|
83
|
+
const ids = new Set();
|
|
84
|
+
let removedDepth;
|
|
85
|
+
for (const row of rows) {
|
|
86
|
+
if (removedDepth === undefined || row.depth <= removedDepth)
|
|
87
|
+
removedDepth = row.removed ? row.depth : undefined;
|
|
88
|
+
if (removedDepth !== undefined)
|
|
89
|
+
ids.add(row.id);
|
|
90
|
+
}
|
|
91
|
+
return ids;
|
|
92
|
+
}
|
|
93
|
+
export function outsideRemovedSubtrees(rows) {
|
|
94
|
+
const removed = removedSubtreeRowIds(rows);
|
|
95
|
+
return rows.filter((row) => !removed.has(row.id));
|
|
96
|
+
}
|
|
97
|
+
export function organizationGroupPaths(rows) {
|
|
98
|
+
const paths = new Map();
|
|
99
|
+
for (const row of outsideRemovedSubtrees(rows)) {
|
|
100
|
+
if (row.isOrganization || row.isRealmDefault === true || row.isUnlinked === true)
|
|
101
|
+
continue;
|
|
102
|
+
const organizationPaths = paths.get(row.organizationName);
|
|
103
|
+
if (organizationPaths)
|
|
104
|
+
organizationPaths.push(row.path);
|
|
105
|
+
else
|
|
106
|
+
paths.set(row.organizationName, [row.path]);
|
|
107
|
+
}
|
|
108
|
+
return paths;
|
|
109
|
+
}
|
|
76
110
|
export function visibilityForStatusFilter(visibility, status) {
|
|
77
111
|
return match(status)
|
|
78
112
|
.with("removed", () => ({ ...visibility, showArchived: true }))
|
|
79
113
|
.with("noDatastore", () => ({ ...visibility, showUnprovisioned: true }))
|
|
80
|
-
.with("ALL", "ready", "materializing", "notRegistered", "offline", "unavailable", "checking", () => visibility)
|
|
114
|
+
.with("ALL", "ready", "materializing", "notRegistered", "notBuilt", "offline", "unavailable", "checking", () => visibility)
|
|
81
115
|
.exhaustive();
|
|
82
116
|
}
|
|
83
|
-
export function unlinkedDatastoreRow(datastoreId) {
|
|
117
|
+
export function unlinkedDatastoreRow(datastoreId, built = true) {
|
|
84
118
|
return {
|
|
85
119
|
id: `unlinked:${datastoreId}`,
|
|
86
120
|
name: datastoreId,
|
|
@@ -93,6 +127,7 @@ export function unlinkedDatastoreRow(datastoreId) {
|
|
|
93
127
|
removed: false,
|
|
94
128
|
isOrganization: false,
|
|
95
129
|
isUnlinked: true,
|
|
130
|
+
unbuilt: !built,
|
|
96
131
|
};
|
|
97
132
|
}
|
|
98
133
|
export function toDatastoreRows(nodes) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flatten.js","sourceRoot":"","sources":["../../../src/routes/datastores/flatten.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAc,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"flatten.js","sourceRoot":"","sources":["../../../src/routes/datastores/flatten.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,6 +40,8 @@ type UseDatastoreColumnsArgs = {
|
|
|
40
40
|
onDelete: (row: DatastoreRow) => void;
|
|
41
41
|
onRename: (row: DatastoreRow) => void;
|
|
42
42
|
onRegister: (row: DatastoreRow) => void;
|
|
43
|
+
registeringDatastoreIds: ReadonlySet<string>;
|
|
44
|
+
removedSubtreeRowIds: ReadonlySet<string>;
|
|
43
45
|
onManageUsers: (row: DatastoreRow) => void;
|
|
44
46
|
onManageCustomApps: (row: DatastoreRow) => void;
|
|
45
47
|
onBringOnline: (row: DatastoreRow) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDatastoreColumns.d.ts","sourceRoot":"","sources":["../../../../src/routes/datastores/hooks/useDatastoreColumns.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"useDatastoreColumns.d.ts","sourceRoot":"","sources":["../../../../src/routes/datastores/hooks/useDatastoreColumns.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AA0BvD,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAGzE,OAAO,EAA4C,KAAK,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAavH,eAAO,MAAM,kBAAkB;aAC7B,IAAI,EAAE,MAAM;aACZ,gBAAgB,EAAE,kBAAkB;aACpC,WAAW,EAAE,aAAa;aAC1B,cAAc,EAAE,gBAAgB;aAChC,MAAM,EAAE,QAAQ;aAChB,aAAa,EAAE,eAAe;aAC9B,aAAa,EAAE,eAAe;aAC9B,OAAO,EAAE,SAAS;CACV,CAAC;AASX,eAAO,MAAM,qBAAqB;;;;;;;CAOkB,CAAC;AAErD,eAAO,MAAM,kBAAkB,+HAAoC,CAAC;AAEpE,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGvD,CAAC;AAEF,eAAO,MAAM,mBAAmB,6DAK/B,CAAC;AAcF,KAAK,uBAAuB,GAAG;IAC7B,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACrD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,2BAA2B,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACnD,2BAA2B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC3D,QAAQ,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IACtC,UAAU,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,MAAM,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IACpC,WAAW,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IACzC,cAAc,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5C,QAAQ,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IACtC,SAAS,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IACvC,QAAQ,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IACtC,QAAQ,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IACtC,UAAU,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,uBAAuB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7C,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,aAAa,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IAC3C,kBAAkB,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IAChD,aAAa,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IAC3C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,SAAS,CAAC,YAAY,CAAC,EAAE,CA0Z5F"}
|
|
@@ -2,7 +2,7 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
|
|
|
2
2
|
import { enableDatastoreRemoval } from "@manta-eu/client/shared/constants";
|
|
3
3
|
import { isPresent } from "@manta-eu/lib/present";
|
|
4
4
|
import { formatDistanceToNow } from "date-fns";
|
|
5
|
-
import { Blocks, Check, DatabaseZap, Link2, MoreHorizontal, Pencil, Plus, Power, RefreshCw, RotateCcw, Trash, Trash2, TriangleAlert, Users, } from "lucide-react";
|
|
5
|
+
import { Blocks, Check, DatabaseZap, Hammer, Link2, MoreHorizontal, Pencil, Plus, Power, RefreshCw, RotateCcw, Trash, Trash2, TriangleAlert, Users, } from "lucide-react";
|
|
6
6
|
import { useMemo } from "react";
|
|
7
7
|
import { match } from "ts-pattern";
|
|
8
8
|
import { DatastoreStatusBadge, datastoreStatusFilterValue, } from "../components/StatusBadge.js";
|
|
@@ -56,7 +56,7 @@ const columnMinWidths = {
|
|
|
56
56
|
[datastoreColumnIds.actions]: "min-w-[140px]",
|
|
57
57
|
};
|
|
58
58
|
export function useDatastoreColumns(args) {
|
|
59
|
-
const { statusByDatastoreId, currentDatastoreId, isSwitching, indented, matchableRowIds, nestedDatastoreNamesByRowId, suggestedMatchByDatastoreId, onSelect, onAddChild, onLink, onProvision, onLinkExisting, onRemove, onRestore, onDelete, onRename, onRegister, onManageUsers, onManageCustomApps, onBringOnline, isBringingOnline, onLinkProvider, isLinkingProvider, providerLinkEnabled, } = args;
|
|
59
|
+
const { statusByDatastoreId, currentDatastoreId, isSwitching, indented, matchableRowIds, nestedDatastoreNamesByRowId, suggestedMatchByDatastoreId, onSelect, onAddChild, onLink, onProvision, onLinkExisting, onRemove, onRestore, onDelete, onRename, onRegister, registeringDatastoreIds, removedSubtreeRowIds, onManageUsers, onManageCustomApps, onBringOnline, isBringingOnline, onLinkProvider, isLinkingProvider, providerLinkEnabled, } = args;
|
|
60
60
|
return useMemo(() => [
|
|
61
61
|
{
|
|
62
62
|
id: datastoreColumnIds.name,
|
|
@@ -133,6 +133,8 @@ export function useDatastoreColumns(args) {
|
|
|
133
133
|
const status = hasDatastore ? statusByDatastoreId[datastoreId] : undefined;
|
|
134
134
|
const category = datastoreStatusCategory(datastoreRow, status);
|
|
135
135
|
const notRegistered = category === "notRegistered";
|
|
136
|
+
const buildable = category === "materializing";
|
|
137
|
+
const registering = hasDatastore && registeringDatastoreIds.has(datastoreId);
|
|
136
138
|
const reason = match({ notRegistered, materializing: isMaterializing(status) && !isRealmDefault })
|
|
137
139
|
.with({ notRegistered: true }, () => "Not registered - use Register to fix, then try selecting again.")
|
|
138
140
|
.with({ materializing: true }, () => "Still materializing - this can take a few minutes.")
|
|
@@ -143,8 +145,8 @@ export function useDatastoreColumns(args) {
|
|
|
143
145
|
const deleteBlockedReason = isPresent(nestedDatastoreNames)
|
|
144
146
|
? `Delete the datastores under it first: ${nestedDatastoreNames.join(", ")}`
|
|
145
147
|
: undefined;
|
|
146
|
-
return (_jsxs("div", { className: cn(columnMinWidths[datastoreColumnIds.actions], "flex items-center justify-end gap-1.5"), children: [providerLinkEnabled === true && isUnmirroredOrganization(datastoreRow) && !removed && (_jsx(Button, { "data-testid": `datastore-link-provider-${datastoreRow.id}`, size: "sm", variant: "secondary", icon: Link2, disabled: isLinkingProvider, onClick: () => onLinkProvider(datastoreRow), children: "Link to identity provider" })), isUnlinked && (_jsx(Button, { "data-testid": `datastore-link-${datastoreRow.id}`, size: "sm", variant: "secondary", icon: Link2, onClick: () => onLink(datastoreRow), children: "Link" })), hasDatastore && !removed && category === "offline" && (_jsx(Button, { "data-testid": `datastore-bring-online-${datastoreRow.id}`, size: "sm", variant: "secondary", icon: Power, disabled: isBringingOnline, onClick: () => onBringOnline(datastoreRow), children: "Bring online" })), !isUnlinked && hasDatastore && !
|
|
147
|
-
(matchableRowIds.has(datastoreRow.id) ? (_jsx(DropdownItem, { icon: _jsx(Link2, { className: "size-4" }), onSelect: () => onLinkExisting(datastoreRow), children: "Link existing datastore" })) : (_jsx(DropdownItem, { icon: _jsx(DatabaseZap, { className: "size-4" }), onSelect: () => onProvision(datastoreRow), children: "Provision datastore" }))), _jsx(DropdownItem, { icon: _jsx(Plus, { className: "size-4" }), onSelect: () => onAddChild(datastoreRow), children: "Add datastore" }), enableDatastoreRemoval && hasDatastore && !removed && (_jsxs(_Fragment, { children: [_jsx(DropdownSeparator, {}), _jsx(DropdownItem, { className: "text-error-foreground", icon: _jsx(Trash2, { className: "size-4" }), onSelect: () => onRemove(datastoreRow), children: "Remove datastore" })] })), enableDatastoreRemoval && hasDatastore && removed && (_jsxs(_Fragment, { children: [_jsx(DropdownSeparator, {}), _jsx(DropdownItem, { icon: _jsx(RotateCcw, { className: "size-4" }), onSelect: () => onRestore(datastoreRow), children: "Restore datastore" })] })), !enableDatastoreRemoval && canDelete && _jsx(DropdownSeparator, {})] })), canDelete && (_jsx(DisabledActionTooltip, { reason: deleteBlockedReason, children: _jsx(DropdownItem, { className: "text-error-foreground", icon: _jsx(Trash, { className: "size-4" }), disabled: isPresent(deleteBlockedReason), onSelect: () => onDelete(datastoreRow), children: "Delete permanently" }) }))] })] }))] }));
|
|
148
|
+
return (_jsxs("div", { className: cn(columnMinWidths[datastoreColumnIds.actions], "flex items-center justify-end gap-1.5"), children: [providerLinkEnabled === true && isUnmirroredOrganization(datastoreRow) && !removed && (_jsx(Button, { "data-testid": `datastore-link-provider-${datastoreRow.id}`, size: "sm", variant: "secondary", icon: Link2, disabled: isLinkingProvider, onClick: () => onLinkProvider(datastoreRow), children: "Link to identity provider" })), isUnlinked && (_jsx(Button, { "data-testid": `datastore-link-${datastoreRow.id}`, size: "sm", variant: "secondary", icon: Link2, onClick: () => onLink(datastoreRow), children: "Link" })), hasDatastore && !removed && category === "offline" && (_jsx(Button, { "data-testid": `datastore-bring-online-${datastoreRow.id}`, size: "sm", variant: "secondary", icon: Power, disabled: isBringingOnline, onClick: () => onBringOnline(datastoreRow), children: "Bring online" })), !isUnlinked && hasDatastore && !removedSubtreeRowIds.has(datastoreRow.id) && notRegistered && (_jsx(Button, { "data-testid": `datastore-register-${datastoreRow.id}`, size: "sm", variant: "secondary", icon: RefreshCw, disabled: registering, onClick: () => onRegister(datastoreRow), children: "Register" })), !isUnlinked && hasDatastore && current && (_jsx(Button, { "data-testid": `datastore-select-${datastoreRow.id}`, size: "sm", variant: "secondary", disabled: true, children: "Selected" })), !isUnlinked && hasDatastore && !current && !removed && (_jsx(Button, { "data-testid": `datastore-select-${datastoreRow.id}`, size: "sm", variant: "secondary", disabled: !canSelect, title: reason, onClick: () => onSelect(datastoreRow), children: "Select" })), isRealmDefault || (isUnlinked && !canDelete) ? (_jsx("div", { className: "size-6", "aria-hidden": "true" })) : (_jsxs(Dropdown, { children: [_jsx(DropdownTrigger, { asChild: true, children: _jsx("button", { type: "button", "aria-label": `Actions for ${name}`, className: "shrink-0 rounded-sm-v4 p-1 text-muted-foreground hover:bg-faint hover:text-default-foreground", children: _jsx(MoreHorizontal, { className: "size-4" }) }) }), _jsxs(DropdownContent, { align: "end", className: "min-w-52", children: [!isUnlinked && (_jsxs(_Fragment, { children: [_jsx(DropdownItem, { icon: _jsx(Pencil, { className: "size-4" }), onSelect: () => onRename(datastoreRow), children: "Rename" }), isPresent(datastoreRow.organizationAlias) && (_jsx(DropdownItem, { icon: _jsx(Users, { className: "size-4" }), onSelect: () => onManageUsers(datastoreRow), children: "Manage users" })), datastoreRow.isOrganization && isPresent(datastoreRow.organizationAlias) && (_jsx(DropdownItem, { icon: _jsx(Blocks, { className: "size-4" }), onSelect: () => onManageCustomApps(datastoreRow), children: "Custom apps" })), !hasDatastore &&
|
|
149
|
+
(matchableRowIds.has(datastoreRow.id) ? (_jsx(DropdownItem, { icon: _jsx(Link2, { className: "size-4" }), onSelect: () => onLinkExisting(datastoreRow), children: "Link existing datastore" })) : (_jsx(DropdownItem, { icon: _jsx(DatabaseZap, { className: "size-4" }), onSelect: () => onProvision(datastoreRow), children: "Provision datastore" }))), hasDatastore && !removedSubtreeRowIds.has(datastoreRow.id) && buildable && (_jsx(DropdownItem, { icon: _jsx(Hammer, { className: "size-4" }), disabled: registering, title: "Starts a build, or joins the one already running", onSelect: () => onRegister(datastoreRow), children: "Build datastore now" })), _jsx(DropdownItem, { icon: _jsx(Plus, { className: "size-4" }), onSelect: () => onAddChild(datastoreRow), children: "Add datastore" }), enableDatastoreRemoval && hasDatastore && !removed && (_jsxs(_Fragment, { children: [_jsx(DropdownSeparator, {}), _jsx(DropdownItem, { className: "text-error-foreground", icon: _jsx(Trash2, { className: "size-4" }), onSelect: () => onRemove(datastoreRow), children: "Remove datastore" })] })), enableDatastoreRemoval && hasDatastore && removed && (_jsxs(_Fragment, { children: [_jsx(DropdownSeparator, {}), _jsx(DropdownItem, { icon: _jsx(RotateCcw, { className: "size-4" }), onSelect: () => onRestore(datastoreRow), children: "Restore datastore" })] })), !enableDatastoreRemoval && canDelete && _jsx(DropdownSeparator, {})] })), canDelete && (_jsx(DisabledActionTooltip, { reason: deleteBlockedReason, children: _jsx(DropdownItem, { className: "text-error-foreground", icon: _jsx(Trash, { className: "size-4" }), disabled: isPresent(deleteBlockedReason), onSelect: () => onDelete(datastoreRow), children: "Delete permanently" }) }))] })] }))] }));
|
|
148
150
|
},
|
|
149
151
|
},
|
|
150
152
|
], [
|
|
@@ -164,6 +166,8 @@ export function useDatastoreColumns(args) {
|
|
|
164
166
|
onRestore,
|
|
165
167
|
onDelete,
|
|
166
168
|
onRegister,
|
|
169
|
+
registeringDatastoreIds,
|
|
170
|
+
removedSubtreeRowIds,
|
|
167
171
|
onRename,
|
|
168
172
|
onManageUsers,
|
|
169
173
|
onManageCustomApps,
|