@plumile/backoffice-react 0.1.194 → 0.1.195
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/lib/esm/auth/AuthRefreshNotice.js.map +1 -1
- package/lib/esm/auth/TotpQrCode.js +8 -5
- package/lib/esm/auth/TotpQrCode.js.map +1 -1
- package/lib/esm/auth/login/AuthPanel.js.map +1 -1
- package/lib/esm/auth/login/EmailCapturePanel.js +4 -4
- package/lib/esm/auth/login/EmailCapturePanel.js.map +1 -1
- package/lib/esm/auth/login/LoginFlow.js.map +1 -1
- package/lib/esm/auth/login/MethodChooser.js.map +1 -1
- package/lib/esm/auth/login/MfaChallengeForm.js +4 -4
- package/lib/esm/auth/login/MfaChallengeForm.js.map +1 -1
- package/lib/esm/auth/login/OidcButtons.js.map +1 -1
- package/lib/esm/auth/login/PasskeyLoginForm.js +4 -4
- package/lib/esm/auth/login/PasskeyLoginForm.js.map +1 -1
- package/lib/esm/auth/login/PasswordLoginPanel.js.map +1 -1
- package/lib/esm/auth/pages/AcceptInvitationScreen.js.map +1 -1
- package/lib/esm/auth/pages/PasswordResetCompleteScreen.js.map +1 -1
- package/lib/esm/auth/pages/PasswordResetRequestScreen.js.map +1 -1
- package/lib/esm/auth/pages/VerifyEmailScreen.js.map +1 -1
- package/lib/esm/components/backoffice/actions/BackofficeEntityActionFormDialog.js +0 -1
- package/lib/esm/components/backoffice/actions/BackofficeEntityActionFormDialog.js.map +1 -1
- package/lib/esm/components/backoffice/actions/LazyBackofficeEntityActionFormDialog.js.map +1 -1
- package/lib/esm/components/backoffice/billing/BackofficeBillingUsageChart.js.map +1 -1
- package/lib/esm/components/backoffice/columns/buildDataTableColumns.js +16 -11
- package/lib/esm/components/backoffice/columns/buildDataTableColumns.js.map +1 -1
- package/lib/esm/components/backoffice/detail/BackofficeDetailBadgeRow.js.map +1 -1
- package/lib/esm/components/backoffice/detail/BackofficeDetailErrorList.js.map +1 -1
- package/lib/esm/components/backoffice/detail/BackofficeEntitySummaryHeader.js.map +1 -1
- package/lib/esm/components/backoffice/detail/BackofficeLifecycleTimelineSection.js.map +1 -1
- package/lib/esm/components/backoffice/detail/BackofficeRelationsSummaryGrid.js.map +1 -1
- package/lib/esm/components/backoffice/detail/BackofficeTokenUsageBreakdown.js.map +1 -1
- package/lib/esm/components/backoffice/detail/BackofficeUsageCostBreakdown.js.map +1 -1
- package/lib/esm/components/backoffice/filters/BackofficeFilterAction.js +2 -2
- package/lib/esm/components/backoffice/filters/BackofficeFilterAction.js.map +1 -1
- package/lib/esm/components/backoffice/filters/DeferredFilterSearchInput.js.map +1 -1
- package/lib/esm/components/backoffice/filters/EntityFilterValue.js.map +1 -1
- package/lib/esm/components/backoffice/filters/EntityIdFilterField.js.map +1 -1
- package/lib/esm/components/backoffice/hub/BackofficeHubTemplate.js.map +1 -1
- package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js +4 -1
- package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js.map +1 -1
- package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js.map +1 -1
- package/lib/esm/components/backoffice/layout/buildSidebarSections.js.map +1 -1
- package/lib/esm/components/backoffice/layout/sidebarUtils.js.map +1 -1
- package/lib/esm/components/backoffice/links/BackofficeInlineLink.js.map +1 -1
- package/lib/esm/components/backoffice/links/BackofficeLink.js.map +1 -1
- package/lib/esm/components/backoffice/links/BackofficeLinkContent.js.map +1 -1
- package/lib/esm/components/backoffice/links/BackofficeLinkLabel.js.map +1 -1
- package/lib/esm/components/backoffice/list/RowFlagsCell.js.map +1 -1
- package/lib/esm/components/backoffice/overview/BackofficeOverviewLayout.js.map +1 -1
- package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js +9 -9
- package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js.map +1 -1
- package/lib/esm/components/backoffice/refs/BackofficeEntityIdRef.js.map +1 -1
- package/lib/esm/components/backoffice/refs/BackofficeEntityLink.js.map +1 -1
- package/lib/esm/components/backoffice/refs/BackofficeLazyEntityCount.js.map +1 -1
- package/lib/esm/components/backoffice/refs/BackofficeRelatedCountLink.js +4 -4
- package/lib/esm/components/backoffice/refs/BackofficeRelatedCountLink.js.map +1 -1
- package/lib/esm/components/backoffice/routing/BackofficeContentBoundary.js.map +1 -1
- package/lib/esm/components/backoffice/routing/BackofficeContentError.js.map +1 -1
- package/lib/esm/components/backoffice/routing/BackofficeContentFallback.js.map +1 -1
- package/lib/esm/components/backoffice/routing/BackofficeRoutePendingBar.js.map +1 -1
- package/lib/esm/components/backoffice/scaffolds/BackofficeEntityDetailNotFound.js +8 -5
- package/lib/esm/components/backoffice/scaffolds/BackofficeEntityDetailNotFound.js.map +1 -1
- package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js +306 -297
- package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js.map +1 -1
- package/lib/esm/components/backoffice/scaffolds/BackofficeTabbedDetailShell.js.map +1 -1
- package/lib/esm/components/backoffice/shared/BackofficeFilterableCell.js.map +1 -1
- package/lib/esm/components/backoffice/shared/BackofficeFormattedCurrency.js.map +1 -1
- package/lib/esm/components/backoffice/shared/BackofficeFormattedNumber.js.map +1 -1
- package/lib/esm/components/backoffice/shared/BackofficeInlineFilterRow.js.map +1 -1
- package/lib/esm/components/backoffice/tools/BackofficeToolsDocPanel.js.map +1 -1
- package/lib/esm/components/backoffice/tools/BackofficeToolsErrorFallback.js.map +1 -1
- package/lib/esm/components/backoffice/tools/BackofficeToolsJsonForm.js.map +1 -1
- package/lib/esm/components/backoffice/tools/BackofficeToolsQueryBoundary.js +11 -11
- package/lib/esm/components/backoffice/tools/BackofficeToolsQueryBoundary.js.map +1 -1
- package/lib/esm/node_modules/relay-test-utils/lib/RelayModernMockEnvironment.js +1 -1
- package/lib/esm/node_modules/relay-test-utils/lib/RelayModernMockEnvironment.js.map +1 -1
- package/lib/esm/pages/BackofficeAcceptInvitationPage.js +8 -8
- package/lib/esm/pages/BackofficeAcceptInvitationPage.js.map +1 -1
- package/lib/esm/pages/BackofficeDashboardPage.js +4 -4
- package/lib/esm/pages/BackofficeDashboardPage.js.map +1 -1
- package/lib/esm/pages/BackofficeDashboardShellPage.js.map +1 -1
- package/lib/esm/pages/BackofficeDashboardWidgetContent.js +62 -43
- package/lib/esm/pages/BackofficeDashboardWidgetContent.js.map +1 -1
- package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js +4 -4
- package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js.map +1 -1
- package/lib/esm/pages/BackofficeEntityDetailPage.js +95 -89
- package/lib/esm/pages/BackofficeEntityDetailPage.js.map +1 -1
- package/lib/esm/pages/BackofficeEntityDetailPage.view-helpers.js +2 -2
- package/lib/esm/pages/BackofficeEntityDetailPage.view-helpers.js.map +1 -1
- package/lib/esm/pages/BackofficeEntityDetailPageConfigPage.js.map +1 -1
- package/lib/esm/pages/BackofficeEntityListDataPage.js +13 -11
- package/lib/esm/pages/BackofficeEntityListDataPage.js.map +1 -1
- package/lib/esm/pages/BackofficeEntityListPage.js +80 -76
- package/lib/esm/pages/BackofficeEntityListPage.js.map +1 -1
- package/lib/esm/pages/BackofficeEntityListShellPage.js.map +1 -1
- package/lib/esm/pages/BackofficeHubPage.js.map +1 -1
- package/lib/esm/pages/BackofficeLayoutPage.js +56 -53
- package/lib/esm/pages/BackofficeLayoutPage.js.map +1 -1
- package/lib/esm/pages/BackofficeLoginPage.js +26 -26
- package/lib/esm/pages/BackofficeLoginPage.js.map +1 -1
- package/lib/esm/pages/BackofficePasswordResetCompletePage.js +36 -36
- package/lib/esm/pages/BackofficePasswordResetCompletePage.js.map +1 -1
- package/lib/esm/pages/BackofficePasswordResetRequestPage.js +3 -3
- package/lib/esm/pages/BackofficePasswordResetRequestPage.js.map +1 -1
- package/lib/esm/pages/BackofficeToolShellPage.js.map +1 -1
- package/lib/esm/pages/BackofficeVerifyEmailPage.js +36 -36
- package/lib/esm/pages/BackofficeVerifyEmailPage.js.map +1 -1
- package/lib/esm/pages/detail/BackofficeEntityDetailManifestFallback.js.map +1 -1
- package/lib/esm/provider/BackofficeProvider.js +3 -2
- package/lib/esm/provider/BackofficeProvider.js.map +1 -1
- package/lib/esm/relay/envHelpers.js.map +1 -1
- package/lib/esm/router/createBackofficeRoutes.js +2 -2
- package/lib/esm/router/createBackofficeRoutes.js.map +1 -1
- package/lib/esm/storybook/relay/RelayStory.js +4 -1
- package/lib/esm/storybook/relay/RelayStory.js.map +1 -1
- package/lib/esm/subscriptions/useCursorResumableSubscription.js +4 -4
- package/lib/esm/subscriptions/useCursorResumableSubscription.js.map +1 -1
- package/package.json +16 -16
|
@@ -10,46 +10,46 @@ import * as u from "react-relay";
|
|
|
10
10
|
import d from "@plumile/router/routing/RoutingContext.js";
|
|
11
11
|
//#region src/pages/BackofficePasswordResetCompletePage.tsx
|
|
12
12
|
var { useMutation: f } = u, p = () => {
|
|
13
|
-
let u = c(d), { basePath: p } = i(), m = a(), { t: h } = e(), [g] = f(m.completePasswordResetMutation)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
case "PASSWORD_POLICY_VIOLATION": return h("auth.passwordResetComplete.errors.policyViolation");
|
|
31
|
-
case "INTERNAL_ERROR": return t;
|
|
32
|
-
default: return null;
|
|
33
|
-
}
|
|
13
|
+
let u = c(d), { basePath: p } = i(), m = a(), { t: h } = e(), [g] = f(m.completePasswordResetMutation), _ = s(() => {
|
|
14
|
+
u?.history.push({ pathname: o(p) });
|
|
15
|
+
}, [p, u?.history]), v = s(async (e) => {
|
|
16
|
+
let t = h("auth.passwordResetComplete.errors.invalid"), i = t;
|
|
17
|
+
return new Promise((a, o) => {
|
|
18
|
+
g({
|
|
19
|
+
variables: { input: e },
|
|
20
|
+
onCompleted: (e) => {
|
|
21
|
+
let s = r(e.completePasswordReset ?? null, {
|
|
22
|
+
defaultErrorMessage: i,
|
|
23
|
+
mapReason: (e) => {
|
|
24
|
+
switch (e) {
|
|
25
|
+
case "INVALID_TOKEN": return t;
|
|
26
|
+
case "TOKEN_EXPIRED": return h("auth.passwordResetComplete.errors.expired");
|
|
27
|
+
case "PASSWORD_POLICY_VIOLATION": return h("auth.passwordResetComplete.errors.policyViolation");
|
|
28
|
+
case "INTERNAL_ERROR": return t;
|
|
29
|
+
default: return null;
|
|
34
30
|
}
|
|
35
|
-
});
|
|
36
|
-
if (!s.ok) {
|
|
37
|
-
o(Error(s.message));
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
let c = n(s.payload.success ?? null, i);
|
|
41
|
-
if (!c.ok) {
|
|
42
|
-
o(Error(c.message));
|
|
43
|
-
return;
|
|
44
31
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
32
|
+
});
|
|
33
|
+
if (!s.ok) {
|
|
34
|
+
o(Error(s.message));
|
|
35
|
+
return;
|
|
49
36
|
}
|
|
50
|
-
|
|
37
|
+
let c = n(s.payload.success ?? null, i);
|
|
38
|
+
if (!c.ok) {
|
|
39
|
+
o(Error(c.message));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
a(c.value);
|
|
43
|
+
},
|
|
44
|
+
onError: () => {
|
|
45
|
+
o(Error(i));
|
|
46
|
+
}
|
|
51
47
|
});
|
|
52
|
-
}
|
|
48
|
+
});
|
|
49
|
+
}, [g, h]);
|
|
50
|
+
return /* @__PURE__ */ l(t, {
|
|
51
|
+
onBackToLogin: _,
|
|
52
|
+
onCompletePasswordReset: v
|
|
53
53
|
});
|
|
54
54
|
};
|
|
55
55
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackofficePasswordResetCompletePage.js","names":[],"sources":["../../../src/pages/BackofficePasswordResetCompletePage.tsx"],"sourcesContent":["import { useCallback, useContext, type JSX } from 'react';\nimport * as ReactRelay from 'react-relay';\nimport type { MutationParameters } from 'relay-runtime';\nimport RoutingContext from '@plumile/router/routing/RoutingContext.js';\n\nimport { PasswordResetCompleteScreen } from '../auth/pages/PasswordResetCompleteScreen.js';\nimport {\n type MutationPayloadBase,\n requireField,\n resolveMutationOutcome,\n} from '../relay/mutationResult.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficeConfig } from '../provider/BackofficeConfigContext.js';\nimport { useBackofficeAuthPasswordResetCompleteConfig } from '../provider/useBackofficeLazyValue.js';\nimport { getBackofficeLoginPath } from '../router/backofficeAuthPaths.js';\n\nconst { useMutation } = ReactRelay;\n\ntype CompletePasswordResetErrorReason =\n | 'INVALID_TOKEN'\n | 'TOKEN_EXPIRED'\n | 'PASSWORD_POLICY_VIOLATION'\n | 'INTERNAL_ERROR';\n\ntype CompletePasswordResetMutationPayload =\n MutationPayloadBase<CompletePasswordResetErrorReason> & {\n success?: boolean | null;\n };\n\nexport const BackofficePasswordResetCompletePage = (): JSX.Element => {\n const routerContext = useContext(RoutingContext);\n const { basePath } = useBackofficeConfig();\n const auth = useBackofficeAuthPasswordResetCompleteConfig();\n const { t } = useBackofficeReactTranslation();\n type CompletePasswordResetMutation = MutationParameters & {\n response: {\n completePasswordReset?: CompletePasswordResetMutationPayload | null;\n };\n variables: { input: { newPassword: string; token: string } };\n };\n const [commitReset] = useMutation<CompletePasswordResetMutation>(\n auth.completePasswordResetMutation,\n );\n\n const handleBackToLogin = useCallback(() => {\n routerContext?.history.push({ pathname: getBackofficeLoginPath(basePath) });\n }, [basePath, routerContext?.history]);\n\n const handleCompleteReset = useCallback(\n async (input: { newPassword: string; token: string }): Promise<boolean> => {\n const invalidMessage = t('auth.passwordResetComplete.errors.invalid');\n const defaultErrorMessage = invalidMessage;\n\n return new Promise((resolve, reject) => {\n commitReset({\n variables: {\n input,\n },\n onCompleted: (response) => {\n const outcome = resolveMutationOutcome(\n response.completePasswordReset ?? null,\n {\n defaultErrorMessage,\n mapReason: (reason) => {\n switch (reason) {\n case 'INVALID_TOKEN':\n return invalidMessage;\n case 'TOKEN_EXPIRED':\n return t('auth.passwordResetComplete.errors.expired');\n case 'PASSWORD_POLICY_VIOLATION':\n return t(\n 'auth.passwordResetComplete.errors.policyViolation',\n );\n case 'INTERNAL_ERROR':\n return invalidMessage;\n default:\n return null;\n }\n },\n },\n );\n if (!outcome.ok) {\n reject(new Error(outcome.message));\n return;\n }\n\n const successResult = requireField(\n outcome.payload.success ?? null,\n defaultErrorMessage,\n );\n if (!successResult.ok) {\n reject(new Error(successResult.message));\n return;\n }\n resolve(successResult.value);\n },\n onError: () => {\n reject(new Error(defaultErrorMessage));\n },\n });\n });\n },\n [commitReset, t],\n );\n\n return (\n <PasswordResetCompleteScreen\n onBackToLogin={handleBackToLogin}\n onCompletePasswordReset={handleCompleteReset}\n />\n );\n};\n\nexport default BackofficePasswordResetCompletePage;\n"],"mappings":";;;;;;;;;;;AAgBA,IAAM,EAAE,mBAAgB,GAaX,UAAyD;CACpE,IAAM,IAAgB,EAAW,CAAc,GACzC,EAAE,gBAAa,EAAoB,GACnC,IAAO,EAA6C,GACpD,EAAE,SAAM,EAA8B,GAOtC,CAAC,KAAe,EACpB,EAAK,6BACP
|
|
1
|
+
{"version":3,"file":"BackofficePasswordResetCompletePage.js","names":[],"sources":["../../../src/pages/BackofficePasswordResetCompletePage.tsx"],"sourcesContent":["import { useCallback, useContext, type JSX } from 'react';\nimport * as ReactRelay from 'react-relay';\nimport type { MutationParameters } from 'relay-runtime';\nimport RoutingContext from '@plumile/router/routing/RoutingContext.js';\n\nimport { PasswordResetCompleteScreen } from '../auth/pages/PasswordResetCompleteScreen.js';\nimport {\n type MutationPayloadBase,\n requireField,\n resolveMutationOutcome,\n} from '../relay/mutationResult.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficeConfig } from '../provider/BackofficeConfigContext.js';\nimport { useBackofficeAuthPasswordResetCompleteConfig } from '../provider/useBackofficeLazyValue.js';\nimport { getBackofficeLoginPath } from '../router/backofficeAuthPaths.js';\n\nconst { useMutation } = ReactRelay;\n\ntype CompletePasswordResetErrorReason =\n | 'INVALID_TOKEN'\n | 'TOKEN_EXPIRED'\n | 'PASSWORD_POLICY_VIOLATION'\n | 'INTERNAL_ERROR';\n\ntype CompletePasswordResetMutationPayload =\n MutationPayloadBase<CompletePasswordResetErrorReason> & {\n success?: boolean | null;\n };\n\nexport const BackofficePasswordResetCompletePage = (): JSX.Element => {\n const routerContext = useContext(RoutingContext);\n const { basePath } = useBackofficeConfig();\n const auth = useBackofficeAuthPasswordResetCompleteConfig();\n const { t } = useBackofficeReactTranslation();\n type CompletePasswordResetMutation = MutationParameters & {\n response: {\n completePasswordReset?: CompletePasswordResetMutationPayload | null;\n };\n variables: { input: { newPassword: string; token: string } };\n };\n const [commitReset] = useMutation<CompletePasswordResetMutation>(\n auth.completePasswordResetMutation,\n );\n\n const handleBackToLogin = useCallback(() => {\n routerContext?.history.push({ pathname: getBackofficeLoginPath(basePath) });\n }, [basePath, routerContext?.history]);\n\n const handleCompleteReset = useCallback(\n async (input: { newPassword: string; token: string }): Promise<boolean> => {\n const invalidMessage = t('auth.passwordResetComplete.errors.invalid');\n const defaultErrorMessage = invalidMessage;\n\n return new Promise((resolve, reject) => {\n commitReset({\n variables: {\n input,\n },\n onCompleted: (response) => {\n const outcome = resolveMutationOutcome(\n response.completePasswordReset ?? null,\n {\n defaultErrorMessage,\n mapReason: (reason) => {\n switch (reason) {\n case 'INVALID_TOKEN':\n return invalidMessage;\n case 'TOKEN_EXPIRED':\n return t('auth.passwordResetComplete.errors.expired');\n case 'PASSWORD_POLICY_VIOLATION':\n return t(\n 'auth.passwordResetComplete.errors.policyViolation',\n );\n case 'INTERNAL_ERROR':\n return invalidMessage;\n default:\n return null;\n }\n },\n },\n );\n if (!outcome.ok) {\n reject(new Error(outcome.message));\n return;\n }\n\n const successResult = requireField(\n outcome.payload.success ?? null,\n defaultErrorMessage,\n );\n if (!successResult.ok) {\n reject(new Error(successResult.message));\n return;\n }\n resolve(successResult.value);\n },\n onError: () => {\n reject(new Error(defaultErrorMessage));\n },\n });\n });\n },\n [commitReset, t],\n );\n\n return (\n <PasswordResetCompleteScreen\n onBackToLogin={handleBackToLogin}\n onCompletePasswordReset={handleCompleteReset}\n />\n );\n};\n\nexport default BackofficePasswordResetCompletePage;\n"],"mappings":";;;;;;;;;;;AAgBA,IAAM,EAAE,mBAAgB,GAaX,UAAyD;CACpE,IAAM,IAAgB,EAAW,CAAc,GACzC,EAAE,gBAAa,EAAoB,GACnC,IAAO,EAA6C,GACpD,EAAE,SAAM,EAA8B,GAOtC,CAAC,KAAe,EACpB,EAAK,6BACP,GAEM,IAAoB,QAAkB;EAC1C,GAAe,QAAQ,KAAK,EAAE,UAAU,EAAuB,CAAQ,EAAE,CAAC;CAC5E,GAAG,CAAC,GAAU,GAAe,OAAO,CAAC,GAE/B,IAAsB,EAC1B,OAAO,MAAoE;EACzE,IAAM,IAAiB,EAAE,2CAA2C,GAC9D,IAAsB;EAE5B,OAAO,IAAI,SAAS,GAAS,MAAW;GACtC,EAAY;IACV,WAAW,EACT,SACF;IACA,cAAc,MAAa;KACzB,IAAM,IAAU,EACd,EAAS,yBAAyB,MAClC;MACE;MACA,YAAY,MAAW;OACrB,QAAQ,GAAR;QACE,KAAK,iBACH,OAAO;QACT,KAAK,iBACH,OAAO,EAAE,2CAA2C;QACtD,KAAK,6BACH,OAAO,EACL,mDACF;QACF,KAAK,kBACH,OAAO;QACT,SACE,OAAO;OACX;MACF;KACF,CACF;KACA,IAAI,CAAC,EAAQ,IAAI;MACf,EAAW,MAAM,EAAQ,OAAO,CAAC;MACjC;KACF;KAEA,IAAM,IAAgB,EACpB,EAAQ,QAAQ,WAAW,MAC3B,CACF;KACA,IAAI,CAAC,EAAc,IAAI;MACrB,EAAW,MAAM,EAAc,OAAO,CAAC;MACvC;KACF;KACA,EAAQ,EAAc,KAAK;IAC7B;IACA,eAAe;KACb,EAAW,MAAM,CAAmB,CAAC;IACvC;GACF,CAAC;EACH,CAAC;CACH,GACA,CAAC,GAAa,CAAC,CACjB;CAEA,OACE,kBAAC,GAAD;EACE,eAAe;EACf,yBAAyB;CAC1B,CAAA;AAEL"}
|
|
@@ -14,8 +14,7 @@ var { useMutation: c } = s, l = () => {
|
|
|
14
14
|
case "INTERNAL_ERROR": return l("auth.passwordResetRequest.errors.startFailed");
|
|
15
15
|
default: return null;
|
|
16
16
|
}
|
|
17
|
-
}, [l])
|
|
18
|
-
return /* @__PURE__ */ o(t, { onStartPasswordReset: a(async (e) => {
|
|
17
|
+
}, [l]), f = a(async (e) => {
|
|
19
18
|
let t = l("auth.passwordResetRequest.errors.startFailed");
|
|
20
19
|
return new Promise((i, a) => {
|
|
21
20
|
u({
|
|
@@ -45,7 +44,8 @@ var { useMutation: c } = s, l = () => {
|
|
|
45
44
|
u,
|
|
46
45
|
d,
|
|
47
46
|
l
|
|
48
|
-
])
|
|
47
|
+
]);
|
|
48
|
+
return /* @__PURE__ */ o(t, { onStartPasswordReset: f });
|
|
49
49
|
};
|
|
50
50
|
//#endregion
|
|
51
51
|
export { l as BackofficePasswordResetRequestPage, l as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackofficePasswordResetRequestPage.js","names":[],"sources":["../../../src/pages/BackofficePasswordResetRequestPage.tsx"],"sourcesContent":["import { useCallback, type JSX } from 'react';\nimport * as ReactRelay from 'react-relay';\nimport type { MutationParameters } from 'relay-runtime';\n\nimport { PasswordResetRequestScreen } from '../auth/pages/PasswordResetRequestScreen.js';\nimport {\n type MutationPayloadBase,\n requireField,\n resolveMutationOutcome,\n} from '../relay/mutationResult.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficeAuthPasswordResetRequestConfig } from '../provider/useBackofficeLazyValue.js';\n\nconst { useMutation } = ReactRelay;\n\ntype StartPasswordResetErrorReason =\n 'INVALID_EMAIL' | 'RATE_LIMITED' | 'INTERNAL_ERROR';\n\ntype StartPasswordResetMutationPayload =\n MutationPayloadBase<StartPasswordResetErrorReason> & {\n payload?: { success?: boolean | null } | null;\n };\n\nexport const BackofficePasswordResetRequestPage = (): JSX.Element => {\n const auth = useBackofficeAuthPasswordResetRequestConfig();\n const { t } = useBackofficeReactTranslation();\n type StartPasswordResetMutation = MutationParameters & {\n response: { startPasswordReset?: StartPasswordResetMutationPayload | null };\n variables: { input: { email: string; locale?: string } };\n };\n const [commitReset] = useMutation<StartPasswordResetMutation>(\n auth.startPasswordResetMutation,\n );\n\n const mapStartResetReason = useCallback(\n (reason: StartPasswordResetErrorReason): string | null => {\n switch (reason) {\n case 'INVALID_EMAIL':\n return t('auth.passwordResetRequest.errors.invalidEmail');\n case 'RATE_LIMITED':\n return t('auth.passwordResetRequest.errors.rateLimited');\n case 'INTERNAL_ERROR':\n return t('auth.passwordResetRequest.errors.startFailed');\n default:\n return null;\n }\n },\n [t],\n );\n\n const handleStartReset = useCallback(\n async (input: { email: string; locale?: string }): Promise<boolean> => {\n const defaultErrorMessage = t(\n 'auth.passwordResetRequest.errors.startFailed',\n );\n\n return new Promise((resolve, reject) => {\n commitReset({\n variables: {\n input,\n },\n onCompleted: (response) => {\n const outcome = resolveMutationOutcome(\n response.startPasswordReset ?? null,\n {\n defaultErrorMessage,\n mapReason: mapStartResetReason,\n },\n );\n if (!outcome.ok) {\n reject(new Error(outcome.message));\n return;\n }\n\n const successResult = requireField(\n outcome.payload.payload?.success ?? null,\n defaultErrorMessage,\n );\n if (!successResult.ok) {\n reject(new Error(successResult.message));\n return;\n }\n resolve(successResult.value);\n },\n onError: () => {\n reject(new Error(defaultErrorMessage));\n },\n });\n });\n },\n [commitReset, mapStartResetReason, t],\n );\n\n return <PasswordResetRequestScreen onStartPasswordReset={handleStartReset} />;\n};\n\nexport default BackofficePasswordResetRequestPage;\n"],"mappings":";;;;;;;;AAaA,IAAM,EAAE,mBAAgB,GAUX,UAAwD;CACnE,IAAM,IAAO,EAA4C,GACnD,EAAE,SAAM,EAA8B,GAKtC,CAAC,KAAe,EACpB,EAAK,0BACP,GAEM,IAAsB,GACzB,MAAyD;EACxD,QAAQ,GAAR;GACE,KAAK,iBACH,OAAO,EAAE,+CAA+C;GAC1D,KAAK,gBACH,OAAO,EAAE,8CAA8C;GACzD,KAAK,kBACH,OAAO,EAAE,8CAA8C;GACzD,SACE,OAAO;EACX;CACF,GACA,CAAC,CAAC,CACJ
|
|
1
|
+
{"version":3,"file":"BackofficePasswordResetRequestPage.js","names":[],"sources":["../../../src/pages/BackofficePasswordResetRequestPage.tsx"],"sourcesContent":["import { useCallback, type JSX } from 'react';\nimport * as ReactRelay from 'react-relay';\nimport type { MutationParameters } from 'relay-runtime';\n\nimport { PasswordResetRequestScreen } from '../auth/pages/PasswordResetRequestScreen.js';\nimport {\n type MutationPayloadBase,\n requireField,\n resolveMutationOutcome,\n} from '../relay/mutationResult.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficeAuthPasswordResetRequestConfig } from '../provider/useBackofficeLazyValue.js';\n\nconst { useMutation } = ReactRelay;\n\ntype StartPasswordResetErrorReason =\n 'INVALID_EMAIL' | 'RATE_LIMITED' | 'INTERNAL_ERROR';\n\ntype StartPasswordResetMutationPayload =\n MutationPayloadBase<StartPasswordResetErrorReason> & {\n payload?: { success?: boolean | null } | null;\n };\n\nexport const BackofficePasswordResetRequestPage = (): JSX.Element => {\n const auth = useBackofficeAuthPasswordResetRequestConfig();\n const { t } = useBackofficeReactTranslation();\n type StartPasswordResetMutation = MutationParameters & {\n response: { startPasswordReset?: StartPasswordResetMutationPayload | null };\n variables: { input: { email: string; locale?: string } };\n };\n const [commitReset] = useMutation<StartPasswordResetMutation>(\n auth.startPasswordResetMutation,\n );\n\n const mapStartResetReason = useCallback(\n (reason: StartPasswordResetErrorReason): string | null => {\n switch (reason) {\n case 'INVALID_EMAIL':\n return t('auth.passwordResetRequest.errors.invalidEmail');\n case 'RATE_LIMITED':\n return t('auth.passwordResetRequest.errors.rateLimited');\n case 'INTERNAL_ERROR':\n return t('auth.passwordResetRequest.errors.startFailed');\n default:\n return null;\n }\n },\n [t],\n );\n\n const handleStartReset = useCallback(\n async (input: { email: string; locale?: string }): Promise<boolean> => {\n const defaultErrorMessage = t(\n 'auth.passwordResetRequest.errors.startFailed',\n );\n\n return new Promise((resolve, reject) => {\n commitReset({\n variables: {\n input,\n },\n onCompleted: (response) => {\n const outcome = resolveMutationOutcome(\n response.startPasswordReset ?? null,\n {\n defaultErrorMessage,\n mapReason: mapStartResetReason,\n },\n );\n if (!outcome.ok) {\n reject(new Error(outcome.message));\n return;\n }\n\n const successResult = requireField(\n outcome.payload.payload?.success ?? null,\n defaultErrorMessage,\n );\n if (!successResult.ok) {\n reject(new Error(successResult.message));\n return;\n }\n resolve(successResult.value);\n },\n onError: () => {\n reject(new Error(defaultErrorMessage));\n },\n });\n });\n },\n [commitReset, mapStartResetReason, t],\n );\n\n return <PasswordResetRequestScreen onStartPasswordReset={handleStartReset} />;\n};\n\nexport default BackofficePasswordResetRequestPage;\n"],"mappings":";;;;;;;;AAaA,IAAM,EAAE,mBAAgB,GAUX,UAAwD;CACnE,IAAM,IAAO,EAA4C,GACnD,EAAE,SAAM,EAA8B,GAKtC,CAAC,KAAe,EACpB,EAAK,0BACP,GAEM,IAAsB,GACzB,MAAyD;EACxD,QAAQ,GAAR;GACE,KAAK,iBACH,OAAO,EAAE,+CAA+C;GAC1D,KAAK,gBACH,OAAO,EAAE,8CAA8C;GACzD,KAAK,kBACH,OAAO,EAAE,8CAA8C;GACzD,SACE,OAAO;EACX;CACF,GACA,CAAC,CAAC,CACJ,GAEM,IAAmB,EACvB,OAAO,MAAgE;EACrE,IAAM,IAAsB,EAC1B,8CACF;EAEA,OAAO,IAAI,SAAS,GAAS,MAAW;GACtC,EAAY;IACV,WAAW,EACT,SACF;IACA,cAAc,MAAa;KACzB,IAAM,IAAU,EACd,EAAS,sBAAsB,MAC/B;MACE;MACA,WAAW;KACb,CACF;KACA,IAAI,CAAC,EAAQ,IAAI;MACf,EAAW,MAAM,EAAQ,OAAO,CAAC;MACjC;KACF;KAEA,IAAM,IAAgB,EACpB,EAAQ,QAAQ,SAAS,WAAW,MACpC,CACF;KACA,IAAI,CAAC,EAAc,IAAI;MACrB,EAAW,MAAM,EAAc,OAAO,CAAC;MACvC;KACF;KACA,EAAQ,EAAc,KAAK;IAC7B;IACA,eAAe;KACb,EAAW,MAAM,CAAmB,CAAC;IACvC;GACF,CAAC;EACH,CAAC;CACH,GACA;EAAC;EAAa;EAAqB;CAAC,CACtC;CAEA,OAAO,kBAAC,GAAD,EAA4B,sBAAsB,EAAmB,CAAA;AAC9E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackofficeToolShellPage.js","names":[],"sources":["../../../src/pages/BackofficeToolShellPage.tsx"],"sourcesContent":["import { Suspense, type JSX, type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type {\n BackofficeEntityManifestItem,\n BackofficePreparedToolRoute,\n} from '@plumile/backoffice-core/types.js';\nimport { DetailPageTemplate } from '@plumile/ui/backoffice/templates/detail_page_template/DetailPageTemplate.js';\n\nimport { BackofficeRightPageLayout } from '../components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js';\nimport { buildToolBreadcrumb } from '../components/backoffice/layout/breadcrumb/buildBreadcrumbs.js';\nimport { BackofficeStaticRouteFallback } from '../components/backoffice/routing/BackofficeRouteFallback.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\n\nexport type BackofficeToolShellPageProps = {\n children?: ReactNode;\n entityManifest: BackofficeEntityManifestItem;\n prepared: BackofficePreparedToolRoute;\n};\n\nconst BackofficeToolShellFallback = ({\n entityManifest,\n}: {\n entityManifest: BackofficeEntityManifestItem;\n}): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const title = entityManifest.label(tApp);\n\n return (\n <BackofficeRightPageLayout\n breadcrumb={buildToolBreadcrumb({\n id: entityManifest.id,\n title,\n })}\n >\n <DetailPageTemplate\n header={{\n title,\n subtitle: t('common.loading'),\n }}\n >\n <BackofficeStaticRouteFallback label={t('common.loading')} />\n </DetailPageTemplate>\n </BackofficeRightPageLayout>\n );\n};\n\nexport const BackofficeToolShellPage = ({\n children,\n entityManifest,\n}: BackofficeToolShellPageProps): JSX.Element => {\n return (\n <Suspense\n fallback={<BackofficeToolShellFallback entityManifest={entityManifest} />}\n >\n {children}\n </Suspense>\n );\n};\n\nexport default BackofficeToolShellPage;\n"],"mappings":";;;;;;;;;AAoBA,IAAM,KAA+B,EACnC,wBAGiB;CACjB,IAAM,EAAE,GAAG,MAAS,EAAe,GAC7B,EAAE,SAAM,EAA8B,GACtC,IAAQ,EAAe,MAAM,CAAI;CAEvC,OACE,kBAAC,GAAD;EACE,YAAY,EAAoB;GAC9B,IAAI,EAAe;GACnB;EACF,CAAC;
|
|
1
|
+
{"version":3,"file":"BackofficeToolShellPage.js","names":[],"sources":["../../../src/pages/BackofficeToolShellPage.tsx"],"sourcesContent":["import { Suspense, type JSX, type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type {\n BackofficeEntityManifestItem,\n BackofficePreparedToolRoute,\n} from '@plumile/backoffice-core/types.js';\nimport { DetailPageTemplate } from '@plumile/ui/backoffice/templates/detail_page_template/DetailPageTemplate.js';\n\nimport { BackofficeRightPageLayout } from '../components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js';\nimport { buildToolBreadcrumb } from '../components/backoffice/layout/breadcrumb/buildBreadcrumbs.js';\nimport { BackofficeStaticRouteFallback } from '../components/backoffice/routing/BackofficeRouteFallback.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\n\nexport type BackofficeToolShellPageProps = {\n children?: ReactNode;\n entityManifest: BackofficeEntityManifestItem;\n prepared: BackofficePreparedToolRoute;\n};\n\nconst BackofficeToolShellFallback = ({\n entityManifest,\n}: {\n entityManifest: BackofficeEntityManifestItem;\n}): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const title = entityManifest.label(tApp);\n\n return (\n <BackofficeRightPageLayout\n breadcrumb={buildToolBreadcrumb({\n id: entityManifest.id,\n title,\n })}\n >\n <DetailPageTemplate\n header={{\n title,\n subtitle: t('common.loading'),\n }}\n >\n <BackofficeStaticRouteFallback label={t('common.loading')} />\n </DetailPageTemplate>\n </BackofficeRightPageLayout>\n );\n};\n\nexport const BackofficeToolShellPage = ({\n children,\n entityManifest,\n}: BackofficeToolShellPageProps): JSX.Element => {\n return (\n <Suspense\n fallback={<BackofficeToolShellFallback entityManifest={entityManifest} />}\n >\n {children}\n </Suspense>\n );\n};\n\nexport default BackofficeToolShellPage;\n"],"mappings":";;;;;;;;;AAoBA,IAAM,KAA+B,EACnC,wBAGiB;CACjB,IAAM,EAAE,GAAG,MAAS,EAAe,GAC7B,EAAE,SAAM,EAA8B,GACtC,IAAQ,EAAe,MAAM,CAAI;CAEvC,OACE,kBAAC,GAAD;EACE,YAAY,EAAoB;GAC9B,IAAI,EAAe;GACnB;EACF,CAAC;EAED,UAAA,kBAAC,GAAD;GACE,QAAQ;IACN;IACA,UAAU,EAAE,gBAAgB;GAC9B;GAEA,UAAA,kBAAC,GAAD,EAA+B,OAAO,EAAE,gBAAgB,EAAI,CAAA;EAC1C,CAAA;CACK,CAAA;AAE/B,GAEa,KAA2B,EACtC,aACA,wBAGE,kBAAC,GAAD;CACE,UAAU,kBAAC,GAAD,EAA6C,kBAAiB,CAAA;CAEvE;AACO,CAAA"}
|
|
@@ -10,46 +10,46 @@ import * as u from "react-relay";
|
|
|
10
10
|
import d from "@plumile/router/routing/RoutingContext.js";
|
|
11
11
|
//#region src/pages/BackofficeVerifyEmailPage.tsx
|
|
12
12
|
var { useMutation: f } = u, p = () => {
|
|
13
|
-
let u = c(d), { basePath: p } = i(), m = a(), { t: h } = e(), [g] = f(m.verifyEmailMutation)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
case "ALREADY_VERIFIED": return h("auth.verifyEmail.errors.alreadyVerified");
|
|
31
|
-
case "INTERNAL_ERROR": return t;
|
|
32
|
-
default: return null;
|
|
33
|
-
}
|
|
13
|
+
let u = c(d), { basePath: p } = i(), m = a(), { t: h } = e(), [g] = f(m.verifyEmailMutation), _ = s(() => {
|
|
14
|
+
u?.history.push({ pathname: o(p) });
|
|
15
|
+
}, [p, u?.history]), v = s(async (e) => {
|
|
16
|
+
let t = h("auth.verifyEmail.errors.invalid"), i = t;
|
|
17
|
+
return new Promise((a, o) => {
|
|
18
|
+
g({
|
|
19
|
+
variables: { input: e },
|
|
20
|
+
onCompleted: (e) => {
|
|
21
|
+
let s = r(e.verifyEmail ?? null, {
|
|
22
|
+
defaultErrorMessage: i,
|
|
23
|
+
mapReason: (e) => {
|
|
24
|
+
switch (e) {
|
|
25
|
+
case "INVALID_TOKEN": return t;
|
|
26
|
+
case "TOKEN_EXPIRED": return h("auth.verifyEmail.errors.expired");
|
|
27
|
+
case "ALREADY_VERIFIED": return h("auth.verifyEmail.errors.alreadyVerified");
|
|
28
|
+
case "INTERNAL_ERROR": return t;
|
|
29
|
+
default: return null;
|
|
34
30
|
}
|
|
35
|
-
});
|
|
36
|
-
if (!s.ok) {
|
|
37
|
-
o(Error(s.message));
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
let c = n(s.payload.success ?? null, i);
|
|
41
|
-
if (!c.ok) {
|
|
42
|
-
o(Error(c.message));
|
|
43
|
-
return;
|
|
44
31
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
32
|
+
});
|
|
33
|
+
if (!s.ok) {
|
|
34
|
+
o(Error(s.message));
|
|
35
|
+
return;
|
|
49
36
|
}
|
|
50
|
-
|
|
37
|
+
let c = n(s.payload.success ?? null, i);
|
|
38
|
+
if (!c.ok) {
|
|
39
|
+
o(Error(c.message));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
a(c.value);
|
|
43
|
+
},
|
|
44
|
+
onError: () => {
|
|
45
|
+
o(Error(i));
|
|
46
|
+
}
|
|
51
47
|
});
|
|
52
|
-
}
|
|
48
|
+
});
|
|
49
|
+
}, [g, h]);
|
|
50
|
+
return /* @__PURE__ */ l(t, {
|
|
51
|
+
onBackToLogin: _,
|
|
52
|
+
onVerifyEmail: v
|
|
53
53
|
});
|
|
54
54
|
};
|
|
55
55
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackofficeVerifyEmailPage.js","names":[],"sources":["../../../src/pages/BackofficeVerifyEmailPage.tsx"],"sourcesContent":["import { useCallback, useContext, type JSX } from 'react';\nimport * as ReactRelay from 'react-relay';\nimport type { MutationParameters } from 'relay-runtime';\nimport RoutingContext from '@plumile/router/routing/RoutingContext.js';\n\nimport { VerifyEmailScreen } from '../auth/pages/VerifyEmailScreen.js';\nimport {\n type MutationPayloadBase,\n requireField,\n resolveMutationOutcome,\n} from '../relay/mutationResult.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficeConfig } from '../provider/BackofficeConfigContext.js';\nimport { useBackofficeAuthVerifyEmailConfig } from '../provider/useBackofficeLazyValue.js';\nimport { getBackofficeLoginPath } from '../router/backofficeAuthPaths.js';\n\nconst { useMutation } = ReactRelay;\n\ntype VerifyEmailErrorReason =\n 'INVALID_TOKEN' | 'TOKEN_EXPIRED' | 'ALREADY_VERIFIED' | 'INTERNAL_ERROR';\n\ntype VerifyEmailMutationPayload =\n MutationPayloadBase<VerifyEmailErrorReason> & {\n success?: boolean | null;\n };\n\nexport const BackofficeVerifyEmailPage = (): JSX.Element => {\n const routerContext = useContext(RoutingContext);\n const { basePath } = useBackofficeConfig();\n const auth = useBackofficeAuthVerifyEmailConfig();\n const { t } = useBackofficeReactTranslation();\n type VerifyEmailMutation = MutationParameters & {\n response: { verifyEmail?: VerifyEmailMutationPayload | null };\n variables: { input: { token: string } };\n };\n const [commitVerify] = useMutation<VerifyEmailMutation>(\n auth.verifyEmailMutation,\n );\n\n const handleBackToLogin = useCallback(() => {\n routerContext?.history.push({ pathname: getBackofficeLoginPath(basePath) });\n }, [basePath, routerContext?.history]);\n\n const handleVerifyEmail = useCallback(\n async (input: { token: string }): Promise<boolean> => {\n const invalidMessage = t('auth.verifyEmail.errors.invalid');\n const defaultErrorMessage = invalidMessage;\n\n return new Promise((resolve, reject) => {\n commitVerify({\n variables: {\n input,\n },\n onCompleted: (response) => {\n const outcome = resolveMutationOutcome(\n response.verifyEmail ?? null,\n {\n defaultErrorMessage,\n mapReason: (reason) => {\n switch (reason) {\n case 'INVALID_TOKEN':\n return invalidMessage;\n case 'TOKEN_EXPIRED':\n return t('auth.verifyEmail.errors.expired');\n case 'ALREADY_VERIFIED':\n return t('auth.verifyEmail.errors.alreadyVerified');\n case 'INTERNAL_ERROR':\n return invalidMessage;\n default:\n return null;\n }\n },\n },\n );\n if (!outcome.ok) {\n reject(new Error(outcome.message));\n return;\n }\n\n const successResult = requireField(\n outcome.payload.success ?? null,\n defaultErrorMessage,\n );\n if (!successResult.ok) {\n reject(new Error(successResult.message));\n return;\n }\n resolve(successResult.value);\n },\n onError: () => {\n reject(new Error(defaultErrorMessage));\n },\n });\n });\n },\n [commitVerify, t],\n );\n\n return (\n <VerifyEmailScreen\n onBackToLogin={handleBackToLogin}\n onVerifyEmail={handleVerifyEmail}\n />\n );\n};\n\nexport default BackofficeVerifyEmailPage;\n"],"mappings":";;;;;;;;;;;AAgBA,IAAM,EAAE,mBAAgB,GAUX,UAA+C;CAC1D,IAAM,IAAgB,EAAW,CAAc,GACzC,EAAE,gBAAa,EAAoB,GACnC,IAAO,EAAmC,GAC1C,EAAE,SAAM,EAA8B,GAKtC,CAAC,KAAgB,EACrB,EAAK,mBACP
|
|
1
|
+
{"version":3,"file":"BackofficeVerifyEmailPage.js","names":[],"sources":["../../../src/pages/BackofficeVerifyEmailPage.tsx"],"sourcesContent":["import { useCallback, useContext, type JSX } from 'react';\nimport * as ReactRelay from 'react-relay';\nimport type { MutationParameters } from 'relay-runtime';\nimport RoutingContext from '@plumile/router/routing/RoutingContext.js';\n\nimport { VerifyEmailScreen } from '../auth/pages/VerifyEmailScreen.js';\nimport {\n type MutationPayloadBase,\n requireField,\n resolveMutationOutcome,\n} from '../relay/mutationResult.js';\nimport { useBackofficeReactTranslation } from '../i18n/useBackofficeReactTranslation.js';\nimport { useBackofficeConfig } from '../provider/BackofficeConfigContext.js';\nimport { useBackofficeAuthVerifyEmailConfig } from '../provider/useBackofficeLazyValue.js';\nimport { getBackofficeLoginPath } from '../router/backofficeAuthPaths.js';\n\nconst { useMutation } = ReactRelay;\n\ntype VerifyEmailErrorReason =\n 'INVALID_TOKEN' | 'TOKEN_EXPIRED' | 'ALREADY_VERIFIED' | 'INTERNAL_ERROR';\n\ntype VerifyEmailMutationPayload =\n MutationPayloadBase<VerifyEmailErrorReason> & {\n success?: boolean | null;\n };\n\nexport const BackofficeVerifyEmailPage = (): JSX.Element => {\n const routerContext = useContext(RoutingContext);\n const { basePath } = useBackofficeConfig();\n const auth = useBackofficeAuthVerifyEmailConfig();\n const { t } = useBackofficeReactTranslation();\n type VerifyEmailMutation = MutationParameters & {\n response: { verifyEmail?: VerifyEmailMutationPayload | null };\n variables: { input: { token: string } };\n };\n const [commitVerify] = useMutation<VerifyEmailMutation>(\n auth.verifyEmailMutation,\n );\n\n const handleBackToLogin = useCallback(() => {\n routerContext?.history.push({ pathname: getBackofficeLoginPath(basePath) });\n }, [basePath, routerContext?.history]);\n\n const handleVerifyEmail = useCallback(\n async (input: { token: string }): Promise<boolean> => {\n const invalidMessage = t('auth.verifyEmail.errors.invalid');\n const defaultErrorMessage = invalidMessage;\n\n return new Promise((resolve, reject) => {\n commitVerify({\n variables: {\n input,\n },\n onCompleted: (response) => {\n const outcome = resolveMutationOutcome(\n response.verifyEmail ?? null,\n {\n defaultErrorMessage,\n mapReason: (reason) => {\n switch (reason) {\n case 'INVALID_TOKEN':\n return invalidMessage;\n case 'TOKEN_EXPIRED':\n return t('auth.verifyEmail.errors.expired');\n case 'ALREADY_VERIFIED':\n return t('auth.verifyEmail.errors.alreadyVerified');\n case 'INTERNAL_ERROR':\n return invalidMessage;\n default:\n return null;\n }\n },\n },\n );\n if (!outcome.ok) {\n reject(new Error(outcome.message));\n return;\n }\n\n const successResult = requireField(\n outcome.payload.success ?? null,\n defaultErrorMessage,\n );\n if (!successResult.ok) {\n reject(new Error(successResult.message));\n return;\n }\n resolve(successResult.value);\n },\n onError: () => {\n reject(new Error(defaultErrorMessage));\n },\n });\n });\n },\n [commitVerify, t],\n );\n\n return (\n <VerifyEmailScreen\n onBackToLogin={handleBackToLogin}\n onVerifyEmail={handleVerifyEmail}\n />\n );\n};\n\nexport default BackofficeVerifyEmailPage;\n"],"mappings":";;;;;;;;;;;AAgBA,IAAM,EAAE,mBAAgB,GAUX,UAA+C;CAC1D,IAAM,IAAgB,EAAW,CAAc,GACzC,EAAE,gBAAa,EAAoB,GACnC,IAAO,EAAmC,GAC1C,EAAE,SAAM,EAA8B,GAKtC,CAAC,KAAgB,EACrB,EAAK,mBACP,GAEM,IAAoB,QAAkB;EAC1C,GAAe,QAAQ,KAAK,EAAE,UAAU,EAAuB,CAAQ,EAAE,CAAC;CAC5E,GAAG,CAAC,GAAU,GAAe,OAAO,CAAC,GAE/B,IAAoB,EACxB,OAAO,MAA+C;EACpD,IAAM,IAAiB,EAAE,iCAAiC,GACpD,IAAsB;EAE5B,OAAO,IAAI,SAAS,GAAS,MAAW;GACtC,EAAa;IACX,WAAW,EACT,SACF;IACA,cAAc,MAAa;KACzB,IAAM,IAAU,EACd,EAAS,eAAe,MACxB;MACE;MACA,YAAY,MAAW;OACrB,QAAQ,GAAR;QACE,KAAK,iBACH,OAAO;QACT,KAAK,iBACH,OAAO,EAAE,iCAAiC;QAC5C,KAAK,oBACH,OAAO,EAAE,yCAAyC;QACpD,KAAK,kBACH,OAAO;QACT,SACE,OAAO;OACX;MACF;KACF,CACF;KACA,IAAI,CAAC,EAAQ,IAAI;MACf,EAAW,MAAM,EAAQ,OAAO,CAAC;MACjC;KACF;KAEA,IAAM,IAAgB,EACpB,EAAQ,QAAQ,WAAW,MAC3B,CACF;KACA,IAAI,CAAC,EAAc,IAAI;MACrB,EAAW,MAAM,EAAc,OAAO,CAAC;MACvC;KACF;KACA,EAAQ,EAAc,KAAK;IAC7B;IACA,eAAe;KACb,EAAW,MAAM,CAAmB,CAAC;IACvC;GACF,CAAC;EACH,CAAC;CACH,GACA,CAAC,GAAc,CAAC,CAClB;CAEA,OACE,kBAAC,GAAD;EACE,eAAe;EACf,eAAe;CAChB,CAAA;AAEL"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackofficeEntityDetailManifestFallback.js","names":[],"sources":["../../../../src/pages/detail/BackofficeEntityDetailManifestFallback.tsx"],"sourcesContent":["import { type JSX } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport useLocation from '@plumile/router/routing/useLocation.js';\n\nimport type {\n BackofficeDetailPageManifestItem,\n BackofficeEntityManifestItem,\n} from '@plumile/backoffice-core/types.js';\nimport { Tabs } from '@plumile/ui/atomic/molecules/tabs/Tabs.js';\nimport { BackofficePageHeader } from '@plumile/ui/backoffice/molecules/backoffice_page_header/BackofficePageHeader.js';\nimport { DetailPageTemplate } from '@plumile/ui/backoffice/templates/detail_page_template/DetailPageTemplate.js';\n\nimport { BackofficeRightPageLayout } from '../../components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js';\nimport type { BackofficeTopbarBreadcrumbItem } from '../../components/backoffice/layout/breadcrumb/types.js';\nimport { BackofficeStaticRouteFallback } from '../../components/backoffice/routing/BackofficeRouteFallback.js';\nimport { useBackofficeReactTranslation } from '../../i18n/useBackofficeReactTranslation.js';\n\nexport type BackofficeEntityDetailManifestFallbackProps = {\n entityManifest: BackofficeEntityManifestItem;\n id: string;\n pageId?: string | null;\n pagePath?: string | null;\n};\n\nconst normalizePath = (value: string): string => {\n return value.trim().replace(/^\\/+|\\/+$/g, '');\n};\n\nconst resolveManifestPage = (\n entityManifest: BackofficeEntityManifestItem,\n id: string,\n pageId: string | null | undefined,\n pagePath: string | null | undefined,\n currentPathname: string,\n): BackofficeDetailPageManifestItem | null => {\n const pages = entityManifest.detailPages ?? [];\n if (pages.length === 0) {\n return null;\n }\n\n const normalizedPagePath = normalizePath(pagePath ?? '');\n if (normalizedPagePath !== '') {\n const byPath = pages.find((page) => {\n return normalizePath(page.pathSegment) === normalizedPagePath;\n });\n if (byPath != null) {\n return byPath;\n }\n }\n\n const normalizedCurrentPathname = normalizePath(currentPathname);\n if (normalizedCurrentPathname !== '') {\n const byCurrentPathname = pages.find((page) => {\n return (\n normalizePath(entityManifest.routes.detailPage(id, page.id)) ===\n normalizedCurrentPathname\n );\n });\n if (byCurrentPathname != null) {\n return byCurrentPathname;\n }\n }\n\n if (pageId != null) {\n const byId = pages.find((page) => {\n return page.id === pageId;\n });\n if (byId != null) {\n return byId;\n }\n }\n\n const defaultPage = pages.find((page) => {\n return page.id === entityManifest.defaultDetailPageId;\n });\n return defaultPage ?? pages[0] ?? null;\n};\n\nexport const BackofficeEntityDetailManifestFallback = ({\n entityManifest,\n id,\n pageId,\n pagePath,\n}: BackofficeEntityDetailManifestFallbackProps): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const { pathname } = useLocation();\n const listLabel = entityManifest.label(tApp);\n const detailLabel =\n entityManifest.detailLabel?.(tApp) ?? t('detail.loadingTitle');\n const activePage = resolveManifestPage(\n entityManifest,\n id,\n pageId,\n pagePath,\n pathname,\n );\n const breadcrumb: BackofficeTopbarBreadcrumbItem[] = [\n {\n kind: 'link',\n target: {\n kind: 'entity-list',\n entityId: entityManifest.id,\n },\n label: listLabel,\n },\n ];\n\n if (activePage == null) {\n breadcrumb.push({\n kind: 'current',\n target: {\n kind: 'entity-detail',\n entityId: entityManifest.id,\n id,\n },\n label: detailLabel,\n });\n } else {\n breadcrumb.push(\n {\n kind: 'link',\n target: {\n kind: 'entity-detail',\n entityId: entityManifest.id,\n id,\n },\n label: detailLabel,\n },\n {\n kind: 'current',\n target: {\n kind: 'entity-detail-page',\n entityId: entityManifest.id,\n id,\n pageId: activePage.id,\n },\n label: activePage.label(tApp),\n },\n );\n }\n\n const pages = entityManifest.detailPages ?? [];\n let tabsNode: JSX.Element | null = null;\n if (pages.length > 1 && activePage != null) {\n tabsNode = (\n <Tabs\n items={pages.map((page) => {\n return {\n id: page.id,\n label: page.label(tApp),\n preloadOnHover: 'code-and-data',\n to: entityManifest.routes.detailPage(id, page.id),\n };\n })}\n activeId={activePage.id}\n variant=\"underline\"\n />\n );\n }\n\n return (\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <DetailPageTemplate\n headerNode={<BackofficePageHeader title={detailLabel} />}\n tabsNode={tabsNode}\n headerDensity=\"compact\"\n >\n <BackofficeStaticRouteFallback label={t('common.loading')} />\n </DetailPageTemplate>\n </BackofficeRightPageLayout>\n );\n};\n"],"mappings":";;;;;;;;;;AAwBA,IAAM,KAAiB,MACd,EAAM,KAAK,CAAC,CAAC,QAAQ,cAAc,EAAE,GAGxC,KACJ,GACA,GACA,GACA,GACA,MAC4C;CAC5C,IAAM,IAAQ,EAAe,eAAe,CAAC;CAC7C,IAAI,EAAM,WAAW,GACnB,OAAO;CAGT,IAAM,IAAqB,EAAc,KAAY,EAAE;CACvD,IAAI,MAAuB,IAAI;EAC7B,IAAM,IAAS,EAAM,MAAM,MAClB,EAAc,EAAK,WAAW,MAAM,CAC5C;EACD,IAAI,KAAU,MACZ,OAAO;CAEX;CAEA,IAAM,IAA4B,EAAc,CAAe;CAC/D,IAAI,MAA8B,IAAI;EACpC,IAAM,IAAoB,EAAM,MAAM,MAElC,EAAc,EAAe,OAAO,WAAW,GAAI,EAAK,EAAE,CAAC,MAC3D,CAEH;EACD,IAAI,KAAqB,MACvB,OAAO;CAEX;CAEA,IAAI,KAAU,MAAM;EAClB,IAAM,IAAO,EAAM,MAAM,MAChB,EAAK,OAAO,CACpB;EACD,IAAI,KAAQ,MACV,OAAO;CAEX;CAKA,OAHoB,EAAM,MAAM,MACvB,EAAK,OAAO,EAAe,mBAE7B,KAAe,EAAM,MAAM;AACpC,GAEa,KAA0C,EACrD,mBACA,OACA,WACA,kBAC8D;CAC9D,IAAM,EAAE,GAAG,MAAS,EAAe,GAC7B,EAAE,SAAM,EAA8B,GACtC,EAAE,gBAAa,EAAY,GAC3B,IAAY,EAAe,MAAM,CAAI,GACrC,IACJ,EAAe,cAAc,CAAI,KAAK,EAAE,qBAAqB,GACzD,IAAa,EACjB,GACA,GACA,GACA,GACA,CACF,GACM,IAA+C,CACnD;EACE,MAAM;EACN,QAAQ;GACN,MAAM;GACN,UAAU,EAAe;EAC3B;EACA,OAAO;CACT,CACF;CAEA,AAAI,KAAc,OAChB,EAAW,KAAK;EACd,MAAM;EACN,QAAQ;GACN,MAAM;GACN,UAAU,EAAe;GACzB;EACF;EACA,OAAO;CACT,CAAC,IAED,EAAW,KACT;EACE,MAAM;EACN,QAAQ;GACN,MAAM;GACN,UAAU,EAAe;GACzB;EACF;EACA,OAAO;CACT,GACA;EACE,MAAM;EACN,QAAQ;GACN,MAAM;GACN,UAAU,EAAe;GACzB;GACA,QAAQ,EAAW;EACrB;EACA,OAAO,EAAW,MAAM,CAAI;CAC9B,CACF;CAGF,IAAM,IAAQ,EAAe,eAAe,CAAC,GACzC,IAA+B;CAkBnC,OAjBI,EAAM,SAAS,KAAK,KAAc,SACpC,IACE,kBAAC,GAAD;EACE,OAAO,EAAM,KAAK,OACT;GACL,IAAI,EAAK;GACT,OAAO,EAAK,MAAM,CAAI;GACtB,gBAAgB;GAChB,IAAI,EAAe,OAAO,WAAW,GAAI,EAAK,EAAE;EAClD,EACD;EACD,UAAU,EAAW;EACrB,SAAQ;CACT,CAAA,IAKH,kBAAC,GAAD;EAAuC;
|
|
1
|
+
{"version":3,"file":"BackofficeEntityDetailManifestFallback.js","names":[],"sources":["../../../../src/pages/detail/BackofficeEntityDetailManifestFallback.tsx"],"sourcesContent":["import { type JSX } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport useLocation from '@plumile/router/routing/useLocation.js';\n\nimport type {\n BackofficeDetailPageManifestItem,\n BackofficeEntityManifestItem,\n} from '@plumile/backoffice-core/types.js';\nimport { Tabs } from '@plumile/ui/atomic/molecules/tabs/Tabs.js';\nimport { BackofficePageHeader } from '@plumile/ui/backoffice/molecules/backoffice_page_header/BackofficePageHeader.js';\nimport { DetailPageTemplate } from '@plumile/ui/backoffice/templates/detail_page_template/DetailPageTemplate.js';\n\nimport { BackofficeRightPageLayout } from '../../components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js';\nimport type { BackofficeTopbarBreadcrumbItem } from '../../components/backoffice/layout/breadcrumb/types.js';\nimport { BackofficeStaticRouteFallback } from '../../components/backoffice/routing/BackofficeRouteFallback.js';\nimport { useBackofficeReactTranslation } from '../../i18n/useBackofficeReactTranslation.js';\n\nexport type BackofficeEntityDetailManifestFallbackProps = {\n entityManifest: BackofficeEntityManifestItem;\n id: string;\n pageId?: string | null;\n pagePath?: string | null;\n};\n\nconst normalizePath = (value: string): string => {\n return value.trim().replace(/^\\/+|\\/+$/g, '');\n};\n\nconst resolveManifestPage = (\n entityManifest: BackofficeEntityManifestItem,\n id: string,\n pageId: string | null | undefined,\n pagePath: string | null | undefined,\n currentPathname: string,\n): BackofficeDetailPageManifestItem | null => {\n const pages = entityManifest.detailPages ?? [];\n if (pages.length === 0) {\n return null;\n }\n\n const normalizedPagePath = normalizePath(pagePath ?? '');\n if (normalizedPagePath !== '') {\n const byPath = pages.find((page) => {\n return normalizePath(page.pathSegment) === normalizedPagePath;\n });\n if (byPath != null) {\n return byPath;\n }\n }\n\n const normalizedCurrentPathname = normalizePath(currentPathname);\n if (normalizedCurrentPathname !== '') {\n const byCurrentPathname = pages.find((page) => {\n return (\n normalizePath(entityManifest.routes.detailPage(id, page.id)) ===\n normalizedCurrentPathname\n );\n });\n if (byCurrentPathname != null) {\n return byCurrentPathname;\n }\n }\n\n if (pageId != null) {\n const byId = pages.find((page) => {\n return page.id === pageId;\n });\n if (byId != null) {\n return byId;\n }\n }\n\n const defaultPage = pages.find((page) => {\n return page.id === entityManifest.defaultDetailPageId;\n });\n return defaultPage ?? pages[0] ?? null;\n};\n\nexport const BackofficeEntityDetailManifestFallback = ({\n entityManifest,\n id,\n pageId,\n pagePath,\n}: BackofficeEntityDetailManifestFallbackProps): JSX.Element => {\n const { t: tApp } = useTranslation();\n const { t } = useBackofficeReactTranslation();\n const { pathname } = useLocation();\n const listLabel = entityManifest.label(tApp);\n const detailLabel =\n entityManifest.detailLabel?.(tApp) ?? t('detail.loadingTitle');\n const activePage = resolveManifestPage(\n entityManifest,\n id,\n pageId,\n pagePath,\n pathname,\n );\n const breadcrumb: BackofficeTopbarBreadcrumbItem[] = [\n {\n kind: 'link',\n target: {\n kind: 'entity-list',\n entityId: entityManifest.id,\n },\n label: listLabel,\n },\n ];\n\n if (activePage == null) {\n breadcrumb.push({\n kind: 'current',\n target: {\n kind: 'entity-detail',\n entityId: entityManifest.id,\n id,\n },\n label: detailLabel,\n });\n } else {\n breadcrumb.push(\n {\n kind: 'link',\n target: {\n kind: 'entity-detail',\n entityId: entityManifest.id,\n id,\n },\n label: detailLabel,\n },\n {\n kind: 'current',\n target: {\n kind: 'entity-detail-page',\n entityId: entityManifest.id,\n id,\n pageId: activePage.id,\n },\n label: activePage.label(tApp),\n },\n );\n }\n\n const pages = entityManifest.detailPages ?? [];\n let tabsNode: JSX.Element | null = null;\n if (pages.length > 1 && activePage != null) {\n tabsNode = (\n <Tabs\n items={pages.map((page) => {\n return {\n id: page.id,\n label: page.label(tApp),\n preloadOnHover: 'code-and-data',\n to: entityManifest.routes.detailPage(id, page.id),\n };\n })}\n activeId={activePage.id}\n variant=\"underline\"\n />\n );\n }\n\n return (\n <BackofficeRightPageLayout breadcrumb={breadcrumb}>\n <DetailPageTemplate\n headerNode={<BackofficePageHeader title={detailLabel} />}\n tabsNode={tabsNode}\n headerDensity=\"compact\"\n >\n <BackofficeStaticRouteFallback label={t('common.loading')} />\n </DetailPageTemplate>\n </BackofficeRightPageLayout>\n );\n};\n"],"mappings":";;;;;;;;;;AAwBA,IAAM,KAAiB,MACd,EAAM,KAAK,CAAC,CAAC,QAAQ,cAAc,EAAE,GAGxC,KACJ,GACA,GACA,GACA,GACA,MAC4C;CAC5C,IAAM,IAAQ,EAAe,eAAe,CAAC;CAC7C,IAAI,EAAM,WAAW,GACnB,OAAO;CAGT,IAAM,IAAqB,EAAc,KAAY,EAAE;CACvD,IAAI,MAAuB,IAAI;EAC7B,IAAM,IAAS,EAAM,MAAM,MAClB,EAAc,EAAK,WAAW,MAAM,CAC5C;EACD,IAAI,KAAU,MACZ,OAAO;CAEX;CAEA,IAAM,IAA4B,EAAc,CAAe;CAC/D,IAAI,MAA8B,IAAI;EACpC,IAAM,IAAoB,EAAM,MAAM,MAElC,EAAc,EAAe,OAAO,WAAW,GAAI,EAAK,EAAE,CAAC,MAC3D,CAEH;EACD,IAAI,KAAqB,MACvB,OAAO;CAEX;CAEA,IAAI,KAAU,MAAM;EAClB,IAAM,IAAO,EAAM,MAAM,MAChB,EAAK,OAAO,CACpB;EACD,IAAI,KAAQ,MACV,OAAO;CAEX;CAKA,OAHoB,EAAM,MAAM,MACvB,EAAK,OAAO,EAAe,mBAE7B,KAAe,EAAM,MAAM;AACpC,GAEa,KAA0C,EACrD,mBACA,OACA,WACA,kBAC8D;CAC9D,IAAM,EAAE,GAAG,MAAS,EAAe,GAC7B,EAAE,SAAM,EAA8B,GACtC,EAAE,gBAAa,EAAY,GAC3B,IAAY,EAAe,MAAM,CAAI,GACrC,IACJ,EAAe,cAAc,CAAI,KAAK,EAAE,qBAAqB,GACzD,IAAa,EACjB,GACA,GACA,GACA,GACA,CACF,GACM,IAA+C,CACnD;EACE,MAAM;EACN,QAAQ;GACN,MAAM;GACN,UAAU,EAAe;EAC3B;EACA,OAAO;CACT,CACF;CAEA,AAAI,KAAc,OAChB,EAAW,KAAK;EACd,MAAM;EACN,QAAQ;GACN,MAAM;GACN,UAAU,EAAe;GACzB;EACF;EACA,OAAO;CACT,CAAC,IAED,EAAW,KACT;EACE,MAAM;EACN,QAAQ;GACN,MAAM;GACN,UAAU,EAAe;GACzB;EACF;EACA,OAAO;CACT,GACA;EACE,MAAM;EACN,QAAQ;GACN,MAAM;GACN,UAAU,EAAe;GACzB;GACA,QAAQ,EAAW;EACrB;EACA,OAAO,EAAW,MAAM,CAAI;CAC9B,CACF;CAGF,IAAM,IAAQ,EAAe,eAAe,CAAC,GACzC,IAA+B;CAkBnC,OAjBI,EAAM,SAAS,KAAK,KAAc,SACpC,IACE,kBAAC,GAAD;EACE,OAAO,EAAM,KAAK,OACT;GACL,IAAI,EAAK;GACT,OAAO,EAAK,MAAM,CAAI;GACtB,gBAAgB;GAChB,IAAI,EAAe,OAAO,WAAW,GAAI,EAAK,EAAE;EAClD,EACD;EACD,UAAU,EAAW;EACrB,SAAQ;CACT,CAAA,IAKH,kBAAC,GAAD;EAAuC;EACrC,UAAA,kBAAC,GAAD;GACE,YAAY,kBAAC,GAAD,EAAsB,OAAO,EAAc,CAAA;GAC7C;GACV,eAAc;GAEd,UAAA,kBAAC,GAAD,EAA+B,OAAO,EAAE,gBAAgB,EAAI,CAAA;EAC1C,CAAA;CACK,CAAA;AAE/B"}
|
|
@@ -61,9 +61,10 @@ var D = (e) => e.trim() === "" || e === "/" ? "/" : e.startsWith("/") ? e.endsWi
|
|
|
61
61
|
}, M = (n) => {
|
|
62
62
|
let i = D(n.basePath ?? "/"), p = f(() => k(n.entityManifest, i), [i, n.entityManifest]), v = f(() => c(p, { basePath: i }), [i, p]), x = n.graphql, C = f(() => t(n.dashboards), [n.dashboards]);
|
|
63
63
|
d(() => {
|
|
64
|
+
let e = x.httpUrl ?? x.endpoint, t = x.wsUrl ?? x.wsEndpoint;
|
|
64
65
|
b({
|
|
65
|
-
httpUrl:
|
|
66
|
-
wsUrl:
|
|
66
|
+
httpUrl: e,
|
|
67
|
+
wsUrl: t,
|
|
67
68
|
getDataId: x.getDataId,
|
|
68
69
|
logEvents: x.logEvents,
|
|
69
70
|
getAuthHeaders: x.getAuthHeaders
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackofficeProvider.js","names":[],"sources":["../../../src/provider/BackofficeProvider.tsx"],"sourcesContent":["import {\n StrictMode,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ContextType,\n type JSX,\n} from 'react';\nimport { createInstance } from 'i18next';\nimport { I18nextProvider } from 'react-i18next';\nimport createRouter from '@plumile/router/routing/createRouter.js';\nimport RouterRenderer from '@plumile/router/routing/RouterRenderer.js';\nimport RoutingContext from '@plumile/router/routing/RoutingContext.js';\nimport { BackofficeThemeProvider } from '@plumile/ui/admin/theme/BackofficeThemeProvider.js';\nimport { RoutePendingBar } from '@plumile/ui/components/routing/RoutePendingBar.js';\n\nimport { type BackofficeEntityManifestMap } from '@plumile/backoffice-core/types.js';\nimport {\n RelayProvider,\n configureRelayEnvironment,\n useRelayOperationActivity,\n} from '@plumile/relay';\n\nimport { createI18nInstance } from '../i18n/createI18nInstance.js';\nimport { withBackofficeReactI18nResources } from '../i18n/resources.js';\nimport { useRelayEnvironment } from '../relay/useRelayEnvironment.js';\nimport { BackofficeConfigProvider } from './BackofficeConfigContext.js';\nimport {\n createBackofficeRoutes,\n type BackofficeRouterContext,\n} from '../router/createBackofficeRoutes.js';\nimport type { BackofficeProviderProps } from './types.js';\nimport { validateBackofficeDashboardRegistrations } from './dashboardRegistrations.js';\nimport {\n BackofficeRouteFallback,\n BackofficeStaticRouteFallback,\n} from '../components/backoffice/routing/BackofficeRouteFallback.js';\nimport { createBackofficeEntityRegistry } from './entityRegistry.js';\nimport { BackofficeListUiStateProvider } from './BackofficeListUiStateContext.js';\n\nconst normalizeAbsolutePath = (value: string): string => {\n if (value.trim() === '' || value === '/') {\n return '/';\n }\n if (!value.startsWith('/')) {\n return `/${value}`;\n }\n if (value.endsWith('/')) {\n return value.slice(0, -1);\n }\n return value;\n};\n\nconst prefixRoutePath = (basePath: string, value: string): string => {\n const normalizedPath = normalizeAbsolutePath(value);\n const normalizedBasePath = normalizeAbsolutePath(basePath);\n if (normalizedBasePath === '/') {\n return normalizedPath;\n }\n if (\n normalizedPath === normalizedBasePath ||\n normalizedPath.startsWith(`${normalizedBasePath}/`)\n ) {\n return normalizedPath;\n }\n if (normalizedPath === '/') {\n return normalizedBasePath;\n }\n return `${normalizedBasePath}${normalizedPath}`;\n};\n\nconst resolveEntityManifest = (\n manifest: BackofficeEntityManifestMap,\n basePath: string,\n): BackofficeEntityManifestMap => {\n return Object.fromEntries(\n Object.entries(manifest).map(([entityId, item]) => {\n return [\n entityId,\n {\n ...item,\n routes: {\n list: prefixRoutePath(basePath, item.routes.list),\n detail: (id: string) => {\n return prefixRoutePath(basePath, item.routes.detail(id));\n },\n detailPage: (id: string, pageId: string) => {\n return prefixRoutePath(\n basePath,\n item.routes.detailPage(id, pageId),\n );\n },\n },\n } satisfies BackofficeEntityManifestMap[string],\n ] as const;\n }),\n );\n};\n\ntype RouterShellProps = {\n routes: ReturnType<typeof createBackofficeRoutes>;\n instrumentations?: BackofficeProviderProps['instrumentations'];\n};\n\ntype BackofficeRouterInstance = {\n context: NonNullable<ContextType<typeof RoutingContext>>;\n cleanup: () => void;\n};\n\nconst useBackofficeRouterInstance = ({\n routes,\n context,\n instrumentations,\n}: {\n routes: ReturnType<typeof createBackofficeRoutes>;\n context: BackofficeRouterContext;\n instrumentations?: BackofficeProviderProps['instrumentations'];\n}): BackofficeRouterInstance | null => {\n const [router, setRouter] = useState<BackofficeRouterInstance | null>(null);\n const routerRef = useRef<BackofficeRouterInstance | null>(null);\n\n useEffect(() => {\n const nextRouter = createRouter(routes, {\n context,\n instrumentations,\n });\n routerRef.current = nextRouter;\n setRouter(nextRouter);\n\n return () => {\n if (routerRef.current === nextRouter) {\n routerRef.current = null;\n }\n nextRouter.cleanup();\n };\n }, [context, instrumentations, routes]);\n\n return router;\n};\n\nconst RouterShell = ({\n routes,\n instrumentations,\n}: RouterShellProps): JSX.Element => {\n const relayEnvironment = useRelayEnvironment();\n const relayOperationActivity = useRelayOperationActivity();\n\n const routerContext = useMemo(() => {\n return { relayEnvironment };\n }, [relayEnvironment]);\n\n const router = useBackofficeRouterInstance({\n routes,\n context: routerContext,\n instrumentations,\n });\n\n if (router == null) {\n return <BackofficeRouteFallback />;\n }\n\n return (\n <RoutingContext.Provider value={router.context}>\n <RouterRenderer\n enableTransition\n externalPending={relayOperationActivity.pendingCount > 0}\n fallback={<BackofficeRouteFallback />}\n pending={<RoutePendingBar />}\n />\n </RoutingContext.Provider>\n );\n};\n\nexport const BackofficeProvider = (\n props: BackofficeProviderProps,\n): JSX.Element => {\n const basePath = normalizeAbsolutePath(props.basePath ?? '/');\n\n const entityManifest = useMemo(() => {\n return resolveEntityManifest(props.entityManifest, basePath);\n }, [basePath, props.entityManifest]);\n const entityRegistry = useMemo(() => {\n return createBackofficeEntityRegistry(entityManifest, { basePath });\n }, [basePath, entityManifest]);\n\n const graphQLConfig = props.graphql;\n const dashboards = useMemo(() => {\n return validateBackofficeDashboardRegistrations(props.dashboards);\n }, [props.dashboards]);\n\n useEffect(() => {\n const httpUrl = graphQLConfig.httpUrl ?? graphQLConfig.endpoint;\n const wsUrl = graphQLConfig.wsUrl ?? graphQLConfig.wsEndpoint;\n configureRelayEnvironment({\n httpUrl,\n wsUrl,\n getDataId: graphQLConfig.getDataId,\n logEvents: graphQLConfig.logEvents,\n getAuthHeaders: graphQLConfig.getAuthHeaders,\n });\n }, [\n graphQLConfig.endpoint,\n graphQLConfig.getAuthHeaders,\n graphQLConfig.getDataId,\n graphQLConfig.httpUrl,\n graphQLConfig.logEvents,\n graphQLConfig.wsEndpoint,\n graphQLConfig.wsUrl,\n ]);\n\n const mergedResources = useMemo(() => {\n return withBackofficeReactI18nResources(props.i18n?.resources ?? {});\n }, [props.i18n?.resources]);\n\n const i18nInstance = useMemo(() => {\n return props.i18n?.instance ?? createInstance();\n }, [props.i18n?.instance]);\n const [isI18nReady, setIsI18nReady] = useState(i18nInstance.isInitialized);\n\n useEffect(() => {\n let isCurrent = true;\n const markI18nReady = (): void => {\n if (isCurrent) {\n setIsI18nReady(true);\n }\n };\n\n i18nInstance.on('initialized', markI18nReady);\n if (i18nInstance.isInitialized) {\n markI18nReady();\n return () => {\n isCurrent = false;\n i18nInstance.off('initialized', markI18nReady);\n };\n }\n\n const readyCheck = globalThis.setTimeout(() => {\n if (i18nInstance.isInitialized) {\n markI18nReady();\n }\n }, 0);\n\n const initOptions = props.i18n?.initOptions ?? {};\n const defaultNs = initOptions.defaultNS ?? 'translations';\n const ns = initOptions.ns ?? ['backofficeReact', 'translations', 'ui'];\n createI18nInstance({\n resources: mergedResources,\n lng: props.i18n?.lng,\n fallbackLng: props.i18n?.fallbackLng,\n initOptions: {\n ...initOptions,\n defaultNS: defaultNs,\n ns,\n react: {\n useSuspense: false,\n ...initOptions.react,\n },\n },\n instance: i18nInstance,\n useLanguageDetector: props.i18n?.useLanguageDetector,\n detection: props.i18n?.detection,\n })\n .then(markI18nReady)\n .catch((error: unknown) => {\n markI18nReady();\n // eslint-disable-next-line no-console\n console.error(error);\n });\n\n return () => {\n isCurrent = false;\n globalThis.clearTimeout(readyCheck);\n i18nInstance.off('initialized', markI18nReady);\n };\n }, [\n i18nInstance,\n mergedResources,\n props.i18n?.initOptions,\n props.i18n?.detection,\n props.i18n?.fallbackLng,\n props.i18n?.lng,\n props.i18n?.useLanguageDetector,\n ]);\n\n const configValue = useMemo(() => {\n return {\n basePath,\n entities: entityManifest,\n entityManifest,\n entityRegistry,\n filterColumnAliases: props.filterColumnAliases,\n sidebar: props.sidebar,\n dashboard: props.dashboard,\n dashboards,\n auth: props.auth,\n graphql: props.graphql,\n };\n }, [\n basePath,\n props.auth,\n props.dashboard,\n dashboards,\n entityManifest,\n entityRegistry,\n props.filterColumnAliases,\n props.graphql,\n props.sidebar,\n ]);\n\n const routes = useMemo(() => {\n return createBackofficeRoutes({\n basePath,\n entityManifest,\n entityRegistry,\n sidebar: props.sidebar,\n auth: props.auth,\n dashboard: props.dashboard,\n dashboards,\n toolsOperationPage: props.toolsOperationPage,\n });\n }, [\n basePath,\n entityManifest,\n entityRegistry,\n props.auth,\n props.dashboard,\n dashboards,\n props.toolsOperationPage,\n props.sidebar,\n ]);\n\n let contentNode = <BackofficeStaticRouteFallback label=\"Loading...\" />;\n if (isI18nReady) {\n contentNode = (\n <BackofficeThemeProvider>\n <RelayProvider>\n <BackofficeConfigProvider value={configValue}>\n {props.overlay}\n <BackofficeListUiStateProvider>\n <RouterShell\n routes={routes}\n instrumentations={props.instrumentations}\n />\n </BackofficeListUiStateProvider>\n </BackofficeConfigProvider>\n </RelayProvider>\n </BackofficeThemeProvider>\n );\n }\n\n return (\n <StrictMode>\n <I18nextProvider i18n={i18nInstance}>{contentNode}</I18nextProvider>\n </StrictMode>\n );\n};\n\nexport default BackofficeProvider;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BackofficeProvider.js","names":[],"sources":["../../../src/provider/BackofficeProvider.tsx"],"sourcesContent":["import {\n StrictMode,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ContextType,\n type JSX,\n} from 'react';\nimport { createInstance } from 'i18next';\nimport { I18nextProvider } from 'react-i18next';\nimport createRouter from '@plumile/router/routing/createRouter.js';\nimport RouterRenderer from '@plumile/router/routing/RouterRenderer.js';\nimport RoutingContext from '@plumile/router/routing/RoutingContext.js';\nimport { BackofficeThemeProvider } from '@plumile/ui/admin/theme/BackofficeThemeProvider.js';\nimport { RoutePendingBar } from '@plumile/ui/components/routing/RoutePendingBar.js';\n\nimport { type BackofficeEntityManifestMap } from '@plumile/backoffice-core/types.js';\nimport {\n RelayProvider,\n configureRelayEnvironment,\n useRelayOperationActivity,\n} from '@plumile/relay';\n\nimport { createI18nInstance } from '../i18n/createI18nInstance.js';\nimport { withBackofficeReactI18nResources } from '../i18n/resources.js';\nimport { useRelayEnvironment } from '../relay/useRelayEnvironment.js';\nimport { BackofficeConfigProvider } from './BackofficeConfigContext.js';\nimport {\n createBackofficeRoutes,\n type BackofficeRouterContext,\n} from '../router/createBackofficeRoutes.js';\nimport type { BackofficeProviderProps } from './types.js';\nimport { validateBackofficeDashboardRegistrations } from './dashboardRegistrations.js';\nimport {\n BackofficeRouteFallback,\n BackofficeStaticRouteFallback,\n} from '../components/backoffice/routing/BackofficeRouteFallback.js';\nimport { createBackofficeEntityRegistry } from './entityRegistry.js';\nimport { BackofficeListUiStateProvider } from './BackofficeListUiStateContext.js';\n\nconst normalizeAbsolutePath = (value: string): string => {\n if (value.trim() === '' || value === '/') {\n return '/';\n }\n if (!value.startsWith('/')) {\n return `/${value}`;\n }\n if (value.endsWith('/')) {\n return value.slice(0, -1);\n }\n return value;\n};\n\nconst prefixRoutePath = (basePath: string, value: string): string => {\n const normalizedPath = normalizeAbsolutePath(value);\n const normalizedBasePath = normalizeAbsolutePath(basePath);\n if (normalizedBasePath === '/') {\n return normalizedPath;\n }\n if (\n normalizedPath === normalizedBasePath ||\n normalizedPath.startsWith(`${normalizedBasePath}/`)\n ) {\n return normalizedPath;\n }\n if (normalizedPath === '/') {\n return normalizedBasePath;\n }\n return `${normalizedBasePath}${normalizedPath}`;\n};\n\nconst resolveEntityManifest = (\n manifest: BackofficeEntityManifestMap,\n basePath: string,\n): BackofficeEntityManifestMap => {\n return Object.fromEntries(\n Object.entries(manifest).map(([entityId, item]) => {\n return [\n entityId,\n {\n ...item,\n routes: {\n list: prefixRoutePath(basePath, item.routes.list),\n detail: (id: string) => {\n return prefixRoutePath(basePath, item.routes.detail(id));\n },\n detailPage: (id: string, pageId: string) => {\n return prefixRoutePath(\n basePath,\n item.routes.detailPage(id, pageId),\n );\n },\n },\n } satisfies BackofficeEntityManifestMap[string],\n ] as const;\n }),\n );\n};\n\ntype RouterShellProps = {\n routes: ReturnType<typeof createBackofficeRoutes>;\n instrumentations?: BackofficeProviderProps['instrumentations'];\n};\n\ntype BackofficeRouterInstance = {\n context: NonNullable<ContextType<typeof RoutingContext>>;\n cleanup: () => void;\n};\n\nconst useBackofficeRouterInstance = ({\n routes,\n context,\n instrumentations,\n}: {\n routes: ReturnType<typeof createBackofficeRoutes>;\n context: BackofficeRouterContext;\n instrumentations?: BackofficeProviderProps['instrumentations'];\n}): BackofficeRouterInstance | null => {\n const [router, setRouter] = useState<BackofficeRouterInstance | null>(null);\n const routerRef = useRef<BackofficeRouterInstance | null>(null);\n\n useEffect(() => {\n const nextRouter = createRouter(routes, {\n context,\n instrumentations,\n });\n routerRef.current = nextRouter;\n setRouter(nextRouter);\n\n return () => {\n if (routerRef.current === nextRouter) {\n routerRef.current = null;\n }\n nextRouter.cleanup();\n };\n }, [context, instrumentations, routes]);\n\n return router;\n};\n\nconst RouterShell = ({\n routes,\n instrumentations,\n}: RouterShellProps): JSX.Element => {\n const relayEnvironment = useRelayEnvironment();\n const relayOperationActivity = useRelayOperationActivity();\n\n const routerContext = useMemo(() => {\n return { relayEnvironment };\n }, [relayEnvironment]);\n\n const router = useBackofficeRouterInstance({\n routes,\n context: routerContext,\n instrumentations,\n });\n\n if (router == null) {\n return <BackofficeRouteFallback />;\n }\n\n return (\n <RoutingContext.Provider value={router.context}>\n <RouterRenderer\n enableTransition\n externalPending={relayOperationActivity.pendingCount > 0}\n fallback={<BackofficeRouteFallback />}\n pending={<RoutePendingBar />}\n />\n </RoutingContext.Provider>\n );\n};\n\nexport const BackofficeProvider = (\n props: BackofficeProviderProps,\n): JSX.Element => {\n const basePath = normalizeAbsolutePath(props.basePath ?? '/');\n\n const entityManifest = useMemo(() => {\n return resolveEntityManifest(props.entityManifest, basePath);\n }, [basePath, props.entityManifest]);\n const entityRegistry = useMemo(() => {\n return createBackofficeEntityRegistry(entityManifest, { basePath });\n }, [basePath, entityManifest]);\n\n const graphQLConfig = props.graphql;\n const dashboards = useMemo(() => {\n return validateBackofficeDashboardRegistrations(props.dashboards);\n }, [props.dashboards]);\n\n useEffect(() => {\n const httpUrl = graphQLConfig.httpUrl ?? graphQLConfig.endpoint;\n const wsUrl = graphQLConfig.wsUrl ?? graphQLConfig.wsEndpoint;\n configureRelayEnvironment({\n httpUrl,\n wsUrl,\n getDataId: graphQLConfig.getDataId,\n logEvents: graphQLConfig.logEvents,\n getAuthHeaders: graphQLConfig.getAuthHeaders,\n });\n }, [\n graphQLConfig.endpoint,\n graphQLConfig.getAuthHeaders,\n graphQLConfig.getDataId,\n graphQLConfig.httpUrl,\n graphQLConfig.logEvents,\n graphQLConfig.wsEndpoint,\n graphQLConfig.wsUrl,\n ]);\n\n const mergedResources = useMemo(() => {\n return withBackofficeReactI18nResources(props.i18n?.resources ?? {});\n }, [props.i18n?.resources]);\n\n const i18nInstance = useMemo(() => {\n return props.i18n?.instance ?? createInstance();\n }, [props.i18n?.instance]);\n const [isI18nReady, setIsI18nReady] = useState(i18nInstance.isInitialized);\n\n useEffect(() => {\n let isCurrent = true;\n const markI18nReady = (): void => {\n if (isCurrent) {\n setIsI18nReady(true);\n }\n };\n\n i18nInstance.on('initialized', markI18nReady);\n if (i18nInstance.isInitialized) {\n markI18nReady();\n return () => {\n isCurrent = false;\n i18nInstance.off('initialized', markI18nReady);\n };\n }\n\n const readyCheck = globalThis.setTimeout(() => {\n if (i18nInstance.isInitialized) {\n markI18nReady();\n }\n }, 0);\n\n const initOptions = props.i18n?.initOptions ?? {};\n const defaultNs = initOptions.defaultNS ?? 'translations';\n const ns = initOptions.ns ?? ['backofficeReact', 'translations', 'ui'];\n createI18nInstance({\n resources: mergedResources,\n lng: props.i18n?.lng,\n fallbackLng: props.i18n?.fallbackLng,\n initOptions: {\n ...initOptions,\n defaultNS: defaultNs,\n ns,\n react: {\n useSuspense: false,\n ...initOptions.react,\n },\n },\n instance: i18nInstance,\n useLanguageDetector: props.i18n?.useLanguageDetector,\n detection: props.i18n?.detection,\n })\n .then(markI18nReady)\n .catch((error: unknown) => {\n markI18nReady();\n // eslint-disable-next-line no-console\n console.error(error);\n });\n\n return () => {\n isCurrent = false;\n globalThis.clearTimeout(readyCheck);\n i18nInstance.off('initialized', markI18nReady);\n };\n }, [\n i18nInstance,\n mergedResources,\n props.i18n?.initOptions,\n props.i18n?.detection,\n props.i18n?.fallbackLng,\n props.i18n?.lng,\n props.i18n?.useLanguageDetector,\n ]);\n\n const configValue = useMemo(() => {\n return {\n basePath,\n entities: entityManifest,\n entityManifest,\n entityRegistry,\n filterColumnAliases: props.filterColumnAliases,\n sidebar: props.sidebar,\n dashboard: props.dashboard,\n dashboards,\n auth: props.auth,\n graphql: props.graphql,\n };\n }, [\n basePath,\n props.auth,\n props.dashboard,\n dashboards,\n entityManifest,\n entityRegistry,\n props.filterColumnAliases,\n props.graphql,\n props.sidebar,\n ]);\n\n const routes = useMemo(() => {\n return createBackofficeRoutes({\n basePath,\n entityManifest,\n entityRegistry,\n sidebar: props.sidebar,\n auth: props.auth,\n dashboard: props.dashboard,\n dashboards,\n toolsOperationPage: props.toolsOperationPage,\n });\n }, [\n basePath,\n entityManifest,\n entityRegistry,\n props.auth,\n props.dashboard,\n dashboards,\n props.toolsOperationPage,\n props.sidebar,\n ]);\n\n let contentNode = <BackofficeStaticRouteFallback label=\"Loading...\" />;\n if (isI18nReady) {\n contentNode = (\n <BackofficeThemeProvider>\n <RelayProvider>\n <BackofficeConfigProvider value={configValue}>\n {props.overlay}\n <BackofficeListUiStateProvider>\n <RouterShell\n routes={routes}\n instrumentations={props.instrumentations}\n />\n </BackofficeListUiStateProvider>\n </BackofficeConfigProvider>\n </RelayProvider>\n </BackofficeThemeProvider>\n );\n }\n\n return (\n <StrictMode>\n <I18nextProvider i18n={i18nInstance}>{contentNode}</I18nextProvider>\n </StrictMode>\n );\n};\n\nexport default BackofficeProvider;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envHelpers.js","names":[],"sources":["../../../src/relay/envHelpers.ts"],"sourcesContent":["type EnvRecord = Record<string, string | boolean | undefined>;\n\nconst viteEnv: EnvRecord = (() => {\n try {\n const meta = import.meta as unknown as { env?: EnvRecord };\n if (meta.env != null) {\n return meta.env;\n }\n return {};\n } catch {\n // `import.meta` is not defined outside of ESM environments; fall back to an empty record.\n return {};\n }\n})();\n\nexport type ReadEnvFn = (key: string) => string | undefined;\n\nconst readEnvFromRecord = (env: EnvRecord, key: string): string | undefined => {\n const value = env[key];\n if (typeof value !== 'string') {\n return undefined;\n }\n\n const trimmed = value.trim();\n if (trimmed === '') {\n return undefined;\n }\n\n return trimmed;\n};\n\nconst readBooleanEnvFromRecord = (\n env: EnvRecord,\n key: string,\n): boolean | undefined => {\n const value = env[key];\n if (value === true || value === false) {\n return value;\n }\n if (typeof value === 'string') {\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n }\n return undefined;\n};\n\nconst isDevEnvFromRecord = (env: EnvRecord): boolean => {\n return Boolean(readBooleanEnvFromRecord(env, 'DEV'));\n};\n\n/**\n * Read a string environment variable from Vite's `import.meta.env` (if available).\n * Returns `undefined` when the value is missing or empty.\n */\nexport function readEnv(key: string): string | undefined {\n return readEnvFromRecord(viteEnv, key);\n}\n\n/**\n * Reads an environment variable and coerces common string values to booleans.\n */\nexport function readBooleanEnv(key: string): boolean | undefined {\n return readBooleanEnvFromRecord(viteEnv, key);\n}\n\n/**\n * Indicates whether the current build is running in development mode.\n */\nexport function isDevEnv(): boolean {\n return isDevEnvFromRecord(viteEnv);\n}\n\ninterface ResolveEndpointOptions {\n envKeys: readonly string[];\n fallback: string;\n read?: ReadEnvFn;\n}\n\n/**\n * Resolve HTTP endpoint from environment variables.\n */\nexport function resolveHttpEndpoint(options: ResolveEndpointOptions): string {\n const { envKeys, fallback, read = readEnv } = options;\n for (const key of envKeys) {\n const value = read(key);\n if (value != null) {\n return value;\n }\n }\n return fallback;\n}\n\ninterface ResolveWebsocketEndpointOptions extends ResolveEndpointOptions {\n httpEndpoint: string;\n}\n\n/**\n * Resolve websocket endpoint from environment variables or derive it from the HTTP endpoint.\n */\nexport function resolveWebsocketEndpoint(\n options: ResolveWebsocketEndpointOptions,\n): string {\n const { envKeys, fallback, httpEndpoint, read = readEnv } = options;\n\n for (const key of envKeys) {\n const value = read(key);\n if (value != null) {\n return value;\n }\n }\n\n if (httpEndpoint.startsWith('http')) {\n return httpEndpoint.replace(/^http/, 'ws');\n }\n\n if (httpEndpoint.startsWith('/')) {\n return httpEndpoint.replace(/\\/graphql$/, '/ws');\n }\n\n return fallback;\n}\n\nexport const __test = {\n isDevEnvFromRecord,\n readBooleanEnvFromRecord,\n readEnvFromRecord,\n};\n"],"mappings":";AAEA,IAAM,WAA4B;CAChC,IAAI;EACF,IAAM,IAAO
|
|
1
|
+
{"version":3,"file":"envHelpers.js","names":[],"sources":["../../../src/relay/envHelpers.ts"],"sourcesContent":["type EnvRecord = Record<string, string | boolean | undefined>;\n\nconst viteEnv: EnvRecord = (() => {\n try {\n const meta = import.meta as unknown as { env?: EnvRecord };\n if (meta.env != null) {\n return meta.env;\n }\n return {};\n } catch {\n // `import.meta` is not defined outside of ESM environments; fall back to an empty record.\n return {};\n }\n})();\n\nexport type ReadEnvFn = (key: string) => string | undefined;\n\nconst readEnvFromRecord = (env: EnvRecord, key: string): string | undefined => {\n const value = env[key];\n if (typeof value !== 'string') {\n return undefined;\n }\n\n const trimmed = value.trim();\n if (trimmed === '') {\n return undefined;\n }\n\n return trimmed;\n};\n\nconst readBooleanEnvFromRecord = (\n env: EnvRecord,\n key: string,\n): boolean | undefined => {\n const value = env[key];\n if (value === true || value === false) {\n return value;\n }\n if (typeof value === 'string') {\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n }\n return undefined;\n};\n\nconst isDevEnvFromRecord = (env: EnvRecord): boolean => {\n return Boolean(readBooleanEnvFromRecord(env, 'DEV'));\n};\n\n/**\n * Read a string environment variable from Vite's `import.meta.env` (if available).\n * Returns `undefined` when the value is missing or empty.\n */\nexport function readEnv(key: string): string | undefined {\n return readEnvFromRecord(viteEnv, key);\n}\n\n/**\n * Reads an environment variable and coerces common string values to booleans.\n */\nexport function readBooleanEnv(key: string): boolean | undefined {\n return readBooleanEnvFromRecord(viteEnv, key);\n}\n\n/**\n * Indicates whether the current build is running in development mode.\n */\nexport function isDevEnv(): boolean {\n return isDevEnvFromRecord(viteEnv);\n}\n\ninterface ResolveEndpointOptions {\n envKeys: readonly string[];\n fallback: string;\n read?: ReadEnvFn;\n}\n\n/**\n * Resolve HTTP endpoint from environment variables.\n */\nexport function resolveHttpEndpoint(options: ResolveEndpointOptions): string {\n const { envKeys, fallback, read = readEnv } = options;\n for (const key of envKeys) {\n const value = read(key);\n if (value != null) {\n return value;\n }\n }\n return fallback;\n}\n\ninterface ResolveWebsocketEndpointOptions extends ResolveEndpointOptions {\n httpEndpoint: string;\n}\n\n/**\n * Resolve websocket endpoint from environment variables or derive it from the HTTP endpoint.\n */\nexport function resolveWebsocketEndpoint(\n options: ResolveWebsocketEndpointOptions,\n): string {\n const { envKeys, fallback, httpEndpoint, read = readEnv } = options;\n\n for (const key of envKeys) {\n const value = read(key);\n if (value != null) {\n return value;\n }\n }\n\n if (httpEndpoint.startsWith('http')) {\n return httpEndpoint.replace(/^http/, 'ws');\n }\n\n if (httpEndpoint.startsWith('/')) {\n return httpEndpoint.replace(/\\/graphql$/, '/ws');\n }\n\n return fallback;\n}\n\nexport const __test = {\n isDevEnvFromRecord,\n readBooleanEnvFromRecord,\n readEnvFromRecord,\n};\n"],"mappings":";AAEA,IAAM,WAA4B;CAChC,IAAI;EACF,IAAM,IAAO;EAIb,OAHI,EAAK,OAAO,OAGT,CAAC,IAFC,EAAK;CAGhB,QAAQ;EAEN,OAAO,CAAC;CACV;AACF,EAAA,CAAG,GAIG,KAAqB,GAAgB,MAAoC;CAC7E,IAAM,IAAQ,EAAI;CAClB,IAAI,OAAO,KAAU,UACnB;CAGF,IAAM,IAAU,EAAM,KAAK;CACvB,UAAY,IAIhB,OAAO;AACT,GAEM,KACJ,GACA,MACwB;CACxB,IAAM,IAAQ,EAAI;CAClB,IAAI,MAAU,MAAQ,MAAU,IAC9B,OAAO;CAET,IAAI,OAAO,KAAU,UAAU;EAC7B,IAAI,MAAU,QACZ,OAAO;EAET,IAAI,MAAU,SACZ,OAAO;CAEX;AAEF,GAEM,KAAsB,MACnB,EAAQ,EAAyB,GAAK,KAAK;AAOpD,SAAgB,EAAQ,GAAiC;CACvD,OAAO,EAAkB,GAAS,CAAG;AACvC;AAKA,SAAgB,EAAe,GAAkC;CAC/D,OAAO,EAAyB,GAAS,CAAG;AAC9C;AAKA,SAAgB,IAAoB;CAClC,OAAO,EAAmB,CAAO;AACnC;AAWA,SAAgB,EAAoB,GAAyC;CAC3E,IAAM,EAAE,YAAS,aAAU,UAAO,MAAY;CAC9C,KAAK,IAAM,KAAO,GAAS;EACzB,IAAM,IAAQ,EAAK,CAAG;EACtB,IAAI,KAAS,MACX,OAAO;CAEX;CACA,OAAO;AACT;AASA,SAAgB,EACd,GACQ;CACR,IAAM,EAAE,YAAS,aAAU,iBAAc,UAAO,MAAY;CAE5D,KAAK,IAAM,KAAO,GAAS;EACzB,IAAM,IAAQ,EAAK,CAAG;EACtB,IAAI,KAAS,MACX,OAAO;CAEX;CAUA,OARI,EAAa,WAAW,MAAM,IACzB,EAAa,QAAQ,SAAS,IAAI,IAGvC,EAAa,WAAW,GAAG,IACtB,EAAa,QAAQ,cAAc,KAAK,IAG1C;AACT;AAEA,IAAa,IAAS;CACpB;CACA;CACA;AACF"}
|
|
@@ -144,11 +144,11 @@ function U(a) {
|
|
|
144
144
|
return e.groupId != null && J.set(t, e.groupId), t;
|
|
145
145
|
}), ve = ge.map((e) => {
|
|
146
146
|
let t = e.routes.list, n = L(t, I), r = [], a = ({ match: t }) => {
|
|
147
|
-
let n = String(t?.params.id ?? ""), r = typeof t?.params.pagePath == "string" ? t.params.pagePath : null;
|
|
147
|
+
let n = String(t?.params.id ?? ""), r = typeof t?.params.pagePath == "string" ? t.params.pagePath : null, a = r == null ? e.defaultDetailPageId ?? "overview" : V(e, r);
|
|
148
148
|
return /* @__PURE__ */ s(i, {
|
|
149
149
|
entityManifest: e,
|
|
150
150
|
id: n,
|
|
151
|
-
pageId:
|
|
151
|
+
pageId: a,
|
|
152
152
|
pagePath: r
|
|
153
153
|
});
|
|
154
154
|
};
|