@strato-admin/faker-ecommerce 0.1.1 → 0.3.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/dataProvider.js +1 -2
- package/dist/generate.d.ts +2 -1
- package/dist/generate.js +15 -8
- package/dist/ra-core/src/auth/LogoutOnMount.d.ts +8 -0
- package/dist/ra-core/src/auth/LogoutOnMount.js +16 -0
- package/dist/ra-core/src/auth/addRefreshAuthToAuthProvider.d.ts +22 -0
- package/dist/ra-core/src/auth/addRefreshAuthToAuthProvider.js +41 -0
- package/dist/ra-core/src/auth/addRefreshAuthToDataProvider.d.ts +21 -0
- package/dist/ra-core/src/auth/addRefreshAuthToDataProvider.js +30 -0
- package/dist/ra-core/src/auth/convertLegacyAuthProvider.d.ts +12 -0
- package/dist/ra-core/src/auth/convertLegacyAuthProvider.js +19 -0
- package/dist/ra-core/src/auth/index.d.ts +27 -0
- package/dist/ra-core/src/auth/index.js +34 -0
- package/dist/ra-core/src/auth/types.d.ts +7 -0
- package/dist/ra-core/src/auth/types.js +5 -0
- package/dist/ra-core/src/auth/useAuthProvider.d.ts +10 -0
- package/dist/ra-core/src/auth/useAuthProvider.js +11 -0
- package/dist/ra-core/src/auth/useAuthState.d.ts +48 -0
- package/dist/ra-core/src/auth/useAuthState.js +171 -0
- package/dist/ra-core/src/auth/useAuthenticated.d.ts +36 -0
- package/dist/ra-core/src/auth/useAuthenticated.js +34 -0
- package/dist/ra-core/src/auth/useCanAccess.d.ts +56 -0
- package/dist/ra-core/src/auth/useCanAccess.js +108 -0
- package/dist/ra-core/src/auth/useCanAccessCallback.d.ts +39 -0
- package/dist/ra-core/src/auth/useCanAccessCallback.js +45 -0
- package/dist/ra-core/src/auth/useCanAccessResources.d.ts +67 -0
- package/dist/ra-core/src/auth/useCanAccessResources.js +92 -0
- package/dist/ra-core/src/auth/useCheckAuth.d.ts +48 -0
- package/dist/ra-core/src/auth/useCheckAuth.js +76 -0
- package/dist/ra-core/src/auth/useGetIdentity.d.ts +41 -0
- package/dist/ra-core/src/auth/useGetIdentity.js +86 -0
- package/dist/ra-core/src/auth/useGetPermissions.d.ts +41 -0
- package/dist/ra-core/src/auth/useGetPermissions.js +47 -0
- package/dist/ra-core/src/auth/useHandleAuthCallback.d.ts +20 -0
- package/dist/ra-core/src/auth/useHandleAuthCallback.js +83 -0
- package/dist/ra-core/src/auth/useIsAuthPending.d.ts +13 -0
- package/dist/ra-core/src/auth/useIsAuthPending.js +30 -0
- package/dist/ra-core/src/auth/useLogin.d.ts +34 -0
- package/dist/ra-core/src/auth/useLogin.js +78 -0
- package/dist/ra-core/src/auth/useLogout.d.ts +31 -0
- package/dist/ra-core/src/auth/useLogout.js +117 -0
- package/dist/ra-core/src/auth/useLogoutIfAccessDenied.d.ts +42 -0
- package/dist/ra-core/src/auth/useLogoutIfAccessDenied.js +111 -0
- package/dist/ra-core/src/auth/usePermissions.d.ts +41 -0
- package/dist/ra-core/src/auth/usePermissions.js +123 -0
- package/dist/ra-core/src/controller/button/index.d.ts +7 -0
- package/dist/ra-core/src/controller/button/index.js +7 -0
- package/dist/ra-core/src/controller/button/useBulkDeleteController.d.ts +14 -0
- package/dist/ra-core/src/controller/button/useBulkDeleteController.js +66 -0
- package/dist/ra-core/src/controller/create/index.d.ts +6 -0
- package/dist/ra-core/src/controller/create/index.js +6 -0
- package/dist/ra-core/src/controller/create/useCreateController.d.ts +50 -0
- package/dist/ra-core/src/controller/create/useCreateController.js +149 -0
- package/dist/ra-core/src/controller/edit/index.d.ts +6 -0
- package/dist/ra-core/src/controller/edit/index.js +6 -0
- package/dist/ra-core/src/controller/edit/useEditController.d.ts +72 -0
- package/dist/ra-core/src/controller/edit/useEditController.js +206 -0
- package/dist/ra-core/src/controller/field/index.d.ts +12 -0
- package/dist/ra-core/src/controller/field/index.js +12 -0
- package/dist/ra-core/src/controller/field/sanitizeFieldRestProps.d.ts +1 -0
- package/dist/ra-core/src/controller/field/sanitizeFieldRestProps.js +1 -0
- package/dist/ra-core/src/controller/field/types.d.ts +28 -0
- package/dist/ra-core/src/controller/field/types.js +1 -0
- package/dist/ra-core/src/controller/field/useReferenceArrayFieldController.d.ts +39 -0
- package/dist/ra-core/src/controller/field/useReferenceArrayFieldController.js +82 -0
- package/dist/ra-core/src/controller/field/useReferenceFieldController.d.ts +14 -0
- package/dist/ra-core/src/controller/field/useReferenceFieldController.js +31 -0
- package/dist/ra-core/src/controller/field/useReferenceManyFieldController.d.ts +49 -0
- package/dist/ra-core/src/controller/field/useReferenceManyFieldController.js +264 -0
- package/dist/ra-core/src/controller/index.d.ts +17 -0
- package/dist/ra-core/src/controller/index.js +16 -0
- package/dist/ra-core/src/controller/input/ArrayInputContext.d.ts +9 -0
- package/dist/ra-core/src/controller/input/ArrayInputContext.js +8 -0
- package/dist/ra-core/src/controller/input/SimpleFormIteratorContext.d.ts +15 -0
- package/dist/ra-core/src/controller/input/SimpleFormIteratorContext.js +8 -0
- package/dist/ra-core/src/controller/input/SimpleFormIteratorItemContext.d.ts +13 -0
- package/dist/ra-core/src/controller/input/SimpleFormIteratorItemContext.js +8 -0
- package/dist/ra-core/src/controller/input/index.d.ts +17 -0
- package/dist/ra-core/src/controller/input/index.js +17 -0
- package/dist/ra-core/src/controller/input/referenceDataStatus.d.ts +32 -0
- package/dist/ra-core/src/controller/input/referenceDataStatus.js +74 -0
- package/dist/ra-core/src/controller/input/sanitizeInputRestProps.d.ts +1 -0
- package/dist/ra-core/src/controller/input/sanitizeInputRestProps.js +1 -0
- package/dist/ra-core/src/controller/input/types.d.ts +3 -0
- package/dist/ra-core/src/controller/input/types.js +1 -0
- package/dist/ra-core/src/controller/input/useArrayInput.d.ts +8 -0
- package/dist/ra-core/src/controller/input/useArrayInput.js +29 -0
- package/dist/ra-core/src/controller/input/useGetArrayInputNewItemDefaults.d.ts +3 -0
- package/dist/ra-core/src/controller/input/useGetArrayInputNewItemDefaults.js +37 -0
- package/dist/ra-core/src/controller/input/useReferenceArrayInputController.d.ts +48 -0
- package/dist/ra-core/src/controller/input/useReferenceArrayInputController.js +137 -0
- package/dist/ra-core/src/controller/input/useReferenceInputController.d.ts +54 -0
- package/dist/ra-core/src/controller/input/useReferenceInputController.js +208 -0
- package/dist/ra-core/src/controller/input/useReferenceParams.d.ts +106 -0
- package/dist/ra-core/src/controller/input/useReferenceParams.js +226 -0
- package/dist/ra-core/src/controller/input/useSimpleFormIterator.d.ts +7 -0
- package/dist/ra-core/src/controller/input/useSimpleFormIterator.js +15 -0
- package/dist/ra-core/src/controller/input/useSimpleFormIteratorItem.d.ts +7 -0
- package/dist/ra-core/src/controller/input/useSimpleFormIteratorItem.js +15 -0
- package/dist/ra-core/src/controller/list/InfinitePaginationContext.d.ts +25 -0
- package/dist/ra-core/src/controller/list/InfinitePaginationContext.js +32 -0
- package/dist/ra-core/src/controller/list/index.d.ts +30 -0
- package/dist/ra-core/src/controller/list/index.js +30 -0
- package/dist/ra-core/src/controller/list/queryReducer.d.ts +45 -0
- package/dist/ra-core/src/controller/list/queryReducer.js +85 -0
- package/dist/ra-core/src/controller/list/useFilterContext.d.ts +2 -0
- package/dist/ra-core/src/controller/list/useFilterContext.js +5 -0
- package/dist/ra-core/src/controller/list/useInfiniteListController.d.ts +44 -0
- package/dist/ra-core/src/controller/list/useInfiniteListController.js +175 -0
- package/dist/ra-core/src/controller/list/useInfinitePaginationContext.d.ts +16 -0
- package/dist/ra-core/src/controller/list/useInfinitePaginationContext.js +17 -0
- package/dist/ra-core/src/controller/list/useList.d.ts +55 -0
- package/dist/ra-core/src/controller/list/useList.js +223 -0
- package/dist/ra-core/src/controller/list/useListContext.d.ts +59 -0
- package/dist/ra-core/src/controller/list/useListContext.js +65 -0
- package/dist/ra-core/src/controller/list/useListContextWithProps.d.ts +44 -0
- package/dist/ra-core/src/controller/list/useListContextWithProps.js +84 -0
- package/dist/ra-core/src/controller/list/useListController.d.ts +296 -0
- package/dist/ra-core/src/controller/list/useListController.js +234 -0
- package/dist/ra-core/src/controller/list/useListFilterContext.d.ts +11 -0
- package/dist/ra-core/src/controller/list/useListFilterContext.js +18 -0
- package/dist/ra-core/src/controller/list/useListPaginationContext.d.ts +12 -0
- package/dist/ra-core/src/controller/list/useListPaginationContext.js +19 -0
- package/dist/ra-core/src/controller/list/useListParams.d.ts +116 -0
- package/dist/ra-core/src/controller/list/useListParams.js +281 -0
- package/dist/ra-core/src/controller/list/useListSortContext.d.ts +12 -0
- package/dist/ra-core/src/controller/list/useListSortContext.js +19 -0
- package/dist/ra-core/src/controller/list/useRecordSelection.d.ts +32 -0
- package/dist/ra-core/src/controller/list/useRecordSelection.js +93 -0
- package/dist/ra-core/src/controller/list/useSavedQueries.d.ts +14 -0
- package/dist/ra-core/src/controller/list/useSavedQueries.js +29 -0
- package/dist/ra-core/src/controller/list/useUnselect.d.ts +10 -0
- package/dist/ra-core/src/controller/list/useUnselect.js +18 -0
- package/dist/ra-core/src/controller/list/useUnselectAll.d.ts +9 -0
- package/dist/ra-core/src/controller/list/useUnselectAll.js +18 -0
- package/dist/ra-core/src/controller/record/index.d.ts +5 -0
- package/dist/ra-core/src/controller/record/index.js +5 -0
- package/dist/ra-core/src/controller/record/useRecordContext.d.ts +34 -0
- package/dist/ra-core/src/controller/record/useRecordContext.js +36 -0
- package/dist/ra-core/src/controller/saveContext/SaveContext.d.ts +20 -0
- package/dist/ra-core/src/controller/saveContext/SaveContext.js +2 -0
- package/dist/ra-core/src/controller/saveContext/index.d.ts +6 -0
- package/dist/ra-core/src/controller/saveContext/index.js +6 -0
- package/dist/ra-core/src/controller/saveContext/useMutationMiddlewares.d.ts +39 -0
- package/dist/ra-core/src/controller/saveContext/useMutationMiddlewares.js +79 -0
- package/dist/ra-core/src/controller/saveContext/usePickSaveContext.d.ts +5 -0
- package/dist/ra-core/src/controller/saveContext/usePickSaveContext.js +25 -0
- package/dist/ra-core/src/controller/saveContext/useRegisterMutationMiddleware.d.ts +6 -0
- package/dist/ra-core/src/controller/saveContext/useRegisterMutationMiddleware.js +18 -0
- package/dist/ra-core/src/controller/saveContext/useSaveContext.d.ts +14 -0
- package/dist/ra-core/src/controller/saveContext/useSaveContext.js +17 -0
- package/dist/ra-core/src/controller/show/index.d.ts +6 -0
- package/dist/ra-core/src/controller/show/index.js +6 -0
- package/dist/ra-core/src/controller/show/useShowController.d.ts +75 -0
- package/dist/ra-core/src/controller/show/useShowController.js +110 -0
- package/dist/ra-core/src/controller/useFilterState.d.ts +46 -0
- package/dist/ra-core/src/controller/useFilterState.js +70 -0
- package/dist/ra-core/src/controller/usePaginationState.d.ts +33 -0
- package/dist/ra-core/src/controller/usePaginationState.js +45 -0
- package/dist/ra-core/src/controller/usePrevNextController.d.ts +127 -0
- package/dist/ra-core/src/controller/usePrevNextController.js +215 -0
- package/dist/ra-core/src/controller/useReference.d.ts +49 -0
- package/dist/ra-core/src/controller/useReference.js +42 -0
- package/dist/ra-core/src/controller/useSortState.d.ts +61 -0
- package/dist/ra-core/src/controller/useSortState.js +96 -0
- package/dist/ra-core/src/core/DefaultTitleContext.d.ts +15 -0
- package/dist/ra-core/src/core/DefaultTitleContext.js +15 -0
- package/dist/ra-core/src/core/HasDashboardContext.d.ts +21 -0
- package/dist/ra-core/src/core/HasDashboardContext.js +22 -0
- package/dist/ra-core/src/core/ResourceContext.d.ts +19 -0
- package/dist/ra-core/src/core/ResourceContext.js +19 -0
- package/dist/ra-core/src/core/UserMenuContext.d.ts +34 -0
- package/dist/ra-core/src/core/UserMenuContext.js +28 -0
- package/dist/ra-core/src/core/index.d.ts +27 -0
- package/dist/ra-core/src/core/index.js +27 -0
- package/dist/ra-core/src/core/useGetRecordRepresentation.d.ts +13 -0
- package/dist/ra-core/src/core/useGetRecordRepresentation.js +44 -0
- package/dist/ra-core/src/core/useGetResourceLabel.d.ts +22 -0
- package/dist/ra-core/src/core/useGetResourceLabel.js +42 -0
- package/dist/ra-core/src/core/useIsOffline.d.ts +7 -0
- package/dist/ra-core/src/core/useIsOffline.js +18 -0
- package/dist/ra-core/src/core/useResourceContext.d.ts +36 -0
- package/dist/ra-core/src/core/useResourceContext.js +38 -0
- package/dist/ra-core/src/core/useResourceDefinition.d.ts +31 -0
- package/dist/ra-core/src/core/useResourceDefinition.js +48 -0
- package/dist/ra-core/src/core/useResourceDefinitionContext.d.ts +1 -0
- package/dist/ra-core/src/core/useResourceDefinitionContext.js +3 -0
- package/dist/ra-core/src/core/useResourceDefinitions.d.ts +21 -0
- package/dist/ra-core/src/core/useResourceDefinitions.js +20 -0
- package/dist/ra-core/src/core/useUserMenu.d.ts +28 -0
- package/dist/ra-core/src/core/useUserMenu.js +30 -0
- package/dist/ra-core/src/core/useWrappedSource.d.ts +11 -0
- package/dist/ra-core/src/core/useWrappedSource.js +15 -0
- package/dist/ra-core/src/dataProvider/DataProviderContext.d.ts +3 -0
- package/dist/ra-core/src/dataProvider/DataProviderContext.js +4 -0
- package/dist/ra-core/src/dataProvider/HttpError.d.ts +6 -0
- package/dist/ra-core/src/dataProvider/HttpError.js +19 -0
- package/dist/ra-core/src/dataProvider/combineDataProviders.d.ts +21 -0
- package/dist/ra-core/src/dataProvider/combineDataProviders.js +32 -0
- package/dist/ra-core/src/dataProvider/convertLegacyDataProvider.d.ts +12 -0
- package/dist/ra-core/src/dataProvider/convertLegacyDataProvider.js +40 -0
- package/dist/ra-core/src/dataProvider/dataFetchActions.d.ts +15 -0
- package/dist/ra-core/src/dataProvider/dataFetchActions.js +49 -0
- package/dist/ra-core/src/dataProvider/defaultDataProvider.d.ts +2 -0
- package/dist/ra-core/src/dataProvider/defaultDataProvider.js +12 -0
- package/dist/ra-core/src/dataProvider/fetch.d.ts +32 -0
- package/dist/ra-core/src/dataProvider/fetch.js +78 -0
- package/dist/ra-core/src/dataProvider/index.d.ts +34 -0
- package/dist/ra-core/src/dataProvider/index.js +33 -0
- package/dist/ra-core/src/dataProvider/populateQueryCache.d.ts +22 -0
- package/dist/ra-core/src/dataProvider/populateQueryCache.js +30 -0
- package/dist/ra-core/src/dataProvider/testDataProvider.d.ts +2 -0
- package/dist/ra-core/src/dataProvider/testDataProvider.js +41 -0
- package/dist/ra-core/src/dataProvider/undo/index.d.ts +6 -0
- package/dist/ra-core/src/dataProvider/undo/index.js +6 -0
- package/dist/ra-core/src/dataProvider/undo/types.d.ts +3 -0
- package/dist/ra-core/src/dataProvider/undo/types.js +1 -0
- package/dist/ra-core/src/dataProvider/undoableEventEmitter.d.ts +3 -0
- package/dist/ra-core/src/dataProvider/undoableEventEmitter.js +2 -0
- package/dist/ra-core/src/dataProvider/useCreate.d.ts +89 -0
- package/dist/ra-core/src/dataProvider/useCreate.js +155 -0
- package/dist/ra-core/src/dataProvider/useDataProvider.d.ts +2 -0
- package/dist/ra-core/src/dataProvider/useDataProvider.js +140 -0
- package/dist/ra-core/src/dataProvider/useDelete.d.ts +83 -0
- package/dist/ra-core/src/dataProvider/useDelete.js +171 -0
- package/dist/ra-core/src/dataProvider/useDeleteMany.d.ts +81 -0
- package/dist/ra-core/src/dataProvider/useDeleteMany.js +193 -0
- package/dist/ra-core/src/dataProvider/useGetList.d.ts +58 -0
- package/dist/ra-core/src/dataProvider/useGetList.js +131 -0
- package/dist/ra-core/src/dataProvider/useGetMany.d.ts +49 -0
- package/dist/ra-core/src/dataProvider/useGetMany.js +143 -0
- package/dist/ra-core/src/dataProvider/useGetManyAggregate.d.ts +62 -0
- package/dist/ra-core/src/dataProvider/useGetManyAggregate.js +295 -0
- package/dist/ra-core/src/dataProvider/useGetManyReference.d.ts +62 -0
- package/dist/ra-core/src/dataProvider/useGetManyReference.js +117 -0
- package/dist/ra-core/src/dataProvider/useGetOne.d.ts +48 -0
- package/dist/ra-core/src/dataProvider/useGetOne.js +94 -0
- package/dist/ra-core/src/dataProvider/useGetRecordId.d.ts +14 -0
- package/dist/ra-core/src/dataProvider/useGetRecordId.js +22 -0
- package/dist/ra-core/src/dataProvider/useInfiniteGetList.d.ts +64 -0
- package/dist/ra-core/src/dataProvider/useInfiniteGetList.js +177 -0
- package/dist/ra-core/src/dataProvider/useIsDataLoaded.d.ts +13 -0
- package/dist/ra-core/src/dataProvider/useIsDataLoaded.js +35 -0
- package/dist/ra-core/src/dataProvider/useLoading.d.ts +12 -0
- package/dist/ra-core/src/dataProvider/useLoading.js +41 -0
- package/dist/ra-core/src/dataProvider/useMutationWithMutationMode.d.ts +51 -0
- package/dist/ra-core/src/dataProvider/useMutationWithMutationMode.js +238 -0
- package/dist/ra-core/src/dataProvider/useRefresh.d.ts +14 -0
- package/dist/ra-core/src/dataProvider/useRefresh.js +21 -0
- package/dist/ra-core/src/dataProvider/useUpdate.d.ts +89 -0
- package/dist/ra-core/src/dataProvider/useUpdate.js +183 -0
- package/dist/ra-core/src/dataProvider/useUpdateMany.d.ts +81 -0
- package/dist/ra-core/src/dataProvider/useUpdateMany.js +171 -0
- package/dist/ra-core/src/dataProvider/validateResponseFormat.d.ts +5 -0
- package/dist/ra-core/src/dataProvider/validateResponseFormat.js +35 -0
- package/dist/ra-core/src/dataProvider/withLifecycleCallbacks.d.ts +162 -0
- package/dist/ra-core/src/dataProvider/withLifecycleCallbacks.js +377 -0
- package/dist/ra-core/src/dataTable/DataTableCallbacksContext.d.ts +18 -0
- package/dist/ra-core/src/dataTable/DataTableCallbacksContext.js +3 -0
- package/dist/ra-core/src/dataTable/DataTableColumnFilterContext.d.ts +2 -0
- package/dist/ra-core/src/dataTable/DataTableColumnFilterContext.js +3 -0
- package/dist/ra-core/src/dataTable/DataTableColumnRankContext.d.ts +2 -0
- package/dist/ra-core/src/dataTable/DataTableColumnRankContext.js +3 -0
- package/dist/ra-core/src/dataTable/DataTableConfigContext.d.ts +22 -0
- package/dist/ra-core/src/dataTable/DataTableConfigContext.js +7 -0
- package/dist/ra-core/src/dataTable/DataTableDataContext.d.ts +4 -0
- package/dist/ra-core/src/dataTable/DataTableDataContext.js +3 -0
- package/dist/ra-core/src/dataTable/DataTableRenderContext.d.ts +3 -0
- package/dist/ra-core/src/dataTable/DataTableRenderContext.js +3 -0
- package/dist/ra-core/src/dataTable/DataTableSelectedIdsContext.d.ts +3 -0
- package/dist/ra-core/src/dataTable/DataTableSelectedIdsContext.js +3 -0
- package/dist/ra-core/src/dataTable/DataTableSortContext.d.ts +3 -0
- package/dist/ra-core/src/dataTable/DataTableSortContext.js +3 -0
- package/dist/ra-core/src/dataTable/DataTableStoreContext.d.ts +8 -0
- package/dist/ra-core/src/dataTable/DataTableStoreContext.js +6 -0
- package/dist/ra-core/src/dataTable/index.d.ts +11 -0
- package/dist/ra-core/src/dataTable/index.js +11 -0
- package/dist/ra-core/src/dataTable/types.d.ts +2 -0
- package/dist/ra-core/src/dataTable/types.js +1 -0
- package/dist/ra-core/src/export/ExporterContext.d.ts +2 -0
- package/dist/ra-core/src/export/ExporterContext.js +4 -0
- package/dist/ra-core/src/export/defaultExporter.d.ts +2 -0
- package/dist/ra-core/src/export/defaultExporter.js +3 -0
- package/dist/ra-core/src/export/downloadCSV.d.ts +1 -0
- package/dist/ra-core/src/export/downloadCSV.js +17 -0
- package/dist/ra-core/src/export/fetchRelatedRecords.d.ts +14 -0
- package/dist/ra-core/src/export/fetchRelatedRecords.js +19 -0
- package/dist/ra-core/src/export/getRelatedIds.d.ts +24 -0
- package/dist/ra-core/src/export/getRelatedIds.js +26 -0
- package/dist/ra-core/src/export/index.d.ts +5 -0
- package/dist/ra-core/src/export/index.js +5 -0
- package/dist/ra-core/src/export/useBulkExport.d.ts +11 -0
- package/dist/ra-core/src/export/useBulkExport.js +30 -0
- package/dist/ra-core/src/form/WarnWhenUnsavedChanges.d.ts +5 -0
- package/dist/ra-core/src/form/WarnWhenUnsavedChanges.js +5 -0
- package/dist/ra-core/src/form/choices/ChoicesContext.d.ts +65 -0
- package/dist/ra-core/src/form/choices/ChoicesContext.js +7 -0
- package/dist/ra-core/src/form/choices/index.d.ts +4 -0
- package/dist/ra-core/src/form/choices/index.js +4 -0
- package/dist/ra-core/src/form/choices/useChoicesContext.d.ts +5 -0
- package/dist/ra-core/src/form/choices/useChoicesContext.js +62 -0
- package/dist/ra-core/src/form/getFormInitialValues.d.ts +8 -0
- package/dist/ra-core/src/form/getFormInitialValues.js +14 -0
- package/dist/ra-core/src/form/groups/FormGroupContext.d.ts +9 -0
- package/dist/ra-core/src/form/groups/FormGroupContext.js +9 -0
- package/dist/ra-core/src/form/groups/index.d.ts +6 -0
- package/dist/ra-core/src/form/groups/index.js +6 -0
- package/dist/ra-core/src/form/groups/useFormGroup.d.ts +67 -0
- package/dist/ra-core/src/form/groups/useFormGroup.js +146 -0
- package/dist/ra-core/src/form/groups/useFormGroupContext.d.ts +4 -0
- package/dist/ra-core/src/form/groups/useFormGroupContext.js +9 -0
- package/dist/ra-core/src/form/groups/useFormGroups.d.ts +4 -0
- package/dist/ra-core/src/form/groups/useFormGroups.js +9 -0
- package/dist/ra-core/src/form/index.d.ts +14 -0
- package/dist/ra-core/src/form/index.js +14 -0
- package/dist/ra-core/src/form/sanitizeEmptyValues.d.ts +7 -0
- package/dist/ra-core/src/form/sanitizeEmptyValues.js +26 -0
- package/dist/ra-core/src/form/useApplyInputDefaultValues.d.ts +19 -0
- package/dist/ra-core/src/form/useApplyInputDefaultValues.js +71 -0
- package/dist/ra-core/src/form/useAugmentedForm.d.ts +32 -0
- package/dist/ra-core/src/form/useAugmentedForm.js +101 -0
- package/dist/ra-core/src/form/useFormIsDirty.d.ts +4 -0
- package/dist/ra-core/src/form/useFormIsDirty.js +39 -0
- package/dist/ra-core/src/form/useInput.d.ts +33 -0
- package/dist/ra-core/src/form/useInput.js +100 -0
- package/dist/ra-core/src/form/useRecordFromLocation.d.ts +22 -0
- package/dist/ra-core/src/form/useRecordFromLocation.js +59 -0
- package/dist/ra-core/src/form/useSuggestions.d.ts +43 -0
- package/dist/ra-core/src/form/useSuggestions.js +186 -0
- package/dist/ra-core/src/form/validation/getSimpleValidationResolver.d.ts +31 -0
- package/dist/ra-core/src/form/validation/getSimpleValidationResolver.js +87 -0
- package/dist/ra-core/src/form/validation/index.d.ts +7 -0
- package/dist/ra-core/src/form/validation/index.js +7 -0
- package/dist/ra-core/src/form/validation/setSubmissionErrors.d.ts +21 -0
- package/dist/ra-core/src/form/validation/setSubmissionErrors.js +34 -0
- package/dist/ra-core/src/form/validation/useGetValidationErrorMessage.d.ts +26 -0
- package/dist/ra-core/src/form/validation/useGetValidationErrorMessage.js +35 -0
- package/dist/ra-core/src/form/validation/useNotifyIsFormInvalid.d.ts +9 -0
- package/dist/ra-core/src/form/validation/useNotifyIsFormInvalid.js +30 -0
- package/dist/ra-core/src/form/validation/useUnique.d.ts +57 -0
- package/dist/ra-core/src/form/validation/useUnique.js +107 -0
- package/dist/ra-core/src/form/validation/validate.d.ts +168 -0
- package/dist/ra-core/src/form/validation/validate.js +218 -0
- package/dist/ra-core/src/i18n/I18nContext.d.ts +3 -0
- package/dist/ra-core/src/i18n/I18nContext.js +11 -0
- package/dist/ra-core/src/i18n/TranslatableContext.d.ts +16 -0
- package/dist/ra-core/src/i18n/TranslatableContext.js +2 -0
- package/dist/ra-core/src/i18n/TranslationMessages.d.ts +221 -0
- package/dist/ra-core/src/i18n/TranslationMessages.js +1 -0
- package/dist/ra-core/src/i18n/TranslationUtils.d.ts +60 -0
- package/dist/ra-core/src/i18n/TranslationUtils.js +70 -0
- package/dist/ra-core/src/i18n/index.d.ts +20 -0
- package/dist/ra-core/src/i18n/index.js +20 -0
- package/dist/ra-core/src/i18n/substituteTokens.d.ts +8 -0
- package/dist/ra-core/src/i18n/substituteTokens.js +18 -0
- package/dist/ra-core/src/i18n/useI18nProvider.d.ts +12 -0
- package/dist/ra-core/src/i18n/useI18nProvider.js +14 -0
- package/dist/ra-core/src/i18n/useLocales.d.ts +31 -0
- package/dist/ra-core/src/i18n/useLocales.js +28 -0
- package/dist/ra-core/src/i18n/useResourceTranslation.d.ts +8 -0
- package/dist/ra-core/src/i18n/useResourceTranslation.js +18 -0
- package/dist/ra-core/src/i18n/useTranslatable.d.ts +29 -0
- package/dist/ra-core/src/i18n/useTranslatable.js +98 -0
- package/dist/ra-core/src/i18n/useTranslatableContext.d.ts +31 -0
- package/dist/ra-core/src/i18n/useTranslatableContext.js +38 -0
- package/dist/ra-core/src/i18n/useTranslate.d.ts +21 -0
- package/dist/ra-core/src/i18n/useTranslate.js +29 -0
- package/dist/ra-core/src/i18n/useTranslateLabel.d.ts +6 -0
- package/dist/ra-core/src/i18n/useTranslateLabel.js +26 -0
- package/dist/ra-core/src/index.d.ts +16 -0
- package/dist/ra-core/src/index.js +16 -0
- package/dist/ra-core/src/inference/InferredElement.d.ts +12 -0
- package/dist/ra-core/src/inference/InferredElement.js +40 -0
- package/dist/ra-core/src/inference/assertions.d.ts +26 -0
- package/dist/ra-core/src/inference/assertions.js +38 -0
- package/dist/ra-core/src/inference/getElementsFromRecords.d.ts +35 -0
- package/dist/ra-core/src/inference/getElementsFromRecords.js +39 -0
- package/dist/ra-core/src/inference/getValuesFromRecords.d.ts +28 -0
- package/dist/ra-core/src/inference/getValuesFromRecords.js +40 -0
- package/dist/ra-core/src/inference/index.d.ts +6 -0
- package/dist/ra-core/src/inference/index.js +6 -0
- package/dist/ra-core/src/inference/inferTypeFromValues.d.ts +21 -0
- package/dist/ra-core/src/inference/inferTypeFromValues.js +141 -0
- package/dist/ra-core/src/inference/types.d.ts +9 -0
- package/dist/ra-core/src/inference/types.js +1 -0
- package/dist/ra-core/src/notification/CloseNotificationContext.d.ts +2 -0
- package/dist/ra-core/src/notification/CloseNotificationContext.js +2 -0
- package/dist/ra-core/src/notification/NotificationContext.d.ts +37 -0
- package/dist/ra-core/src/notification/NotificationContext.js +35 -0
- package/dist/ra-core/src/notification/index.d.ts +9 -0
- package/dist/ra-core/src/notification/index.js +9 -0
- package/dist/ra-core/src/notification/types.d.ts +14 -0
- package/dist/ra-core/src/notification/types.js +1 -0
- package/dist/ra-core/src/notification/useCloseNotification.d.ts +1 -0
- package/dist/ra-core/src/notification/useCloseNotification.js +9 -0
- package/dist/ra-core/src/notification/useNotificationContext.d.ts +1 -0
- package/dist/ra-core/src/notification/useNotificationContext.js +3 -0
- package/dist/ra-core/src/notification/useNotify.d.ts +20 -0
- package/dist/ra-core/src/notification/useNotify.js +28 -0
- package/dist/ra-core/src/preferences/index.d.ts +7 -0
- package/dist/ra-core/src/preferences/index.js +7 -0
- package/dist/ra-core/src/preferences/usePreference.d.ts +18 -0
- package/dist/ra-core/src/preferences/usePreference.js +10 -0
- package/dist/ra-core/src/preferences/usePreferenceInput.d.ts +22 -0
- package/dist/ra-core/src/preferences/usePreferenceInput.js +43 -0
- package/dist/ra-core/src/preferences/usePreferencesEditor.d.ts +2 -0
- package/dist/ra-core/src/preferences/usePreferencesEditor.js +9 -0
- package/dist/ra-core/src/preferences/useSetInspectorTitle.d.ts +7 -0
- package/dist/ra-core/src/preferences/useSetInspectorTitle.js +19 -0
- package/dist/ra-core/src/routing/BasenameContext.d.ts +1 -0
- package/dist/ra-core/src/routing/BasenameContext.js +2 -0
- package/dist/ra-core/src/routing/RouterProvider.d.ts +163 -0
- package/dist/ra-core/src/routing/RouterProvider.js +1 -0
- package/dist/ra-core/src/routing/index.d.ts +28 -0
- package/dist/ra-core/src/routing/index.js +28 -0
- package/dist/ra-core/src/routing/types.d.ts +3 -0
- package/dist/ra-core/src/routing/types.js +1 -0
- package/dist/ra-core/src/routing/useBasename.d.ts +21 -0
- package/dist/ra-core/src/routing/useBasename.js +23 -0
- package/dist/ra-core/src/routing/useBlocker.d.ts +14 -0
- package/dist/ra-core/src/routing/useBlocker.js +17 -0
- package/dist/ra-core/src/routing/useCanBlock.d.ts +7 -0
- package/dist/ra-core/src/routing/useCanBlock.js +11 -0
- package/dist/ra-core/src/routing/useCreatePath.d.ts +42 -0
- package/dist/ra-core/src/routing/useCreatePath.js +69 -0
- package/dist/ra-core/src/routing/useGetPathForRecord.d.ts +42 -0
- package/dist/ra-core/src/routing/useGetPathForRecord.js +135 -0
- package/dist/ra-core/src/routing/useGetPathForRecordCallback.d.ts +6 -0
- package/dist/ra-core/src/routing/useGetPathForRecordCallback.js +82 -0
- package/dist/ra-core/src/routing/useInRouterContext.d.ts +11 -0
- package/dist/ra-core/src/routing/useInRouterContext.js +15 -0
- package/dist/ra-core/src/routing/useLocation.d.ts +10 -0
- package/dist/ra-core/src/routing/useLocation.js +13 -0
- package/dist/ra-core/src/routing/useMatch.d.ts +15 -0
- package/dist/ra-core/src/routing/useMatch.js +15 -0
- package/dist/ra-core/src/routing/useMatchPath.d.ts +17 -0
- package/dist/ra-core/src/routing/useMatchPath.js +17 -0
- package/dist/ra-core/src/routing/useNavigate.d.ts +12 -0
- package/dist/ra-core/src/routing/useNavigate.js +15 -0
- package/dist/ra-core/src/routing/useParams.d.ts +9 -0
- package/dist/ra-core/src/routing/useParams.js +13 -0
- package/dist/ra-core/src/routing/useRedirect.d.ts +30 -0
- package/dist/ra-core/src/routing/useRedirect.js +66 -0
- package/dist/ra-core/src/routing/useResetErrorBoundaryOnLocationChange.d.ts +7 -0
- package/dist/ra-core/src/routing/useResetErrorBoundaryOnLocationChange.js +17 -0
- package/dist/ra-core/src/routing/useRestoreScrollPosition.d.ts +40 -0
- package/dist/ra-core/src/routing/useRestoreScrollPosition.js +70 -0
- package/dist/ra-core/src/routing/useSplatPathBase.d.ts +13 -0
- package/dist/ra-core/src/routing/useSplatPathBase.js +21 -0
- package/dist/ra-core/src/store/index.d.ts +11 -0
- package/dist/ra-core/src/store/index.js +11 -0
- package/dist/ra-core/src/store/localStorageStore.d.ts +27 -0
- package/dist/ra-core/src/store/localStorageStore.js +198 -0
- package/dist/ra-core/src/store/types.d.ts +11 -0
- package/dist/ra-core/src/store/types.js +1 -0
- package/dist/ra-core/src/store/useRemoveFromStore.d.ts +17 -0
- package/dist/ra-core/src/store/useRemoveFromStore.js +29 -0
- package/dist/ra-core/src/store/useRemoveItemsFromStore.d.ts +17 -0
- package/dist/ra-core/src/store/useRemoveItemsFromStore.js +29 -0
- package/dist/ra-core/src/store/useResetStore.d.ts +17 -0
- package/dist/ra-core/src/store/useResetStore.js +21 -0
- package/dist/ra-core/src/store/useStore.d.ts +48 -0
- package/dist/ra-core/src/store/useStore.js +32 -0
- package/dist/ra-core/src/store/useStoreContext.d.ts +4 -0
- package/dist/ra-core/src/store/useStoreContext.js +6 -0
- package/dist/ra-core/src/test-ui/defaultI18nProvider.d.ts +2 -0
- package/dist/ra-core/src/test-ui/defaultI18nProvider.js +10 -0
- package/dist/ra-core/src/test-ui/index.d.ts +21 -0
- package/dist/ra-core/src/test-ui/index.js +21 -0
- package/dist/ra-core/src/types.d.ts +284 -0
- package/dist/ra-core/src/types.js +5 -0
- package/dist/ra-core/src/util/asyncDebounce.d.ts +7 -0
- package/dist/ra-core/src/util/asyncDebounce.js +29 -0
- package/dist/ra-core/src/util/escapePath.d.ts +11 -0
- package/dist/ra-core/src/util/escapePath.js +10 -0
- package/dist/ra-core/src/util/genericMemo.d.ts +5 -0
- package/dist/ra-core/src/util/genericMemo.js +14 -0
- package/dist/ra-core/src/util/getFieldLabelTranslationArgs.d.ts +22 -0
- package/dist/ra-core/src/util/getFieldLabelTranslationArgs.js +73 -0
- package/dist/ra-core/src/util/getMutationMode.d.ts +1 -0
- package/dist/ra-core/src/util/getMutationMode.js +13 -0
- package/dist/ra-core/src/util/hooks.d.ts +15 -0
- package/dist/ra-core/src/util/hooks.js +73 -0
- package/dist/ra-core/src/util/index.d.ts +20 -0
- package/dist/ra-core/src/util/index.js +19 -0
- package/dist/ra-core/src/util/mergeRefs.d.ts +2 -0
- package/dist/ra-core/src/util/mergeRefs.js +13 -0
- package/dist/ra-core/src/util/removeEmpty.d.ts +2 -0
- package/dist/ra-core/src/util/removeEmpty.js +16 -0
- package/dist/ra-core/src/util/removeKey.d.ts +2 -0
- package/dist/ra-core/src/util/removeKey.js +22 -0
- package/dist/ra-core/src/util/shallowEqual.d.ts +1 -0
- package/dist/ra-core/src/util/shallowEqual.js +29 -0
- package/dist/ra-core/src/util/useCheckForApplicationUpdate.d.ts +21 -0
- package/dist/ra-core/src/util/useCheckForApplicationUpdate.js +84 -0
- package/dist/ra-core/src/util/useDebouncedEvent.d.ts +8 -0
- package/dist/ra-core/src/util/useDebouncedEvent.js +28 -0
- package/dist/ra-core/src/util/useEvent.d.ts +7 -0
- package/dist/ra-core/src/util/useEvent.js +19 -0
- package/dist/ra-core/src/util/useFieldValue.d.ts +21 -0
- package/dist/ra-core/src/util/useFieldValue.js +27 -0
- package/dist/ra-core/src/util/useWhyDidYouUpdate.d.ts +12 -0
- package/dist/ra-core/src/util/useWhyDidYouUpdate.js +42 -0
- package/dist/ra-core/src/util/warning.d.ts +2 -0
- package/dist/ra-core/src/util/warning.js +5 -0
- package/dist/strato-faker-ecommerce/src/dataProvider.d.ts +2 -0
- package/dist/strato-faker-ecommerce/src/dataProvider.js +6 -0
- package/dist/strato-faker-ecommerce/src/generate.d.ts +8 -0
- package/dist/strato-faker-ecommerce/src/generate.js +148 -0
- package/dist/strato-faker-ecommerce/src/index.d.ts +3 -0
- package/dist/strato-faker-ecommerce/src/index.js +3 -0
- package/dist/strato-faker-ecommerce/src/types.d.ts +69 -0
- package/dist/strato-faker-ecommerce/src/types.js +1 -0
- package/dist/types.d.ts +1 -1
- package/package.json +5 -4
- package/src/dataProvider.ts +3 -3
- package/src/generate.test.ts +12 -12
- package/src/generate.ts +21 -14
- package/src/types.ts +1 -1
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get a callback for calling the authProvider.getPermissions() method.
|
|
3
|
+
*
|
|
4
|
+
* @see useAuthProvider
|
|
5
|
+
*
|
|
6
|
+
* @returns {Function} getPermissions callback
|
|
7
|
+
*
|
|
8
|
+
* This is a low level hook. See those more specialized hooks
|
|
9
|
+
* offering state handling.
|
|
10
|
+
*
|
|
11
|
+
* @see usePermissions
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
*
|
|
15
|
+
* import { useGetPermissions } from 'react-admin';
|
|
16
|
+
*
|
|
17
|
+
* const Roles = () => {
|
|
18
|
+
* const [permissions, setPermissions] = useState([]);
|
|
19
|
+
* const getPermissions = useGetPermissions();
|
|
20
|
+
* useEffect(() => {
|
|
21
|
+
* getPermissions().then(permissions => setPermissions(permissions))
|
|
22
|
+
* }, [])
|
|
23
|
+
* return (
|
|
24
|
+
* <ul>
|
|
25
|
+
* {permissions.map((permission, key) => (
|
|
26
|
+
* <li key={key}>{permission}</li>
|
|
27
|
+
* ))}
|
|
28
|
+
* </ul>
|
|
29
|
+
* );
|
|
30
|
+
* }
|
|
31
|
+
*/
|
|
32
|
+
declare const useGetPermissions: () => GetPermissions;
|
|
33
|
+
/**
|
|
34
|
+
* Proxy for calling authProvider.getPermissions()
|
|
35
|
+
*
|
|
36
|
+
* @param {Object} params The parameters to pass to the authProvider
|
|
37
|
+
*
|
|
38
|
+
* @return {Promise} The authProvider response
|
|
39
|
+
*/
|
|
40
|
+
type GetPermissions = (params?: any) => Promise<any>;
|
|
41
|
+
export default useGetPermissions;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
import useAuthProvider from './useAuthProvider';
|
|
3
|
+
/**
|
|
4
|
+
* Get a callback for calling the authProvider.getPermissions() method.
|
|
5
|
+
*
|
|
6
|
+
* @see useAuthProvider
|
|
7
|
+
*
|
|
8
|
+
* @returns {Function} getPermissions callback
|
|
9
|
+
*
|
|
10
|
+
* This is a low level hook. See those more specialized hooks
|
|
11
|
+
* offering state handling.
|
|
12
|
+
*
|
|
13
|
+
* @see usePermissions
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
*
|
|
17
|
+
* import { useGetPermissions } from 'react-admin';
|
|
18
|
+
*
|
|
19
|
+
* const Roles = () => {
|
|
20
|
+
* const [permissions, setPermissions] = useState([]);
|
|
21
|
+
* const getPermissions = useGetPermissions();
|
|
22
|
+
* useEffect(() => {
|
|
23
|
+
* getPermissions().then(permissions => setPermissions(permissions))
|
|
24
|
+
* }, [])
|
|
25
|
+
* return (
|
|
26
|
+
* <ul>
|
|
27
|
+
* {permissions.map((permission, key) => (
|
|
28
|
+
* <li key={key}>{permission}</li>
|
|
29
|
+
* ))}
|
|
30
|
+
* </ul>
|
|
31
|
+
* );
|
|
32
|
+
* }
|
|
33
|
+
*/
|
|
34
|
+
const useGetPermissions = () => {
|
|
35
|
+
const authProvider = useAuthProvider();
|
|
36
|
+
const getPermissions = useCallback((params = {}) => {
|
|
37
|
+
// react-query requires the query to return something
|
|
38
|
+
if (authProvider && authProvider.getPermissions) {
|
|
39
|
+
return authProvider
|
|
40
|
+
.getPermissions(params)
|
|
41
|
+
.then(result => result ?? null);
|
|
42
|
+
}
|
|
43
|
+
return Promise.resolve([]);
|
|
44
|
+
}, [authProvider]);
|
|
45
|
+
return getPermissions;
|
|
46
|
+
};
|
|
47
|
+
export default useGetPermissions;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { UseQueryOptions } from '@tanstack/react-query';
|
|
2
|
+
import { AuthRedirectResult } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* This hook calls the `authProvider.handleCallback()` method on mount. This is meant to be used in a route called
|
|
5
|
+
* by an external authentication service (e.g. Auth0) after the user has logged in.
|
|
6
|
+
* By default, it redirects to application home page upon success, or to the `redirectTo` location returned by `authProvider. handleCallback`.
|
|
7
|
+
*
|
|
8
|
+
* @returns An object containing { isPending, data, error, refetch }.
|
|
9
|
+
*/
|
|
10
|
+
export declare const useHandleAuthCallback: (options?: UseHandleAuthCallbackOptions) => import("@tanstack/react-query").UseQueryResult<void | AuthRedirectResult, Error>;
|
|
11
|
+
/**
|
|
12
|
+
* Key used to store the previous location in localStorage.
|
|
13
|
+
* Used by the useHandleAuthCallback hook to redirect the user to their previous location after a successful login.
|
|
14
|
+
*/
|
|
15
|
+
export declare const PreviousLocationStorageKey = "@react-admin/nextPathname";
|
|
16
|
+
export type UseHandleAuthCallbackOptions = Omit<UseQueryOptions<AuthRedirectResult | void>, 'queryKey' | 'queryFn'> & {
|
|
17
|
+
onSuccess?: (data: AuthRedirectResult | void) => void;
|
|
18
|
+
onError?: (err: Error) => void;
|
|
19
|
+
onSettled?: (data?: AuthRedirectResult | void, error?: Error | null) => void;
|
|
20
|
+
};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import { useQuery } from '@tanstack/react-query';
|
|
3
|
+
import { useRedirect, useLocation } from '../routing';
|
|
4
|
+
import useAuthProvider from './useAuthProvider';
|
|
5
|
+
import { useEvent } from '../util';
|
|
6
|
+
/**
|
|
7
|
+
* This hook calls the `authProvider.handleCallback()` method on mount. This is meant to be used in a route called
|
|
8
|
+
* by an external authentication service (e.g. Auth0) after the user has logged in.
|
|
9
|
+
* By default, it redirects to application home page upon success, or to the `redirectTo` location returned by `authProvider. handleCallback`.
|
|
10
|
+
*
|
|
11
|
+
* @returns An object containing { isPending, data, error, refetch }.
|
|
12
|
+
*/
|
|
13
|
+
export const useHandleAuthCallback = (options) => {
|
|
14
|
+
const authProvider = useAuthProvider();
|
|
15
|
+
const redirect = useRedirect();
|
|
16
|
+
const location = useLocation();
|
|
17
|
+
const locationState = location.state;
|
|
18
|
+
const nextPathName = locationState && locationState.nextPathname;
|
|
19
|
+
const nextSearch = locationState && locationState.nextSearch;
|
|
20
|
+
const defaultRedirectUrl = nextPathName ? nextPathName + nextSearch : '/';
|
|
21
|
+
const { onSuccess, onError, onSettled, ...queryOptions } = options ?? {};
|
|
22
|
+
let handleCallbackPromise;
|
|
23
|
+
const queryResult = useQuery({
|
|
24
|
+
queryKey: ['auth', 'handleCallback'],
|
|
25
|
+
queryFn: ({ signal }) => {
|
|
26
|
+
if (!handleCallbackPromise) {
|
|
27
|
+
handleCallbackPromise =
|
|
28
|
+
authProvider &&
|
|
29
|
+
typeof authProvider.handleCallback === 'function'
|
|
30
|
+
? authProvider
|
|
31
|
+
.handleCallback({ signal })
|
|
32
|
+
.then(result => result ?? null)
|
|
33
|
+
: Promise.resolve();
|
|
34
|
+
}
|
|
35
|
+
return handleCallbackPromise;
|
|
36
|
+
},
|
|
37
|
+
retry: false,
|
|
38
|
+
...queryOptions,
|
|
39
|
+
});
|
|
40
|
+
const onSuccessEvent = useEvent(onSuccess ??
|
|
41
|
+
((data) => {
|
|
42
|
+
// AuthProviders relying on a third party services redirect back to the app can't
|
|
43
|
+
// use the location state to store the path on which the user was before the login.
|
|
44
|
+
// So we support a fallback on the localStorage.
|
|
45
|
+
const previousLocation = localStorage.getItem(PreviousLocationStorageKey);
|
|
46
|
+
const redirectTo = data?.redirectTo ??
|
|
47
|
+
previousLocation;
|
|
48
|
+
if (redirectTo === false) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
redirect(redirectTo ?? defaultRedirectUrl);
|
|
52
|
+
}));
|
|
53
|
+
const onErrorEvent = useEvent(onError ?? noop);
|
|
54
|
+
const onSettledEvent = useEvent(onSettled ?? noop);
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
if (queryResult.error == null || queryResult.isFetching)
|
|
57
|
+
return;
|
|
58
|
+
onErrorEvent(queryResult.error);
|
|
59
|
+
}, [onErrorEvent, queryResult.error, queryResult.isFetching]);
|
|
60
|
+
useEffect(() => {
|
|
61
|
+
if (queryResult.data === undefined || queryResult.isFetching)
|
|
62
|
+
return;
|
|
63
|
+
onSuccessEvent(queryResult.data);
|
|
64
|
+
}, [onSuccessEvent, queryResult.data, queryResult.isFetching]);
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
if (queryResult.status === 'pending' || queryResult.isFetching)
|
|
67
|
+
return;
|
|
68
|
+
onSettledEvent(queryResult.data, queryResult.error);
|
|
69
|
+
}, [
|
|
70
|
+
onSettledEvent,
|
|
71
|
+
queryResult.data,
|
|
72
|
+
queryResult.error,
|
|
73
|
+
queryResult.status,
|
|
74
|
+
queryResult.isFetching,
|
|
75
|
+
]);
|
|
76
|
+
return queryResult;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Key used to store the previous location in localStorage.
|
|
80
|
+
* Used by the useHandleAuthCallback hook to redirect the user to their previous location after a successful login.
|
|
81
|
+
*/
|
|
82
|
+
export const PreviousLocationStorageKey = '@react-admin/nextPathname';
|
|
83
|
+
const noop = () => { };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { HintedString } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* A hook that returns true if the authProvider is currently checking the authentication status or the user's access rights.
|
|
4
|
+
* @param params
|
|
5
|
+
* @param params.action The action to check access for
|
|
6
|
+
* @param params.resource The resource to check access for (optional). Defaults to the resource of the current ResourceContext.
|
|
7
|
+
* @returns {boolean} true if the authProvider is currently checking the authentication status or the user's access rights, false otherwise.
|
|
8
|
+
*/
|
|
9
|
+
export declare const useIsAuthPending: (params: UseIsAuthPendingParams) => boolean;
|
|
10
|
+
export type UseIsAuthPendingParams = {
|
|
11
|
+
resource?: string;
|
|
12
|
+
action: HintedString<'list' | 'create' | 'edit' | 'show' | 'delete'>;
|
|
13
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { useQueryClient } from '@tanstack/react-query';
|
|
2
|
+
import { useResourceContext } from '../core';
|
|
3
|
+
import useAuthProvider from './useAuthProvider';
|
|
4
|
+
/**
|
|
5
|
+
* A hook that returns true if the authProvider is currently checking the authentication status or the user's access rights.
|
|
6
|
+
* @param params
|
|
7
|
+
* @param params.action The action to check access for
|
|
8
|
+
* @param params.resource The resource to check access for (optional). Defaults to the resource of the current ResourceContext.
|
|
9
|
+
* @returns {boolean} true if the authProvider is currently checking the authentication status or the user's access rights, false otherwise.
|
|
10
|
+
*/
|
|
11
|
+
export const useIsAuthPending = (params) => {
|
|
12
|
+
const { action, ...props } = params;
|
|
13
|
+
const queryClient = useQueryClient();
|
|
14
|
+
const authProvider = useAuthProvider();
|
|
15
|
+
const resource = useResourceContext(props);
|
|
16
|
+
if (!authProvider) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
const authQueryState = queryClient.getQueryState(['auth', 'checkAuth', {}]);
|
|
20
|
+
const canAccessQueryState = queryClient.getQueryState([
|
|
21
|
+
'auth',
|
|
22
|
+
'canAccess',
|
|
23
|
+
{ action, resource },
|
|
24
|
+
]);
|
|
25
|
+
if (authQueryState?.status === 'pending' ||
|
|
26
|
+
(authProvider.canAccess && canAccessQueryState?.status === 'pending')) {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
return false;
|
|
30
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get a callback for calling the authProvider.login() method
|
|
3
|
+
* and redirect to the previous authenticated page (or the home page) on success.
|
|
4
|
+
*
|
|
5
|
+
* @see useAuthProvider
|
|
6
|
+
*
|
|
7
|
+
* @returns {Function} login callback
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
*
|
|
11
|
+
* import { useLogin } from 'react-admin';
|
|
12
|
+
*
|
|
13
|
+
* const LoginButton = () => {
|
|
14
|
+
* const [loading, setLoading] = useState(false);
|
|
15
|
+
* const login = useLogin();
|
|
16
|
+
* const handleClick = {
|
|
17
|
+
* setLoading(true);
|
|
18
|
+
* login({ username: 'john', password: 'p@ssw0rd' }, '/posts')
|
|
19
|
+
* .then(() => setLoading(false));
|
|
20
|
+
* }
|
|
21
|
+
* return <button onClick={handleClick}>Login</button>;
|
|
22
|
+
* }
|
|
23
|
+
*/
|
|
24
|
+
declare const useLogin: () => Login;
|
|
25
|
+
/**
|
|
26
|
+
* Log a user in by calling the authProvider.login() method
|
|
27
|
+
*
|
|
28
|
+
* @param {Object} params Login parameters to pass to the authProvider. May contain username/email, password, etc
|
|
29
|
+
* @param {string} pathName The path to redirect to after login. By default, redirects to the home page, or to the last page visited after disconnection.
|
|
30
|
+
*
|
|
31
|
+
* @return {Promise} The authProvider response
|
|
32
|
+
*/
|
|
33
|
+
type Login = (params: any, pathName?: string) => Promise<any>;
|
|
34
|
+
export default useLogin;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
import { useQueryClient } from '@tanstack/react-query';
|
|
3
|
+
import { useNotificationContext } from '../notification';
|
|
4
|
+
import { useBasename, useLocation, useNavigate } from '../routing';
|
|
5
|
+
import useAuthProvider, { defaultAuthParams } from './useAuthProvider';
|
|
6
|
+
import { removeDoubleSlashes } from '../routing/useCreatePath';
|
|
7
|
+
/**
|
|
8
|
+
* Get a callback for calling the authProvider.login() method
|
|
9
|
+
* and redirect to the previous authenticated page (or the home page) on success.
|
|
10
|
+
*
|
|
11
|
+
* @see useAuthProvider
|
|
12
|
+
*
|
|
13
|
+
* @returns {Function} login callback
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
*
|
|
17
|
+
* import { useLogin } from 'react-admin';
|
|
18
|
+
*
|
|
19
|
+
* const LoginButton = () => {
|
|
20
|
+
* const [loading, setLoading] = useState(false);
|
|
21
|
+
* const login = useLogin();
|
|
22
|
+
* const handleClick = {
|
|
23
|
+
* setLoading(true);
|
|
24
|
+
* login({ username: 'john', password: 'p@ssw0rd' }, '/posts')
|
|
25
|
+
* .then(() => setLoading(false));
|
|
26
|
+
* }
|
|
27
|
+
* return <button onClick={handleClick}>Login</button>;
|
|
28
|
+
* }
|
|
29
|
+
*/
|
|
30
|
+
const useLogin = () => {
|
|
31
|
+
const authProvider = useAuthProvider();
|
|
32
|
+
const queryClient = useQueryClient();
|
|
33
|
+
const location = useLocation();
|
|
34
|
+
const locationState = location.state;
|
|
35
|
+
const navigate = useNavigate();
|
|
36
|
+
const basename = useBasename();
|
|
37
|
+
const { resetNotifications } = useNotificationContext();
|
|
38
|
+
const nextPathName = locationState && locationState.nextPathname;
|
|
39
|
+
const nextSearch = locationState && locationState.nextSearch;
|
|
40
|
+
const afterLoginUrl = removeDoubleSlashes(`${basename}/${defaultAuthParams.afterLoginUrl}`);
|
|
41
|
+
const login = useCallback((params = {}, pathName) => {
|
|
42
|
+
if (authProvider) {
|
|
43
|
+
return authProvider.login(params).then(ret => {
|
|
44
|
+
resetNotifications();
|
|
45
|
+
queryClient.invalidateQueries({
|
|
46
|
+
queryKey: ['auth', 'getPermissions'],
|
|
47
|
+
});
|
|
48
|
+
if (ret && ret.hasOwnProperty('redirectTo')) {
|
|
49
|
+
if (ret) {
|
|
50
|
+
navigate(ret.redirectTo);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
const redirectUrl = pathName
|
|
55
|
+
? pathName
|
|
56
|
+
: nextPathName + nextSearch || afterLoginUrl;
|
|
57
|
+
navigate(redirectUrl);
|
|
58
|
+
}
|
|
59
|
+
return ret;
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
resetNotifications();
|
|
64
|
+
navigate(afterLoginUrl);
|
|
65
|
+
return Promise.resolve();
|
|
66
|
+
}
|
|
67
|
+
}, [
|
|
68
|
+
authProvider,
|
|
69
|
+
queryClient,
|
|
70
|
+
navigate,
|
|
71
|
+
nextPathName,
|
|
72
|
+
nextSearch,
|
|
73
|
+
resetNotifications,
|
|
74
|
+
afterLoginUrl,
|
|
75
|
+
]);
|
|
76
|
+
return login;
|
|
77
|
+
};
|
|
78
|
+
export default useLogin;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get a callback for calling the authProvider.logout() method,
|
|
3
|
+
* redirect to the login page, and clear the store.
|
|
4
|
+
*
|
|
5
|
+
* @see useAuthProvider
|
|
6
|
+
*
|
|
7
|
+
* @returns {Function} logout callback
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
*
|
|
11
|
+
* import { useLogout } from 'react-admin';
|
|
12
|
+
*
|
|
13
|
+
* const LogoutButton = () => {
|
|
14
|
+
* const logout = useLogout();
|
|
15
|
+
* const handleClick = () => logout();
|
|
16
|
+
* return <button onClick={handleClick}>Logout</button>;
|
|
17
|
+
* }
|
|
18
|
+
*/
|
|
19
|
+
declare const useLogout: () => Logout;
|
|
20
|
+
/**
|
|
21
|
+
* Log the current user out by calling the authProvider.logout() method,
|
|
22
|
+
* and redirect them to the login screen.
|
|
23
|
+
*
|
|
24
|
+
* @param {Object} params The parameters to pass to the authProvider
|
|
25
|
+
* @param {string} redirectTo The path name to redirect the user to (optional, defaults to login)
|
|
26
|
+
* @param {boolean} redirectToCurrentLocationAfterLogin Whether the button shall record the current location to redirect to it after login. true by default.
|
|
27
|
+
*
|
|
28
|
+
* @return {Promise} The authProvider response
|
|
29
|
+
*/
|
|
30
|
+
type Logout = (params?: any, redirectTo?: string | false, redirectToCurrentLocationAfterLogin?: boolean) => Promise<any>;
|
|
31
|
+
export default useLogout;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef } from 'react';
|
|
2
|
+
import { useQueryClient } from '@tanstack/react-query';
|
|
3
|
+
import useAuthProvider, { defaultAuthParams } from './useAuthProvider';
|
|
4
|
+
import { useResetStore } from '../store';
|
|
5
|
+
import { useBasename, useLocation, useNavigate } from '../routing';
|
|
6
|
+
import { removeDoubleSlashes } from '../routing/useCreatePath';
|
|
7
|
+
/**
|
|
8
|
+
* Get a callback for calling the authProvider.logout() method,
|
|
9
|
+
* redirect to the login page, and clear the store.
|
|
10
|
+
*
|
|
11
|
+
* @see useAuthProvider
|
|
12
|
+
*
|
|
13
|
+
* @returns {Function} logout callback
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
*
|
|
17
|
+
* import { useLogout } from 'react-admin';
|
|
18
|
+
*
|
|
19
|
+
* const LogoutButton = () => {
|
|
20
|
+
* const logout = useLogout();
|
|
21
|
+
* const handleClick = () => logout();
|
|
22
|
+
* return <button onClick={handleClick}>Logout</button>;
|
|
23
|
+
* }
|
|
24
|
+
*/
|
|
25
|
+
const useLogout = () => {
|
|
26
|
+
const authProvider = useAuthProvider();
|
|
27
|
+
const queryClient = useQueryClient();
|
|
28
|
+
const resetStore = useResetStore();
|
|
29
|
+
const navigate = useNavigate();
|
|
30
|
+
const location = useLocation();
|
|
31
|
+
const locationRef = useRef(location);
|
|
32
|
+
const basename = useBasename();
|
|
33
|
+
const loginUrl = removeDoubleSlashes(`${basename}/${defaultAuthParams.loginUrl}`);
|
|
34
|
+
/*
|
|
35
|
+
* We need the current location to pass in the router state
|
|
36
|
+
* so that the login hook knows where to redirect to as next route after login.
|
|
37
|
+
*
|
|
38
|
+
* But if we used the location from useLocation as a dependency of the logout
|
|
39
|
+
* function, it would be rebuilt each time the user changes location.
|
|
40
|
+
* Consequently, that would force a rerender of all components using this hook
|
|
41
|
+
* upon navigation (CoreAdminRouter for example).
|
|
42
|
+
*
|
|
43
|
+
* To avoid that, we store the location in a ref.
|
|
44
|
+
*/
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
locationRef.current = location;
|
|
47
|
+
}, [location]);
|
|
48
|
+
const logout = useCallback((params = {}, redirectFromCaller, redirectToCurrentLocationAfterLogin = true) => {
|
|
49
|
+
if (authProvider) {
|
|
50
|
+
return authProvider.logout(params).then(redirectFromLogout => {
|
|
51
|
+
if (redirectFromLogout === false ||
|
|
52
|
+
redirectFromCaller === false) {
|
|
53
|
+
resetStore();
|
|
54
|
+
queryClient.clear();
|
|
55
|
+
// do not redirect
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const finalRedirectTo = redirectFromCaller || redirectFromLogout || loginUrl;
|
|
59
|
+
if (finalRedirectTo?.startsWith('http')) {
|
|
60
|
+
// absolute link (e.g. https://my.oidc.server/login)
|
|
61
|
+
resetStore();
|
|
62
|
+
queryClient.clear();
|
|
63
|
+
window.location.href = finalRedirectTo;
|
|
64
|
+
return finalRedirectTo;
|
|
65
|
+
}
|
|
66
|
+
// redirectTo is an internal location that may contain a query string, e.g. '/login?foo=bar'
|
|
67
|
+
// we must split it to pass a structured location to navigate()
|
|
68
|
+
const redirectToParts = finalRedirectTo.split('?');
|
|
69
|
+
const newLocation = {
|
|
70
|
+
pathname: redirectToParts[0],
|
|
71
|
+
};
|
|
72
|
+
let newLocationOptions = {};
|
|
73
|
+
if (redirectToCurrentLocationAfterLogin &&
|
|
74
|
+
locationRef.current &&
|
|
75
|
+
locationRef.current.pathname) {
|
|
76
|
+
newLocationOptions = {
|
|
77
|
+
state: {
|
|
78
|
+
nextPathname: locationRef.current.pathname,
|
|
79
|
+
nextSearch: locationRef.current.search,
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
if (redirectToParts[1]) {
|
|
84
|
+
newLocation.search = redirectToParts[1];
|
|
85
|
+
}
|
|
86
|
+
// We need to navigate and reset the store after a litte delay to avoid a race condition
|
|
87
|
+
// between the store reset and the navigation.
|
|
88
|
+
//
|
|
89
|
+
// This would only happen when the `authProvider.getPermissions` method returns
|
|
90
|
+
// a resolved promise with no delay: If the store was reset before the navigation,
|
|
91
|
+
// the `usePermissions` query would reset, causing the `CoreAdminRoutes` component to
|
|
92
|
+
// rerender the `LogoutOnMount` component leading to an infinite loop.
|
|
93
|
+
setTimeout(() => {
|
|
94
|
+
navigate(newLocation, newLocationOptions);
|
|
95
|
+
resetStore();
|
|
96
|
+
queryClient.clear();
|
|
97
|
+
}, 0);
|
|
98
|
+
return redirectFromLogout;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
navigate({
|
|
103
|
+
pathname: loginUrl,
|
|
104
|
+
}, {
|
|
105
|
+
state: {
|
|
106
|
+
nextPathname: locationRef.current &&
|
|
107
|
+
locationRef.current.pathname,
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
resetStore();
|
|
111
|
+
queryClient.clear();
|
|
112
|
+
return Promise.resolve();
|
|
113
|
+
}
|
|
114
|
+
}, [authProvider, resetStore, loginUrl, queryClient, navigate]);
|
|
115
|
+
return logout;
|
|
116
|
+
};
|
|
117
|
+
export default useLogout;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns a callback used to call the authProvider.checkError() method
|
|
3
|
+
* and an error from the dataProvider. If the authProvider rejects the call,
|
|
4
|
+
* the hook logs the user out and shows a logged out notification.
|
|
5
|
+
*
|
|
6
|
+
* Used in the useDataProvider hook to check for access denied responses
|
|
7
|
+
* (e.g. 401 or 403 responses) and trigger a logout.
|
|
8
|
+
*
|
|
9
|
+
* @see useLogout
|
|
10
|
+
* @see useDataProvider
|
|
11
|
+
*
|
|
12
|
+
* @returns {Function} logoutIfAccessDenied callback
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
*
|
|
16
|
+
* import { useLogoutIfAccessDenied, useNotify, DataProviderContext } from 'react-admin';
|
|
17
|
+
*
|
|
18
|
+
* const FetchRestrictedResource = () => {
|
|
19
|
+
* const dataProvider = useContext(DataProviderContext);
|
|
20
|
+
* const logoutIfAccessDenied = useLogoutIfAccessDenied();
|
|
21
|
+
* const notify = useNotify()
|
|
22
|
+
* useEffect(() => {
|
|
23
|
+
* dataProvider.getOne('secret', { id: 123 })
|
|
24
|
+
* .catch(error => {
|
|
25
|
+
* logoutIfAccessDenied(error);
|
|
26
|
+
* notify('server error', { type: 'error' });
|
|
27
|
+
* })
|
|
28
|
+
* }, []);
|
|
29
|
+
* // ...
|
|
30
|
+
* }
|
|
31
|
+
*/
|
|
32
|
+
declare const useLogoutIfAccessDenied: () => LogoutIfAccessDenied;
|
|
33
|
+
/**
|
|
34
|
+
* Call the authProvider.authError() method, using the error passed as argument.
|
|
35
|
+
* If the authProvider rejects the call, logs the user out and shows a logged out notification.
|
|
36
|
+
*
|
|
37
|
+
* @param {Error} error An Error object (usually returned by the dataProvider)
|
|
38
|
+
*
|
|
39
|
+
* @return {Promise} Resolved to true if there was a logout, false otherwise
|
|
40
|
+
*/
|
|
41
|
+
type LogoutIfAccessDenied = (error?: any) => Promise<boolean>;
|
|
42
|
+
export default useLogoutIfAccessDenied;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
import useAuthProvider from './useAuthProvider';
|
|
3
|
+
import useLogout from './useLogout';
|
|
4
|
+
import { useNotify } from '../notification';
|
|
5
|
+
import { useNavigate } from '../routing/useNavigate';
|
|
6
|
+
let timer;
|
|
7
|
+
/**
|
|
8
|
+
* Returns a callback used to call the authProvider.checkError() method
|
|
9
|
+
* and an error from the dataProvider. If the authProvider rejects the call,
|
|
10
|
+
* the hook logs the user out and shows a logged out notification.
|
|
11
|
+
*
|
|
12
|
+
* Used in the useDataProvider hook to check for access denied responses
|
|
13
|
+
* (e.g. 401 or 403 responses) and trigger a logout.
|
|
14
|
+
*
|
|
15
|
+
* @see useLogout
|
|
16
|
+
* @see useDataProvider
|
|
17
|
+
*
|
|
18
|
+
* @returns {Function} logoutIfAccessDenied callback
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
*
|
|
22
|
+
* import { useLogoutIfAccessDenied, useNotify, DataProviderContext } from 'react-admin';
|
|
23
|
+
*
|
|
24
|
+
* const FetchRestrictedResource = () => {
|
|
25
|
+
* const dataProvider = useContext(DataProviderContext);
|
|
26
|
+
* const logoutIfAccessDenied = useLogoutIfAccessDenied();
|
|
27
|
+
* const notify = useNotify()
|
|
28
|
+
* useEffect(() => {
|
|
29
|
+
* dataProvider.getOne('secret', { id: 123 })
|
|
30
|
+
* .catch(error => {
|
|
31
|
+
* logoutIfAccessDenied(error);
|
|
32
|
+
* notify('server error', { type: 'error' });
|
|
33
|
+
* })
|
|
34
|
+
* }, []);
|
|
35
|
+
* // ...
|
|
36
|
+
* }
|
|
37
|
+
*/
|
|
38
|
+
const useLogoutIfAccessDenied = () => {
|
|
39
|
+
const authProvider = useAuthProvider();
|
|
40
|
+
const logout = useLogout();
|
|
41
|
+
const notify = useNotify();
|
|
42
|
+
const navigate = useNavigate();
|
|
43
|
+
const handleRedirect = useCallback((url) => {
|
|
44
|
+
if (url.startsWith('http')) {
|
|
45
|
+
window.location.href = url;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
navigate(url);
|
|
49
|
+
}
|
|
50
|
+
}, [navigate]);
|
|
51
|
+
const logoutIfAccessDenied = useCallback(async (errorFromCheckAuth) => {
|
|
52
|
+
if (!authProvider) {
|
|
53
|
+
return logoutIfAccessDeniedWithoutProvider();
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
await authProvider.checkError(errorFromCheckAuth);
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
catch (errorFromCheckError) {
|
|
60
|
+
const logoutUser = errorFromCheckError?.logoutUser ?? true;
|
|
61
|
+
// manual debounce
|
|
62
|
+
if (timer) {
|
|
63
|
+
return true; // side effects already triggered in this tick, exit
|
|
64
|
+
}
|
|
65
|
+
timer = setTimeout(() => {
|
|
66
|
+
timer = undefined;
|
|
67
|
+
}, 0);
|
|
68
|
+
const redirectTo = errorFromCheckError &&
|
|
69
|
+
errorFromCheckError.redirectTo != null
|
|
70
|
+
? errorFromCheckError.redirectTo
|
|
71
|
+
: errorFromCheckAuth && errorFromCheckAuth.redirectTo
|
|
72
|
+
? errorFromCheckAuth.redirectTo
|
|
73
|
+
: undefined;
|
|
74
|
+
const shouldNotify = !((errorFromCheckError &&
|
|
75
|
+
errorFromCheckError.message === false) ||
|
|
76
|
+
(errorFromCheckAuth &&
|
|
77
|
+
errorFromCheckAuth.message === false) ||
|
|
78
|
+
redirectTo?.startsWith('http'));
|
|
79
|
+
if (shouldNotify) {
|
|
80
|
+
try {
|
|
81
|
+
// notify only if not yet logged out
|
|
82
|
+
await authProvider.checkAuth({});
|
|
83
|
+
if (logoutUser) {
|
|
84
|
+
notify(getErrorMessage(errorFromCheckError, "strato.notification.logged_out'), { type: 'error' });
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
notify(getErrorMessage(errorFromCheckError, "strato.notification.not_authorized'), { type: 'error' });
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// ignore
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (logoutUser) {
|
|
95
|
+
logout({}, redirectTo);
|
|
96
|
+
}
|
|
97
|
+
else if (redirectTo) {
|
|
98
|
+
handleRedirect(redirectTo);
|
|
99
|
+
}
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
}, [authProvider, logout, notify, handleRedirect]);
|
|
103
|
+
return logoutIfAccessDenied;
|
|
104
|
+
};
|
|
105
|
+
const logoutIfAccessDeniedWithoutProvider = async () => false;
|
|
106
|
+
const getErrorMessage = (error, defaultMessage) => typeof error === 'string'
|
|
107
|
+
? error
|
|
108
|
+
: typeof error === 'undefined' || !error.message
|
|
109
|
+
? defaultMessage
|
|
110
|
+
: error.message;
|
|
111
|
+
export default useLogoutIfAccessDenied;
|