@burdenoff/microfe-export 2026.510.111
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/README.md +243 -0
- package/dist/dev/main.d.ts +2 -0
- package/dist/dev/main.d.ts.map +1 -0
- package/dist/export/ExportRoot.d.ts +31 -0
- package/dist/export/ExportRoot.d.ts.map +1 -0
- package/dist/export/ExportRoot.js +70 -0
- package/dist/export/ExportRoot.js.map +1 -0
- package/dist/export/ExportRoutes.d.ts +14 -0
- package/dist/export/ExportRoutes.d.ts.map +1 -0
- package/dist/export/ExportRoutes.js +104 -0
- package/dist/export/ExportRoutes.js.map +1 -0
- package/dist/export/components/ExportProgressBar.d.ts +12 -0
- package/dist/export/components/ExportProgressBar.d.ts.map +1 -0
- package/dist/export/components/ExportProgressBar.js +34 -0
- package/dist/export/components/ExportProgressBar.js.map +1 -0
- package/dist/export/components/ExportStatusBadge.d.ts +12 -0
- package/dist/export/components/ExportStatusBadge.d.ts.map +1 -0
- package/dist/export/components/ExportStatusBadge.js +39 -0
- package/dist/export/components/ExportStatusBadge.js.map +1 -0
- package/dist/export/components/PageLayout.d.ts +55 -0
- package/dist/export/components/PageLayout.d.ts.map +1 -0
- package/dist/export/components/PageLayout.js +93 -0
- package/dist/export/components/PageLayout.js.map +1 -0
- package/dist/export/components/ui.d.ts +6 -0
- package/dist/export/components/ui.d.ts.map +1 -0
- package/dist/export/constants/enums.d.ts +79 -0
- package/dist/export/constants/enums.d.ts.map +1 -0
- package/dist/export/constants/enums.js +27 -0
- package/dist/export/constants/enums.js.map +1 -0
- package/dist/export/constants/index.d.ts +7 -0
- package/dist/export/constants/index.d.ts.map +1 -0
- package/dist/export/hooks/useExportQueries.d.ts +224 -0
- package/dist/export/hooks/useExportQueries.d.ts.map +1 -0
- package/dist/export/hooks/useExportQueries.js +401 -0
- package/dist/export/hooks/useExportQueries.js.map +1 -0
- package/dist/export/index.d.ts +29 -0
- package/dist/export/index.d.ts.map +1 -0
- package/dist/export/index.js +3 -0
- package/dist/export/pages/CreateExportPage.d.ts +2 -0
- package/dist/export/pages/CreateExportPage.d.ts.map +1 -0
- package/dist/export/pages/CreateExportPage.js +495 -0
- package/dist/export/pages/CreateExportPage.js.map +1 -0
- package/dist/export/pages/ExportDashboardPage.d.ts +6 -0
- package/dist/export/pages/ExportDashboardPage.d.ts.map +1 -0
- package/dist/export/pages/ExportDashboardPage.js +166 -0
- package/dist/export/pages/ExportDashboardPage.js.map +1 -0
- package/dist/export/pages/ExportDetailPage.d.ts +7 -0
- package/dist/export/pages/ExportDetailPage.d.ts.map +1 -0
- package/dist/export/pages/ExportDetailPage.js +327 -0
- package/dist/export/pages/ExportDetailPage.js.map +1 -0
- package/dist/export/pages/ExportHistoryPage.d.ts +6 -0
- package/dist/export/pages/ExportHistoryPage.d.ts.map +1 -0
- package/dist/export/pages/ExportHistoryPage.js +261 -0
- package/dist/export/pages/ExportHistoryPage.js.map +1 -0
- package/dist/export/pages/ExportLandingPage.d.ts +9 -0
- package/dist/export/pages/ExportLandingPage.d.ts.map +1 -0
- package/dist/export/pages/ExportLandingPage.js +56 -0
- package/dist/export/pages/ExportLandingPage.js.map +1 -0
- package/dist/export/pages/ExportTemplatesPage.d.ts +6 -0
- package/dist/export/pages/ExportTemplatesPage.d.ts.map +1 -0
- package/dist/export/pages/ExportTemplatesPage.js +343 -0
- package/dist/export/pages/ExportTemplatesPage.js.map +1 -0
- package/dist/export/pages/TemplateDetailPage.d.ts +7 -0
- package/dist/export/pages/TemplateDetailPage.d.ts.map +1 -0
- package/dist/export/pages/TemplateDetailPage.js +215 -0
- package/dist/export/pages/TemplateDetailPage.js.map +1 -0
- package/dist/export/providers/ExportProvider.d.ts +13 -0
- package/dist/export/providers/ExportProvider.d.ts.map +1 -0
- package/dist/export/providers/ExportProvider.js +103 -0
- package/dist/export/providers/ExportProvider.js.map +1 -0
- package/dist/export/store/exportStore.d.ts +17 -0
- package/dist/export/store/exportStore.d.ts.map +1 -0
- package/dist/export/store/exportStore.js +43 -0
- package/dist/export/store/exportStore.js.map +1 -0
- package/dist/export/types/index.d.ts +230 -0
- package/dist/export/types/index.d.ts.map +1 -0
- package/dist/export/utils/cn.d.ts +8 -0
- package/dist/export/utils/cn.d.ts.map +1 -0
- package/dist/export/utils/cn.js +10 -0
- package/dist/export/utils/cn.js.map +1 -0
- package/dist/export/utils/events.d.ts +7 -0
- package/dist/export/utils/events.d.ts.map +1 -0
- package/dist/export/utils/events.js +16 -0
- package/dist/export/utils/events.js.map +1 -0
- package/dist/export/utils/i18n.d.ts +6 -0
- package/dist/export/utils/i18n.d.ts.map +1 -0
- package/dist/export/utils/i18n.js +15 -0
- package/dist/export/utils/i18n.js.map +1 -0
- package/dist/generated/global-operations.d.ts +2 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-types.d.ts +21253 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/wspace-operations.d.ts +773 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-operations.js +319 -0
- package/dist/generated/wspace-operations.js.map +1 -0
- package/dist/generated/wspace-types.d.ts +55214 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/generated/wspace-types.js +12 -0
- package/dist/generated/wspace-types.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js +24 -0
- package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js.map +1 -0
- package/dist/node_modules/@apollo/client/errors/utils.js +16 -0
- package/dist/node_modules/@apollo/client/errors/utils.js.map +1 -0
- package/dist/node_modules/@apollo/client/link/core/ApolloLink.js +52 -0
- package/dist/node_modules/@apollo/client/link/core/ApolloLink.js.map +1 -0
- package/dist/node_modules/@apollo/client/link/subscriptions/index.js +41 -0
- package/dist/node_modules/@apollo/client/link/subscriptions/index.js.map +1 -0
- package/dist/node_modules/@apollo/client/link/utils/createOperation.js +34 -0
- package/dist/node_modules/@apollo/client/link/utils/createOperation.js.map +1 -0
- package/dist/node_modules/@apollo/client/utilities/caching/sizes.js +6 -0
- package/dist/node_modules/@apollo/client/utilities/caching/sizes.js.map +1 -0
- package/dist/node_modules/@apollo/client/utilities/graphql/print.js +16 -0
- package/dist/node_modules/@apollo/client/utilities/graphql/print.js.map +1 -0
- package/dist/node_modules/@apollo/client/utilities/internal/caches.js +19 -0
- package/dist/node_modules/@apollo/client/utilities/internal/caches.js.map +1 -0
- package/dist/node_modules/@apollo/client/utilities/internal/checkDocument.js +21 -0
- package/dist/node_modules/@apollo/client/utilities/internal/checkDocument.js.map +1 -0
- package/dist/node_modules/@apollo/client/utilities/internal/getMainDefinition.js +17 -0
- package/dist/node_modules/@apollo/client/utilities/internal/getMainDefinition.js.map +1 -0
- package/dist/node_modules/@apollo/client/utilities/internal/getMemoryInternals.js +9 -0
- package/dist/node_modules/@apollo/client/utilities/internal/getMemoryInternals.js.map +1 -0
- package/dist/node_modules/@apollo/client/utilities/internal/getOperationDefinition.js +9 -0
- package/dist/node_modules/@apollo/client/utilities/internal/getOperationDefinition.js.map +1 -0
- package/dist/node_modules/@apollo/client/utilities/internal/getOperationName.js +8 -0
- package/dist/node_modules/@apollo/client/utilities/internal/getOperationName.js.map +1 -0
- package/dist/node_modules/@apollo/client/utilities/internal/globals/global.js +9 -0
- package/dist/node_modules/@apollo/client/utilities/internal/globals/global.js.map +1 -0
- package/dist/node_modules/@apollo/client/utilities/internal/globals/maybe.js +10 -0
- package/dist/node_modules/@apollo/client/utilities/internal/globals/maybe.js.map +1 -0
- package/dist/node_modules/@apollo/client/utilities/internal/isNonNullObject.js +8 -0
- package/dist/node_modules/@apollo/client/utilities/internal/isNonNullObject.js.map +1 -0
- package/dist/node_modules/@apollo/client/utilities/internal/makeUniqueId.js +10 -0
- package/dist/node_modules/@apollo/client/utilities/internal/makeUniqueId.js.map +1 -0
- package/dist/node_modules/@apollo/client/utilities/internal/memoize.js +23 -0
- package/dist/node_modules/@apollo/client/utilities/internal/memoize.js.map +1 -0
- package/dist/node_modules/@apollo/client/utilities/internal/stringifyForDisplay.js +10 -0
- package/dist/node_modules/@apollo/client/utilities/internal/stringifyForDisplay.js.map +1 -0
- package/dist/node_modules/@apollo/client/utilities/invariant/index.js +57 -0
- package/dist/node_modules/@apollo/client/utilities/invariant/index.js.map +1 -0
- package/dist/node_modules/@apollo/client/version.js +6 -0
- package/dist/node_modules/@apollo/client/version.js.map +1 -0
- package/dist/node_modules/@wry/caches/lib/weak.js +67 -0
- package/dist/node_modules/@wry/caches/lib/weak.js.map +1 -0
- package/dist/node_modules/@wry/trie/lib/index.js +53 -0
- package/dist/node_modules/@wry/trie/lib/index.js.map +1 -0
- package/dist/node_modules/clsx/dist/clsx.js +18 -0
- package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
- package/dist/node_modules/graphql-ws/dist/client.js +272 -0
- package/dist/node_modules/graphql-ws/dist/client.js.map +1 -0
- package/dist/node_modules/graphql-ws/dist/common-CGW11Fyb.js +62 -0
- package/dist/node_modules/graphql-ws/dist/common-CGW11Fyb.js.map +1 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/NotificationFactories.js +21 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/NotificationFactories.js.map +1 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/Observable.js +78 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/Observable.js.map +1 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/Subscriber.js +117 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/Subscriber.js.map +1 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/Subscription.js +93 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/Subscription.js.map +1 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/config.js +12 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/config.js.map +1 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/observable/empty.js +9 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/observable/empty.js.map +1 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js +16 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js.map +1 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/symbol/observable.js +8 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/symbol/observable.js.map +1 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js +13 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js.map +1 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js +11 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js.map +1 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js +11 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js.map +1 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/errorContext.js +22 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/errorContext.js.map +1 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/identity.js +8 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/identity.js.map +1 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/isFunction.js +8 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/isFunction.js.map +1 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/noop.js +6 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/noop.js.map +1 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/pipe.js +13 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/pipe.js.map +1 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js +14 -0
- package/dist/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js.map +1 -0
- package/dist/node_modules/rxjs/node_modules/tslib/tslib.es6.js +52 -0
- package/dist/node_modules/rxjs/node_modules/tslib/tslib.es6.js.map +1 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +1674 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
- package/dist/utils/nativeBridge.d.ts +3 -0
- package/dist/utils/nativeBridge.d.ts.map +1 -0
- package/dist/utils/nativeBridge.js +2 -0
- package/package.json +107 -0
|
@@ -0,0 +1,495 @@
|
|
|
1
|
+
import { useExport as e } from "../providers/ExportProvider.js";
|
|
2
|
+
import { useAvailableEntities as t, useCreateExportJob as n, useExportTemplates as r } from "../hooks/useExportQueries.js";
|
|
3
|
+
import { cn as i } from "../utils/cn.js";
|
|
4
|
+
import { getFormatDisplayName as a } from "../constants/enums.js";
|
|
5
|
+
import { tWithFallback as o } from "../utils/i18n.js";
|
|
6
|
+
import { PageLayout as s } from "../components/PageLayout.js";
|
|
7
|
+
import { useEffect as c, useRef as l, useState as u } from "react";
|
|
8
|
+
import { ArrowLeft as d, ArrowRight as f, Building2 as p, CalendarRange as m, CheckCircle2 as h, Download as g, FileJson as _, FileSpreadsheet as v, Loader2 as ee, Package as te, User as y, Users as b } from "lucide-react";
|
|
9
|
+
import { useSearchParams as x } from "react-router-dom";
|
|
10
|
+
import { jsx as S, jsxs as C } from "react/jsx-runtime";
|
|
11
|
+
import { useI18n as ne } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
12
|
+
//#region src/export/pages/CreateExportPage.tsx
|
|
13
|
+
var w = ["CSV", "JSON"], T = {
|
|
14
|
+
CSV: v,
|
|
15
|
+
JSON: _
|
|
16
|
+
}, E = [
|
|
17
|
+
{
|
|
18
|
+
value: "INDIVIDUAL",
|
|
19
|
+
label: "My Data Only",
|
|
20
|
+
description: "Export data you personally created across selected modules.",
|
|
21
|
+
Icon: y
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
value: "WORKSPACE_ADMIN",
|
|
25
|
+
label: "All Workspace Data",
|
|
26
|
+
description: "Export all data in this workspace regardless of who created it. Requires workspace admin access.",
|
|
27
|
+
Icon: b
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
value: "ORG_ADMIN",
|
|
31
|
+
label: "All Organization Data",
|
|
32
|
+
description: "Export data from every workspace in your organization. Requires org-admin access.",
|
|
33
|
+
Icon: p
|
|
34
|
+
}
|
|
35
|
+
];
|
|
36
|
+
function D() {
|
|
37
|
+
let { basePath: p = "/", navigate: _, organizationId: v } = e(), { t: y } = ne(), b = (e, t, n) => o(y, e, t, n), { createJob: D, isPending: O } = n(), { data: k } = t(), { data: A } = r(), [j] = x(), [M, N] = u("entities"), [P, F] = u([]), [I, L] = u(""), [R, z] = u("CSV"), [B, V] = u("INDIVIDUAL"), [H, U] = u(j.get("templateId") ?? void 0), [W, G] = u(""), [K, q] = u(""), [J, Y] = u(null), X = l(null);
|
|
38
|
+
c(() => {
|
|
39
|
+
let e = j.get("templateId");
|
|
40
|
+
if (!e || !A?.length || X.current === e) return;
|
|
41
|
+
let t = A.find((t) => t.id === e);
|
|
42
|
+
if (!t) return;
|
|
43
|
+
X.current = e, U(t.id), F(t.entityTypes ?? []);
|
|
44
|
+
let n = t.format?.toUpperCase();
|
|
45
|
+
n && w.includes(n) && z(n), t.name && L(t.name);
|
|
46
|
+
}, [j, A]);
|
|
47
|
+
let re = () => {
|
|
48
|
+
M === "options" ? N("entities") : M === "review" ? N("options") : _?.(p);
|
|
49
|
+
}, ie = () => {
|
|
50
|
+
if (M === "entities") {
|
|
51
|
+
if (P.length === 0) {
|
|
52
|
+
Y(b("export.create.errors.selectEntity", "Please select at least one entity type to export"));
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
Y(null), N("options");
|
|
56
|
+
} else if (M === "options") {
|
|
57
|
+
if (!I.trim()) {
|
|
58
|
+
Y(b("export.create.errors.exportNameRequired", "Please provide a name for this export"));
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
Y(null), N("review");
|
|
62
|
+
}
|
|
63
|
+
}, ae = async () => {
|
|
64
|
+
try {
|
|
65
|
+
Y(null), await D({
|
|
66
|
+
name: I,
|
|
67
|
+
entityTypes: P,
|
|
68
|
+
format: R,
|
|
69
|
+
exportScope: B,
|
|
70
|
+
organizationId: B === "ORG_ADMIN" ? v : void 0,
|
|
71
|
+
templateId: H,
|
|
72
|
+
dateRangeStart: W ? new Date(W).toISOString() : null,
|
|
73
|
+
dateRangeEnd: K ? new Date(K).toISOString() : null
|
|
74
|
+
}), _?.(p);
|
|
75
|
+
} catch (e) {
|
|
76
|
+
Y(e instanceof Error ? e.message : b("export.create.errors.createFailed", "Failed to create export"));
|
|
77
|
+
}
|
|
78
|
+
}, oe = (e) => {
|
|
79
|
+
F((t) => t.includes(e) ? t.filter((t) => t !== e) : [...t, e]);
|
|
80
|
+
}, Z = (e) => {
|
|
81
|
+
switch (e) {
|
|
82
|
+
case "INDIVIDUAL": return b("export.create.scope.individual.label", "My Data Only");
|
|
83
|
+
case "WORKSPACE_ADMIN": return b("export.create.scope.workspaceAdmin.label", "All Workspace Data");
|
|
84
|
+
case "ORG_ADMIN": return b("export.create.scope.orgAdmin.label", "All Organization Data");
|
|
85
|
+
default: return e;
|
|
86
|
+
}
|
|
87
|
+
}, se = (e) => {
|
|
88
|
+
switch (e) {
|
|
89
|
+
case "INDIVIDUAL": return b("export.create.scope.individual.description", "Export data you personally created across selected modules.");
|
|
90
|
+
case "WORKSPACE_ADMIN": return b("export.create.scope.workspaceAdmin.description", "Export all data in this workspace regardless of who created it. Requires workspace admin access.");
|
|
91
|
+
case "ORG_ADMIN": return b("export.create.scope.orgAdmin.description", "Export data from every workspace in your organization. Requires org-admin access.");
|
|
92
|
+
default: return "";
|
|
93
|
+
}
|
|
94
|
+
}, Q = {
|
|
95
|
+
users: {
|
|
96
|
+
label: b("export.create.entities.users.label", "Users"),
|
|
97
|
+
description: b("export.create.entities.users.description", "Workspace members and profiles")
|
|
98
|
+
},
|
|
99
|
+
projects: {
|
|
100
|
+
label: b("export.create.entities.projects.label", "Projects"),
|
|
101
|
+
description: b("export.create.entities.projects.description", "Projects and their metadata")
|
|
102
|
+
},
|
|
103
|
+
tasks: {
|
|
104
|
+
label: b("export.create.entities.tasks.label", "Tasks"),
|
|
105
|
+
description: b("export.create.entities.tasks.description", "Task items and assignments")
|
|
106
|
+
},
|
|
107
|
+
files: {
|
|
108
|
+
label: b("export.create.entities.files.label", "Files"),
|
|
109
|
+
description: b("export.create.entities.files.description", "File metadata and references")
|
|
110
|
+
},
|
|
111
|
+
conversations: {
|
|
112
|
+
label: b("export.create.entities.conversations.label", "Conversations"),
|
|
113
|
+
description: b("export.create.entities.conversations.description", "Chat messages and threads")
|
|
114
|
+
},
|
|
115
|
+
tags: {
|
|
116
|
+
label: b("export.create.entities.tags.label", "Tags"),
|
|
117
|
+
description: b("export.create.entities.tags.description", "Tags and vocabularies")
|
|
118
|
+
},
|
|
119
|
+
activity: {
|
|
120
|
+
label: b("export.create.entities.activity.label", "Activity Logs"),
|
|
121
|
+
description: b("export.create.entities.activity.description", "Audit trail and activity history")
|
|
122
|
+
},
|
|
123
|
+
calendar: {
|
|
124
|
+
label: b("export.create.entities.calendar.label", "Calendar Events"),
|
|
125
|
+
description: b("export.create.entities.calendar.description", "Events and bookings")
|
|
126
|
+
}
|
|
127
|
+
}, $ = k.filter((e) => e.enabled !== !1);
|
|
128
|
+
return /* @__PURE__ */ C(s, {
|
|
129
|
+
showHeader: !1,
|
|
130
|
+
children: [
|
|
131
|
+
/* @__PURE__ */ S("div", {
|
|
132
|
+
className: "relative overflow-hidden rounded-xl bg-gradient-to-br from-primary/5 via-primary/3 to-background border border-border/50 p-6 shadow-sm",
|
|
133
|
+
children: /* @__PURE__ */ C("div", {
|
|
134
|
+
className: "relative z-10 flex items-center gap-4",
|
|
135
|
+
children: [/* @__PURE__ */ S("button", {
|
|
136
|
+
onClick: () => _?.(p),
|
|
137
|
+
className: "p-2.5 hover:bg-accent rounded-lg transition-all duration-200 hover:scale-110",
|
|
138
|
+
"aria-label": b("export.create.actions.backToDashboard", "Back to export dashboard"),
|
|
139
|
+
children: /* @__PURE__ */ S(d, { size: 20 })
|
|
140
|
+
}), /* @__PURE__ */ C("div", {
|
|
141
|
+
className: "flex items-center gap-3",
|
|
142
|
+
children: [/* @__PURE__ */ S("div", {
|
|
143
|
+
className: "p-2.5 rounded-lg bg-primary/10 backdrop-blur-sm",
|
|
144
|
+
children: /* @__PURE__ */ S(g, {
|
|
145
|
+
size: 24,
|
|
146
|
+
className: "text-primary"
|
|
147
|
+
})
|
|
148
|
+
}), /* @__PURE__ */ S("h1", {
|
|
149
|
+
className: "text-2xl sm:text-3xl font-bold",
|
|
150
|
+
children: b("export.create.title", "New Export")
|
|
151
|
+
})]
|
|
152
|
+
})]
|
|
153
|
+
})
|
|
154
|
+
}),
|
|
155
|
+
/* @__PURE__ */ S("div", {
|
|
156
|
+
className: "flex items-center gap-2 justify-center flex-wrap",
|
|
157
|
+
children: [
|
|
158
|
+
"entities",
|
|
159
|
+
"options",
|
|
160
|
+
"review"
|
|
161
|
+
].map((e, t) => /* @__PURE__ */ C("div", {
|
|
162
|
+
className: "flex items-center gap-2",
|
|
163
|
+
children: [t > 0 && /* @__PURE__ */ S(f, {
|
|
164
|
+
size: 18,
|
|
165
|
+
className: "text-muted-foreground"
|
|
166
|
+
}), /* @__PURE__ */ C("div", {
|
|
167
|
+
className: i("flex items-center gap-2 px-4 py-2.5 rounded-lg text-sm font-medium border-2 transition-all duration-200", M === e ? "bg-primary text-primary-foreground border-primary shadow-md scale-105" : "bg-muted/50 text-muted-foreground border-border/50"),
|
|
168
|
+
children: [/* @__PURE__ */ S("div", {
|
|
169
|
+
className: "flex items-center justify-center w-6 h-6 rounded-full bg-background/20 font-bold",
|
|
170
|
+
children: t + 1
|
|
171
|
+
}), /* @__PURE__ */ S("span", {
|
|
172
|
+
className: "hidden sm:inline capitalize",
|
|
173
|
+
children: e === "entities" ? b("export.create.steps.entities", "Select Data") : e === "options" ? b("export.create.steps.options", "Options") : b("export.create.steps.review", "Review")
|
|
174
|
+
})]
|
|
175
|
+
})]
|
|
176
|
+
}, e))
|
|
177
|
+
}),
|
|
178
|
+
J && /* @__PURE__ */ S("div", {
|
|
179
|
+
className: "border-2 border-border-default rounded-xl bg-status-error-bg-subtle p-4 text-status-error-text text-sm",
|
|
180
|
+
children: J
|
|
181
|
+
}),
|
|
182
|
+
M === "entities" && /* @__PURE__ */ C("div", {
|
|
183
|
+
className: "space-y-4",
|
|
184
|
+
children: [
|
|
185
|
+
/* @__PURE__ */ S("h2", {
|
|
186
|
+
className: "text-lg font-bold",
|
|
187
|
+
children: b("export.create.select.title", "Select data to export")
|
|
188
|
+
}),
|
|
189
|
+
/* @__PURE__ */ S("p", {
|
|
190
|
+
className: "text-sm text-muted-foreground",
|
|
191
|
+
children: b("export.create.select.description", "Choose which entity types to include in your export.")
|
|
192
|
+
}),
|
|
193
|
+
$.length === 0 ? /* @__PURE__ */ S("div", {
|
|
194
|
+
className: "border-2 border-border rounded-xl bg-muted/30 p-6 text-sm text-muted-foreground",
|
|
195
|
+
children: b("export.create.select.empty", "No exportable entity types are configured for this workspace yet.")
|
|
196
|
+
}) : /* @__PURE__ */ S("div", {
|
|
197
|
+
className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3",
|
|
198
|
+
children: $.map((e) => {
|
|
199
|
+
let t = P.includes(e.entityType);
|
|
200
|
+
return /* @__PURE__ */ C("button", {
|
|
201
|
+
onClick: () => oe(e.entityType),
|
|
202
|
+
className: i("text-left border-2 rounded-xl p-4 transition-all duration-200", t ? "border-primary bg-primary/5 shadow-md" : "border-border/50 hover:border-primary/30 hover:shadow-sm"),
|
|
203
|
+
children: [
|
|
204
|
+
/* @__PURE__ */ C("div", {
|
|
205
|
+
className: "flex items-center justify-between mb-2",
|
|
206
|
+
children: [/* @__PURE__ */ S("h3", {
|
|
207
|
+
className: "font-semibold",
|
|
208
|
+
children: Q[e.entityType]?.label ?? e.displayName
|
|
209
|
+
}), t && /* @__PURE__ */ S(h, {
|
|
210
|
+
size: 18,
|
|
211
|
+
className: "text-primary"
|
|
212
|
+
})]
|
|
213
|
+
}),
|
|
214
|
+
/* @__PURE__ */ S("p", {
|
|
215
|
+
className: "text-sm text-muted-foreground",
|
|
216
|
+
children: Q[e.entityType]?.description ?? e.description
|
|
217
|
+
}),
|
|
218
|
+
e.estimatedSize && /* @__PURE__ */ C("p", {
|
|
219
|
+
className: "text-xs text-muted-foreground mt-2",
|
|
220
|
+
children: ["~", e.estimatedSize]
|
|
221
|
+
})
|
|
222
|
+
]
|
|
223
|
+
}, e.entityType);
|
|
224
|
+
})
|
|
225
|
+
})
|
|
226
|
+
]
|
|
227
|
+
}),
|
|
228
|
+
M === "options" && /* @__PURE__ */ S("div", {
|
|
229
|
+
className: "space-y-6",
|
|
230
|
+
children: /* @__PURE__ */ C("div", {
|
|
231
|
+
className: "border-2 border-border/50 rounded-xl p-6 space-y-5",
|
|
232
|
+
children: [
|
|
233
|
+
/* @__PURE__ */ S("h2", {
|
|
234
|
+
className: "text-lg font-bold",
|
|
235
|
+
children: b("export.create.options.title", "Export Options")
|
|
236
|
+
}),
|
|
237
|
+
/* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("label", {
|
|
238
|
+
className: "block text-sm font-semibold mb-2",
|
|
239
|
+
children: b("export.create.options.scope", "Export Scope")
|
|
240
|
+
}), /* @__PURE__ */ S("div", {
|
|
241
|
+
className: "grid grid-cols-1 sm:grid-cols-3 gap-3",
|
|
242
|
+
children: E.map(({ value: e, Icon: t }) => /* @__PURE__ */ C("button", {
|
|
243
|
+
type: "button",
|
|
244
|
+
onClick: () => V(e),
|
|
245
|
+
className: i("text-left border-2 rounded-xl p-4 transition-all duration-200", B === e ? "border-primary bg-primary/5 shadow-md" : "border-border/50 hover:border-primary/30 hover:shadow-sm"),
|
|
246
|
+
children: [
|
|
247
|
+
/* @__PURE__ */ C("div", {
|
|
248
|
+
className: "flex items-center justify-between mb-2",
|
|
249
|
+
children: [/* @__PURE__ */ S(t, {
|
|
250
|
+
size: 18,
|
|
251
|
+
className: B === e ? "text-primary" : "text-muted-foreground"
|
|
252
|
+
}), B === e && /* @__PURE__ */ S(h, {
|
|
253
|
+
size: 16,
|
|
254
|
+
className: "text-primary"
|
|
255
|
+
})]
|
|
256
|
+
}),
|
|
257
|
+
/* @__PURE__ */ S("p", {
|
|
258
|
+
className: "font-semibold text-sm",
|
|
259
|
+
children: Z(e)
|
|
260
|
+
}),
|
|
261
|
+
/* @__PURE__ */ S("p", {
|
|
262
|
+
className: "text-xs text-muted-foreground mt-1",
|
|
263
|
+
children: se(e)
|
|
264
|
+
})
|
|
265
|
+
]
|
|
266
|
+
}, e))
|
|
267
|
+
})] }),
|
|
268
|
+
/* @__PURE__ */ C("div", { children: [/* @__PURE__ */ C("label", {
|
|
269
|
+
htmlFor: "exportName",
|
|
270
|
+
className: "block text-sm font-semibold mb-2",
|
|
271
|
+
children: [
|
|
272
|
+
b("export.create.options.name", "Export Name"),
|
|
273
|
+
" ",
|
|
274
|
+
/* @__PURE__ */ S("span", {
|
|
275
|
+
className: "text-status-error-text",
|
|
276
|
+
children: "*"
|
|
277
|
+
})
|
|
278
|
+
]
|
|
279
|
+
}), /* @__PURE__ */ S("input", {
|
|
280
|
+
type: "text",
|
|
281
|
+
id: "exportName",
|
|
282
|
+
value: I,
|
|
283
|
+
onChange: (e) => L(e.target.value),
|
|
284
|
+
className: "w-full px-4 py-2.5 border-2 border-border rounded-lg bg-background focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary transition-all duration-200",
|
|
285
|
+
placeholder: b("export.create.options.namePlaceholder", "e.g., Monthly User Export")
|
|
286
|
+
})] }),
|
|
287
|
+
/* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("label", {
|
|
288
|
+
className: "block text-sm font-semibold mb-2",
|
|
289
|
+
children: b("export.create.options.outputFormat", "Output Format")
|
|
290
|
+
}), /* @__PURE__ */ S("div", {
|
|
291
|
+
className: "grid grid-cols-2 gap-3",
|
|
292
|
+
children: w.map((e) => {
|
|
293
|
+
let t = T[e];
|
|
294
|
+
return /* @__PURE__ */ C("button", {
|
|
295
|
+
onClick: () => z(e),
|
|
296
|
+
className: i("flex items-center gap-3 border-2 rounded-lg p-3 transition-all duration-200", R === e ? "border-primary bg-primary/5" : "border-border/50 hover:border-primary/30"),
|
|
297
|
+
children: [/* @__PURE__ */ S(t, {
|
|
298
|
+
size: 18,
|
|
299
|
+
className: R === e ? "text-primary" : "text-muted-foreground"
|
|
300
|
+
}), /* @__PURE__ */ S("span", {
|
|
301
|
+
className: "font-medium text-sm",
|
|
302
|
+
children: a(e)
|
|
303
|
+
})]
|
|
304
|
+
}, e);
|
|
305
|
+
})
|
|
306
|
+
})] }),
|
|
307
|
+
/* @__PURE__ */ C("div", { children: [
|
|
308
|
+
/* @__PURE__ */ S("label", {
|
|
309
|
+
className: "block text-sm font-semibold mb-2",
|
|
310
|
+
children: b("export.create.options.archiveFormat", "Archive Format")
|
|
311
|
+
}),
|
|
312
|
+
/* @__PURE__ */ S("div", {
|
|
313
|
+
className: "flex gap-3",
|
|
314
|
+
children: /* @__PURE__ */ C("div", {
|
|
315
|
+
className: i("flex items-center gap-2 border-2 rounded-lg px-4 py-2 border-primary bg-primary/5"),
|
|
316
|
+
children: [/* @__PURE__ */ S(te, {
|
|
317
|
+
size: 16,
|
|
318
|
+
className: "text-primary"
|
|
319
|
+
}), /* @__PURE__ */ S("span", {
|
|
320
|
+
className: "font-medium text-sm",
|
|
321
|
+
children: "ZIP"
|
|
322
|
+
})]
|
|
323
|
+
})
|
|
324
|
+
}),
|
|
325
|
+
/* @__PURE__ */ S("p", {
|
|
326
|
+
className: "text-xs text-muted-foreground mt-1.5",
|
|
327
|
+
children: b("export.create.options.archiveDescription", "Exports are packaged as ZIP archives.")
|
|
328
|
+
})
|
|
329
|
+
] }),
|
|
330
|
+
/* @__PURE__ */ C("div", { children: [
|
|
331
|
+
/* @__PURE__ */ S("label", {
|
|
332
|
+
className: "block text-sm font-semibold mb-2",
|
|
333
|
+
children: /* @__PURE__ */ C("span", {
|
|
334
|
+
className: "inline-flex items-center gap-1.5",
|
|
335
|
+
children: [
|
|
336
|
+
/* @__PURE__ */ S(m, { size: 15 }),
|
|
337
|
+
b("export.create.options.dateRange", "Date Range"),
|
|
338
|
+
" ",
|
|
339
|
+
/* @__PURE__ */ S("span", {
|
|
340
|
+
className: "font-normal text-muted-foreground",
|
|
341
|
+
children: b("export.create.shared.optional", "(optional)")
|
|
342
|
+
})
|
|
343
|
+
]
|
|
344
|
+
})
|
|
345
|
+
}),
|
|
346
|
+
/* @__PURE__ */ C("div", {
|
|
347
|
+
className: "grid grid-cols-1 sm:grid-cols-2 gap-3",
|
|
348
|
+
children: [/* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("label", {
|
|
349
|
+
htmlFor: "dateFrom",
|
|
350
|
+
className: "block text-xs text-muted-foreground mb-1",
|
|
351
|
+
children: b("export.create.options.dateFrom", "From")
|
|
352
|
+
}), /* @__PURE__ */ S("input", {
|
|
353
|
+
type: "date",
|
|
354
|
+
id: "dateFrom",
|
|
355
|
+
value: W,
|
|
356
|
+
onChange: (e) => G(e.target.value),
|
|
357
|
+
className: "w-full px-3 py-2 border-2 border-border rounded-lg bg-background focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary text-sm"
|
|
358
|
+
})] }), /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("label", {
|
|
359
|
+
htmlFor: "dateTo",
|
|
360
|
+
className: "block text-xs text-muted-foreground mb-1",
|
|
361
|
+
children: b("export.create.options.dateTo", "To")
|
|
362
|
+
}), /* @__PURE__ */ S("input", {
|
|
363
|
+
type: "date",
|
|
364
|
+
id: "dateTo",
|
|
365
|
+
value: K,
|
|
366
|
+
min: W,
|
|
367
|
+
onChange: (e) => q(e.target.value),
|
|
368
|
+
className: "w-full px-3 py-2 border-2 border-border rounded-lg bg-background focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary text-sm"
|
|
369
|
+
})] })]
|
|
370
|
+
}),
|
|
371
|
+
/* @__PURE__ */ S("p", {
|
|
372
|
+
className: "text-xs text-muted-foreground mt-1.5",
|
|
373
|
+
children: b("export.create.options.dateRangeDescription", "Leave blank to export all data regardless of date.")
|
|
374
|
+
})
|
|
375
|
+
] }),
|
|
376
|
+
/* @__PURE__ */ C("div", { children: [/* @__PURE__ */ C("label", {
|
|
377
|
+
className: "block text-sm font-semibold mb-2",
|
|
378
|
+
children: [
|
|
379
|
+
b("export.create.options.basedOnTemplate", "Based on Template"),
|
|
380
|
+
" ",
|
|
381
|
+
/* @__PURE__ */ S("span", {
|
|
382
|
+
className: "font-normal text-muted-foreground",
|
|
383
|
+
children: b("export.create.shared.optional", "(optional)")
|
|
384
|
+
})
|
|
385
|
+
]
|
|
386
|
+
}), A.length > 0 ? /* @__PURE__ */ C("select", {
|
|
387
|
+
value: H ?? "",
|
|
388
|
+
onChange: (e) => U(e.target.value || void 0),
|
|
389
|
+
className: "w-full px-3 py-2 border-2 border-border rounded-lg bg-background focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary",
|
|
390
|
+
children: [/* @__PURE__ */ S("option", {
|
|
391
|
+
value: "",
|
|
392
|
+
children: b("export.create.options.noTemplate", "No template")
|
|
393
|
+
}), A.map((e) => /* @__PURE__ */ S("option", {
|
|
394
|
+
value: e.id,
|
|
395
|
+
children: e.name
|
|
396
|
+
}, e.id))]
|
|
397
|
+
}) : /* @__PURE__ */ C("p", {
|
|
398
|
+
className: "text-sm text-muted-foreground",
|
|
399
|
+
children: [
|
|
400
|
+
b("export.create.options.noTemplates", "No templates yet."),
|
|
401
|
+
" ",
|
|
402
|
+
/* @__PURE__ */ S("button", {
|
|
403
|
+
type: "button",
|
|
404
|
+
onClick: () => _?.(p + "/templates"),
|
|
405
|
+
className: "text-primary underline-offset-2 hover:underline",
|
|
406
|
+
children: b("export.create.options.createTemplateLink", "Create one")
|
|
407
|
+
}),
|
|
408
|
+
" ",
|
|
409
|
+
b("export.create.options.reuseTemplateHint", "to reuse export configurations.")
|
|
410
|
+
]
|
|
411
|
+
})] })
|
|
412
|
+
]
|
|
413
|
+
})
|
|
414
|
+
}),
|
|
415
|
+
M === "review" && /* @__PURE__ */ S("div", {
|
|
416
|
+
className: "space-y-6",
|
|
417
|
+
children: /* @__PURE__ */ C("div", {
|
|
418
|
+
className: "border-2 border-primary/50 rounded-xl bg-primary/5 p-6 space-y-4",
|
|
419
|
+
children: [/* @__PURE__ */ C("h2", {
|
|
420
|
+
className: "text-lg font-bold flex items-center gap-2",
|
|
421
|
+
children: [/* @__PURE__ */ S(h, {
|
|
422
|
+
size: 20,
|
|
423
|
+
className: "text-primary"
|
|
424
|
+
}), b("export.create.review.title", "Review Export")]
|
|
425
|
+
}), /* @__PURE__ */ S("dl", {
|
|
426
|
+
className: "space-y-3 text-sm",
|
|
427
|
+
children: [
|
|
428
|
+
{
|
|
429
|
+
label: b("export.create.review.fields.name", "Name"),
|
|
430
|
+
value: I
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
label: b("export.create.review.fields.scope", "Scope"),
|
|
434
|
+
value: Z(B)
|
|
435
|
+
},
|
|
436
|
+
{
|
|
437
|
+
label: b("export.create.review.fields.entityTypes", "Entity Types"),
|
|
438
|
+
value: P.join(", ")
|
|
439
|
+
},
|
|
440
|
+
{
|
|
441
|
+
label: b("export.create.review.fields.format", "Format"),
|
|
442
|
+
value: a(R)
|
|
443
|
+
},
|
|
444
|
+
{
|
|
445
|
+
label: b("export.create.review.fields.archive", "Archive"),
|
|
446
|
+
value: "ZIP"
|
|
447
|
+
},
|
|
448
|
+
...W || K ? [{
|
|
449
|
+
label: b("export.create.review.fields.dateRange", "Date Range"),
|
|
450
|
+
value: [W || "—", K || "—"].join(" → ")
|
|
451
|
+
}] : [],
|
|
452
|
+
...H ? [{
|
|
453
|
+
label: b("export.create.review.fields.template", "Template"),
|
|
454
|
+
value: A.find((e) => e.id === H)?.name ?? H
|
|
455
|
+
}] : []
|
|
456
|
+
].map(({ label: e, value: t }) => /* @__PURE__ */ C("div", {
|
|
457
|
+
className: "flex flex-col sm:flex-row sm:justify-between gap-1",
|
|
458
|
+
children: [/* @__PURE__ */ S("dt", {
|
|
459
|
+
className: "text-muted-foreground",
|
|
460
|
+
children: e
|
|
461
|
+
}), /* @__PURE__ */ S("dd", {
|
|
462
|
+
className: "font-semibold sm:text-right break-words",
|
|
463
|
+
children: t
|
|
464
|
+
})]
|
|
465
|
+
}, e))
|
|
466
|
+
})]
|
|
467
|
+
})
|
|
468
|
+
}),
|
|
469
|
+
/* @__PURE__ */ C("div", {
|
|
470
|
+
className: "flex flex-col sm:flex-row gap-3 pt-2",
|
|
471
|
+
children: [/* @__PURE__ */ S("button", {
|
|
472
|
+
onClick: re,
|
|
473
|
+
className: "px-6 py-3 border-2 border-border/50 rounded-lg hover:bg-accent hover:border-primary/30 transition-all duration-200 font-medium",
|
|
474
|
+
children: M === "entities" ? b("export.create.actions.cancel", "Cancel") : b("export.create.actions.back", "Back")
|
|
475
|
+
}), M === "review" ? /* @__PURE__ */ C("button", {
|
|
476
|
+
onClick: ae,
|
|
477
|
+
disabled: O,
|
|
478
|
+
className: "flex-1 inline-flex items-center justify-center gap-2 px-6 py-3 bg-primary text-primary-foreground rounded-lg hover:bg-primary/90 transition-all duration-200 hover:scale-105 font-bold shadow-lg disabled:opacity-50 disabled:cursor-not-allowed",
|
|
479
|
+
children: [O ? /* @__PURE__ */ S(ee, {
|
|
480
|
+
size: 18,
|
|
481
|
+
className: "animate-spin"
|
|
482
|
+
}) : /* @__PURE__ */ S(g, { size: 18 }), b("export.create.actions.startExport", "Start Export")]
|
|
483
|
+
}) : /* @__PURE__ */ C("button", {
|
|
484
|
+
onClick: ie,
|
|
485
|
+
className: "flex-1 inline-flex items-center justify-center gap-2 px-6 py-3 bg-primary text-primary-foreground rounded-lg hover:bg-primary/90 transition-all duration-200 hover:scale-105 font-bold shadow-lg",
|
|
486
|
+
children: [b("export.create.actions.next", "Next"), /* @__PURE__ */ S(f, { size: 18 })]
|
|
487
|
+
})]
|
|
488
|
+
})
|
|
489
|
+
]
|
|
490
|
+
});
|
|
491
|
+
}
|
|
492
|
+
//#endregion
|
|
493
|
+
export { D as CreateExportPage };
|
|
494
|
+
|
|
495
|
+
//# sourceMappingURL=CreateExportPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateExportPage.js","names":[],"sources":["../../../src/export/pages/CreateExportPage.tsx"],"sourcesContent":["import { useState, useEffect, useRef } from \"react\";\nimport { useSearchParams } from \"react-router-dom\";\nimport {\n ArrowLeft,\n ArrowRight,\n Download,\n CheckCircle2,\n Loader2,\n FileSpreadsheet,\n FileJson,\n Package,\n CalendarRange,\n User,\n Users,\n Building2,\n} from \"lucide-react\";\nimport { useI18n } from \"@burdenoff/fe-libs/shared/providers/shell/I18nProvider\";\nimport { useExport } from \"../providers/ExportProvider\";\nimport {\n useCreateExportJob,\n useAvailableEntities,\n useExportTemplates,\n} from \"../hooks/useExportQueries\";\nimport { getFormatDisplayName } from \"../constants/enums\";\nimport { PageLayout } from \"../components/PageLayout\";\nimport { cn } from \"../utils/cn\";\nimport type { ExportFormat, ExportScope } from \"../types\";\nimport { tWithFallback } from \"../utils/i18n\";\n\ntype WizardStep = \"entities\" | \"options\" | \"review\";\n\n// Backend only supports CSV and JSON\nconst SUPPORTED_FORMATS: ExportFormat[] = [\"CSV\", \"JSON\"];\n\nconst FORMAT_ICONS: Record<ExportFormat, typeof FileJson> = {\n CSV: FileSpreadsheet,\n JSON: FileJson,\n};\n\n/**\n * Create Export Page\n * Multi-step form: select entities, configure options, review & start\n */\nconst SCOPE_OPTIONS: Array<{\n value: ExportScope;\n label: string;\n description: string;\n Icon: typeof User;\n}> = [\n {\n value: \"INDIVIDUAL\",\n label: \"My Data Only\",\n description: \"Export data you personally created across selected modules.\",\n Icon: User,\n },\n {\n value: \"WORKSPACE_ADMIN\",\n label: \"All Workspace Data\",\n description:\n \"Export all data in this workspace regardless of who created it. Requires workspace admin access.\",\n Icon: Users,\n },\n {\n value: \"ORG_ADMIN\",\n label: \"All Organization Data\",\n description:\n \"Export data from every workspace in your organization. Requires org-admin access.\",\n Icon: Building2,\n },\n];\n\nexport function CreateExportPage() {\n const { basePath = \"/\", navigate, organizationId } = useExport();\n const { t } = useI18n();\n const tr = (\n key: string,\n fallback: string,\n params?: Record<string, string | number>,\n ) => tWithFallback(t, key, fallback, params);\n const { createJob, isPending } = useCreateExportJob();\n const { data: availableEntities } = useAvailableEntities();\n const { data: templates } = useExportTemplates();\n const [searchParams] = useSearchParams();\n\n const [step, setStep] = useState<WizardStep>(\"entities\");\n const [selectedEntities, setSelectedEntities] = useState<string[]>([]);\n const [exportName, setExportName] = useState(\"\");\n const [selectedFormat, setSelectedFormat] = useState<ExportFormat>(\"CSV\");\n const [selectedScope, setSelectedScope] = useState<ExportScope>(\"INDIVIDUAL\");\n const [selectedTemplateId, setSelectedTemplateId] = useState<\n string | undefined\n >(searchParams.get(\"templateId\") ?? undefined);\n const [dateRangeStart, setDateRangeStart] = useState(\"\");\n const [dateRangeEnd, setDateRangeEnd] = useState(\"\");\n const [error, setError] = useState<string | null>(null);\n\n // Pre-populate form when arriving from \"Use Template\" — apply only once per templateId\n const appliedTemplateRef = useRef<string | null>(null);\n useEffect(() => {\n const paramTemplateId = searchParams.get(\"templateId\");\n if (!paramTemplateId || !templates?.length) return;\n if (appliedTemplateRef.current === paramTemplateId) return;\n const tpl = templates.find((t) => t.id === paramTemplateId);\n if (!tpl) return;\n appliedTemplateRef.current = paramTemplateId;\n setSelectedTemplateId(tpl.id);\n setSelectedEntities(tpl.entityTypes ?? []);\n const normalizedFormat = tpl.format?.toUpperCase() as\n | ExportFormat\n | undefined;\n if (normalizedFormat && SUPPORTED_FORMATS.includes(normalizedFormat)) {\n setSelectedFormat(normalizedFormat);\n }\n if (tpl.name) setExportName(tpl.name);\n }, [searchParams, templates]);\n\n const handleBack = () => {\n if (step === \"options\") setStep(\"entities\");\n else if (step === \"review\") setStep(\"options\");\n else navigate?.(basePath);\n };\n\n const handleNext = () => {\n if (step === \"entities\") {\n if (selectedEntities.length === 0) {\n setError(\n tr(\n \"export.create.errors.selectEntity\",\n \"Please select at least one entity type to export\",\n ),\n );\n return;\n }\n setError(null);\n setStep(\"options\");\n } else if (step === \"options\") {\n if (!exportName.trim()) {\n setError(\n tr(\n \"export.create.errors.exportNameRequired\",\n \"Please provide a name for this export\",\n ),\n );\n return;\n }\n setError(null);\n setStep(\"review\");\n }\n };\n\n const handleSubmit = async () => {\n try {\n setError(null);\n await createJob({\n name: exportName,\n entityTypes: selectedEntities,\n format: selectedFormat,\n exportScope: selectedScope,\n organizationId:\n selectedScope === \"ORG_ADMIN\" ? organizationId : undefined,\n templateId: selectedTemplateId,\n dateRangeStart: dateRangeStart\n ? new Date(dateRangeStart).toISOString()\n : null,\n dateRangeEnd: dateRangeEnd\n ? new Date(dateRangeEnd).toISOString()\n : null,\n });\n navigate?.(basePath);\n } catch (err) {\n setError(\n err instanceof Error\n ? err.message\n : tr(\"export.create.errors.createFailed\", \"Failed to create export\"),\n );\n }\n };\n\n const toggleEntity = (entityType: string) => {\n setSelectedEntities((prev) =>\n prev.includes(entityType)\n ? prev.filter((e) => e !== entityType)\n : [...prev, entityType],\n );\n };\n\n const getScopeLabel = (scope: ExportScope) => {\n switch (scope) {\n case \"INDIVIDUAL\":\n return tr(\"export.create.scope.individual.label\", \"My Data Only\");\n case \"WORKSPACE_ADMIN\":\n return tr(\n \"export.create.scope.workspaceAdmin.label\",\n \"All Workspace Data\",\n );\n case \"ORG_ADMIN\":\n return tr(\n \"export.create.scope.orgAdmin.label\",\n \"All Organization Data\",\n );\n default:\n return scope;\n }\n };\n\n const getScopeDescription = (scope: ExportScope) => {\n switch (scope) {\n case \"INDIVIDUAL\":\n return tr(\n \"export.create.scope.individual.description\",\n \"Export data you personally created across selected modules.\",\n );\n case \"WORKSPACE_ADMIN\":\n return tr(\n \"export.create.scope.workspaceAdmin.description\",\n \"Export all data in this workspace regardless of who created it. Requires workspace admin access.\",\n );\n case \"ORG_ADMIN\":\n return tr(\n \"export.create.scope.orgAdmin.description\",\n \"Export data from every workspace in your organization. Requires org-admin access.\",\n );\n default:\n return \"\";\n }\n };\n\n const fallbackEntityCopy: Record<\n string,\n { label: string; description: string }\n > = {\n users: {\n label: tr(\"export.create.entities.users.label\", \"Users\"),\n description: tr(\n \"export.create.entities.users.description\",\n \"Workspace members and profiles\",\n ),\n },\n projects: {\n label: tr(\"export.create.entities.projects.label\", \"Projects\"),\n description: tr(\n \"export.create.entities.projects.description\",\n \"Projects and their metadata\",\n ),\n },\n tasks: {\n label: tr(\"export.create.entities.tasks.label\", \"Tasks\"),\n description: tr(\n \"export.create.entities.tasks.description\",\n \"Task items and assignments\",\n ),\n },\n files: {\n label: tr(\"export.create.entities.files.label\", \"Files\"),\n description: tr(\n \"export.create.entities.files.description\",\n \"File metadata and references\",\n ),\n },\n conversations: {\n label: tr(\"export.create.entities.conversations.label\", \"Conversations\"),\n description: tr(\n \"export.create.entities.conversations.description\",\n \"Chat messages and threads\",\n ),\n },\n tags: {\n label: tr(\"export.create.entities.tags.label\", \"Tags\"),\n description: tr(\n \"export.create.entities.tags.description\",\n \"Tags and vocabularies\",\n ),\n },\n activity: {\n label: tr(\"export.create.entities.activity.label\", \"Activity Logs\"),\n description: tr(\n \"export.create.entities.activity.description\",\n \"Audit trail and activity history\",\n ),\n },\n calendar: {\n label: tr(\"export.create.entities.calendar.label\", \"Calendar Events\"),\n description: tr(\n \"export.create.entities.calendar.description\",\n \"Events and bookings\",\n ),\n },\n };\n\n // Only show enabled entities\n const enabledEntities = availableEntities.filter((e) => e.enabled !== false);\n\n return (\n <PageLayout showHeader={false}>\n {/* Header */}\n <div className=\"relative overflow-hidden rounded-xl bg-gradient-to-br from-primary/5 via-primary/3 to-background border border-border/50 p-6 shadow-sm\">\n <div className=\"relative z-10 flex items-center gap-4\">\n <button\n onClick={() => navigate?.(basePath)}\n className=\"p-2.5 hover:bg-accent rounded-lg transition-all duration-200 hover:scale-110\"\n aria-label={tr(\n \"export.create.actions.backToDashboard\",\n \"Back to export dashboard\",\n )}\n >\n <ArrowLeft size={20} />\n </button>\n <div className=\"flex items-center gap-3\">\n <div className=\"p-2.5 rounded-lg bg-primary/10 backdrop-blur-sm\">\n <Download size={24} className=\"text-primary\" />\n </div>\n <h1 className=\"text-2xl sm:text-3xl font-bold\">\n {tr(\"export.create.title\", \"New Export\")}\n </h1>\n </div>\n </div>\n </div>\n\n {/* Step Indicator */}\n <div className=\"flex items-center gap-2 justify-center flex-wrap\">\n {([\"entities\", \"options\", \"review\"] as WizardStep[]).map((s, i) => (\n <div key={s} className=\"flex items-center gap-2\">\n {i > 0 && (\n <ArrowRight size={18} className=\"text-muted-foreground\" />\n )}\n <div\n className={cn(\n \"flex items-center gap-2 px-4 py-2.5 rounded-lg text-sm font-medium border-2 transition-all duration-200\",\n step === s\n ? \"bg-primary text-primary-foreground border-primary shadow-md scale-105\"\n : \"bg-muted/50 text-muted-foreground border-border/50\",\n )}\n >\n <div className=\"flex items-center justify-center w-6 h-6 rounded-full bg-background/20 font-bold\">\n {i + 1}\n </div>\n <span className=\"hidden sm:inline capitalize\">\n {s === \"entities\"\n ? tr(\"export.create.steps.entities\", \"Select Data\")\n : s === \"options\"\n ? tr(\"export.create.steps.options\", \"Options\")\n : tr(\"export.create.steps.review\", \"Review\")}\n </span>\n </div>\n </div>\n ))}\n </div>\n\n {/* Error */}\n {error && (\n <div className=\"border-2 border-border-default rounded-xl bg-status-error-bg-subtle p-4 text-status-error-text text-sm\">\n {error}\n </div>\n )}\n\n {/* Step 1: Select Entities */}\n {step === \"entities\" && (\n <div className=\"space-y-4\">\n <h2 className=\"text-lg font-bold\">\n {tr(\"export.create.select.title\", \"Select data to export\")}\n </h2>\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n \"export.create.select.description\",\n \"Choose which entity types to include in your export.\",\n )}\n </p>\n {enabledEntities.length === 0 ? (\n <div className=\"border-2 border-border rounded-xl bg-muted/30 p-6 text-sm text-muted-foreground\">\n {tr(\n \"export.create.select.empty\",\n \"No exportable entity types are configured for this workspace yet.\",\n )}\n </div>\n ) : (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3\">\n {enabledEntities.map((entity) => {\n const isSelected = selectedEntities.includes(entity.entityType);\n return (\n <button\n key={entity.entityType}\n onClick={() => toggleEntity(entity.entityType)}\n className={cn(\n \"text-left border-2 rounded-xl p-4 transition-all duration-200\",\n isSelected\n ? \"border-primary bg-primary/5 shadow-md\"\n : \"border-border/50 hover:border-primary/30 hover:shadow-sm\",\n )}\n >\n <div className=\"flex items-center justify-between mb-2\">\n <h3 className=\"font-semibold\">\n {fallbackEntityCopy[entity.entityType]?.label ??\n entity.displayName}\n </h3>\n {isSelected && (\n <CheckCircle2 size={18} className=\"text-primary\" />\n )}\n </div>\n <p className=\"text-sm text-muted-foreground\">\n {fallbackEntityCopy[entity.entityType]?.description ??\n entity.description}\n </p>\n {entity.estimatedSize && (\n <p className=\"text-xs text-muted-foreground mt-2\">\n ~{entity.estimatedSize}\n </p>\n )}\n </button>\n );\n })}\n </div>\n )}\n </div>\n )}\n\n {/* Step 2: Configure Options */}\n {step === \"options\" && (\n <div className=\"space-y-6\">\n <div className=\"border-2 border-border/50 rounded-xl p-6 space-y-5\">\n <h2 className=\"text-lg font-bold\">\n {tr(\"export.create.options.title\", \"Export Options\")}\n </h2>\n\n {/* Scope selection */}\n <div>\n <label className=\"block text-sm font-semibold mb-2\">\n {tr(\"export.create.options.scope\", \"Export Scope\")}\n </label>\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-3\">\n {SCOPE_OPTIONS.map(({ value, Icon }) => (\n <button\n key={value}\n type=\"button\"\n onClick={() => setSelectedScope(value)}\n className={cn(\n \"text-left border-2 rounded-xl p-4 transition-all duration-200\",\n selectedScope === value\n ? \"border-primary bg-primary/5 shadow-md\"\n : \"border-border/50 hover:border-primary/30 hover:shadow-sm\",\n )}\n >\n <div className=\"flex items-center justify-between mb-2\">\n <Icon\n size={18}\n className={\n selectedScope === value\n ? \"text-primary\"\n : \"text-muted-foreground\"\n }\n />\n {selectedScope === value && (\n <CheckCircle2 size={16} className=\"text-primary\" />\n )}\n </div>\n <p className=\"font-semibold text-sm\">\n {getScopeLabel(value)}\n </p>\n <p className=\"text-xs text-muted-foreground mt-1\">\n {getScopeDescription(value)}\n </p>\n </button>\n ))}\n </div>\n </div>\n\n {/* Name */}\n <div>\n <label\n htmlFor=\"exportName\"\n className=\"block text-sm font-semibold mb-2\"\n >\n {tr(\"export.create.options.name\", \"Export Name\")}{\" \"}\n <span className=\"text-status-error-text\">*</span>\n </label>\n <input\n type=\"text\"\n id=\"exportName\"\n value={exportName}\n onChange={(e) => setExportName(e.target.value)}\n className=\"w-full px-4 py-2.5 border-2 border-border rounded-lg bg-background focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary transition-all duration-200\"\n placeholder={tr(\n \"export.create.options.namePlaceholder\",\n \"e.g., Monthly User Export\",\n )}\n />\n </div>\n\n {/* Format — only CSV and JSON are supported */}\n <div>\n <label className=\"block text-sm font-semibold mb-2\">\n {tr(\"export.create.options.outputFormat\", \"Output Format\")}\n </label>\n <div className=\"grid grid-cols-2 gap-3\">\n {SUPPORTED_FORMATS.map((format) => {\n const Icon = FORMAT_ICONS[format];\n return (\n <button\n key={format}\n onClick={() => setSelectedFormat(format)}\n className={cn(\n \"flex items-center gap-3 border-2 rounded-lg p-3 transition-all duration-200\",\n selectedFormat === format\n ? \"border-primary bg-primary/5\"\n : \"border-border/50 hover:border-primary/30\",\n )}\n >\n <Icon\n size={18}\n className={\n selectedFormat === format\n ? \"text-primary\"\n : \"text-muted-foreground\"\n }\n />\n <span className=\"font-medium text-sm\">\n {getFormatDisplayName(format)}\n </span>\n </button>\n );\n })}\n </div>\n </div>\n\n {/* Archive format — only ZIP is supported */}\n <div>\n <label className=\"block text-sm font-semibold mb-2\">\n {tr(\"export.create.options.archiveFormat\", \"Archive Format\")}\n </label>\n <div className=\"flex gap-3\">\n <div\n className={cn(\n \"flex items-center gap-2 border-2 rounded-lg px-4 py-2 border-primary bg-primary/5\",\n )}\n >\n <Package size={16} className=\"text-primary\" />\n <span className=\"font-medium text-sm\">ZIP</span>\n </div>\n </div>\n <p className=\"text-xs text-muted-foreground mt-1.5\">\n {tr(\n \"export.create.options.archiveDescription\",\n \"Exports are packaged as ZIP archives.\",\n )}\n </p>\n </div>\n\n {/* Date range filter — always visible */}\n <div>\n <label className=\"block text-sm font-semibold mb-2\">\n <span className=\"inline-flex items-center gap-1.5\">\n <CalendarRange size={15} />\n {tr(\"export.create.options.dateRange\", \"Date Range\")}{\" \"}\n <span className=\"font-normal text-muted-foreground\">\n {tr(\"export.create.shared.optional\", \"(optional)\")}\n </span>\n </span>\n </label>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-3\">\n <div>\n <label\n htmlFor=\"dateFrom\"\n className=\"block text-xs text-muted-foreground mb-1\"\n >\n {tr(\"export.create.options.dateFrom\", \"From\")}\n </label>\n <input\n type=\"date\"\n id=\"dateFrom\"\n value={dateRangeStart}\n onChange={(e) => setDateRangeStart(e.target.value)}\n className=\"w-full px-3 py-2 border-2 border-border rounded-lg bg-background focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary text-sm\"\n />\n </div>\n <div>\n <label\n htmlFor=\"dateTo\"\n className=\"block text-xs text-muted-foreground mb-1\"\n >\n {tr(\"export.create.options.dateTo\", \"To\")}\n </label>\n <input\n type=\"date\"\n id=\"dateTo\"\n value={dateRangeEnd}\n min={dateRangeStart}\n onChange={(e) => setDateRangeEnd(e.target.value)}\n className=\"w-full px-3 py-2 border-2 border-border rounded-lg bg-background focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary text-sm\"\n />\n </div>\n </div>\n <p className=\"text-xs text-muted-foreground mt-1.5\">\n {tr(\n \"export.create.options.dateRangeDescription\",\n \"Leave blank to export all data regardless of date.\",\n )}\n </p>\n </div>\n\n {/* Optional: Use a template */}\n <div>\n <label className=\"block text-sm font-semibold mb-2\">\n {tr(\n \"export.create.options.basedOnTemplate\",\n \"Based on Template\",\n )}{\" \"}\n <span className=\"font-normal text-muted-foreground\">\n {tr(\"export.create.shared.optional\", \"(optional)\")}\n </span>\n </label>\n {templates.length > 0 ? (\n <select\n value={selectedTemplateId ?? \"\"}\n onChange={(e) =>\n setSelectedTemplateId(e.target.value || undefined)\n }\n className=\"w-full px-3 py-2 border-2 border-border rounded-lg bg-background focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary\"\n >\n <option value=\"\">\n {tr(\"export.create.options.noTemplate\", \"No template\")}\n </option>\n {templates.map((t) => (\n <option key={t.id} value={t.id}>\n {t.name}\n </option>\n ))}\n </select>\n ) : (\n <p className=\"text-sm text-muted-foreground\">\n {tr(\"export.create.options.noTemplates\", \"No templates yet.\")}{\" \"}\n <button\n type=\"button\"\n onClick={() => navigate?.(basePath + \"/templates\")}\n className=\"text-primary underline-offset-2 hover:underline\"\n >\n {tr(\n \"export.create.options.createTemplateLink\",\n \"Create one\",\n )}\n </button>{\" \"}\n {tr(\n \"export.create.options.reuseTemplateHint\",\n \"to reuse export configurations.\",\n )}\n </p>\n )}\n </div>\n </div>\n </div>\n )}\n\n {/* Step 3: Review */}\n {step === \"review\" && (\n <div className=\"space-y-6\">\n <div className=\"border-2 border-primary/50 rounded-xl bg-primary/5 p-6 space-y-4\">\n <h2 className=\"text-lg font-bold flex items-center gap-2\">\n <CheckCircle2 size={20} className=\"text-primary\" />\n {tr(\"export.create.review.title\", \"Review Export\")}\n </h2>\n <dl className=\"space-y-3 text-sm\">\n {[\n {\n label: tr(\"export.create.review.fields.name\", \"Name\"),\n value: exportName,\n },\n {\n label: tr(\"export.create.review.fields.scope\", \"Scope\"),\n value: getScopeLabel(selectedScope),\n },\n {\n label: tr(\n \"export.create.review.fields.entityTypes\",\n \"Entity Types\",\n ),\n value: selectedEntities.join(\", \"),\n },\n {\n label: tr(\"export.create.review.fields.format\", \"Format\"),\n value: getFormatDisplayName(selectedFormat),\n },\n {\n label: tr(\"export.create.review.fields.archive\", \"Archive\"),\n value: \"ZIP\",\n },\n ...(dateRangeStart || dateRangeEnd\n ? [\n {\n label: tr(\n \"export.create.review.fields.dateRange\",\n \"Date Range\",\n ),\n value: [\n dateRangeStart || \"—\",\n dateRangeEnd || \"—\",\n ].join(\" → \"),\n },\n ]\n : []),\n ...(selectedTemplateId\n ? [\n {\n label: tr(\n \"export.create.review.fields.template\",\n \"Template\",\n ),\n value:\n templates.find((t) => t.id === selectedTemplateId)\n ?.name ?? selectedTemplateId,\n },\n ]\n : []),\n ].map(({ label, value }) => (\n <div\n key={label}\n className=\"flex flex-col sm:flex-row sm:justify-between gap-1\"\n >\n <dt className=\"text-muted-foreground\">{label}</dt>\n <dd className=\"font-semibold sm:text-right break-words\">\n {value}\n </dd>\n </div>\n ))}\n </dl>\n </div>\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex flex-col sm:flex-row gap-3 pt-2\">\n <button\n onClick={handleBack}\n className=\"px-6 py-3 border-2 border-border/50 rounded-lg hover:bg-accent hover:border-primary/30 transition-all duration-200 font-medium\"\n >\n {step === \"entities\"\n ? tr(\"export.create.actions.cancel\", \"Cancel\")\n : tr(\"export.create.actions.back\", \"Back\")}\n </button>\n {step === \"review\" ? (\n <button\n onClick={handleSubmit}\n disabled={isPending}\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-6 py-3 bg-primary text-primary-foreground rounded-lg hover:bg-primary/90 transition-all duration-200 hover:scale-105 font-bold shadow-lg disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n {isPending ? (\n <Loader2 size={18} className=\"animate-spin\" />\n ) : (\n <Download size={18} />\n )}\n {tr(\"export.create.actions.startExport\", \"Start Export\")}\n </button>\n ) : (\n <button\n onClick={handleNext}\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-6 py-3 bg-primary text-primary-foreground rounded-lg hover:bg-primary/90 transition-all duration-200 hover:scale-105 font-bold shadow-lg\"\n >\n {tr(\"export.create.actions.next\", \"Next\")}\n <ArrowRight size={18} />\n </button>\n )}\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExportDashboardPage.d.ts","sourceRoot":"","sources":["../../../src/export/pages/ExportDashboardPage.tsx"],"names":[],"mappings":"AA0BA;;;GAGG;AACH,wBAAgB,mBAAmB,4CAyOlC"}
|