@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.
Files changed (148) hide show
  1. package/dist/components/chart/ForecastLegend.d.ts.map +1 -1
  2. package/dist/components/chart/ForecastLegend.js +10 -2
  3. package/dist/components/chart/ForecastLegend.js.map +1 -1
  4. package/dist/components/chart/forecast-model.d.ts.map +1 -1
  5. package/dist/components/chart/forecast-model.js.map +1 -1
  6. package/dist/components/chat-view/Chat.js +2 -2
  7. package/dist/components/file-dropzone/index.d.ts +25 -0
  8. package/dist/components/file-dropzone/index.d.ts.map +1 -0
  9. package/dist/components/file-dropzone/index.js +70 -0
  10. package/dist/components/file-dropzone/index.js.map +1 -0
  11. package/dist/components/planning/plan-detail-utils.d.ts.map +1 -1
  12. package/dist/components/planning/plan-detail-utils.js +2 -0
  13. package/dist/components/planning/plan-detail-utils.js.map +1 -1
  14. package/dist/components/toast/index.d.ts +1 -0
  15. package/dist/components/toast/index.d.ts.map +1 -1
  16. package/dist/components/toast/index.js +1 -0
  17. package/dist/components/toast/index.js.map +1 -1
  18. package/dist/globals.css +27 -0
  19. package/dist/graph/NodeDetailPanel/TypeSummaryPanel.d.ts.map +1 -1
  20. package/dist/graph/NodeDetailPanel/TypeSummaryPanel.js.map +1 -1
  21. package/dist/hooks/use-sparql-construct.d.ts +2 -0
  22. package/dist/hooks/use-sparql-construct.d.ts.map +1 -1
  23. package/dist/hooks/use-sparql-construct.js +2 -1
  24. package/dist/hooks/use-sparql-construct.js.map +1 -1
  25. package/dist/index.d.ts +1 -0
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +1 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/lib/datastore-route-table.d.ts +3 -0
  30. package/dist/lib/datastore-route-table.d.ts.map +1 -1
  31. package/dist/lib/datastore-route-table.js +3 -0
  32. package/dist/lib/datastore-route-table.js.map +1 -1
  33. package/dist/lib/hooks/{useChatUpload.d.ts → useFileUpload.d.ts} +3 -3
  34. package/dist/lib/hooks/{useChatUpload.d.ts.map → useFileUpload.d.ts.map} +1 -1
  35. package/dist/lib/hooks/{useChatUpload.js → useFileUpload.js} +2 -2
  36. package/dist/lib/hooks/{useChatUpload.js.map → useFileUpload.js.map} +1 -1
  37. package/dist/routes/data-collection/index.d.ts +3 -0
  38. package/dist/routes/data-collection/index.d.ts.map +1 -0
  39. package/dist/routes/data-collection/index.js +43 -0
  40. package/dist/routes/data-collection/index.js.map +1 -0
  41. package/dist/routes/data-explorer/components/DataExplorerLayout.d.ts.map +1 -1
  42. package/dist/routes/data-explorer/components/DataExplorerLayout.js +5 -2
  43. package/dist/routes/data-explorer/components/DataExplorerLayout.js.map +1 -1
  44. package/dist/routes/data-explorer/components/Rail.d.ts.map +1 -1
  45. package/dist/routes/data-explorer/components/Rail.js +3 -3
  46. package/dist/routes/data-explorer/components/Rail.js.map +1 -1
  47. package/dist/routes/data-explorer/components/uploads/IngestRunsList.d.ts +8 -0
  48. package/dist/routes/data-explorer/components/uploads/IngestRunsList.d.ts.map +1 -0
  49. package/dist/routes/data-explorer/components/uploads/IngestRunsList.js +18 -0
  50. package/dist/routes/data-explorer/components/uploads/IngestRunsList.js.map +1 -0
  51. package/dist/routes/data-explorer/components/uploads/IngestStateStatus.d.ts +14 -0
  52. package/dist/routes/data-explorer/components/uploads/IngestStateStatus.d.ts.map +1 -0
  53. package/dist/routes/data-explorer/components/uploads/IngestStateStatus.js +33 -0
  54. package/dist/routes/data-explorer/components/uploads/IngestStateStatus.js.map +1 -0
  55. package/dist/routes/data-explorer/components/uploads/UploadedFilesList.d.ts +8 -0
  56. package/dist/routes/data-explorer/components/uploads/UploadedFilesList.d.ts.map +1 -0
  57. package/dist/routes/data-explorer/components/uploads/UploadedFilesList.js +34 -0
  58. package/dist/routes/data-explorer/components/uploads/UploadedFilesList.js.map +1 -0
  59. package/dist/routes/data-explorer/components/uploads/UploadsPages.d.ts +7 -0
  60. package/dist/routes/data-explorer/components/uploads/UploadsPages.d.ts.map +1 -0
  61. package/dist/routes/data-explorer/components/uploads/UploadsPages.js +35 -0
  62. package/dist/routes/data-explorer/components/uploads/UploadsPages.js.map +1 -0
  63. package/dist/routes/data-explorer/index.d.ts +1 -0
  64. package/dist/routes/data-explorer/index.d.ts.map +1 -1
  65. package/dist/routes/data-explorer/index.js +1 -0
  66. package/dist/routes/data-explorer/index.js.map +1 -1
  67. package/dist/routes/data-explorer/namespaces.d.ts +4 -0
  68. package/dist/routes/data-explorer/namespaces.d.ts.map +1 -1
  69. package/dist/routes/data-explorer/namespaces.js +6 -1
  70. package/dist/routes/data-explorer/namespaces.js.map +1 -1
  71. package/dist/routes/data-explorer/uploads.d.ts +56 -0
  72. package/dist/routes/data-explorer/uploads.d.ts.map +1 -0
  73. package/dist/routes/data-explorer/uploads.js +140 -0
  74. package/dist/routes/data-explorer/uploads.js.map +1 -0
  75. package/dist/routes/datastores/components/LinkUnlinkedDatastoreDialog.d.ts +1 -0
  76. package/dist/routes/datastores/components/LinkUnlinkedDatastoreDialog.d.ts.map +1 -1
  77. package/dist/routes/datastores/components/LinkUnlinkedDatastoreDialog.js +16 -9
  78. package/dist/routes/datastores/components/LinkUnlinkedDatastoreDialog.js.map +1 -1
  79. package/dist/routes/datastores/components/StatusBadge.d.ts +7 -8
  80. package/dist/routes/datastores/components/StatusBadge.d.ts.map +1 -1
  81. package/dist/routes/datastores/components/StatusBadge.js +17 -1
  82. package/dist/routes/datastores/components/StatusBadge.js.map +1 -1
  83. package/dist/routes/datastores/flatten.d.ts +6 -1
  84. package/dist/routes/datastores/flatten.d.ts.map +1 -1
  85. package/dist/routes/datastores/flatten.js +37 -2
  86. package/dist/routes/datastores/flatten.js.map +1 -1
  87. package/dist/routes/datastores/hooks/useDatastoreColumns.d.ts +2 -0
  88. package/dist/routes/datastores/hooks/useDatastoreColumns.d.ts.map +1 -1
  89. package/dist/routes/datastores/hooks/useDatastoreColumns.js +8 -4
  90. package/dist/routes/datastores/hooks/useDatastoreColumns.js.map +1 -1
  91. package/dist/routes/datastores/index.d.ts.map +1 -1
  92. package/dist/routes/datastores/index.js +53 -18
  93. package/dist/routes/datastores/index.js.map +1 -1
  94. package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.d.ts +3 -0
  95. package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.d.ts.map +1 -0
  96. package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.js +38 -0
  97. package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.js.map +1 -0
  98. package/dist/routes/integrations/components/connect-forms/google-merchant-center-account-tree.d.ts +4 -0
  99. package/dist/routes/integrations/components/connect-forms/google-merchant-center-account-tree.d.ts.map +1 -0
  100. package/dist/routes/integrations/components/connect-forms/google-merchant-center-account-tree.js +32 -0
  101. package/dist/routes/integrations/components/connect-forms/google-merchant-center-account-tree.js.map +1 -0
  102. package/dist/routes/integrations/components/connect-forms/setup-account-unavailable-reason.d.ts.map +1 -1
  103. package/dist/routes/integrations/components/connect-forms/setup-account-unavailable-reason.js +1 -0
  104. package/dist/routes/integrations/components/connect-forms/setup-account-unavailable-reason.js.map +1 -1
  105. package/dist/routes/integrations/connect-forms.d.ts +1 -0
  106. package/dist/routes/integrations/connect-forms.d.ts.map +1 -1
  107. package/dist/routes/integrations/connect-forms.js +1 -0
  108. package/dist/routes/integrations/connect-forms.js.map +1 -1
  109. package/dist/routes/integrations/connection-view.d.ts.map +1 -1
  110. package/dist/routes/integrations/connection-view.js +1 -0
  111. package/dist/routes/integrations/connection-view.js.map +1 -1
  112. package/dist/shared/graph-derived-queries.d.ts.map +1 -1
  113. package/dist/shared/graph-derived-queries.js +2 -1
  114. package/dist/shared/graph-derived-queries.js.map +1 -1
  115. package/package.json +21 -9
  116. package/src/app-subpaths.json +1 -0
  117. package/src/components/chart/ForecastLegend.tsx +15 -13
  118. package/src/components/chart/forecast-model.ts +6 -8
  119. package/src/components/chat-view/Chat.tsx +2 -2
  120. package/src/components/file-dropzone/index.tsx +165 -0
  121. package/src/components/planning/plan-detail-utils.tsx +2 -0
  122. package/src/components/toast/index.tsx +1 -0
  123. package/src/graph/NodeDetailPanel/TypeSummaryPanel.tsx +12 -14
  124. package/src/hooks/use-sparql-construct.ts +4 -2
  125. package/src/index.ts +1 -0
  126. package/src/lib/datastore-route-table.ts +6 -0
  127. package/src/lib/hooks/{useChatUpload.ts → useFileUpload.ts} +2 -2
  128. package/src/routes/data-collection/index.tsx +82 -0
  129. package/src/routes/data-explorer/components/DataExplorerLayout.tsx +5 -2
  130. package/src/routes/data-explorer/components/Rail.tsx +13 -2
  131. package/src/routes/data-explorer/components/uploads/IngestRunsList.tsx +63 -0
  132. package/src/routes/data-explorer/components/uploads/IngestStateStatus.tsx +45 -0
  133. package/src/routes/data-explorer/components/uploads/UploadedFilesList.tsx +93 -0
  134. package/src/routes/data-explorer/components/uploads/UploadsPages.tsx +80 -0
  135. package/src/routes/data-explorer/index.tsx +6 -0
  136. package/src/routes/data-explorer/namespaces.ts +7 -1
  137. package/src/routes/data-explorer/uploads.ts +205 -0
  138. package/src/routes/datastores/components/LinkUnlinkedDatastoreDialog.tsx +49 -10
  139. package/src/routes/datastores/components/StatusBadge.tsx +22 -7
  140. package/src/routes/datastores/flatten.ts +50 -2
  141. package/src/routes/datastores/hooks/useDatastoreColumns.tsx +21 -1
  142. package/src/routes/datastores/index.tsx +64 -13
  143. package/src/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.tsx +61 -0
  144. package/src/routes/integrations/components/connect-forms/google-merchant-center-account-tree.ts +38 -0
  145. package/src/routes/integrations/components/connect-forms/setup-account-unavailable-reason.ts +1 -0
  146. package/src/routes/integrations/connect-forms.ts +1 -0
  147. package/src/routes/integrations/connection-view.ts +1 -0
  148. 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":"AAuBA,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,yBAAyB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAIF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,gCAAgC,2CA0IlF"}
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(`Linked to the existing datastore '${datastoreId}'`);
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 suggestedParentPath = suggestedMatch &&
50
- existingOrganizationName === suggestedMatch.organizationName &&
51
- name.trim() === suggestedMatch.name
52
- ? suggestedMatch.parentPath
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(suggestedParentPath) ? { parentPath: suggestedParentPath } : {}),
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: setExistingOrganizationName, 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))) })] }), _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" })] })] }) }));
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":"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"}
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
- export declare function datastoreStatusFilterValue(node: {
2
+ export type DatastoreStatusFilterValue = "noDatastore" | "checking" | "notBuilt" | DatastoreStatusCategory;
3
+ type StatusNode = {
4
4
  datastoreId?: string;
5
5
  removed: boolean;
6
6
  isUnlinked?: boolean;
7
- }, status?: DatastoreStatus): DatastoreStatusFilterValue;
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":"AAGA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC7B,MAAM,uCAAuC,CAAC;AAE/C,MAAM,MAAM,0BAA0B,GAAG,aAAa,GAAG,UAAU,GAAG,uBAAuB,CAAC;AAE9F,wBAAgB,0BAA0B,CACxC,IAAI,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,EACtE,MAAM,CAAC,EAAE,eAAe,GACvB,0BAA0B,CAG5B;AAkCD,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;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACvE,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,2CAapE"}
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: { label: "Removed", variant: "copy" },
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;AAI/C,MAAM,UAAU,0BAA0B,CACxC,IAAsE,EACtE,MAAwB;IAExB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;QAAE,OAAO,aAAa,CAAC;IACvD,OAAO,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,UAAU,CAAC;AAC7D,CAAC;AAID,4FAA4F;AAC5F,MAAM,wBAAwB,GAAoD;IAChF,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE;IAC7C,aAAa,EAAE;QACb,KAAK,EAAE,eAAe;QACtB,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,mEAAmE;KAC3E;IACD,aAAa,EAAE;QACb,KAAK,EAAE,gBAAgB;QACvB,OAAO,EAAE,aAAa;QACtB,KAAK,EAAE,6FAA6F;KACrG;IACD,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE;IACrD,WAAW,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,EAAE;IAC7D,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IACjE,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE;IAC9C,WAAW,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE;CACxD,CAAC;AAEF,MAAM,iBAAiB,GAAiC;IACtD,OAAO;IACP,eAAe;IACf,eAAe;IACf,SAAS;IACT,aAAa;IACb,SAAS;CACV,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAgE;IACvG,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE;IACpC,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,wBAAwB,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;CACtF,CAAC;AAOF,MAAM,UAAU,oBAAoB,CAAC,KAAgC;IACnE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAE/B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;QAAE,OAAO,eAAM,SAAS,EAAC,uCAAuC,uBAAS,CAAC;IAE1G,MAAM,MAAM,GAAG,wBAAwB,CAAC,0BAA0B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAElF,OAAO,CACL,MAAC,KAAK,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,EAAC,gBAAgB,EAAC,KAAK,EAAE,MAAM,CAAC,KAAK,aACrF,MAAM,CAAC,QAAQ,IAAI,KAAC,YAAY,IAAC,SAAS,EAAC,qBAAqB,GAAG,EACnE,MAAM,CAAC,KAAK,IACP,CACT,CAAC;AACJ,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;CACtB,CAAC;AAEF,wBAAgB,eAAe,CAAC,WAAW,EAAE,KAAK,GAAG,YAAY,CAchE;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAEnE;AAED,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,UAAU,GAAG,YAAY,CAAC;AAE/D,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAMxF;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;CAC5B,CAAC;AAcF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,sBAAsB,GAAG,YAAY,EAAE,CAG7G;AAGD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAYvF;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,YAAY,EAAE,EACpB,UAAU,EAAE,sBAAsB,EAClC,GAAG,EAAE,MAAM,sBAAsB,EACjC,UAAU,EAAE,MAAM,GACjB,MAAM,CAIR;AAGD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAE9E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAEhE;AAED,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,sBAAsB,EAClC,MAAM,EAAE,0BAA0B,GAAG,KAAK,GACzC,sBAAsB,CAMxB;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,CActE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,EAAE,GAAG,YAAY,EAAE,CAgB7E"}
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":"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"}
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;AAyBvD,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,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,CAyY5F"}
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 && !removed && notRegistered && (_jsx(Button, { "data-testid": `datastore-register-${datastoreRow.id}`, size: "sm", variant: "secondary", icon: RefreshCw, 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 &&
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,