@acmekit/dashboard 2.13.6 → 2.13.8

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 (64) hide show
  1. package/dist/api-key-management-create-D57V3NN2.mjs +170 -0
  2. package/dist/api-key-management-detail-QURSBB6T.mjs +307 -0
  3. package/dist/api-key-management-edit-GG5V77GY.mjs +106 -0
  4. package/dist/api-key-management-list-PL64LD22.mjs +400 -0
  5. package/dist/app.js +16930 -1004
  6. package/dist/app.mjs +793 -884
  7. package/dist/chunk-22YYMH6M.mjs +382 -0
  8. package/dist/chunk-2U3RK3JG.mjs +474 -0
  9. package/dist/chunk-535OVBXR.mjs +226 -0
  10. package/dist/chunk-6SQCO25J.mjs +65 -0
  11. package/dist/chunk-774WSTCC.mjs +19 -0
  12. package/dist/chunk-7ZHDHEUH.mjs +1837 -0
  13. package/dist/chunk-C76H5USB.mjs +16 -0
  14. package/dist/chunk-DFFLVEZ5.mjs +40 -0
  15. package/dist/chunk-DN3MIYQH.mjs +140 -0
  16. package/dist/chunk-DQCEH3X2.mjs +28 -0
  17. package/dist/chunk-DTY37DDZ.mjs +20 -0
  18. package/dist/chunk-FXYH54JP.mjs +16 -0
  19. package/dist/chunk-G22WWLPG.mjs +44 -0
  20. package/dist/chunk-G2VJOHHV.mjs +32 -0
  21. package/dist/chunk-GBFVWROS.mjs +58 -0
  22. package/dist/chunk-ITNQKZQQ.mjs +142 -0
  23. package/dist/chunk-IUCDCPJU.mjs +0 -0
  24. package/dist/chunk-LKWTBYYC.mjs +35 -0
  25. package/dist/{chunk-4VYJHIB3.mjs → chunk-ND3ODI36.mjs} +0 -72
  26. package/dist/chunk-OAHCJFG3.mjs +17 -0
  27. package/dist/chunk-OHAFITSB.mjs +54 -0
  28. package/dist/chunk-RPAL6FHW.mjs +73 -0
  29. package/dist/{chunk-JSJZMTQG.mjs → chunk-RREPQMYC.mjs} +14 -41
  30. package/dist/chunk-S3REQHPQ.mjs +86 -0
  31. package/dist/chunk-S4DMV3ZT.mjs +35 -0
  32. package/dist/chunk-TCNCAWYD.mjs +9 -0
  33. package/dist/chunk-ULSPL3DR.mjs +126 -0
  34. package/dist/chunk-VBT5YZ4K.mjs +129 -0
  35. package/dist/chunk-WILMJYUB.mjs +35 -0
  36. package/dist/chunk-XIM7X4FB.mjs +83 -0
  37. package/dist/chunk-YB52HEIR.mjs +387 -0
  38. package/dist/chunk-YRWSG3YM.mjs +80 -0
  39. package/dist/{invite-S5USGDOZ.mjs → invite-BAFXQBLJ.mjs} +15 -7
  40. package/dist/{login-BRUR5XXN.mjs → login-YURMNRCS.mjs} +23 -9
  41. package/dist/profile-detail-SJWODS2K.mjs +96 -0
  42. package/dist/profile-edit-HSGF4UXZ.mjs +173 -0
  43. package/dist/{reset-password-UQPRHMB3.mjs → reset-password-RQ5M7HQC.mjs} +8 -4
  44. package/dist/settings-3XWLL5LG.mjs +545 -0
  45. package/dist/store-detail-SQKV5KBD.mjs +109 -0
  46. package/dist/store-edit-WGGIJMYJ.mjs +97 -0
  47. package/dist/store-metadata-CSBUGX6Z.mjs +49 -0
  48. package/dist/translation-list-H5X4DVCC.mjs +587 -0
  49. package/dist/translations-edit-NPAUN2GZ.mjs +5376 -0
  50. package/dist/user-detail-7SUQ35G7.mjs +169 -0
  51. package/dist/user-edit-KUZV37AH.mjs +114 -0
  52. package/dist/user-invite-OREFWWYL.mjs +361 -0
  53. package/dist/user-list-OWUR75OP.mjs +1116 -0
  54. package/dist/user-metadata-QHUX5SHZ.mjs +51 -0
  55. package/dist/workflow-execution-detail-MWNM25TF.mjs +820 -0
  56. package/dist/workflow-execution-list-IGYF44UH.mjs +175 -0
  57. package/package.json +9 -9
  58. package/src/components/layout/settings-layout/settings-layout.tsx +74 -6
  59. package/src/dashboard-app/routes/get-route.map.tsx +225 -0
  60. package/src/routes/login/login.tsx +1 -1
  61. package/dist/chunk-FBTP4AJM.mjs +0 -221
  62. package/dist/chunk-NQEMGMWU.mjs +0 -159
  63. package/dist/chunk-QYOO4QR6.mjs +0 -73
  64. package/dist/login-AIMR26AL.mjs +0 -291
