wcz-test 6.22.2 → 6.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/compiler-runtime.js +6 -0
- package/dist/_virtual/compiler-runtime.js.map +1 -0
- package/dist/_virtual/compiler-runtime2.js +5 -0
- package/dist/_virtual/compiler-runtime2.js.map +1 -0
- package/dist/_virtual/jsx-runtime.js +6 -0
- package/dist/_virtual/jsx-runtime.js.map +1 -0
- package/dist/_virtual/jsx-runtime2.js +5 -0
- package/dist/_virtual/jsx-runtime2.js.map +1 -0
- package/dist/_virtual/react-compiler-runtime.development.js +5 -0
- package/dist/_virtual/react-compiler-runtime.development.js.map +1 -0
- package/dist/_virtual/react-compiler-runtime.production.js +5 -0
- package/dist/_virtual/react-compiler-runtime.production.js.map +1 -0
- package/dist/_virtual/react-jsx-runtime.development.js +5 -0
- package/dist/_virtual/react-jsx-runtime.development.js.map +1 -0
- package/dist/_virtual/react-jsx-runtime.production.js +5 -0
- package/dist/_virtual/react-jsx-runtime.production.js.map +1 -0
- package/dist/client.js +4 -4
- package/dist/components/core/AppTitle.d.ts +2 -0
- package/dist/components/core/AppTitle.js +23 -0
- package/dist/components/core/AppTitle.js.map +1 -0
- package/dist/components/core/Fullscreen.d.ts +3 -0
- package/dist/components/core/Fullscreen.js +104 -0
- package/dist/components/core/Fullscreen.js.map +1 -0
- package/dist/components/core/Layout.d.ts +8 -0
- package/dist/components/core/Layout.js +215 -0
- package/dist/components/core/Layout.js.map +1 -0
- package/dist/components/core/ToolbarAccount.d.ts +2 -0
- package/dist/components/core/ToolbarAccount.js +602 -0
- package/dist/components/core/ToolbarAccount.js.map +1 -0
- package/dist/components/core/TypographyWithIcon.d.ts +7 -0
- package/dist/components/core/TypographyWithIcon.js +117 -0
- package/dist/components/core/TypographyWithIcon.js.map +1 -0
- package/dist/components/core/navigation/NavigationList.d.ts +22 -0
- package/dist/components/core/navigation/NavigationList.js +166 -0
- package/dist/components/core/navigation/NavigationList.js.map +1 -0
- package/dist/components/core/navigation/NavigationListItem.d.ts +16 -0
- package/dist/components/core/navigation/NavigationListItem.js +467 -0
- package/dist/components/core/navigation/NavigationListItem.js.map +1 -0
- package/dist/components/core/navigation/NavigationRail.d.ts +12 -0
- package/dist/components/core/navigation/NavigationRail.js +141 -0
- package/dist/components/core/navigation/NavigationRail.js.map +1 -0
- package/dist/components/data-grid/ChipInputCell.d.ts +9 -0
- package/dist/components/data-grid/ChipInputCell.js +95 -0
- package/dist/components/data-grid/ChipInputCell.js.map +1 -0
- package/dist/components/data-grid/EditableColumnHeader.d.ts +2 -0
- package/dist/components/data-grid/EditableColumnHeader.js +30 -0
- package/dist/components/data-grid/EditableColumnHeader.js.map +1 -0
- package/dist/components/file/Dropzone.d.ts +8 -0
- package/dist/components/file/Dropzone.js +151 -0
- package/dist/components/file/Dropzone.js.map +1 -0
- package/dist/components/file/FileViewer.d.ts +20 -0
- package/dist/components/file/FileViewer.js +127 -0
- package/dist/components/file/FileViewer.js.map +1 -0
- package/dist/components/file/fileViewer/FileViewerGrid.d.ts +17 -0
- package/dist/components/file/fileViewer/FileViewerGrid.js +282 -0
- package/dist/components/file/fileViewer/FileViewerGrid.js.map +1 -0
- package/dist/components/file/fileViewer/FileViewerList.d.ts +12 -0
- package/dist/components/file/fileViewer/FileViewerList.js +191 -0
- package/dist/components/file/fileViewer/FileViewerList.js.map +1 -0
- package/dist/components/file/fileViewer/ImageViewer.d.ts +6 -0
- package/dist/components/file/fileViewer/ImageViewer.js +75 -0
- package/dist/components/file/fileViewer/ImageViewer.js.map +1 -0
- package/dist/components/file/fileViewer/common/ActionsMenu.d.ts +15 -0
- package/dist/components/file/fileViewer/common/ActionsMenu.js +159 -0
- package/dist/components/file/fileViewer/common/ActionsMenu.js.map +1 -0
- package/dist/components/form/FormAutocomplete.d.ts +7 -0
- package/dist/components/form/FormAutocomplete.js +80 -0
- package/dist/components/form/FormAutocomplete.js.map +1 -0
- package/dist/components/form/FormCheckbox.d.ts +7 -0
- package/dist/components/form/FormCheckbox.js +81 -0
- package/dist/components/form/FormCheckbox.js.map +1 -0
- package/dist/components/form/FormDatePicker.d.ts +8 -0
- package/dist/components/form/FormDatePicker.js +77 -0
- package/dist/components/form/FormDatePicker.js.map +1 -0
- package/dist/components/form/FormDateRangePicker.d.ts +8 -0
- package/dist/components/form/FormDateRangePicker.js +77 -0
- package/dist/components/form/FormDateRangePicker.js.map +1 -0
- package/dist/components/form/FormDateTimePicker.d.ts +8 -0
- package/dist/components/form/FormDateTimePicker.js +77 -0
- package/dist/components/form/FormDateTimePicker.js.map +1 -0
- package/dist/components/form/FormDateTimeRangePicker.d.ts +8 -0
- package/dist/components/form/FormDateTimeRangePicker.js +77 -0
- package/dist/components/form/FormDateTimeRangePicker.js.map +1 -0
- package/dist/components/form/FormNumberField.d.ts +9 -0
- package/dist/components/form/FormNumberField.js +73 -0
- package/dist/components/form/FormNumberField.js.map +1 -0
- package/dist/components/form/FormRadioGroup.d.ts +13 -0
- package/dist/components/form/FormRadioGroup.js +113 -0
- package/dist/components/form/FormRadioGroup.js.map +1 -0
- package/dist/components/form/FormSlider.d.ts +7 -0
- package/dist/components/form/FormSlider.js +94 -0
- package/dist/components/form/FormSlider.js.map +1 -0
- package/dist/components/form/FormSubmitButton.d.ts +4 -0
- package/dist/components/form/FormSubmitButton.js +50 -0
- package/dist/components/form/FormSubmitButton.js.map +1 -0
- package/dist/components/form/FormSwitch.d.ts +7 -0
- package/dist/components/form/FormSwitch.js +81 -0
- package/dist/components/form/FormSwitch.js.map +1 -0
- package/dist/components/form/FormTextField.d.ts +7 -0
- package/dist/components/form/FormTextField.js +52 -0
- package/dist/components/form/FormTextField.js.map +1 -0
- package/dist/components/form/FormTimePicker.d.ts +8 -0
- package/dist/components/form/FormTimePicker.js +77 -0
- package/dist/components/form/FormTimePicker.js.map +1 -0
- package/dist/components/form/FormTimeRangePicker.d.ts +8 -0
- package/dist/components/form/FormTimeRangePicker.js +77 -0
- package/dist/components/form/FormTimeRangePicker.js.map +1 -0
- package/dist/components/router/RouterButton.d.ts +6 -0
- package/dist/components/router/RouterButton.js +35 -0
- package/dist/components/router/RouterButton.js.map +1 -0
- package/dist/components/router/RouterError.d.ts +7 -0
- package/dist/components/router/RouterError.js +62 -0
- package/dist/components/router/RouterError.js.map +1 -0
- package/dist/components/router/RouterGridActionsCellItem.d.ts +6 -0
- package/dist/components/router/RouterGridActionsCellItem.js +35 -0
- package/dist/components/router/RouterGridActionsCellItem.js.map +1 -0
- package/dist/components/router/RouterIconButton.d.ts +6 -0
- package/dist/components/router/RouterIconButton.js +35 -0
- package/dist/components/router/RouterIconButton.js.map +1 -0
- package/dist/components/router/RouterLink.d.ts +6 -0
- package/dist/components/router/RouterLink.js +35 -0
- package/dist/components/router/RouterLink.js.map +1 -0
- package/dist/components/router/RouterListItemButton.d.ts +6 -0
- package/dist/{RouterListItemButton-CagMd8F_.js → components/router/RouterListItemButton.js} +4 -4
- package/dist/components/router/RouterListItemButton.js.map +1 -0
- package/dist/components/router/RouterNotFound.d.ts +1 -0
- package/dist/components/router/RouterNotFound.js +53 -0
- package/dist/components/router/RouterNotFound.js.map +1 -0
- package/dist/components/router/RouterTab.d.ts +6 -0
- package/dist/components/router/RouterTab.js +35 -0
- package/dist/components/router/RouterTab.js.map +1 -0
- package/dist/components.js +15 -1486
- package/dist/components.js.map +1 -1
- package/dist/contexts/DialogsContext.d.ts +6 -0
- package/dist/contexts/DialogsContext.js +6 -0
- package/dist/contexts/DialogsContext.js.map +1 -0
- package/dist/contexts/FileContext.d.ts +13 -0
- package/dist/contexts/FileContext.js +14 -0
- package/dist/contexts/FileContext.js.map +1 -0
- package/dist/contexts/UserContext.d.ts +7 -0
- package/dist/contexts/UserContext.js +6 -0
- package/dist/contexts/UserContext.js.map +1 -0
- package/dist/env.d.ts +10 -0
- package/dist/env.js +26 -0
- package/dist/env.js.map +1 -0
- package/dist/exports/client.d.ts +4 -0
- package/dist/exports/components.d.ts +14 -0
- package/dist/exports/hooks.d.ts +5 -0
- package/dist/exports/index.d.ts +3 -0
- package/dist/exports/models.d.ts +24 -0
- package/dist/exports/queries.d.ts +4 -0
- package/dist/exports/server.d.ts +1 -0
- package/dist/exports/utils.d.ts +3 -0
- package/dist/exports/vite.d.ts +1 -0
- package/dist/hooks/DialogsHooks.d.ts +42 -0
- package/dist/{DialogsHooks-BEZgPVSk.js → hooks/DialogsHooks.js} +7 -4
- package/dist/hooks/DialogsHooks.js.map +1 -0
- package/dist/hooks/FormHooks.d.ts +52 -0
- package/dist/hooks/FormHooks.js +55 -0
- package/dist/hooks/FormHooks.js.map +1 -0
- package/dist/hooks/UseHook.d.ts +2 -0
- package/dist/hooks/UseHook.js +12 -0
- package/dist/hooks/UseHook.js.map +1 -0
- package/dist/hooks.js +5 -1002
- package/dist/hooks.js.map +1 -1
- package/dist/index.js +3 -1962
- package/dist/index.js.map +1 -1
- package/dist/lib/auth/client.d.ts +13 -0
- package/dist/lib/auth/client.js +63 -0
- package/dist/lib/auth/client.js.map +1 -0
- package/dist/lib/auth/server.d.ts +9 -0
- package/dist/lib/utils.d.ts +52 -0
- package/dist/{utils-CCjnelFb.js → lib/utils.js} +9 -24
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/vite-plugin.d.ts +2 -0
- package/dist/lib/vite-plugin.js +65 -0
- package/dist/lib/vite-plugin.js.map +1 -0
- package/dist/middleware/auth.d.ts +13 -0
- package/dist/models/Navigation.d.ts +18 -0
- package/dist/models/User.d.ts +11 -0
- package/dist/models/approval/Approval.d.ts +177 -0
- package/dist/models/approval/Approval.js +81 -0
- package/dist/models/approval/Approval.js.map +1 -0
- package/dist/models/approval/ApprovalEmployee.d.ts +7 -0
- package/dist/models/approval/ApprovalEmployee.js +10 -0
- package/dist/models/approval/ApprovalEmployee.js.map +1 -0
- package/dist/models/approval/ApprovalFlow.d.ts +49 -0
- package/dist/models/approval/ApprovalFlow.js +15 -0
- package/dist/models/approval/ApprovalFlow.js.map +1 -0
- package/dist/models/approval/ApprovalFlowStep.d.ts +29 -0
- package/dist/models/approval/ApprovalFlowStep.js +17 -0
- package/dist/models/approval/ApprovalFlowStep.js.map +1 -0
- package/dist/models/approval/ApprovalRequestType.d.ts +5 -0
- package/dist/models/approval/ApprovalRequestType.js +6 -0
- package/dist/models/approval/ApprovalRequestType.js.map +1 -0
- package/dist/models/approval/ApprovalStatus.d.ts +9 -0
- package/dist/models/approval/ApprovalStatus.js +6 -0
- package/dist/models/approval/ApprovalStatus.js.map +1 -0
- package/dist/models/approval/ApprovalStepResult.d.ts +11 -0
- package/dist/models/approval/ApprovalStepResult.js +6 -0
- package/dist/models/approval/ApprovalStepResult.js.map +1 -0
- package/dist/models/approval/StepApprovalOrder.d.ts +6 -0
- package/dist/models/approval/StepApprovalOrder.js +6 -0
- package/dist/models/approval/StepApprovalOrder.js.map +1 -0
- package/dist/models/email/Email.d.ts +13 -0
- package/dist/models/email/Email.js +14 -0
- package/dist/models/email/Email.js.map +1 -0
- package/dist/models/email/EmailAttachment.d.ts +6 -0
- package/dist/models/email/EmailAttachment.js +9 -0
- package/dist/models/email/EmailAttachment.js.map +1 -0
- package/dist/models/file/FileActions.d.ts +6 -0
- package/dist/models/file/FileMeta.d.ts +15 -0
- package/dist/{FileMeta-G1oT3mYK.js → models/file/FileMeta.js} +2 -2
- package/dist/models/file/FileMeta.js.map +1 -0
- package/dist/models/peoplesoft/Department.d.ts +58 -0
- package/dist/models/peoplesoft/Department.js +19 -0
- package/dist/models/peoplesoft/Department.js.map +1 -0
- package/dist/models/peoplesoft/Employee.d.ts +46 -0
- package/dist/models/peoplesoft/Employee.js +43 -0
- package/dist/models/peoplesoft/Employee.js.map +1 -0
- package/dist/models/peoplesoft/EmployeeCategoryGroup.d.ts +6 -0
- package/dist/models/peoplesoft/EmployeeCategoryGroup.js +6 -0
- package/dist/models/peoplesoft/EmployeeCategoryGroup.js.map +1 -0
- package/dist/models/peoplesoft/EmployeeStatus.d.ts +6 -0
- package/dist/models/peoplesoft/EmployeeStatus.js +6 -0
- package/dist/models/peoplesoft/EmployeeStatus.js.map +1 -0
- package/dist/models.js +10 -159
- package/dist/models.js.map +1 -1
- package/dist/node_modules/react/cjs/react-compiler-runtime.development.js +22 -0
- package/dist/node_modules/react/cjs/react-compiler-runtime.development.js.map +1 -0
- package/dist/node_modules/react/cjs/react-compiler-runtime.production.js +16 -0
- package/dist/node_modules/react/cjs/react-compiler-runtime.production.js.map +1 -0
- package/dist/{DialogsContext-DMZRefiY.js → node_modules/react/cjs/react-jsx-runtime.development.js} +4 -48
- package/dist/node_modules/react/cjs/react-jsx-runtime.development.js.map +1 -0
- package/dist/node_modules/react/cjs/react-jsx-runtime.production.js +33 -0
- package/dist/node_modules/react/cjs/react-jsx-runtime.production.js.map +1 -0
- package/dist/node_modules/react/compiler-runtime.js +18 -0
- package/dist/node_modules/react/compiler-runtime.js.map +1 -0
- package/dist/node_modules/react/jsx-runtime.js +18 -0
- package/dist/node_modules/react/jsx-runtime.js.map +1 -0
- package/dist/providers/DialogsProvider.d.ts +5 -0
- package/dist/providers/DialogsProvider.js +79 -0
- package/dist/providers/DialogsProvider.js.map +1 -0
- package/dist/providers/LayoutProvider.d.ts +11 -0
- package/dist/providers/LayoutProvider.js +101 -0
- package/dist/providers/LayoutProvider.js.map +1 -0
- package/dist/providers/UserProvider.d.ts +4 -0
- package/dist/providers/UserProvider.js +94 -0
- package/dist/providers/UserProvider.js.map +1 -0
- package/dist/queries/Approval.d.ts +585 -0
- package/dist/queries/Approval.js +91 -0
- package/dist/queries/Approval.js.map +1 -0
- package/dist/queries/ApprovalHooks.d.ts +315 -0
- package/dist/queries/ApprovalHooks.js +243 -0
- package/dist/queries/ApprovalHooks.js.map +1 -0
- package/dist/queries/FileHooks.d.ts +151 -0
- package/dist/{FileHooks-BJdvBvBr.js → queries/FileHooks.js} +14 -13
- package/dist/queries/FileHooks.js.map +1 -0
- package/dist/queries/PeopleSoftHooks.d.ts +537 -0
- package/dist/queries/PeopleSoftHooks.js +586 -0
- package/dist/queries/PeopleSoftHooks.js.map +1 -0
- package/dist/queries/UserHooks.d.ts +11 -0
- package/dist/queries/UserHooks.js +157 -0
- package/dist/queries/UserHooks.js.map +1 -0
- package/dist/queries.js +13 -886
- package/dist/queries.js.map +1 -1
- package/dist/utils.js +2 -2
- package/dist/vite.js +1 -61
- package/dist/vite.js.map +1 -1
- package/package.json +13 -11
- package/dist/ApprovalStatus-BtAVFn5p.js +0 -8
- package/dist/ApprovalStatus-BtAVFn5p.js.map +0 -1
- package/dist/DialogsContext-DMZRefiY.js.map +0 -1
- package/dist/DialogsHooks-BEZgPVSk.js.map +0 -1
- package/dist/FileHooks-BJdvBvBr.js.map +0 -1
- package/dist/FileMeta-G1oT3mYK.js.map +0 -1
- package/dist/RouterListItemButton-CagMd8F_.js.map +0 -1
- package/dist/UseHook-CGSDGsbk.js +0 -13
- package/dist/UseHook-CGSDGsbk.js.map +0 -1
- package/dist/client.d.ts +0 -20
- package/dist/compiler-runtime-BGHur82y.js +0 -46
- package/dist/compiler-runtime-BGHur82y.js.map +0 -1
- package/dist/components.d.ts +0 -134
- package/dist/hooks.d.ts +0 -208
- package/dist/index.d.ts +0 -74
- package/dist/models.d.ts +0 -467
- package/dist/queries.d.ts +0 -1956
- package/dist/server.d.ts +0 -5
- package/dist/utils-CCjnelFb.js.map +0 -1
- package/dist/utils.d.ts +0 -11
- package/dist/vite.d.ts +0 -5
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/providers/DialogsProvider.tsx","../src/lib/auth/index.ts","../src/queries/UserHooks.ts","../src/providers/UserProvider.tsx","../src/components/core/AppTitle.tsx","../src/components/core/navigation/NavigationListItem.tsx","../src/components/core/navigation/NavigationList.tsx","../src/components/core/navigation/NavigationRail.tsx","../src/components/core/ToolbarAccount.tsx","../src/components/core/Layout.tsx","../src/providers/LayoutProvider.tsx"],"sourcesContent":["import useEventCallback from \"@mui/utils/useEventCallback\";\nimport { useId, useRef, useState } from \"react\";\nimport { DialogsContext } from \"../contexts/DialogsContext\";\nimport type { DialogComponent, OpenDialog, OpenDialogOptions } from \"../hooks/DialogsHooks\";\n\ninterface DialogStackEntry<TPayload, TResult> {\n key: string;\n open: boolean;\n promise: Promise<TResult>;\n Component: DialogComponent<TPayload, TResult>;\n payload: TPayload;\n onClose: (result: TResult) => Promise<void>;\n resolve: (result: TResult) => void;\n}\n\nexport interface DialogProviderProps {\n children?: React.ReactNode;\n}\n\nfunction DialogsProvider({ children }: Readonly<DialogProviderProps>) {\n const [stack, setStack] = useState<Array<DialogStackEntry<any, any>>>([]);\n const keyPrefix = useId();\n const nextId = useRef(0);\n const dialogMetadata = useRef(new WeakMap<Promise<any>, DialogStackEntry<any, any>>());\n\n const requestDialog = useEventCallback<OpenDialog>(function open<TPayload, TResult>(\n Component: DialogComponent<TPayload, TResult>,\n payload: TPayload,\n options: OpenDialogOptions<TResult> = {},\n ) {\n const { onClose = async () => { } } = options;\n\n let resolve: (result: TResult) => void;\n const promise = new Promise<TResult>((resolveImpl) => {\n resolve = resolveImpl;\n });\n\n const key = `${keyPrefix}-${nextId.current}`;\n nextId.current += 1;\n\n const newEntry: DialogStackEntry<TPayload, TResult> = {\n key,\n open: true,\n promise,\n Component,\n payload,\n onClose,\n resolve: resolve!,\n };\n\n dialogMetadata.current.set(promise, newEntry);\n\n setStack((previousStack) => [...previousStack, newEntry]);\n\n return promise;\n });\n\n const removeDialogFromStack = (dialog: Promise<any>) => {\n setStack((previousStack) => previousStack.filter((entry) => entry.promise !== dialog));\n dialogMetadata.current.delete(dialog);\n };\n\n const closeDialogUi = useEventCallback(function closeDialogUi<TResult>(dialog: Promise<TResult>) {\n setStack((previousStack) =>\n previousStack.map((entry) => (entry.promise === dialog ? { ...entry, open: false } : entry)),\n );\n\n setTimeout(() => removeDialogFromStack(dialog), 1000);\n });\n\n const closeDialog = useEventCallback(async function closeDialog<TResult>(\n dialog: Promise<TResult>,\n result: TResult,\n ) {\n const entryToClose = dialogMetadata.current.get(dialog);\n if (!entryToClose) {\n throw new Error(\"Dialog not found in stack\");\n }\n\n try {\n await entryToClose.onClose(result);\n } finally {\n entryToClose.resolve(result);\n closeDialogUi(dialog);\n }\n\n return dialog;\n });\n\n return (\n <DialogsContext.Provider value={{ open: requestDialog, close: closeDialog }}>\n {children}\n {stack.map(({ key, open, Component, payload, promise }) => (\n <Component\n key={key}\n payload={payload}\n open={open}\n onClose={async (result) => {\n await closeDialog(promise, result);\n }}\n />\n ))}\n </DialogsContext.Provider>\n );\n}\n\nexport { DialogsProvider };\n\n","import { EventType, NavigationClient, PublicClientApplication } from \"@azure/msal-browser\";\r\nimport type { AuthenticationResult, Configuration, EventMessage, NavigationOptions } from \"@azure/msal-browser\";\r\nimport type { UseNavigateResult } from \"@tanstack/react-router\";\r\nimport { clientEnv } from \"~/env\";\r\n\r\nconst msalConfig: Configuration = {\r\n auth: {\r\n clientId: clientEnv.VITE_MICROSOFT_CLIENT_ID,\r\n authority: `https://login.microsoftonline.com/${clientEnv.VITE_MICROSOFT_TENANT_ID}`,\r\n },\r\n};\r\n\r\nexport const msalInstance = new PublicClientApplication(msalConfig);\r\n\r\nmsalInstance.initialize().then(() => {\r\n if (!msalInstance.getActiveAccount() && msalInstance.getAllAccounts().length > 0) {\r\n msalInstance.setActiveAccount(msalInstance.getAllAccounts()[0]);\r\n }\r\n\r\n msalInstance.enableAccountStorageEvents();\r\n\r\n msalInstance.addEventCallback((event: EventMessage) => {\r\n if (event.eventType === EventType.LOGIN_SUCCESS && event.payload) {\r\n const payload = event.payload as AuthenticationResult;\r\n const account = payload.account;\r\n msalInstance.setActiveAccount(account);\r\n }\r\n });\r\n});\r\n\r\nexport class CustomNavigationClient extends NavigationClient {\r\n private readonly navigate: UseNavigateResult<string>;\r\n\r\n constructor(navigate: UseNavigateResult<string>) {\r\n super();\r\n this.navigate = navigate;\r\n }\r\n\r\n async navigateInternal(url: string, options: NavigationOptions) {\r\n const relativePath = url.replace(location.origin, \"\");\r\n if (options.noHistory) {\r\n this.navigate({ to: relativePath, replace: true });\r\n } else {\r\n this.navigate({ to: relativePath });\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\nexport const acquireAccessToken = async () => {\r\n const account = msalInstance.getActiveAccount();\r\n if (!account) {\r\n throw new Error(\"No active account! Verify a user has been signed in and setActiveAccount has been called.\");\r\n }\r\n\r\n const response = await msalInstance.acquireTokenSilent({\r\n scopes: [\"User.Read\"],\r\n account: account\r\n });\r\n\r\n return response.accessToken;\r\n};\r\n","import { useQuery } from \"@tanstack/react-query\";\r\nimport axios from \"axios\";\r\nimport type { User } from \"~/models/User\";\r\nimport { acquireAccessToken } from \"~/lib/auth\";\r\n\r\nconst QUERY_KEY = \"user\";\r\nconst DAY = 1000 * 60 * 60 * 24;\r\n\r\nconst api = axios.create({\r\n baseURL: \"https://graph.microsoft.com/v1.0/\",\r\n});\r\n\r\napi.interceptors.request.use(async (config) => {\r\n config.headers.Authorization = `Bearer ${await acquireAccessToken()}`;\r\n return config;\r\n});\r\n\r\ninterface GraphUserResponse {\r\n data: {\r\n id: string;\r\n displayName: string;\r\n jobTitle: string;\r\n mail: string;\r\n mobilePhone: string;\r\n };\r\n}\r\n\r\nexport const useGetUser = (enabled: boolean = true) => {\r\n return useQuery<GraphUserResponse, Error, User>({\r\n queryKey: [QUERY_KEY, \"me\"],\r\n queryFn: ({ signal }) => api.request({\r\n method: \"GET\",\r\n url: \"me?$select=id,displayName,jobTitle,mail,mobilePhone\",\r\n signal,\r\n }),\r\n select: response => ({\r\n id: response.data.id,\r\n name: response.data.displayName.split(\"/\")[0],\r\n jobTitle: response.data.jobTitle,\r\n email: response.data.mail,\r\n mobilePhone: response.data.mobilePhone,\r\n photo: null,\r\n groups: [],\r\n }),\r\n staleTime: DAY,\r\n gcTime: DAY,\r\n refetchOnWindowFocus: false,\r\n enabled,\r\n });\r\n};\r\n\r\nexport const useGetUserPhoto = (enabled: boolean = true) => {\r\n return useQuery<{ data: Blob }, Error, string>({\r\n queryKey: [QUERY_KEY, \"me\", \"photo\"],\r\n queryFn: ({ signal }) => api.request({\r\n method: \"GET\",\r\n url: \"me/photo/$value\",\r\n signal,\r\n responseType: \"blob\",\r\n }),\r\n select: response => URL.createObjectURL(response.data),\r\n staleTime: DAY,\r\n gcTime: DAY,\r\n refetchOnWindowFocus: false,\r\n enabled,\r\n });\r\n};\r\n\r\ninterface GraphGroupsResponse {\r\n data: {\r\n value: Array<{ displayName: string }>;\r\n };\r\n}\r\n\r\nexport const useGetUserGroups = (enabled: boolean = true) => {\r\n return useQuery<GraphGroupsResponse, Error, Array<string>>({\r\n queryKey: [QUERY_KEY, \"me\", \"memberOf\"],\r\n queryFn: ({ signal }) => api.request({\r\n method: \"GET\",\r\n url: \"me/memberOf?$select=displayName\",\r\n signal,\r\n }),\r\n select: response => response.data.value.map((group) => group.displayName),\r\n staleTime: DAY,\r\n gcTime: DAY,\r\n refetchOnWindowFocus: false,\r\n enabled,\r\n });\r\n};\r\n","import { InteractionType } from \"@azure/msal-browser\";\r\nimport { useMsalAuthentication } from \"@azure/msal-react\";\r\nimport { useEffect, useState } from \"react\";\r\nimport type { User } from \"~/models/User\";\r\nimport { UserContext } from \"~/contexts/UserContext\";\r\nimport { useGetUser, useGetUserGroups, useGetUserPhoto } from \"~/queries/UserHooks\";\r\n\r\nexport interface UserProviderProps {\r\n children?: React.ReactNode;\r\n}\r\n\r\nfunction UserProvider({ children }: Readonly<UserProviderProps>) {\r\n const { result } = useMsalAuthentication(InteractionType.Redirect);\r\n const [user, setUser] = useState<User>({} as User);\r\n\r\n const { data } = useGetUser(!!result);\r\n const { data: photo } = useGetUserPhoto(!!result);\r\n const { data: groups } = useGetUserGroups(!!result);\r\n\r\n useEffect(() => {\r\n if (!data) return;\r\n\r\n setUser({\r\n ...data,\r\n ...(photo && { photo }),\r\n ...(groups && { groups }),\r\n });\r\n }, [data, photo, groups]);\r\n\r\n return (\r\n <UserContext.Provider value={{ user, setUser }}>\r\n {children}\r\n </UserContext.Provider>\r\n );\r\n}\r\n\r\nexport { UserProvider };\r\n\r\n","import { Chip, Stack, Typography } from \"@mui/material\";\nimport type { FC } from \"react\";\nimport { clientEnv } from \"~/env\";\n\nexport const AppTitle: FC = () => {\n return (\n <Stack direction=\"row\" alignItems=\"center\" spacing={2} flexGrow={1}>\n <img src=\"/favicon-32x32.png\" alt=\"app-logo\" loading=\"lazy\" />\n <Typography variant=\"h6\">{clientEnv.VITE_APP_TITLE}</Typography>\n {import.meta.env.DEV && <Chip size=\"small\" label=\"TEST\" color=\"info\" />}\n </Stack>\n );\n};\n","import ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\nimport { Collapse } from \"@mui/material\";\nimport Avatar from \"@mui/material/Avatar\";\nimport Box from \"@mui/material/Box\";\nimport ListItem from \"@mui/material/ListItem\";\nimport ListItemButton from \"@mui/material/ListItemButton\";\nimport ListItemIcon from \"@mui/material/ListItemIcon\";\nimport ListItemText from \"@mui/material/ListItemText\";\nimport Paper from \"@mui/material/Paper\";\nimport Popper from \"@mui/material/Popper\";\nimport { styled } from \"@mui/material/styles\";\nimport Typography from \"@mui/material/Typography\";\nimport { Fragment, useState } from \"react\";\nimport { MINI_WIDTH } from \"./NavigationRail\";\nimport type { NavigationItem, NavigationPageItem } from \"~/models/Navigation\";\nimport type { FC, ReactNode } from \"react\";\nimport type { SxProps, Theme } from \"@mui/material/styles\";\nimport { RouterListItemButton } from \"~/components/router/RouterListItemButton\";\n\nconst ICON_SIZE = 34;\n\nconst StyledNavButton = styled(ListItemButton)(({ theme }) => ({\n borderRadius: 8,\n \"&.Mui-selected\": {\n \"& .MuiListItemIcon-root, & .MuiTypography-root, & .MuiSvgIcon-root\": {\n color: (theme.vars ?? theme).palette.primary.dark,\n },\n \"& .MuiAvatar-root\": {\n backgroundColor: (theme.vars ?? theme).palette.primary.dark,\n },\n \"& .MuiTouchRipple-child\": {\n backgroundColor: (theme.vars ?? theme).palette.primary.dark,\n },\n },\n \"& .MuiSvgIcon-root\": {\n color: (theme.vars ?? theme).palette.action.active,\n },\n \"& .MuiAvatar-root\": {\n backgroundColor: (theme.vars ?? theme).palette.action.active,\n },\n}));\n\nconst StyledRouterButton = styled(RouterListItemButton)(({ theme }) => ({\n borderRadius: 8,\n \"&.Mui-selected\": {\n \"& .MuiListItemIcon-root, & .MuiTypography-root, & .MuiSvgIcon-root\": {\n color: (theme.vars ?? theme).palette.primary.dark,\n },\n \"& .MuiAvatar-root\": {\n backgroundColor: (theme.vars ?? theme).palette.primary.dark,\n },\n \"& .MuiTouchRipple-child\": {\n backgroundColor: (theme.vars ?? theme).palette.primary.dark,\n },\n },\n \"& .MuiSvgIcon-root\": {\n color: (theme.vars ?? theme).palette.action.active,\n },\n \"& .MuiAvatar-root\": {\n backgroundColor: (theme.vars ?? theme).palette.action.active,\n },\n}));\n\nconst IconOrAvatar: FC<{ item: NavigationPageItem; collapsed?: boolean }> = ({ item, collapsed }) => {\n if (item.icon || collapsed) {\n return (\n <Box sx={collapsed ? { position: \"absolute\", left: \"50%\", top: \"calc(50% - 6px)\", transform: \"translate(-50%, -50%)\" } : {}}>\n <ListItemIcon sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", minWidth: ICON_SIZE }}>\n {item.icon ?? null}\n {!item.icon && collapsed ? (\n <Avatar sx={{ width: ICON_SIZE - 7, height: ICON_SIZE - 7, fontSize: 12 }}>{item.title}</Avatar>\n ) : null}\n </ListItemIcon>\n {collapsed ? (\n <Typography\n variant=\"caption\"\n sx={{\n position: \"absolute\",\n bottom: -18,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n fontSize: 10,\n fontWeight: 500,\n textAlign: \"center\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n maxWidth: MINI_WIDTH - 28,\n }}\n >\n {item.title}\n </Typography>\n ) : null}\n </Box>\n );\n }\n return null;\n};\n\ninterface MiniPopoverProps {\n open: boolean;\n anchorEl: HTMLElement | null;\n children?: ReactNode;\n}\n\nconst MiniPopover: FC<MiniPopoverProps> = ({ open, anchorEl, children }) => (\n <Popper\n open={open}\n anchorEl={anchorEl}\n placement=\"right-start\"\n modifiers={[\n { name: \"offset\", options: { offset: [6, 0] } },\n { name: \"preventOverflow\", options: { padding: 8 } },\n { name: \"flip\", options: { fallbackPlacements: [\"right-end\", \"left-start\"] } },\n ]}\n >\n <Paper\n sx={{\n pt: 0.5,\n pb: 0.5,\n maxHeight: \"min(calc(100vh - 100px), 560px)\",\n overflowY: \"auto\",\n overscrollBehavior: \"contain\",\n }}\n >\n {children}\n </Paper>\n </Popper>\n);\n\ninterface NavigationListItemProps {\n item: NavigationPageItem;\n isOpen?: boolean;\n selected?: boolean;\n disabled?: boolean;\n collapsed?: boolean;\n isSidebarFullyExpanded?: boolean;\n isSidebarFullyCollapsed?: boolean;\n onClick?: (item: NavigationPageItem) => void;\n renderNested?: (sub: Array<NavigationItem>) => ReactNode;\n onClose?: () => void;\n}\n\nexport const NavigationListItem: FC<NavigationListItemProps> = ({ item, isOpen, selected, disabled, collapsed, isSidebarFullyExpanded = true, isSidebarFullyCollapsed, onClick, renderNested, onClose }) => {\n const [hoveredPopoverItem, setHoveredPopoverItem] = useState<string | null>(null);\n const [anchorElement, setAnchorElement] = useState<HTMLElement | null>(null);\n\n const chevronSx: SxProps<Theme> = () => {\n if (collapsed && isSidebarFullyCollapsed && item.children) {\n return {\n fontSize: 18,\n position: \"absolute\",\n top: \"41.5%\",\n right: \"2px\",\n transform: \"translateY(-50%) rotate(-90deg)\",\n };\n }\n if (!collapsed && isSidebarFullyExpanded && item.children) {\n return {\n ml: 0.5,\n transform: `rotate(${isOpen ? 0 : -90}deg)`,\n };\n }\n return { display: \"none\" };\n };\n\n const shouldJustExpand = item.children && !collapsed;\n\n const buttonProps = {\n selected,\n disabled,\n sx: { px: 1.4, height: collapsed ? 60 : 48 }\n };\n\n const buttonContent = (\n <>\n <IconOrAvatar item={item} collapsed={collapsed} />\n {!collapsed && (\n <ListItemText\n primary={item.title}\n slotProps={{ primary: { noWrap: true, title: item.title } }}\n sx={{ ml: 1.2, flex: 1, minWidth: 0, \"& .MuiTypography-root\": { whiteSpace: \"nowrap\", overflow: \"hidden\", textOverflow: \"ellipsis\" } }}\n />\n )}\n {item.children ? <ExpandMoreIcon sx={chevronSx} /> : null}\n </>\n );\n\n const listItem = (\n <ListItem\n {...(item.children && collapsed\n ? {\n onMouseEnter: (event: React.MouseEvent<HTMLElement>) => {\n setAnchorElement(event.currentTarget);\n setHoveredPopoverItem(item.title);\n },\n onMouseLeave: () => {\n setHoveredPopoverItem(null);\n },\n }\n : {})}\n sx={{ py: 0, px: 1, overflowX: \"hidden\" }}\n >\n {shouldJustExpand ? (\n <StyledNavButton {...buttonProps} onClick={() => onClick?.(item)}>\n {buttonContent}\n </StyledNavButton>\n ) : (\n <StyledRouterButton\n {...buttonProps}\n to={item.to}\n href={item.href}\n params={item.params as any}\n search={item.search as any}\n onClick={onClose}\n >\n {buttonContent}\n </StyledRouterButton>\n )}\n\n {item.children && collapsed ? (\n <MiniPopover open={item.title === hoveredPopoverItem} anchorEl={anchorElement}>\n {renderNested?.(item.children)}\n </MiniPopover>\n ) : null}\n </ListItem>\n );\n\n return (\n <Fragment key={item.to}>\n {listItem}\n {item.children && !collapsed ? (\n <Collapse in={isOpen} timeout=\"auto\" unmountOnExit>\n {renderNested?.(item.children)}\n </Collapse>\n ) : null}\n </Fragment>\n );\n};\n","import Divider from \"@mui/material/Divider\";\nimport List from \"@mui/material/List\";\nimport ListSubheader from \"@mui/material/ListSubheader\";\nimport { Fragment, useEffect, useState } from \"react\";\nimport { NavigationListItem } from \"./NavigationListItem\";\nimport { EXPANDED_WIDTH, MINI_WIDTH } from \"./NavigationRail\";\nimport type { FC, ReactNode } from \"react\";\nimport type { Navigation, NavigationDivider, NavigationHeader, NavigationItem, NavigationPageItem } from \"~/models/Navigation\";\n\nexport const isPageItem = (item: NavigationItem): item is NavigationPageItem => !(\"kind\" in item);\nexport const isDivider = (item: NavigationItem): item is NavigationDivider => \"kind\" in item && item.kind === \"divider\";\nexport const isHeader = (item: NavigationItem): item is NavigationHeader => \"kind\" in item && item.kind === \"header\";\n\ninterface NavigationListProps {\n subNavigation: Navigation;\n depth?: number;\n collapsed?: boolean;\n isPopover?: boolean;\n isSidebarFullyExpanded?: boolean;\n isSidebarFullyCollapsed?: boolean;\n expandedWidth: number | string;\n renderItem?: (item: NavigationPageItem, context: { collapsed: boolean }) => ReactNode;\n activePath?: string | null;\n onNavigate: (item: NavigationPageItem) => void;\n onClose?: () => void;\n}\n\nexport const NavigationList: FC<NavigationListProps> = ({ subNavigation, depth = 0, collapsed, isPopover, isSidebarFullyExpanded = true, isSidebarFullyCollapsed, expandedWidth, renderItem, activePath, onNavigate, onClose }) => {\n const [openKeys, setOpenKeys] = useState<Array<string>>([]);\n\n useEffect(() => {\n if (collapsed) setOpenKeys([]);\n }, [collapsed]);\n\n const toggleKey = (key: string) =>\n setOpenKeys((previous) => (previous.includes(key) ? previous.filter((k) => k !== key) : [...previous, key]));\n\n const renderNested = (children: Array<NavigationItem>) => <NavigationList\n subNavigation={children}\n depth={depth + 1}\n isPopover={collapsed}\n expandedWidth={expandedWidth}\n activePath={activePath}\n onNavigate={onNavigate}\n onClose={onClose}\n />;\n\n const filteredNavigation = subNavigation.filter(nav => !nav.hidden);\n\n return (\n <List\n sx={{\n padding: 0,\n mt: isPopover && depth === 1 ? 0.5 : 0,\n mb: depth === 0 && !isPopover ? 4 : 0.5,\n pl: (isPopover ? 1 : 2) * (isPopover ? depth - 1 : depth),\n minWidth: isPopover && depth === 1 ? EXPANDED_WIDTH : \"auto\",\n width: collapsed ? MINI_WIDTH : \"auto\",\n }}\n >\n {filteredNavigation.map((navItem, index) => {\n if (isHeader(navItem)) {\n return (\n <ListSubheader\n key={`subheader-${depth}-${index}`}\n sx={{\n fontSize: 12,\n fontWeight: \"700\",\n height: collapsed ? 0 : 40,\n px: 2,\n minWidth: expandedWidth,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n zIndex: 2,\n bgcolor: \"transparent\",\n position: \"static\"\n }}\n >\n {navItem.title}\n </ListSubheader>\n );\n }\n\n if (isDivider(navItem)) {\n const nextItem = filteredNavigation[index + 1];\n return (\n <li key={`divider-${depth}-${index}`}>\n <Divider sx={{ mx: 1, mt: 1, mb: isHeader(nextItem) && !collapsed ? 0 : 1 }} />\n </li>\n );\n }\n\n if (!isPageItem(navItem)) return null;\n\n const key = `item-${depth}-${index}`;\n const uniqueItemKey = `${depth}-${index}-${navItem.title}`;\n\n if (renderItem) return <Fragment key={key}>{renderItem(navItem, { collapsed: !!collapsed })}</Fragment>;\n\n return <NavigationListItem\n key={key}\n item={navItem}\n isOpen={openKeys.includes(uniqueItemKey)}\n selected={activePath === navItem.to}\n collapsed={collapsed}\n isSidebarFullyExpanded={isSidebarFullyExpanded}\n isSidebarFullyCollapsed={isSidebarFullyCollapsed}\n onClick={navItem.children && !collapsed ? () => toggleKey(uniqueItemKey) : undefined}\n renderNested={renderNested}\n onClose={onClose}\n />;\n })}\n </List>\n );\n};","import { useMediaQuery } from \"@mui/material\";\nimport Box from \"@mui/material/Box\";\nimport Drawer from \"@mui/material/Drawer\";\nimport { useTheme } from \"@mui/material/styles\";\nimport { useNavigate, useRouterState } from \"@tanstack/react-router\";\nimport { NavigationList, isHeader } from \"./NavigationList\";\nimport type { FC } from \"react\";\nimport type { Navigation } from \"~/models/Navigation\";\n\nexport const MINI_WIDTH = 84;\nexport const EXPANDED_WIDTH = 320;\nexport const TOOLBAR_HEIGHT = 64;\n\ninterface NavigationRailProps {\n navigation: Navigation;\n expanded: boolean;\n setExpanded: (open: boolean) => void;\n}\n\nexport const NavigationRail: FC<NavigationRailProps> = ({ navigation, expanded, setExpanded }) => {\n const navigate = useNavigate();\n const routerState = useRouterState();\n const theme = useTheme();\n const showPermanent = useMediaQuery(theme.breakpoints.up(\"sm\"));\n\n const drawerContent = (collapsed: boolean) => (\n <Box\n component=\"nav\"\n sx={{\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n overflow: \"auto\",\n scrollbarGutter: collapsed ? \"stable\" : \"auto\",\n overflowX: \"hidden\",\n pt: navigation[0] && isHeader(navigation[0]) && !collapsed ? 0 : 2,\n }}\n >\n <NavigationList\n subNavigation={navigation}\n collapsed={collapsed}\n isSidebarFullyExpanded={expanded}\n isSidebarFullyCollapsed={!expanded}\n expandedWidth={EXPANDED_WIDTH}\n activePath={routerState.location.pathname}\n onNavigate={navigate}\n onClose={!showPermanent ? () => setExpanded(false) : undefined}\n />\n </Box>\n );\n\n if (showPermanent)\n return (\n <Drawer\n variant=\"permanent\"\n sx={{\n width: expanded ? EXPANDED_WIDTH : MINI_WIDTH,\n [\"& .MuiDrawer-paper\"]: {\n position: \"absolute\",\n top: `${TOOLBAR_HEIGHT}px`,\n height: `calc(100% - ${TOOLBAR_HEIGHT}px)`,\n width: expanded ? EXPANDED_WIDTH : MINI_WIDTH,\n borderTop: \"1px solid\",\n borderColor: \"var(--mui-palette-divider)\",\n },\n }}\n >\n {drawerContent(!expanded)}\n </Drawer>\n );\n\n return (\n <Drawer open={expanded} onClose={() => setExpanded(false)}>\n {drawerContent(!expanded)}\n </Drawer>\n );\n};\n","import { useMsal } from \"@azure/msal-react\";\r\nimport AccountCircle from \"@mui/icons-material/AccountCircle\";\r\nimport ArrowBack from \"@mui/icons-material/ArrowBack\";\r\nimport Brightness4 from \"@mui/icons-material/Brightness4\";\r\nimport ChevronRight from \"@mui/icons-material/ChevronRight\";\r\nimport DarkMode from \"@mui/icons-material/DarkMode\";\r\nimport Done from \"@mui/icons-material/Done\";\r\nimport LightMode from \"@mui/icons-material/LightMode\";\r\nimport Logout from \"@mui/icons-material/Logout\";\r\nimport SettingsBrightness from \"@mui/icons-material/SettingsBrightness\";\r\nimport Translate from \"@mui/icons-material/Translate\";\r\nimport { Avatar, Box, IconButton, List, ListItem, ListItemButton, ListItemIcon, ListItemText, ListSubheader, Menu, useColorScheme } from \"@mui/material\";\r\nimport { Fragment, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport type { FC } from \"react\";\r\nimport { useUser } from \"~/hooks/UseHook\";\r\n\r\ntype TabType = \"settings\" | \"theme\" | \"language\";\r\n\r\nconst capitalize = (value: string | undefined) => value && value.charAt(0).toUpperCase() + value.slice(1);\r\n\r\nexport const ToolbarAccount: FC = () => {\r\n const [anchorElement, setAnchorElement] = useState<HTMLElement>();\r\n const [tab, setTab] = useState<TabType>(\"settings\");\r\n const open = Boolean(anchorElement);\r\n const { t, i18n } = useTranslation();\r\n const { mode, setMode } = useColorScheme();\r\n const { instance } = useMsal();\r\n const user = useUser();\r\n\r\n const supportedLanguages = (Array.isArray(i18n.options.supportedLngs) ? i18n.options.supportedLngs : []).filter(lng => lng !== \"cimode\");\r\n const languageDisplayNames = new Intl.DisplayNames([i18n.language], { type: \"language\" });\r\n\r\n const colorModes: Array<{ mode: \"light\" | \"dark\" | \"system\"; icon: typeof LightMode; label: string }> = [\r\n { mode: \"light\", icon: LightMode, label: t(\"Layout.Light\") },\r\n { mode: \"dark\", icon: DarkMode, label: t(\"Layout.Dark\") },\r\n { mode: \"system\", icon: SettingsBrightness, label: t(\"Layout.System\") },\r\n ];\r\n\r\n const openMenu = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => setAnchorElement(event.currentTarget);\r\n const closeMenu = () => { setAnchorElement(undefined); setTimeout(() => setTab(\"settings\"), 300); };\r\n\r\n const changeTab = (newTab: TabType) => () => setTab(newTab);\r\n\r\n const settings = (\r\n <List component=\"nav\" subheader={<ListSubheader sx={{ backgroundColor: \"transparent\" }}>{t(\"Layout.Settings\")}</ListSubheader>}>\r\n <ListItemButton onClick={changeTab(\"theme\")} sx={{ py: 0.3 }}>\r\n <ListItemIcon>\r\n <Brightness4 />\r\n </ListItemIcon>\r\n <ListItemText primary={t(\"Layout.Appearance\")} secondary={colorModes.find((m) => m.mode === mode)?.label} />\r\n <ChevronRight />\r\n </ListItemButton>\r\n\r\n <ListItemButton onClick={changeTab(\"language\")} sx={{ py: 0.3 }}>\r\n <ListItemIcon>\r\n <Translate />\r\n </ListItemIcon>\r\n <ListItemText primary={t(\"Layout.Language\")} secondary={capitalize(languageDisplayNames.of(i18n.language))} />\r\n <ChevronRight />\r\n </ListItemButton>\r\n </List>\r\n );\r\n\r\n const theme = (\r\n <List subheader={\r\n <ListSubheader onClick={changeTab(\"settings\")} sx={{ backgroundColor: \"transparent\", display: \"flex\", alignItems: \"center\", px: 1, cursor: \"pointer\" }}>\r\n <IconButton size=\"small\" sx={{ mr: 0.5 }}>\r\n <ArrowBack fontSize=\"small\" />\r\n </IconButton> {t(\"Layout.Appearance\")}\r\n </ListSubheader>\r\n }>\r\n {colorModes.map(({ mode: modeValue, icon: Icon, label }) => (\r\n <ListItemButton\r\n key={modeValue}\r\n onClick={() => {\r\n setMode(modeValue);\r\n closeMenu();\r\n }}\r\n selected={mode === modeValue}\r\n >\r\n <ListItemIcon>\r\n <Icon />\r\n </ListItemIcon>\r\n <ListItemText primary={label} />\r\n </ListItemButton>\r\n ))}\r\n </List>\r\n );\r\n\r\n const language = (\r\n <List subheader={\r\n <ListSubheader onClick={changeTab(\"settings\")} sx={{ backgroundColor: \"transparent\", display: \"flex\", alignItems: \"center\", px: 1, cursor: \"pointer\" }}>\r\n <IconButton size=\"small\" sx={{ mr: 0.5 }}>\r\n <ArrowBack fontSize=\"small\" />\r\n </IconButton> {t(\"Layout.Language\")}\r\n </ListSubheader>\r\n }>\r\n {supportedLanguages.map((languageCode) =>\r\n <ListItemButton\r\n key={languageCode}\r\n onClick={() => i18n.changeLanguage(languageCode).finally(() => closeMenu())}\r\n selected={i18n.resolvedLanguage === languageCode}\r\n >\r\n <ListItemIcon>\r\n {i18n.resolvedLanguage === languageCode && <Done />}\r\n </ListItemIcon>\r\n <ListItemText primary={capitalize(languageDisplayNames.of(languageCode))} />\r\n </ListItemButton>\r\n )}\r\n </List>\r\n );\r\n\r\n return (\r\n <Fragment>\r\n <IconButton size=\"small\" edge=\"end\" onClick={openMenu}>\r\n {user.photo ?\r\n <Avatar\r\n src={user.photo}\r\n sx={{ width: { xs: 32, sm: 40 }, height: { xs: 32, sm: 40 } }}\r\n />\r\n :\r\n <AccountCircle sx={{ width: { xs: 32, sm: 40 }, height: { xs: 32, sm: 40 } }} />\r\n }\r\n </IconButton>\r\n\r\n <Menu anchorEl={anchorElement} open={open} onClose={closeMenu}>\r\n <Box sx={{ width: 240 }}>\r\n <List disablePadding>\r\n <ListItem>\r\n <ListItemText primary={user.name} secondary={user.jobTitle} />\r\n </ListItem>\r\n\r\n <ListItemButton\r\n onClick={() =>\r\n instance.logoutRedirect({\r\n postLogoutRedirectUri: \"/\",\r\n })\r\n }\r\n >\r\n <ListItemIcon><Logout color=\"error\" /></ListItemIcon>\r\n <ListItemText primary={t(\"Layout.Logout\")} />\r\n </ListItemButton>\r\n </List>\r\n\r\n {tab === \"settings\" && settings}\r\n {tab === \"theme\" && theme}\r\n {tab === \"language\" && language}\r\n </Box>\r\n </Menu>\r\n </Fragment>\r\n );\r\n};\r\n","import { AuthenticatedTemplate } from \"@azure/msal-react\";\r\nimport Menu from \"@mui/icons-material/Menu\";\r\nimport MenuOpen from \"@mui/icons-material/MenuOpen\";\r\nimport { AppBar, Box, CssBaseline, IconButton, InitColorSchemeScript, LinearProgress, Toolbar } from \"@mui/material\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport { useIsFetching, useIsMutating } from \"@tanstack/react-query\";\r\nimport { createIsomorphicFn } from \"@tanstack/react-start\";\r\nimport { getCookie } from \"@tanstack/react-start/server\";\r\nimport { Fragment, useState } from \"react\";\r\nimport { AppTitle } from \"./AppTitle\";\r\nimport { NavigationRail } from \"./navigation/NavigationRail\";\r\nimport { ToolbarAccount } from \"./ToolbarAccount\";\r\nimport type { Navigation } from \"~/models/Navigation\";\r\nimport type { FC, ReactNode } from \"react\";\r\n\r\nconst YEAR_IN_SECONDS = 60 * 60 * 24 * 365;\r\n\r\nconst getNavigationOpenStatus = createIsomorphicFn()\r\n .server(() => {\r\n const cookie = getCookie(\"navigationOpen\");\r\n return cookie === \"true\";\r\n })\r\n .client(() => {\r\n const cookie = document.cookie\r\n .split(\"; \")\r\n .find(row => row.startsWith(\"navigationOpen=\"));\r\n return cookie ? cookie.split(\"=\")[1] === \"true\" : false;\r\n });\r\n\r\nconst DrawerHeader = styled(\"div\")(({ theme }) => ({\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-end\",\r\n padding: theme.spacing(0, 1),\r\n ...theme.mixins.toolbar,\r\n}));\r\n\r\ninterface LayoutProps {\r\n navigation: Navigation | undefined;\r\n children: ReactNode;\r\n}\r\n\r\nexport const Layout: FC<LayoutProps> = (props) => {\r\n const [navigationOpen, setNavigationOpen] = useState(getNavigationOpenStatus);\r\n const isFetching = !!useIsFetching();\r\n const isMutating = !!useIsMutating();\r\n\r\n return (\r\n <Fragment>\r\n <InitColorSchemeScript />\r\n <CssBaseline />\r\n\r\n <Box sx={{ display: \"flex\", height: \"100dvh\", maxHeight: \"100dvh\", overflow: \"hidden\", width: \"100%\" }}>\r\n <AppBar\r\n color=\"transparent\"\r\n position=\"fixed\"\r\n sx={{\r\n borderBottom: \"1px solid\",\r\n borderColor: \"var(--mui-palette-divider)\",\r\n boxShadow: \"none\",\r\n }}>\r\n <Toolbar>\r\n {props.navigation &&\r\n <IconButton\r\n onClick={() => {\r\n setNavigationOpen(previous => {\r\n const newValue = !previous;\r\n document.cookie = `navigationOpen=${newValue}; max-age=${YEAR_IN_SECONDS}; path=/`;\r\n return newValue;\r\n });\r\n }}\r\n sx={{ marginRight: 2 }}\r\n >\r\n {navigationOpen ? <MenuOpen /> : <Menu />}\r\n </IconButton>\r\n }\r\n\r\n <AppTitle />\r\n\r\n <ToolbarAccount />\r\n </Toolbar>\r\n </AppBar>\r\n\r\n {props.navigation &&\r\n <NavigationRail\r\n navigation={props.navigation}\r\n expanded={navigationOpen}\r\n setExpanded={newValue => {\r\n setNavigationOpen(newValue);\r\n document.cookie = `navigationOpen=${newValue}; max-age=${YEAR_IN_SECONDS}; path=/`;\r\n }}\r\n />\r\n }\r\n\r\n <Box component=\"main\" sx={{ flexGrow: 1, display: \"flex\", flexDirection: \"column\", minWidth: 0, height: \"100%\", overflow: \"hidden\" }}>\r\n <DrawerHeader />\r\n <Box sx={{ flex: 1, overflow: \"auto\", position: \"relative\" }}>\r\n <AuthenticatedTemplate>\r\n {props.children}\r\n </AuthenticatedTemplate>\r\n </Box>\r\n </Box>\r\n </Box>\r\n\r\n {(isFetching || isMutating) && <LinearProgress sx={{ position: \"fixed\", top: { xs: 56, sm: 64 }, left: 0, right: 0 }} />}\r\n </Fragment>\r\n );\r\n};\r\n","import { MsalProvider } from \"@azure/msal-react\";\r\nimport { ThemeProvider } from \"@mui/material\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers\";\r\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\r\nimport { createServerFn } from \"@tanstack/react-start\";\r\nimport { getCookie } from \"@tanstack/react-start/server\";\r\nimport dayjs from \"dayjs\";\r\nimport i18n from \"i18next\";\r\nimport LanguageDetector from \"i18next-browser-languagedetector\";\r\nimport { useEffect, useEffectEvent } from \"react\";\r\nimport { initReactI18next } from \"react-i18next\";\r\nimport { resources } from \"virtual:wcz-layout\";\r\nimport z from \"zod\";\r\nimport { DialogsProvider } from \"./DialogsProvider\";\r\nimport { UserProvider } from \"./UserProvider\";\r\nimport type { Navigation } from \"~/models/Navigation\";\r\nimport type { FC, ReactNode } from \"react\";\r\nimport type { Theme } from \"@mui/material\";\r\nimport { msalInstance } from \"~/lib/auth\";\r\nimport { Layout } from \"~/components/core/Layout\";\r\n\r\nconst YEAR_IN_MINUTES = 60 * 24 * 365;\r\n\r\ni18n\r\n .use(LanguageDetector)\r\n .use(initReactI18next)\r\n .init({\r\n resources,\r\n fallbackLng: \"en\",\r\n supportedLngs: Object.keys(resources),\r\n detection: {\r\n caches: [\"cookie\"],\r\n cookieMinutes: YEAR_IN_MINUTES,\r\n },\r\n interpolation: { escapeValue: false },\r\n });\r\n\r\ninterface ProvidersProps {\r\n navigation?: Navigation;\r\n theme: Theme;\r\n children: ReactNode;\r\n}\r\n\r\nexport const LayoutProvider: FC<ProvidersProps> = ({ navigation, theme, children }) => {\r\n\r\n const languageChangedHandler = useEffectEvent(() => {\r\n z.config(z.core.locales[i18n.language as keyof typeof z.core.locales]());\r\n dayjs.locale(i18n.language);\r\n });\r\n\r\n useEffect(() => {\r\n languageChangedHandler();\r\n\r\n i18n.on(\"languageChanged\", languageChangedHandler);\r\n return () => { i18n.off(\"languageChanged\", languageChangedHandler); };\r\n }, []);\r\n\r\n return (\r\n <MsalProvider instance={msalInstance}>\r\n <UserProvider>\r\n <ThemeProvider theme={theme}>\r\n <LocalizationProvider key={i18n.language} dateAdapter={AdapterDayjs} adapterLocale={i18n.language}>\r\n <DialogsProvider>\r\n <Layout navigation={navigation}>\r\n {children}\r\n </Layout>\r\n </DialogsProvider>\r\n </LocalizationProvider>\r\n </ThemeProvider>\r\n </UserProvider>\r\n </MsalProvider>\r\n );\r\n};\r\n\r\nexport const setSSRLanguage = createServerFn().handler(async () => {\r\n const language = getCookie(i18n.services.languageDetector.options.lookupCookie) || \"en\";\r\n z.config(z.core.locales[language as keyof typeof z.core.locales]());\r\n dayjs.locale(language);\r\n await i18n.changeLanguage(language);\r\n});\r\n"],"names":["DialogsProvider","children","stack","setStack","useState","keyPrefix","useId","nextId","useRef","dialogMetadata","WeakMap","requestDialog","useEventCallback","open","Component","payload","options","onClose","resolve","promise","Promise","resolveImpl","key","current","newEntry","set","previousStack","removeDialogFromStack","dialog","filter","entry","delete","closeDialogUi","map","setTimeout","closeDialog","result","entryToClose","get","Error","jsxs","close","msalConfig","auth","clientId","clientEnv","VITE_MICROSOFT_CLIENT_ID","authority","VITE_MICROSOFT_TENANT_ID","msalInstance","PublicClientApplication","initialize","then","getActiveAccount","getAllAccounts","length","setActiveAccount","enableAccountStorageEvents","addEventCallback","event","eventType","EventType","LOGIN_SUCCESS","account","acquireAccessToken","response","acquireTokenSilent","scopes","accessToken","QUERY_KEY","DAY","api","axios","create","baseURL","interceptors","request","use","config","headers","Authorization","useGetUser","t0","$","_c","enabled","undefined","t1","Symbol","for","t2","queryKey","queryFn","_temp","select","_temp2","staleTime","gcTime","refetchOnWindowFocus","useQuery","useGetUserPhoto","_temp3","_temp4","useGetUserGroups","_temp5","_temp7","signal","method","url","id","data","name","displayName","split","jobTitle","email","mail","mobilePhone","photo","groups","responseType","URL","createObjectURL","_temp6","group","value","UserProvider","useMsalAuthentication","InteractionType","Redirect","user","setUser","t3","useEffect","t4","t5","AppTitle","jsx","VITE_APP_TITLE","import","ICON_SIZE","StyledNavButton","styled","ListItemButton","theme","borderRadius","color","vars","palette","primary","dark","backgroundColor","action","active","StyledRouterButton","RouterListItemButton","IconOrAvatar","item","collapsed","icon","position","left","top","transform","display","alignItems","justifyContent","minWidth","title","width","height","fontSize","t6","Typography","bottom","fontWeight","textAlign","whiteSpace","overflow","textOverflow","maxWidth","MINI_WIDTH","t7","MiniPopover","anchorEl","offset","padding","fallbackPlacements","pt","pb","maxHeight","overflowY","overscrollBehavior","NavigationListItem","isOpen","selected","disabled","isSidebarFullyExpanded","isSidebarFullyCollapsed","onClick","renderNested","hoveredPopoverItem","setHoveredPopoverItem","anchorElement","setAnchorElement","right","ml","chevronSx","shouldJustExpand","px","sx","buttonProps","noWrap","flex","t8","t9","Fragment","buttonContent","t10","onMouseEnter","currentTarget","onMouseLeave","t11","py","overflowX","t12","to","href","params","search","t13","t14","listItem","t15","t16","isPageItem","isDivider","kind","isHeader","NavigationList","subNavigation","depth","isPopover","expandedWidth","renderItem","activePath","onNavigate","openKeys","setOpenKeys","previous","includes","k","toggleKey","filteredNavigation","EXPANDED_WIDTH","mt","mb","pl","navItem","index","zIndex","bgcolor","nextItem","mx","key_0","uniqueItemKey","nav","hidden","TOOLBAR_HEIGHT","NavigationRail","navigation","expanded","setExpanded","navigate","useNavigate","routerState","useRouterState","useTheme","breakpoints","up","showPermanent","useMediaQuery","location","pathname","flexDirection","scrollbarGutter","drawerContent","borderTop","borderColor","capitalize","charAt","toUpperCase","slice","ToolbarAccount","tab","setTab","Boolean","t","i18n","useTranslation","mode","setMode","useColorScheme","instance","useMsal","useUser","T0","closeMenu","openMenu","settings","supportedLanguages","Array","isArray","supportedLngs","languageDisplayNames","Intl","DisplayNames","language","type","LightMode","label","DarkMode","SettingsBrightness","colorModes","newTab","changeTab","ListSubheader","t17","ListItemIcon","t18","t19","find","m","t20","ListItemText","t21","t22","t23","t24","t25","t26","t27","t28","of","t29","List","t30","t31","cursor","t32","mr","t33","t34","t35","t36","modeValue","Icon","t37","t38","t39","t40","languageCode","changeLanguage","finally","resolvedLanguage","Avatar","xs","sm","ListItem","logoutRedirect","postLogoutRedirectUri","Box","lng","YEAR_IN_SECONDS","getNavigationOpenStatus","createIsomorphicFn","server","cookie","getCookie","client","document","row","startsWith","DrawerHeader","spacing","mixins","toolbar","Layout","props","navigationOpen","setNavigationOpen","isFetching","useIsFetching","isMutating","useIsMutating","borderBottom","boxShadow","marginRight","Menu","newValue_0","newValue","flexGrow","YEAR_IN_MINUTES","LanguageDetector","initReactI18next","init","resources","fallbackLng","Object","keys","detection","caches","cookieMinutes","interpolation","escapeValue","LayoutProvider","languageChangedHandler","useEffectEvent","on","off","AdapterDayjs","setSSRLanguage","createServerFn","handler","services","languageDetector","lookupCookie","z","core","locales","dayjs","locale"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { NavigationClient, PublicClientApplication, NavigationOptions } from '@azure/msal-browser';
|
|
2
|
+
import { UseNavigateResult } from '@tanstack/react-router';
|
|
3
|
+
export declare const pca: PublicClientApplication;
|
|
4
|
+
export declare class CustomNavigationClient extends NavigationClient {
|
|
5
|
+
private readonly navigate;
|
|
6
|
+
constructor(navigate: UseNavigateResult<string>);
|
|
7
|
+
navigateInternal(url: string, options: NavigationOptions): Promise<boolean>;
|
|
8
|
+
}
|
|
9
|
+
export interface AuthTokens {
|
|
10
|
+
idToken: string;
|
|
11
|
+
accessToken: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const acquireToken: () => Promise<AuthTokens>;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { PublicClientApplication, NavigationClient, EventType } from "@azure/msal-browser";
|
|
2
|
+
import { clientEnv } from "../../env.js";
|
|
3
|
+
const msalConfig = {
|
|
4
|
+
auth: {
|
|
5
|
+
clientId: clientEnv.VITE_MICROSOFT_CLIENT_ID,
|
|
6
|
+
authority: `https://login.microsoftonline.com/${clientEnv.VITE_MICROSOFT_TENANT_ID}`
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
const pca = new PublicClientApplication(msalConfig);
|
|
10
|
+
pca.initialize().then(() => {
|
|
11
|
+
if (!pca.getActiveAccount() && pca.getAllAccounts().length > 0) {
|
|
12
|
+
pca.setActiveAccount(pca.getAllAccounts()[0]);
|
|
13
|
+
}
|
|
14
|
+
pca.enableAccountStorageEvents();
|
|
15
|
+
pca.addEventCallback((event) => {
|
|
16
|
+
if (event.eventType === EventType.LOGIN_SUCCESS && event.payload) {
|
|
17
|
+
const payload = event.payload;
|
|
18
|
+
const account = payload.account;
|
|
19
|
+
pca.setActiveAccount(account);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
class CustomNavigationClient extends NavigationClient {
|
|
24
|
+
navigate;
|
|
25
|
+
constructor(navigate) {
|
|
26
|
+
super();
|
|
27
|
+
this.navigate = navigate;
|
|
28
|
+
}
|
|
29
|
+
async navigateInternal(url, options) {
|
|
30
|
+
const relativePath = url.replace(location.origin, "");
|
|
31
|
+
if (options.noHistory) {
|
|
32
|
+
this.navigate({
|
|
33
|
+
to: relativePath,
|
|
34
|
+
replace: true
|
|
35
|
+
});
|
|
36
|
+
} else {
|
|
37
|
+
this.navigate({
|
|
38
|
+
to: relativePath
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const acquireToken = async () => {
|
|
45
|
+
const account = pca.getActiveAccount();
|
|
46
|
+
if (!account) {
|
|
47
|
+
throw new Error("No active account! Verify a user has been signed in and setActiveAccount has been called.");
|
|
48
|
+
}
|
|
49
|
+
const response = await pca.acquireTokenSilent({
|
|
50
|
+
scopes: ["User.Read", "GroupMember.Read.All"],
|
|
51
|
+
account
|
|
52
|
+
});
|
|
53
|
+
return {
|
|
54
|
+
idToken: response.idToken,
|
|
55
|
+
accessToken: response.accessToken
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
export {
|
|
59
|
+
CustomNavigationClient,
|
|
60
|
+
acquireToken,
|
|
61
|
+
pca
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sources":["../../../src/lib/auth/client.ts"],"sourcesContent":["import { EventType, NavigationClient, PublicClientApplication } from \"@azure/msal-browser\";\r\nimport type { AuthenticationResult, Configuration, EventMessage, NavigationOptions } from \"@azure/msal-browser\";\r\nimport type { UseNavigateResult } from \"@tanstack/react-router\";\r\nimport { clientEnv } from \"~/env\";\r\n\r\nconst msalConfig: Configuration = {\r\n auth: {\r\n clientId: clientEnv.VITE_MICROSOFT_CLIENT_ID,\r\n authority: `https://login.microsoftonline.com/${clientEnv.VITE_MICROSOFT_TENANT_ID}`,\r\n },\r\n};\r\n\r\nexport const pca = new PublicClientApplication(msalConfig);\r\n\r\npca.initialize().then(() => {\r\n if (!pca.getActiveAccount() && pca.getAllAccounts().length > 0) {\r\n pca.setActiveAccount(pca.getAllAccounts()[0]);\r\n }\r\n\r\n pca.enableAccountStorageEvents();\r\n\r\n pca.addEventCallback((event: EventMessage) => {\r\n if (event.eventType === EventType.LOGIN_SUCCESS && event.payload) {\r\n const payload = event.payload as AuthenticationResult;\r\n const account = payload.account;\r\n pca.setActiveAccount(account);\r\n }\r\n });\r\n});\r\n\r\nexport class CustomNavigationClient extends NavigationClient {\r\n private readonly navigate: UseNavigateResult<string>;\r\n\r\n constructor(navigate: UseNavigateResult<string>) {\r\n super();\r\n this.navigate = navigate;\r\n }\r\n\r\n async navigateInternal(url: string, options: NavigationOptions) {\r\n const relativePath = url.replace(location.origin, \"\");\r\n if (options.noHistory) {\r\n this.navigate({ to: relativePath, replace: true });\r\n } else {\r\n this.navigate({ to: relativePath });\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\nexport interface AuthTokens {\r\n idToken: string;\r\n accessToken: string;\r\n}\r\n\r\nexport const acquireToken = async (): Promise<AuthTokens> => {\r\n const account = pca.getActiveAccount();\r\n if (!account) {\r\n throw new Error(\"No active account! Verify a user has been signed in and setActiveAccount has been called.\");\r\n }\r\n\r\n const response = await pca.acquireTokenSilent({\r\n scopes: [\"User.Read\", \"GroupMember.Read.All\"],\r\n account: account\r\n });\r\n\r\n return { idToken: response.idToken, accessToken: response.accessToken };\r\n};\r\n"],"names":["msalConfig","auth","clientId","clientEnv","VITE_MICROSOFT_CLIENT_ID","authority","VITE_MICROSOFT_TENANT_ID","pca","PublicClientApplication","initialize","then","getActiveAccount","getAllAccounts","length","setActiveAccount","enableAccountStorageEvents","addEventCallback","event","eventType","EventType","LOGIN_SUCCESS","payload","account","CustomNavigationClient","NavigationClient","navigate","constructor","navigateInternal","url","options","relativePath","replace","location","origin","noHistory","to","acquireToken","Error","response","acquireTokenSilent","scopes","idToken","accessToken"],"mappings":";;AAKA,MAAMA,aAA4B;AAAA,EAC9BC,MAAM;AAAA,IACFC,UAAUC,UAAUC;AAAAA,IACpBC,WAAW,qCAAqCF,UAAUG,wBAAwB;AAAA,EAAA;AAE1F;AAEO,MAAMC,MAAM,IAAIC,wBAAwBR,UAAU;AAEzDO,IAAIE,WAAAA,EAAaC,KAAK,MAAM;AACxB,MAAI,CAACH,IAAII,iBAAAA,KAAsBJ,IAAIK,eAAAA,EAAiBC,SAAS,GAAG;AAC5DN,QAAIO,iBAAiBP,IAAIK,eAAAA,EAAiB,CAAC,CAAC;AAAA,EAChD;AAEAL,MAAIQ,2BAAAA;AAEJR,MAAIS,iBAAiB,CAACC,UAAwB;AAC1C,QAAIA,MAAMC,cAAcC,UAAUC,iBAAiBH,MAAMI,SAAS;AAC9D,YAAMA,UAAUJ,MAAMI;AACtB,YAAMC,UAAUD,QAAQC;AACxBf,UAAIO,iBAAiBQ,OAAO;AAAA,IAChC;AAAA,EACJ,CAAC;AACL,CAAC;AAEM,MAAMC,+BAA+BC,iBAAiB;AAAA,EACxCC;AAAAA,EAEjBC,YAAYD,UAAqC;AAC7C,UAAA;AACA,SAAKA,WAAWA;AAAAA,EACpB;AAAA,EAEA,MAAME,iBAAiBC,KAAaC,SAA4B;AAC5D,UAAMC,eAAeF,IAAIG,QAAQC,SAASC,QAAQ,EAAE;AACpD,QAAIJ,QAAQK,WAAW;AACnB,WAAKT,SAAS;AAAA,QAAEU,IAAIL;AAAAA,QAAcC,SAAS;AAAA,MAAA,CAAM;AAAA,IACrD,OAAO;AACH,WAAKN,SAAS;AAAA,QAAEU,IAAIL;AAAAA,MAAAA,CAAc;AAAA,IACtC;AAEA,WAAO;AAAA,EACX;AACJ;AAOO,MAAMM,eAAe,YAAiC;AACzD,QAAMd,UAAUf,IAAII,iBAAAA;AACpB,MAAI,CAACW,SAAS;AACV,UAAM,IAAIe,MAAM,2FAA2F;AAAA,EAC/G;AAEA,QAAMC,WAAW,MAAM/B,IAAIgC,mBAAmB;AAAA,IAC1CC,QAAQ,CAAC,aAAa,sBAAsB;AAAA,IAC5ClB;AAAAA,EAAAA,CACH;AAED,SAAO;AAAA,IAAEmB,SAASH,SAASG;AAAAA,IAASC,aAAaJ,SAASI;AAAAA,EAAAA;AAC9D;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ConfidentialClientApplication } from '@azure/msal-node';
|
|
2
|
+
export declare const cca: ConfidentialClientApplication;
|
|
3
|
+
export declare const acquireAppToken: (scopes: Array<string>) => Promise<string>;
|
|
4
|
+
export interface AuthenticatedUser {
|
|
5
|
+
name: string;
|
|
6
|
+
email: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const validateIdToken: (idToken: string) => Promise<AuthenticatedUser>;
|
|
9
|
+
export declare const fetchUserGroups: (accessToken: string) => Promise<Array<string>>;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { AnyFieldApi } from '@tanstack/react-form';
|
|
2
|
+
export declare const WISTRON_PRIMARY_COLOR = "#00506E";
|
|
3
|
+
export declare const WISTRON_SECONDARY_COLOR = "#64DC00";
|
|
4
|
+
export declare class Platform {
|
|
5
|
+
static get isAndroid(): boolean;
|
|
6
|
+
static get isIOS(): boolean;
|
|
7
|
+
static get isWindows(): boolean;
|
|
8
|
+
static get isMacOS(): boolean;
|
|
9
|
+
private static get userAgent();
|
|
10
|
+
}
|
|
11
|
+
export declare const rootRouteHead: () => {
|
|
12
|
+
meta: ({
|
|
13
|
+
charSet: string;
|
|
14
|
+
name?: undefined;
|
|
15
|
+
content?: undefined;
|
|
16
|
+
title?: undefined;
|
|
17
|
+
} | {
|
|
18
|
+
name: string;
|
|
19
|
+
content: string;
|
|
20
|
+
charSet?: undefined;
|
|
21
|
+
title?: undefined;
|
|
22
|
+
} | {
|
|
23
|
+
title: string;
|
|
24
|
+
charSet?: undefined;
|
|
25
|
+
name?: undefined;
|
|
26
|
+
content?: undefined;
|
|
27
|
+
})[];
|
|
28
|
+
links: ({
|
|
29
|
+
rel: string;
|
|
30
|
+
sizes: string;
|
|
31
|
+
href: string;
|
|
32
|
+
type?: undefined;
|
|
33
|
+
} | {
|
|
34
|
+
rel: string;
|
|
35
|
+
type: string;
|
|
36
|
+
sizes: string;
|
|
37
|
+
href: string;
|
|
38
|
+
} | {
|
|
39
|
+
rel: string;
|
|
40
|
+
href: string;
|
|
41
|
+
sizes?: undefined;
|
|
42
|
+
type?: undefined;
|
|
43
|
+
})[];
|
|
44
|
+
};
|
|
45
|
+
export declare const httpClient: import('axios').AxiosInstance;
|
|
46
|
+
export type FormOmittedProps = "name" | "value" | "onChange" | "onBlur" | "error" | "helperText" | "renderInput" | "type" | "aria-label";
|
|
47
|
+
export declare const getFieldStatus: (field: AnyFieldApi) => {
|
|
48
|
+
isTouched: boolean;
|
|
49
|
+
hasError: boolean;
|
|
50
|
+
helperText: any;
|
|
51
|
+
};
|
|
52
|
+
export declare const toKebabCase: (str: string) => string;
|
|
@@ -1,19 +1,5 @@
|
|
|
1
1
|
import axios from "axios";
|
|
2
|
-
import {
|
|
3
|
-
import { z } from "zod";
|
|
4
|
-
const __vite_import_meta_env__ = { "BASE_URL": "/", "DEV": false, "MODE": "production", "PROD": true, "SSR": false, "VITE_API_URL": "http://localhost:3000", "VITE_APP_TITLE": "WCZ Layout", "VITE_DYNAMSOFT_LICENSE_KEY": "DLS2eyJoYW5kc2hha2VDb2RlIjoiMTAxMjU2MzQ5LTEwMTI4MDIzNyIsIm1haW5TZXJ2ZXJVUkwiOiJodHRwczovL21sdHMuZHluYW1zb2Z0LmNvbS8iLCJvcmdhbml6YXRpb25JRCI6IjEwMTI1NjM0OSIsInN0YW5kYnlTZXJ2ZXJVUkwiOiJodHRwczovL3NsdHMuZHluYW1zb2Z0LmNvbS8iLCJjaGVja0NvZGUiOi0yMjMwMzAzMjZ9", "VITE_MICROSOFT_CLIENT_ID": "a238a215-52b6-442c-baec-5d8a109906ec", "VITE_MICROSOFT_TENANT_ID": "de0795e0-d7c0-4eeb-b9bb-bc94d8980d3b", "VITE_MUI_LICENSE_KEY": "d7aeb74913a4918a319bf4c253aa1a49Tz0xMjIzOTYsRT0xNzk1ODIzOTk5MDAwLFM9cHJlbWl1bSxMTT1zdWJzY3JpcHRpb24sUFY9aW5pdGlhbCxLVj0y" };
|
|
5
|
-
const clientEnv = createEnv({
|
|
6
|
-
clientPrefix: "VITE_",
|
|
7
|
-
client: {
|
|
8
|
-
VITE_APP_TITLE: z.string(),
|
|
9
|
-
VITE_MUI_LICENSE_KEY: z.string(),
|
|
10
|
-
VITE_API_URL: z.url(),
|
|
11
|
-
VITE_MICROSOFT_CLIENT_ID: z.string(),
|
|
12
|
-
VITE_MICROSOFT_TENANT_ID: z.string()
|
|
13
|
-
},
|
|
14
|
-
runtimeEnv: __vite_import_meta_env__,
|
|
15
|
-
emptyStringAsUndefined: true
|
|
16
|
-
});
|
|
2
|
+
import { clientEnv } from "../env.js";
|
|
17
3
|
const WISTRON_PRIMARY_COLOR = "#00506E";
|
|
18
4
|
const WISTRON_SECONDARY_COLOR = "#64DC00";
|
|
19
5
|
class Platform {
|
|
@@ -94,13 +80,12 @@ const toKebabCase = (str) => {
|
|
|
94
80
|
return str.replaceAll(/([a-z])([A-Z])/g, "$1-$2").replaceAll(/[\s_]+/g, "-").replaceAll(/[^a-zA-Z0-9-]/g, "").toLowerCase().replaceAll(/-+/g, "-").replaceAll(/(^-|-$)/g, "");
|
|
95
81
|
};
|
|
96
82
|
export {
|
|
97
|
-
Platform
|
|
98
|
-
WISTRON_PRIMARY_COLOR
|
|
99
|
-
WISTRON_SECONDARY_COLOR
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
toKebabCase as t
|
|
83
|
+
Platform,
|
|
84
|
+
WISTRON_PRIMARY_COLOR,
|
|
85
|
+
WISTRON_SECONDARY_COLOR,
|
|
86
|
+
getFieldStatus,
|
|
87
|
+
httpClient,
|
|
88
|
+
rootRouteHead,
|
|
89
|
+
toKebabCase
|
|
105
90
|
};
|
|
106
|
-
//# sourceMappingURL=utils
|
|
91
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../src/lib/utils.ts"],"sourcesContent":["import axios from \"axios\";\nimport type { AnyFieldApi } from \"@tanstack/react-form\";\nimport { clientEnv } from \"~/env\";\n\nexport const WISTRON_PRIMARY_COLOR = \"#00506E\";\nexport const WISTRON_SECONDARY_COLOR = \"#64DC00\";\n\nexport class Platform {\n static get isAndroid() { return /android/i.test(this.userAgent); }\n static get isIOS() { return /iPad|iPhone|iPod/.test(this.userAgent); }\n static get isWindows() { return /windows/i.test(this.userAgent); }\n static get isMacOS() { return /Macintosh|MacIntel|MacPPC|Mac68K/.test(this.userAgent); }\n\n private static get userAgent() { return typeof navigator === \"undefined\" ? \"\" : navigator.userAgent; }\n}\n\nexport const rootRouteHead = () => ({\n meta: [\n { charSet: \"utf-8\" },\n { name: \"viewport\", content: \"width=device-width, initial-scale=1\" },\n { title: clientEnv.VITE_APP_TITLE },\n { name: \"og:type\", content: \"website\" },\n { name: \"og:title\", content: clientEnv.VITE_APP_TITLE },\n { name: \"og:image\", content: \"/favicon-32x32.png\" }\n ],\n links: [\n { rel: \"apple-touch-icon\", sizes: \"180x180\", href: \"/apple-touch-icon.png\", },\n { rel: \"icon\", type: \"image/png\", sizes: \"32x32\", href: \"/favicon-32x32.png\", },\n { rel: \"icon\", type: \"image/png\", sizes: \"16x16\", href: \"/favicon-16x16.png\", },\n { rel: \"manifest\", href: \"/manifest.webmanifest\" },\n { rel: \"icon\", href: \"/favicon.ico\" },\n ],\n});\n\nexport const httpClient = axios.create({\n baseURL: clientEnv.VITE_API_URL // TODO: Not working in children projects\n});\n\n/* Internal Utils */\nexport type FormOmittedProps =\n \"name\" |\n \"value\" |\n \"onChange\" |\n \"onBlur\" |\n \"error\" |\n \"helperText\" |\n \"renderInput\" |\n \"type\" |\n \"aria-label\";\n\nexport const getFieldStatus = (field: AnyFieldApi) => {\n const { meta } = field.state;\n\n const isTouched = meta.isTouched;\n const hasError = !!meta.errors.length;\n const helperText = meta.errors[0]?.message;\n\n return { isTouched, hasError, helperText };\n};\n\nexport const toKebabCase = (str: string): string => {\n return str\n .replaceAll(/([a-z])([A-Z])/g, \"$1-$2\")\n .replaceAll(/[\\s_]+/g, \"-\")\n .replaceAll(/[^a-zA-Z0-9-]/g, \"\")\n .toLowerCase()\n .replaceAll(/-+/g, \"-\")\n .replaceAll(/(^-|-$)/g, \"\");\n};\n"],"names":["WISTRON_PRIMARY_COLOR","WISTRON_SECONDARY_COLOR","Platform","isAndroid","test","userAgent","isIOS","isWindows","isMacOS","navigator","rootRouteHead","meta","charSet","name","content","title","clientEnv","VITE_APP_TITLE","links","rel","sizes","href","type","httpClient","axios","create","baseURL","VITE_API_URL","getFieldStatus","field","state","isTouched","hasError","errors","length","helperText","message","toKebabCase","str","replaceAll","toLowerCase"],"mappings":";;AAIO,MAAMA,wBAAwB;AAC9B,MAAMC,0BAA0B;AAEhC,MAAMC,SAAS;AAAA,EAClB,WAAWC,YAAY;AAAE,WAAO,WAAWC,KAAK,KAAKC,SAAS;AAAA,EAAG;AAAA,EACjE,WAAWC,QAAQ;AAAE,WAAO,mBAAmBF,KAAK,KAAKC,SAAS;AAAA,EAAG;AAAA,EACrE,WAAWE,YAAY;AAAE,WAAO,WAAWH,KAAK,KAAKC,SAAS;AAAA,EAAG;AAAA,EACjE,WAAWG,UAAU;AAAE,WAAO,mCAAmCJ,KAAK,KAAKC,SAAS;AAAA,EAAG;AAAA,EAEvF,WAAmBA,YAAY;AAAE,WAAO,OAAOI,cAAc,cAAc,KAAKA,UAAUJ;AAAAA,EAAW;AACzG;AAEO,MAAMK,gBAAgBA,OAAO;AAAA,EAChCC,MAAM,CACF;AAAA,IAAEC,SAAS;AAAA,EAAA,GACX;AAAA,IAAEC,MAAM;AAAA,IAAYC,SAAS;AAAA,EAAA,GAC7B;AAAA,IAAEC,OAAOC,UAAUC;AAAAA,EAAAA,GACnB;AAAA,IAAEJ,MAAM;AAAA,IAAWC,SAAS;AAAA,EAAA,GAC5B;AAAA,IAAED,MAAM;AAAA,IAAYC,SAASE,UAAUC;AAAAA,EAAAA,GACvC;AAAA,IAAEJ,MAAM;AAAA,IAAYC,SAAS;AAAA,EAAA,CAAsB;AAAA,EAEvDI,OAAO,CACH;AAAA,IAAEC,KAAK;AAAA,IAAoBC,OAAO;AAAA,IAAWC,MAAM;AAAA,EAAA,GACnD;AAAA,IAAEF,KAAK;AAAA,IAAQG,MAAM;AAAA,IAAaF,OAAO;AAAA,IAASC,MAAM;AAAA,EAAA,GACxD;AAAA,IAAEF,KAAK;AAAA,IAAQG,MAAM;AAAA,IAAaF,OAAO;AAAA,IAASC,MAAM;AAAA,EAAA,GACxD;AAAA,IAAEF,KAAK;AAAA,IAAYE,MAAM;AAAA,EAAA,GACzB;AAAA,IAAEF,KAAK;AAAA,IAAQE,MAAM;AAAA,EAAA,CAAgB;AAE7C;AAEO,MAAME,aAAaC,MAAMC,OAAO;AAAA,EACnCC,SAASV,UAAUW;AAAAA;AACvB,CAAC;AAcM,MAAMC,iBAAiBA,CAACC,UAAuB;AAClD,QAAM;AAAA,IAAElB;AAAAA,EAAAA,IAASkB,MAAMC;AAEvB,QAAMC,YAAYpB,KAAKoB;AACvB,QAAMC,WAAW,CAAC,CAACrB,KAAKsB,OAAOC;AAC/B,QAAMC,aAAaxB,KAAKsB,OAAO,CAAC,GAAGG;AAEnC,SAAO;AAAA,IAAEL;AAAAA,IAAWC;AAAAA,IAAUG;AAAAA,EAAAA;AAClC;AAEO,MAAME,cAAcA,CAACC,QAAwB;AAChD,SAAOA,IACFC,WAAW,mBAAmB,OAAO,EACrCA,WAAW,WAAW,GAAG,EACzBA,WAAW,kBAAkB,EAAE,EAC/BC,cACAD,WAAW,OAAO,GAAG,EACrBA,WAAW,YAAY,EAAE;AAClC;"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
function viteWczLayout() {
|
|
4
|
+
const virtualModuleId = "virtual:wcz-layout";
|
|
5
|
+
const resolvedVirtualModuleId = "\0" + virtualModuleId;
|
|
6
|
+
let localesPath;
|
|
7
|
+
return {
|
|
8
|
+
name: "vite:wcz-layout",
|
|
9
|
+
enforce: "pre",
|
|
10
|
+
configResolved(resolvedConfig) {
|
|
11
|
+
localesPath = path.resolve(resolvedConfig.root, "src/locales");
|
|
12
|
+
},
|
|
13
|
+
config() {
|
|
14
|
+
return {
|
|
15
|
+
optimizeDeps: {
|
|
16
|
+
exclude: [virtualModuleId]
|
|
17
|
+
},
|
|
18
|
+
ssr: {
|
|
19
|
+
noExternal: ["@mui/*"]
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
},
|
|
23
|
+
resolveId(id) {
|
|
24
|
+
if (id === virtualModuleId) return resolvedVirtualModuleId;
|
|
25
|
+
return null;
|
|
26
|
+
},
|
|
27
|
+
load(id) {
|
|
28
|
+
if (id !== resolvedVirtualModuleId) return null;
|
|
29
|
+
if (!fs.existsSync(localesPath)) {
|
|
30
|
+
fs.mkdirSync(localesPath, {
|
|
31
|
+
recursive: true
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
const enPath = path.join(localesPath, "en.json");
|
|
35
|
+
if (!fs.existsSync(enPath)) {
|
|
36
|
+
fs.writeFileSync(enPath, JSON.stringify({}));
|
|
37
|
+
}
|
|
38
|
+
const files = fs.readdirSync(localesPath);
|
|
39
|
+
const jsonFiles = files.filter((f) => f.endsWith(".json"));
|
|
40
|
+
const resources = {};
|
|
41
|
+
for (const file of jsonFiles) {
|
|
42
|
+
const lang = path.basename(file, ".json");
|
|
43
|
+
const filePath = path.join(localesPath, file);
|
|
44
|
+
try {
|
|
45
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
46
|
+
const translations = JSON.parse(content);
|
|
47
|
+
resources[lang] = {
|
|
48
|
+
translation: translations
|
|
49
|
+
};
|
|
50
|
+
} catch (error) {
|
|
51
|
+
console.error(`[vite:layout] Error parsing ${file}:`, error);
|
|
52
|
+
resources[lang] = {
|
|
53
|
+
translation: {}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
this.addWatchFile(filePath);
|
|
57
|
+
}
|
|
58
|
+
return `export const resources = ${JSON.stringify(resources)};`;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export {
|
|
63
|
+
viteWczLayout
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=vite-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite-plugin.js","sources":["../../src/lib/vite-plugin.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { Resource } from \"i18next\";\nimport type { Plugin } from \"vite\";\n\nexport function viteWczLayout(): Plugin {\n const virtualModuleId = \"virtual:wcz-layout\";\n const resolvedVirtualModuleId = \"\\0\" + virtualModuleId;\n\n let localesPath: string;\n\n return {\n name: \"vite:wcz-layout\",\n enforce: \"pre\",\n configResolved(resolvedConfig) {\n localesPath = path.resolve(resolvedConfig.root, \"src/locales\");\n },\n config() {\n return {\n optimizeDeps: {\n exclude: [virtualModuleId],\n },\n ssr: {\n noExternal: [\"@mui/*\"],\n },\n };\n },\n resolveId(id) {\n if (id === virtualModuleId) return resolvedVirtualModuleId;\n return null;\n },\n load(id) {\n if (id !== resolvedVirtualModuleId) return null;\n\n if (!fs.existsSync(localesPath)) {\n fs.mkdirSync(localesPath, { recursive: true });\n }\n\n const enPath = path.join(localesPath, \"en.json\");\n if (!fs.existsSync(enPath)) {\n fs.writeFileSync(enPath, JSON.stringify({}));\n }\n\n const files = fs.readdirSync(localesPath);\n const jsonFiles = files.filter((f) => f.endsWith(\".json\"));\n\n const resources: Resource = {};\n\n for (const file of jsonFiles) {\n const lang = path.basename(file, \".json\");\n const filePath = path.join(localesPath, file);\n\n try {\n const content = fs.readFileSync(filePath, \"utf-8\");\n const translations = JSON.parse(content);\n resources[lang] = { translation: translations };\n } catch (error) {\n console.error(`[vite:layout] Error parsing ${file}:`, error);\n resources[lang] = { translation: {} };\n }\n\n this.addWatchFile(filePath);\n }\n\n return `export const resources = ${JSON.stringify(resources)};`;\n },\n };\n}\n"],"names":["viteWczLayout","virtualModuleId","resolvedVirtualModuleId","localesPath","name","enforce","configResolved","resolvedConfig","path","resolve","root","config","optimizeDeps","exclude","ssr","noExternal","resolveId","id","load","fs","existsSync","mkdirSync","recursive","enPath","join","writeFileSync","JSON","stringify","files","readdirSync","jsonFiles","filter","f","endsWith","resources","file","lang","basename","filePath","content","readFileSync","translations","parse","translation","error","console","addWatchFile"],"mappings":";;AAKO,SAASA,gBAAwB;AACpC,QAAMC,kBAAkB;AACxB,QAAMC,0BAA0B,OAAOD;AAEvC,MAAIE;AAEJ,SAAO;AAAA,IACHC,MAAM;AAAA,IACNC,SAAS;AAAA,IACTC,eAAeC,gBAAgB;AAC3BJ,oBAAcK,KAAKC,QAAQF,eAAeG,MAAM,aAAa;AAAA,IACjE;AAAA,IACAC,SAAS;AACL,aAAO;AAAA,QACHC,cAAc;AAAA,UACVC,SAAS,CAACZ,eAAe;AAAA,QAAA;AAAA,QAE7Ba,KAAK;AAAA,UACDC,YAAY,CAAC,QAAQ;AAAA,QAAA;AAAA,MACzB;AAAA,IAER;AAAA,IACAC,UAAUC,IAAI;AACV,UAAIA,OAAOhB,gBAAiB,QAAOC;AACnC,aAAO;AAAA,IACX;AAAA,IACAgB,KAAKD,IAAI;AACL,UAAIA,OAAOf,wBAAyB,QAAO;AAE3C,UAAI,CAACiB,GAAGC,WAAWjB,WAAW,GAAG;AAC7BgB,WAAGE,UAAUlB,aAAa;AAAA,UAAEmB,WAAW;AAAA,QAAA,CAAM;AAAA,MACjD;AAEA,YAAMC,SAASf,KAAKgB,KAAKrB,aAAa,SAAS;AAC/C,UAAI,CAACgB,GAAGC,WAAWG,MAAM,GAAG;AACxBJ,WAAGM,cAAcF,QAAQG,KAAKC,UAAU,CAAA,CAAE,CAAC;AAAA,MAC/C;AAEA,YAAMC,QAAQT,GAAGU,YAAY1B,WAAW;AACxC,YAAM2B,YAAYF,MAAMG,OAAQC,OAAMA,EAAEC,SAAS,OAAO,CAAC;AAEzD,YAAMC,YAAsB,CAAA;AAE5B,iBAAWC,QAAQL,WAAW;AAC1B,cAAMM,OAAO5B,KAAK6B,SAASF,MAAM,OAAO;AACxC,cAAMG,WAAW9B,KAAKgB,KAAKrB,aAAagC,IAAI;AAE5C,YAAI;AACA,gBAAMI,UAAUpB,GAAGqB,aAAaF,UAAU,OAAO;AACjD,gBAAMG,eAAef,KAAKgB,MAAMH,OAAO;AACvCL,oBAAUE,IAAI,IAAI;AAAA,YAAEO,aAAaF;AAAAA,UAAAA;AAAAA,QACrC,SAASG,OAAO;AACZC,kBAAQD,MAAM,+BAA+BT,IAAI,KAAKS,KAAK;AAC3DV,oBAAUE,IAAI,IAAI;AAAA,YAAEO,aAAa,CAAA;AAAA,UAAC;AAAA,QACtC;AAEA,aAAKG,aAAaR,QAAQ;AAAA,MAC9B;AAEA,aAAO,4BAA4BZ,KAAKC,UAAUO,SAAS,CAAC;AAAA,IAChE;AAAA,EAAA;AAER;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const authenticationMiddleware: import('@tanstack/start-client-core').RequestMiddlewareAfterServer<{}, undefined, {
|
|
2
|
+
user: import('../lib/auth/server').AuthenticatedUser;
|
|
3
|
+
}>;
|
|
4
|
+
export declare const authorizationMiddleware: (allowedGroups: Array<string>) => import('@tanstack/start-client-core').RequestMiddlewareAfterServer<{}, readonly [import('@tanstack/start-client-core').RequestMiddlewareAfterServer<{}, undefined, {
|
|
5
|
+
user: import('../lib/auth/server').AuthenticatedUser;
|
|
6
|
+
}>], {
|
|
7
|
+
user: {
|
|
8
|
+
groups: string[];
|
|
9
|
+
name: string;
|
|
10
|
+
email: string;
|
|
11
|
+
};
|
|
12
|
+
}>;
|
|
13
|
+
export declare const serverFnAccessTokenMiddleware: import('@tanstack/start-client-core').FunctionMiddlewareAfterClient<{}, unknown, undefined, undefined, undefined>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { LinkOptions } from '@tanstack/react-router';
|
|
2
|
+
export interface NavigationPageItem extends Partial<Pick<LinkOptions, "to" | "href" | "params" | "search">> {
|
|
3
|
+
title: string;
|
|
4
|
+
icon: React.ReactNode;
|
|
5
|
+
children?: Array<NavigationItem>;
|
|
6
|
+
hidden?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface NavigationDivider {
|
|
9
|
+
kind: "divider";
|
|
10
|
+
hidden?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface NavigationHeader {
|
|
13
|
+
kind: "header";
|
|
14
|
+
title: string;
|
|
15
|
+
hidden?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export type NavigationItem = NavigationPageItem | NavigationDivider | NavigationHeader;
|
|
18
|
+
export type Navigation = Array<NavigationItem>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
export declare const UserSchema: z.ZodObject<{
|
|
3
|
+
id: z.ZodString;
|
|
4
|
+
name: z.ZodString;
|
|
5
|
+
jobTitle: z.ZodString;
|
|
6
|
+
email: z.ZodEmail;
|
|
7
|
+
mobilePhone: z.ZodString;
|
|
8
|
+
photo: z.ZodNullable<z.ZodString>;
|
|
9
|
+
groups: z.ZodArray<z.ZodString>;
|
|
10
|
+
}, z.core.$strip>;
|
|
11
|
+
export type User = z.infer<typeof UserSchema>;
|