@@ -0,0 +1,175 @@
1
+ import {
2
+ getTransactionState,
3
+ getTransactionStateColor
4
+ } from "./chunk-RPAL6FHW.mjs";
5
+ import {
6
+ StatusCell
7
+ } from "./chunk-WILMJYUB.mjs";
8
+ import {
9
+ useWorkflowExecutions
10
+ } from "./chunk-LKWTBYYC.mjs";
11
+ import {
12
+ SingleColumnPage
13
+ } from "./chunk-22YYMH6M.mjs";
14
+ import {
15
+ useExtension
16
+ } from "./chunk-C5P5PL3E.mjs";
17
+ import {
18
+ _DataTable,
19
+ useDataTable
20
+ } from "./chunk-7ZHDHEUH.mjs";
21
+ import "./chunk-ITNQKZQQ.mjs";
22
+ import {
23
+ useQueryParams
24
+ } from "./chunk-C76H5USB.mjs";
25
+ import "./chunk-DFFLVEZ5.mjs";
26
+ import "./chunk-535OVBXR.mjs";
27
+ import "./chunk-S4DMV3ZT.mjs";
28
+ import "./chunk-774WSTCC.mjs";
29
+ import "./chunk-DTY37DDZ.mjs";
30
+ import "./chunk-QZ7TP4HQ.mjs";
31
+
32
+ // src/routes/workflow-executions/workflow-execution-list/components/workflow-execution-list-table/workflow-execution-list-table.tsx
33
+ import { Container, Heading, Text } from "@acmekit/ui";
34
+ import { keepPreviousData } from "@tanstack/react-query";
35
+ import { useTranslation as useTranslation2 } from "react-i18next";
36
+
37
+ // src/routes/workflow-executions/workflow-execution-list/components/workflow-execution-list-table/use-workflow-execution-table-columns.tsx
38
+ import { Badge } from "@acmekit/ui";
39
+ import { createColumnHelper } from "@tanstack/react-table";
40
+ import { useMemo } from "react";
41
+ import { useTranslation } from "react-i18next";
42
+ import { jsx } from "react/jsx-runtime";
43
+ var columnHelper = createColumnHelper();
44
+ var useWorkflowExecutionTableColumns = () => {
45
+ const { t } = useTranslation();
46
+ return useMemo(
47
+ () => [
48
+ columnHelper.accessor("transaction_id", {
49
+ header: t("workflowExecutions.transactionIdLabel"),
50
+ cell: ({ getValue }) => /* @__PURE__ */ jsx(Badge, { size: "2xsmall", children: getValue() })
51
+ }),
52
+ columnHelper.accessor("state", {
53
+ header: t("fields.state"),
54
+ cell: ({ getValue }) => {
55
+ const state = getValue();
56
+ const color = getTransactionStateColor(state);
57
+ const translatedState = getTransactionState(t, state);
58
+ return /* @__PURE__ */ jsx(StatusCell, { color, children: /* @__PURE__ */ jsx("span", { className: "capitalize", children: translatedState }) });
59
+ }
60
+ }),
61
+ columnHelper.accessor("execution", {
62
+ header: t("workflowExecutions.progressLabel"),
63
+ cell: ({ getValue }) => {
64
+ const steps = getValue()?.steps;
65
+ if (!steps) {
66
+ return "0 of 0 steps";
67
+ }
68
+ const actionableSteps = Object.values(steps).filter(
69
+ (step) => step.id !== ROOT_PREFIX
70
+ );
71
+ const completedSteps = actionableSteps.filter(
72
+ (step) => step.invoke.state === "done" /* DONE */
73
+ );
74
+ return t("workflowExecutions.stepsCompletedLabel", {
75
+ completed: completedSteps.length,
76
+ count: actionableSteps.length
77
+ });
78
+ }
79
+ })
80
+ ],
81
+ [t]
82
+ );
83
+ };
84
+ var ROOT_PREFIX = "_root";
85
+
86
+ // src/routes/workflow-executions/workflow-execution-list/components/workflow-execution-list-table/use-workflow-execution-table-query.tsx
87
+ var useWorkflowExecutionTableQuery = ({
88
+ pageSize = 20,
89
+ prefix
90
+ }) => {
91
+ const raw = useQueryParams(["q", "offset"], prefix);
92
+ const { offset, ...rest } = raw;
93
+ const searchParams = {
94
+ limit: pageSize,
95
+ offset: offset ? parseInt(offset) : 0,
96
+ ...rest
97
+ };
98
+ return {
99
+ searchParams,
100
+ raw
101
+ };
102
+ };
103
+
104
+ // src/routes/workflow-executions/workflow-execution-list/components/workflow-execution-list-table/workflow-execution-list-table.tsx
105
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
106
+ var PAGE_SIZE = 20;
107
+ var WorkflowExecutionListTable = () => {
108
+ const { t } = useTranslation2();
109
+ const { searchParams, raw } = useWorkflowExecutionTableQuery({
110
+ pageSize: PAGE_SIZE
111
+ });
112
+ const { workflow_executions, count, isLoading, isError, error } = useWorkflowExecutions(
113
+ {
114
+ ...searchParams
115
+ },
116
+ {
117
+ placeholderData: keepPreviousData
118
+ }
119
+ );
120
+ const columns = useWorkflowExecutionTableColumns();
121
+ const { table } = useDataTable({
122
+ data: workflow_executions || [],
123
+ columns,
124
+ count,
125
+ pageSize: PAGE_SIZE,
126
+ enablePagination: true,
127
+ getRowId: (row) => row.id
128
+ });
129
+ if (isError) {
130
+ throw error;
131
+ }
132
+ return /* @__PURE__ */ jsxs(Container, { className: "divide-y p-0", children: [
133
+ /* @__PURE__ */ jsx2("div", { className: "flex items-center justify-between px-6 py-4", children: /* @__PURE__ */ jsxs("div", { children: [
134
+ /* @__PURE__ */ jsx2(Heading, { children: t("workflowExecutions.domain") }),
135
+ /* @__PURE__ */ jsx2(Text, { className: "text-ui-fg-subtle", size: "small", children: t(`workflowExecutions.subtitle`) })
136
+ ] }) }),
137
+ /* @__PURE__ */ jsx2(
138
+ _DataTable,
139
+ {
140
+ table,
141
+ columns,
142
+ count,
143
+ isLoading,
144
+ pageSize: PAGE_SIZE,
145
+ navigateTo: (row) => `${row.id}`,
146
+ search: true,
147
+ pagination: true,
148
+ queryObject: raw,
149
+ noRecords: {
150
+ message: t("workflowExecutions.list.noRecordsMessage")
151
+ }
152
+ }
153
+ )
154
+ ] });
155
+ };
156
+
157
+ // src/routes/workflow-executions/workflow-execution-list/workflow-execution-list.tsx
158
+ import { jsx as jsx3 } from "react/jsx-runtime";
159
+ var WorkflowExcecutionList = () => {
160
+ const { getWidgets } = useExtension();
161
+ return /* @__PURE__ */ jsx3(
162
+ SingleColumnPage,
163
+ {
164
+ widgets: {
165
+ after: getWidgets("workflow.list.after"),
166
+ before: getWidgets("workflow.list.before")
167
+ },
168
+ hasOutlet: false,
169
+ children: /* @__PURE__ */ jsx3(WorkflowExecutionListTable, {})
170
+ }
171
+ );
172
+ };
173
+ export {
174
+ WorkflowExcecutionList as Component
175
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acmekit/dashboard",
3
- "version": "2.13.6",
3
+ "version": "2.13.8",
4
4
  "scripts": {
5
5
  "generate:static": "node ./scripts/generate-currencies.js && prettier --write ./src/lib/currencies.ts",
6
6
  "dev": "../../../node_modules/.bin/vite",
@@ -39,10 +39,10 @@
39
39
  "dist"
40
40
  ],
41
41
  "dependencies": {
42
- "@acmekit/admin-shared": "2.13.6",
43
- "@acmekit/icons": "2.13.6",
44
- "@acmekit/js-sdk": "2.13.6",
45
- "@acmekit/ui": "4.1.6",
42
+ "@acmekit/admin-shared": "2.13.8",
43
+ "@acmekit/icons": "2.13.8",
44
+ "@acmekit/js-sdk": "2.13.8",
45
+ "@acmekit/ui": "4.1.8",
46
46
  "@ariakit/react": "^0.4.15",
47
47
  "@babel/runtime": "^7.26.10",
48
48
  "@dnd-kit/core": "^6.1.0",
@@ -80,10 +80,10 @@
80
80
  "zod": "3.25.76"
81
81
  },
82
82
  "devDependencies": {
83
- "@acmekit/admin-shared": "2.13.6",
84
- "@acmekit/admin-vite-plugin": "2.13.6",
85
- "@acmekit/types": "2.13.6",
86
- "@acmekit/ui-preset": "2.13.6"
83
+ "@acmekit/admin-shared": "2.13.8",
84
+ "@acmekit/admin-vite-plugin": "2.13.8",
85
+ "@acmekit/types": "2.13.8",
86
+ "@acmekit/ui-preset": "2.13.8"
87
87
  },
88
88
  "packageManager": "yarn@3.2.1"
89
89
  }
@@ -1,11 +1,12 @@
1
1
  import { ArrowUturnLeft, MinusMini } from "@acmekit/icons"
2
2
  import { clx, Divider, IconButton, Text } from "@acmekit/ui"
3
3
  import { Collapsible as RadixCollapsible } from "radix-ui"
4
- import { useEffect, useState } from "react"
4
+ import { Fragment, useEffect, useMemo, useState } from "react"
5
5
  import { useTranslation } from "react-i18next"
6
6
  import { Link, useLocation } from "react-router-dom"
7
7
 
8
8
  import { useExtension } from "../../../providers/extension-provider"
9
+ import { useFeatureFlag } from "../../../providers/feature-flag-provider"
9
10
  import { INavItem, NavItem } from "../nav-item"
10
11
  import { Shell } from "../shell"
11
12
  import { UserMenu } from "../user-menu"
@@ -18,6 +19,48 @@ export const SettingsLayout = () => {
18
19
  )
19
20
  }
20
21
 
22
+ const useSettingRoutes = (): INavItem[] => {
23
+ const isTranslationsEnabled = useFeatureFlag("translation")
24
+ const { t } = useTranslation()
25
+
26
+ return useMemo(
27
+ () => [
28
+ { label: t("store.domain"), to: "/settings/store" },
29
+ { label: t("users.domain"), to: "/settings/users" },
30
+ ...(isTranslationsEnabled
31
+ ? [{ label: t("translations.domain"), to: "/settings/translations" }]
32
+ : []),
33
+ ],
34
+ [t, isTranslationsEnabled]
35
+ )
36
+ }
37
+
38
+ const useDeveloperRoutes = (): INavItem[] => {
39
+ const { t } = useTranslation()
40
+ return useMemo(
41
+ () => [
42
+ {
43
+ label: t("apiKeyManagement.domain.publishable"),
44
+ to: "/settings/publishable-api-keys",
45
+ },
46
+ {
47
+ label: t("apiKeyManagement.domain.secret"),
48
+ to: "/settings/secret-api-keys",
49
+ },
50
+ { label: t("workflowExecutions.domain"), to: "/settings/workflows" },
51
+ ],
52
+ [t]
53
+ )
54
+ }
55
+
56
+ const useMyAccountRoutes = (): INavItem[] => {
57
+ const { t } = useTranslation()
58
+ return useMemo(
59
+ () => [{ label: t("profile.domain"), to: "/settings/profile" }],
60
+ [t]
61
+ )
62
+ }
63
+
21
64
  /**
22
65
  * Ensure that the `from` prop is not another settings route, to avoid
23
66
  * the user getting stuck in a navigation loop.
@@ -26,7 +69,6 @@ const getSafeFromValue = (from: string) => {
26
69
  if (from.startsWith("/settings")) {
27
70
  return "/"
28
71
  }
29
-
30
72
  return from
31
73
  }
32
74
 
@@ -34,6 +76,9 @@ const SettingsSidebar = () => {
34
76
  const { getMenu } = useExtension()
35
77
  const extensionRoutes = getMenu("settingsExtensions")
36
78
  const { t } = useTranslation()
79
+ const routes = useSettingRoutes()
80
+ const developerRoutes = useDeveloperRoutes()
81
+ const myAccountRoutes = useMyAccountRoutes()
37
82
 
38
83
  return (
39
84
  <aside className="relative flex flex-1 flex-col justify-between overflow-y-auto">
@@ -45,11 +90,34 @@ const SettingsSidebar = () => {
45
90
  </div>
46
91
  <div className="flex flex-1 flex-col">
47
92
  <div className="flex flex-1 flex-col overflow-y-auto">
93
+ <RadixCollapsibleSection
94
+ label={t("app.nav.settings.general")}
95
+ items={routes}
96
+ />
97
+ <div className="flex items-center justify-center px-3">
98
+ <Divider variant="dashed" />
99
+ </div>
100
+ <RadixCollapsibleSection
101
+ label={t("app.nav.settings.developer")}
102
+ items={developerRoutes}
103
+ />
104
+ <div className="flex items-center justify-center px-3">
105
+ <Divider variant="dashed" />
106
+ </div>
107
+ <RadixCollapsibleSection
108
+ label={t("app.nav.settings.myAccount")}
109
+ items={myAccountRoutes}
110
+ />
48
111
  {extensionRoutes.length > 0 ? (
49
- <RadixCollapsibleSection
50
- label={t("app.nav.common.extensions")}
51
- items={extensionRoutes}
52
- />
112
+ <Fragment>
113
+ <div className="flex items-center justify-center px-3">
114
+ <Divider variant="dashed" />
115
+ </div>
116
+ <RadixCollapsibleSection
117
+ label={t("app.nav.common.extensions")}
118
+ items={extensionRoutes}
119
+ />
120
+ </Fragment>
53
121
  ) : null}
54
122
  </div>
55
123
  <div className="bg-ui-bg-subtle sticky bottom-0">
@@ -18,6 +18,230 @@ function mergeSettingsRouteChildren(
18
18
  .flatMap((r) => r.children ?? [])
19
19
  }
20
20
 
21
+ /** Default framework settings routes (profile, store, users, api-keys, workflows, translations). */
22
+ const defaultSettingsRouteChildren: RouteObject[] = [
23
+ {
24
+ path: "profile",
25
+ errorElement: <ErrorBoundary />,
26
+ lazy: () => import("../../routes/profile/profile-detail"),
27
+ handle: { breadcrumb: () => t("profile.domain") },
28
+ children: [
29
+ {
30
+ path: "edit",
31
+ lazy: () => import("../../routes/profile/profile-edit"),
32
+ },
33
+ ],
34
+ },
35
+ {
36
+ path: "store",
37
+ errorElement: <ErrorBoundary />,
38
+ lazy: () => import("../../routes/store/store-detail"),
39
+ handle: { breadcrumb: () => t("store.domain") },
40
+ children: [
41
+ { path: "edit", lazy: () => import("../../routes/store/store-edit") },
42
+ {
43
+ path: "metadata/edit",
44
+ lazy: () => import("../../routes/store/store-metadata"),
45
+ },
46
+ ],
47
+ },
48
+ {
49
+ path: "users",
50
+ errorElement: <ErrorBoundary />,
51
+ element: <Outlet />,
52
+ handle: { breadcrumb: () => t("users.domain") },
53
+ children: [
54
+ {
55
+ path: "",
56
+ lazy: () => import("../../routes/users/user-list"),
57
+ children: [
58
+ {
59
+ path: "invite",
60
+ lazy: () => import("../../routes/users/user-invite"),
61
+ },
62
+ ],
63
+ },
64
+ {
65
+ path: ":id",
66
+ lazy: async () => {
67
+ const { Component, Breadcrumb, loader } = await import(
68
+ "../../routes/users/user-detail"
69
+ )
70
+ return {
71
+ Component,
72
+ loader,
73
+ handle: {
74
+ breadcrumb: (match: unknown) => (
75
+ <Breadcrumb {...(match as object)} />
76
+ ),
77
+ },
78
+ }
79
+ },
80
+ children: [
81
+ { path: "edit", lazy: () => import("../../routes/users/user-edit") },
82
+ {
83
+ path: "metadata/edit",
84
+ lazy: () => import("../../routes/users/user-metadata"),
85
+ },
86
+ ],
87
+ },
88
+ ],
89
+ },
90
+ {
91
+ path: "publishable-api-keys",
92
+ element: <Outlet />,
93
+ handle: { breadcrumb: () => t("apiKeyManagement.domain.publishable") },
94
+ children: [
95
+ {
96
+ path: "",
97
+ element: <Outlet />,
98
+ children: [
99
+ {
100
+ path: "",
101
+ lazy: () =>
102
+ import("../../routes/api-key-management/api-key-management-list"),
103
+ children: [
104
+ {
105
+ path: "create",
106
+ lazy: () =>
107
+ import(
108
+ "../../routes/api-key-management/api-key-management-create"
109
+ ),
110
+ },
111
+ ],
112
+ },
113
+ ],
114
+ },
115
+ {
116
+ path: ":id",
117
+ lazy: async () => {
118
+ const { Component, Breadcrumb, loader } = await import(
119
+ "../../routes/api-key-management/api-key-management-detail"
120
+ )
121
+ return {
122
+ Component,
123
+ loader,
124
+ handle: {
125
+ breadcrumb: (match: unknown) => (
126
+ <Breadcrumb {...(match as object)} />
127
+ ),
128
+ },
129
+ }
130
+ },
131
+ children: [
132
+ {
133
+ path: "edit",
134
+ lazy: () =>
135
+ import("../../routes/api-key-management/api-key-management-edit"),
136
+ },
137
+ ],
138
+ },
139
+ ],
140
+ },
141
+ {
142
+ path: "secret-api-keys",
143
+ element: <Outlet />,
144
+ handle: { breadcrumb: () => t("apiKeyManagement.domain.secret") },
145
+ children: [
146
+ {
147
+ path: "",
148
+ element: <Outlet />,
149
+ children: [
150
+ {
151
+ path: "",
152
+ lazy: () =>
153
+ import("../../routes/api-key-management/api-key-management-list"),
154
+ children: [
155
+ {
156
+ path: "create",
157
+ lazy: () =>
158
+ import(
159
+ "../../routes/api-key-management/api-key-management-create"
160
+ ),
161
+ },
162
+ ],
163
+ },
164
+ ],
165
+ },
166
+ {
167
+ path: ":id",
168
+ lazy: async () => {
169
+ const { Component, Breadcrumb, loader } = await import(
170
+ "../../routes/api-key-management/api-key-management-detail"
171
+ )
172
+ return {
173
+ Component,
174
+ loader,
175
+ handle: {
176
+ breadcrumb: (match: unknown) => (
177
+ <Breadcrumb {...(match as object)} />
178
+ ),
179
+ },
180
+ }
181
+ },
182
+ children: [
183
+ {
184
+ path: "edit",
185
+ lazy: () =>
186
+ import("../../routes/api-key-management/api-key-management-edit"),
187
+ },
188
+ ],
189
+ },
190
+ ],
191
+ },
192
+ {
193
+ path: "workflows",
194
+ errorElement: <ErrorBoundary />,
195
+ element: <Outlet />,
196
+ handle: { breadcrumb: () => t("workflowExecutions.domain") },
197
+ children: [
198
+ {
199
+ path: "",
200
+ lazy: () =>
201
+ import("../../routes/workflow-executions/workflow-execution-list"),
202
+ },
203
+ {
204
+ path: ":id",
205
+ lazy: async () => {
206
+ const { Component, Breadcrumb, loader } = await import(
207
+ "../../routes/workflow-executions/workflow-execution-detail"
208
+ )
209
+ return {
210
+ Component,
211
+ loader,
212
+ handle: {
213
+ breadcrumb: (match: unknown) => (
214
+ <Breadcrumb {...(match as object)} />
215
+ ),
216
+ },
217
+ }
218
+ },
219
+ },
220
+ ],
221
+ },
222
+ {
223
+ path: "translations",
224
+ errorElement: <ErrorBoundary />,
225
+ handle: { breadcrumb: () => t("translations.domain") },
226
+ children: [
227
+ {
228
+ path: "",
229
+ lazy: () => import("../../routes/translations/translation-list"),
230
+ children: [
231
+ {
232
+ path: "settings",
233
+ lazy: () => import("../../routes/translations/settings"),
234
+ },
235
+ ],
236
+ },
237
+ {
238
+ path: "edit",
239
+ lazy: () => import("../../routes/translations/translations-edit"),
240
+ },
241
+ ],
242
+ },
243
+ ]
244
+
21
245
  export function getRouteMap({
22
246
  settingsRoutes,
23
247
  coreRoutes,
@@ -55,6 +279,7 @@ export function getRouteMap({
55
279
  errorElement: <ErrorBoundary />,
56
280
  lazy: () => import("../../routes/settings"),
57
281
  },
282
+ ...defaultSettingsRouteChildren,
58
283
  ...settingsPluginChildren,
59
284
  ],
60
285
  },
@@ -23,7 +23,7 @@ export const Login = () => {
23
23
  const navigate = useNavigate()
24
24
  const { getWidgets } = useExtension()
25
25
 
26
- const from = location.state?.from?.pathname || "/orders"
26
+ const from = location.state?.from?.pathname || "/"
27
27
 
28
28
  const form = useForm<z.infer<typeof LoginSchema>>({
29
29
  resolver: zodResolver(LoginSchema),