@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,56 @@
|
|
|
1
|
+
import { QueryObserverLoadingErrorResult, QueryObserverLoadingResult, QueryObserverRefetchErrorResult, QueryObserverSuccessResult, UseQueryOptions } from '@tanstack/react-query';
|
|
2
|
+
import { HintedString } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* A hook that calls the authProvider.canAccess() method using react-query for a provided resource and action (and optionally a record).
|
|
5
|
+
*
|
|
6
|
+
* The return value updates according to the request state:
|
|
7
|
+
*
|
|
8
|
+
* - start: { isPending: true }
|
|
9
|
+
* - success: { canAccess: true | false, isPending: false }
|
|
10
|
+
* - error: { error: [error from provider], isPending: false }
|
|
11
|
+
*
|
|
12
|
+
* Useful to enable or disable features based on users permissions.
|
|
13
|
+
*
|
|
14
|
+
* @param {Object} params Any params you want to pass to the authProvider
|
|
15
|
+
* @param {string} params.resource The resource to check access for
|
|
16
|
+
* @param {string} params.action The action to check access for
|
|
17
|
+
* @param {Object} params.record Optional. The record to check access for
|
|
18
|
+
*
|
|
19
|
+
* @returns Return the react-query result and a canAccess property which is a boolean indicating the access status
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* import { useCanAccess } from 'react-admin';
|
|
23
|
+
*
|
|
24
|
+
* const PostDetail = () => {
|
|
25
|
+
* const { isPending, canAccess, error } = useCanAccess({
|
|
26
|
+
* resource: 'posts',
|
|
27
|
+
* action: 'read',
|
|
28
|
+
* });
|
|
29
|
+
* if (isPending || !canAccess) {
|
|
30
|
+
* return null;
|
|
31
|
+
* }
|
|
32
|
+
* if (error) {
|
|
33
|
+
* return <div>{error.message}</div>;
|
|
34
|
+
* }
|
|
35
|
+
* return <PostEdit />;
|
|
36
|
+
* };
|
|
37
|
+
*/
|
|
38
|
+
export declare const useCanAccess: <RecordType extends Record<string, any> = Record<string, any>, ErrorType extends Error = Error>(params: UseCanAccessOptions<RecordType, ErrorType>) => UseCanAccessResult<ErrorType>;
|
|
39
|
+
export interface UseCanAccessOptions<RecordType extends Record<string, any> = Record<string, any>, ErrorType extends Error = Error> extends Omit<UseQueryOptions<boolean, ErrorType>, 'queryKey' | 'queryFn'> {
|
|
40
|
+
resource?: string;
|
|
41
|
+
action: HintedString<'list' | 'create' | 'edit' | 'show' | 'delete'>;
|
|
42
|
+
record?: RecordType;
|
|
43
|
+
}
|
|
44
|
+
export type UseCanAccessResult<ErrorType = Error> = UseCanAccessLoadingResult<ErrorType> | UseCanAccessLoadingErrorResult<ErrorType> | UseCanAccessRefetchErrorResult<ErrorType> | UseCanAccessSuccessResult<ErrorType>;
|
|
45
|
+
export interface UseCanAccessLoadingResult<ErrorType = Error> extends QueryObserverLoadingResult<boolean, ErrorType> {
|
|
46
|
+
canAccess: undefined;
|
|
47
|
+
}
|
|
48
|
+
export interface UseCanAccessLoadingErrorResult<ErrorType = Error> extends QueryObserverLoadingErrorResult<boolean, ErrorType> {
|
|
49
|
+
canAccess: undefined;
|
|
50
|
+
}
|
|
51
|
+
export interface UseCanAccessRefetchErrorResult<ErrorType = Error> extends QueryObserverRefetchErrorResult<boolean, ErrorType> {
|
|
52
|
+
canAccess: boolean;
|
|
53
|
+
}
|
|
54
|
+
export interface UseCanAccessSuccessResult<ErrorType = Error> extends QueryObserverSuccessResult<boolean, ErrorType> {
|
|
55
|
+
canAccess: boolean;
|
|
56
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
import { useQuery, } from '@tanstack/react-query';
|
|
3
|
+
import useAuthProvider from './useAuthProvider';
|
|
4
|
+
import { useResourceContext } from '../core';
|
|
5
|
+
import { useRecordContext } from '../controller';
|
|
6
|
+
/**
|
|
7
|
+
* A hook that calls the authProvider.canAccess() method using react-query for a provided resource and action (and optionally a record).
|
|
8
|
+
*
|
|
9
|
+
* The return value updates according to the request state:
|
|
10
|
+
*
|
|
11
|
+
* - start: { isPending: true }
|
|
12
|
+
* - success: { canAccess: true | false, isPending: false }
|
|
13
|
+
* - error: { error: [error from provider], isPending: false }
|
|
14
|
+
*
|
|
15
|
+
* Useful to enable or disable features based on users permissions.
|
|
16
|
+
*
|
|
17
|
+
* @param {Object} params Any params you want to pass to the authProvider
|
|
18
|
+
* @param {string} params.resource The resource to check access for
|
|
19
|
+
* @param {string} params.action The action to check access for
|
|
20
|
+
* @param {Object} params.record Optional. The record to check access for
|
|
21
|
+
*
|
|
22
|
+
* @returns Return the react-query result and a canAccess property which is a boolean indicating the access status
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* import { useCanAccess } from 'react-admin';
|
|
26
|
+
*
|
|
27
|
+
* const PostDetail = () => {
|
|
28
|
+
* const { isPending, canAccess, error } = useCanAccess({
|
|
29
|
+
* resource: 'posts',
|
|
30
|
+
* action: 'read',
|
|
31
|
+
* });
|
|
32
|
+
* if (isPending || !canAccess) {
|
|
33
|
+
* return null;
|
|
34
|
+
* }
|
|
35
|
+
* if (error) {
|
|
36
|
+
* return <div>{error.message}</div>;
|
|
37
|
+
* }
|
|
38
|
+
* return <PostEdit />;
|
|
39
|
+
* };
|
|
40
|
+
*/
|
|
41
|
+
export const useCanAccess = (params) => {
|
|
42
|
+
const authProvider = useAuthProvider();
|
|
43
|
+
const resource = useResourceContext(params);
|
|
44
|
+
if (!resource) {
|
|
45
|
+
throw new Error('useCanAccess must be used inside a <Resource> component or provide a resource prop');
|
|
46
|
+
}
|
|
47
|
+
const record = useRecordContext(params);
|
|
48
|
+
const { record: _record, ...restParams } = params;
|
|
49
|
+
const authProviderHasCanAccess = !!authProvider?.canAccess;
|
|
50
|
+
const queryResult = useQuery({
|
|
51
|
+
queryKey: [
|
|
52
|
+
'auth',
|
|
53
|
+
'canAccess',
|
|
54
|
+
{ ...restParams, recordId: record?.id, resource },
|
|
55
|
+
],
|
|
56
|
+
queryFn: async ({ signal }) => {
|
|
57
|
+
if (!authProvider || !authProvider.canAccess) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
return authProvider.canAccess({
|
|
61
|
+
...params,
|
|
62
|
+
record,
|
|
63
|
+
resource,
|
|
64
|
+
signal: authProvider.supportAbortSignal ? signal : undefined,
|
|
65
|
+
});
|
|
66
|
+
},
|
|
67
|
+
enabled: authProviderHasCanAccess,
|
|
68
|
+
...params,
|
|
69
|
+
});
|
|
70
|
+
const result = useMemo(() => {
|
|
71
|
+
// Don't check for the authProvider or authProvider.canAccess method in the useMemo
|
|
72
|
+
// to avoid unnecessary re-renders
|
|
73
|
+
return {
|
|
74
|
+
...queryResult,
|
|
75
|
+
canAccess: queryResult.data,
|
|
76
|
+
};
|
|
77
|
+
}, [queryResult]);
|
|
78
|
+
return authProviderHasCanAccess
|
|
79
|
+
? result
|
|
80
|
+
: emptyQueryObserverResult;
|
|
81
|
+
};
|
|
82
|
+
const emptyQueryObserverResult = {
|
|
83
|
+
canAccess: true,
|
|
84
|
+
data: true,
|
|
85
|
+
dataUpdatedAt: 0,
|
|
86
|
+
error: null,
|
|
87
|
+
errorUpdatedAt: 0,
|
|
88
|
+
errorUpdateCount: 0,
|
|
89
|
+
failureCount: 0,
|
|
90
|
+
failureReason: null,
|
|
91
|
+
fetchStatus: 'idle',
|
|
92
|
+
isError: false,
|
|
93
|
+
isInitialLoading: false,
|
|
94
|
+
isLoading: false,
|
|
95
|
+
isLoadingError: false,
|
|
96
|
+
isFetched: true,
|
|
97
|
+
isFetchedAfterMount: true,
|
|
98
|
+
isFetching: false,
|
|
99
|
+
isPaused: false,
|
|
100
|
+
isPlaceholderData: false,
|
|
101
|
+
isPending: false,
|
|
102
|
+
isRefetchError: false,
|
|
103
|
+
isRefetching: false,
|
|
104
|
+
isStale: false,
|
|
105
|
+
isSuccess: true,
|
|
106
|
+
status: 'success',
|
|
107
|
+
refetch: () => Promise.resolve(emptyQueryObserverResult),
|
|
108
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { UseMutateAsyncFunction, UseMutationOptions } from '@tanstack/react-query';
|
|
2
|
+
import { HintedString } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* A hook that returns a function you can call to determine whether user has access to the given resource
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* import { Datagrid, List, TextField, useCanAccessCallback } from 'react-admin';
|
|
8
|
+
*
|
|
9
|
+
* const UserList = () => {
|
|
10
|
+
* const checkAccess = useCanAccessCallback();
|
|
11
|
+
*
|
|
12
|
+
* const handleRowClick = (id: Identifier, resource: string, record: Record) => {
|
|
13
|
+
* try {
|
|
14
|
+
* const canAccess = checkAccess({ resource: 'users', action: 'edit', record });
|
|
15
|
+
* return canAccess ? "edit" : "show";
|
|
16
|
+
* } catch (error) {
|
|
17
|
+
* console.error(error);
|
|
18
|
+
* }
|
|
19
|
+
* };
|
|
20
|
+
*
|
|
21
|
+
* return (
|
|
22
|
+
* <List>
|
|
23
|
+
* <Datagrid onClick={handleRowClick}>
|
|
24
|
+
* <TextField source="id" />
|
|
25
|
+
* <TextField source="name" />
|
|
26
|
+
* <TextField source="email" />
|
|
27
|
+
* </Datagrid>
|
|
28
|
+
* </List>
|
|
29
|
+
* );
|
|
30
|
+
* };
|
|
31
|
+
*/
|
|
32
|
+
export declare const useCanAccessCallback: <RecordType extends Record<string, any> = Record<string, any>, ErrorType = Error>(options?: Omit<UseMutationOptions<UseCanAccessCallbackResult, ErrorType, UseCanAccessCallbackOptions<RecordType>>, "mutationFn">) => UseMutateAsyncFunction<boolean, ErrorType, UseCanAccessCallbackOptions<Record<string, any>>, unknown>;
|
|
33
|
+
export type UseCanAccessCallback<RecordType extends Record<string, any> = Record<string, any>, ErrorType = Error> = UseMutateAsyncFunction<UseCanAccessCallbackResult, ErrorType, UseCanAccessCallbackOptions<RecordType>, unknown>;
|
|
34
|
+
export type UseCanAccessCallbackOptions<RecordType extends Record<string, any> = Record<string, any>> = {
|
|
35
|
+
resource: string;
|
|
36
|
+
action: HintedString<'list' | 'create' | 'edit' | 'show' | 'delete'>;
|
|
37
|
+
record?: RecordType;
|
|
38
|
+
};
|
|
39
|
+
export type UseCanAccessCallbackResult = boolean;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { useMutation, } from '@tanstack/react-query';
|
|
2
|
+
import useAuthProvider from './useAuthProvider';
|
|
3
|
+
/**
|
|
4
|
+
* A hook that returns a function you can call to determine whether user has access to the given resource
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* import { Datagrid, List, TextField, useCanAccessCallback } from 'react-admin';
|
|
8
|
+
*
|
|
9
|
+
* const UserList = () => {
|
|
10
|
+
* const checkAccess = useCanAccessCallback();
|
|
11
|
+
*
|
|
12
|
+
* const handleRowClick = (id: Identifier, resource: string, record: Record) => {
|
|
13
|
+
* try {
|
|
14
|
+
* const canAccess = checkAccess({ resource: 'users', action: 'edit', record });
|
|
15
|
+
* return canAccess ? "edit" : "show";
|
|
16
|
+
* } catch (error) {
|
|
17
|
+
* console.error(error);
|
|
18
|
+
* }
|
|
19
|
+
* };
|
|
20
|
+
*
|
|
21
|
+
* return (
|
|
22
|
+
* <List>
|
|
23
|
+
* <Datagrid onClick={handleRowClick}>
|
|
24
|
+
* <TextField source="id" />
|
|
25
|
+
* <TextField source="name" />
|
|
26
|
+
* <TextField source="email" />
|
|
27
|
+
* </Datagrid>
|
|
28
|
+
* </List>
|
|
29
|
+
* );
|
|
30
|
+
* };
|
|
31
|
+
*/
|
|
32
|
+
export const useCanAccessCallback = (options = {}) => {
|
|
33
|
+
const authProvider = useAuthProvider();
|
|
34
|
+
const { mutateAsync } = useMutation({
|
|
35
|
+
mutationFn: async (params) => {
|
|
36
|
+
if (!authProvider || !authProvider.canAccess) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
return authProvider.canAccess(params);
|
|
40
|
+
},
|
|
41
|
+
retry: false,
|
|
42
|
+
...options,
|
|
43
|
+
});
|
|
44
|
+
return mutateAsync;
|
|
45
|
+
};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { UseQueryOptions } from '@tanstack/react-query';
|
|
2
|
+
import { HintedString } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Checks whether users can access the provided resources.
|
|
5
|
+
*
|
|
6
|
+
* `useCanAccessResources` returns an object describing the state of the request:
|
|
7
|
+
*
|
|
8
|
+
* - start: { isPending: true }
|
|
9
|
+
* - success: { canAccess: Object<string, boolean>, isPending: false }
|
|
10
|
+
* - error: { error: [error from provider], isPending: false }
|
|
11
|
+
*
|
|
12
|
+
* @param {Object} params Any params you want to pass to the authProvider
|
|
13
|
+
* @param {string} params.action The action to check access for
|
|
14
|
+
* @param {string[]} params.resources The list of resources to check access for
|
|
15
|
+
* @param {Object} params.record Optional. The record to check access for
|
|
16
|
+
*
|
|
17
|
+
* @returns Return the react-query result and a canAccess property which is a map of the resources and their access status { [resource: string]: boolean }
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* import { useCanAccessResources } from 'react-admin';
|
|
21
|
+
*
|
|
22
|
+
* const UserList = ({ record }) => {
|
|
23
|
+
* const { isPending, canAccess } = useCanAccessResources({
|
|
24
|
+
* action: 'read',
|
|
25
|
+
* resources: ['users.id', 'users.name', 'users.email'],
|
|
26
|
+
* record
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* if (isPending) {
|
|
30
|
+
* return null;
|
|
31
|
+
* }
|
|
32
|
+
* return (
|
|
33
|
+
* <SimpleList
|
|
34
|
+
* primaryText={record => canAccess.users.name ? record.name : ''}
|
|
35
|
+
* secondaryText={record => canAccess.users.email ? record.email : ''}
|
|
36
|
+
* tertiaryText={record => canAccess.users.id ? record.id : ''}
|
|
37
|
+
* />
|
|
38
|
+
* );
|
|
39
|
+
* };
|
|
40
|
+
*/
|
|
41
|
+
export declare const useCanAccessResources: <RecordType extends Record<string, any> = Record<string, any>, ErrorType extends Error = Error>(params: UseCanAccessResourcesOptions<RecordType>) => UseCanAccessResourcesResult<ErrorType>;
|
|
42
|
+
export interface UseCanAccessResourcesOptions<RecordType extends Record<string, any> = Record<string, any>, ErrorType extends Error = Error> extends Omit<UseQueryOptions<Record<string, boolean>, ErrorType>, 'queryKey' | 'queryFn'> {
|
|
43
|
+
resources: string[];
|
|
44
|
+
action: HintedString<'list' | 'create' | 'edit' | 'show' | 'delete'>;
|
|
45
|
+
record?: RecordType;
|
|
46
|
+
}
|
|
47
|
+
export type UseCanAccessResourcesResult<ErrorType = Error> = UseCanAccessResourcesLoadingResult | UseCanAccessResourcesLoadingErrorResult<ErrorType> | UseCanAccessResourcesRefetchErrorResult<ErrorType> | UseCanAccessResourcesSuccessResult;
|
|
48
|
+
export interface UseCanAccessResourcesLoadingResult {
|
|
49
|
+
canAccess: undefined;
|
|
50
|
+
error: null;
|
|
51
|
+
isPending: true;
|
|
52
|
+
}
|
|
53
|
+
export interface UseCanAccessResourcesLoadingErrorResult<ErrorType = Error> {
|
|
54
|
+
canAccess: undefined;
|
|
55
|
+
error: ErrorType;
|
|
56
|
+
isPending: false;
|
|
57
|
+
}
|
|
58
|
+
export interface UseCanAccessResourcesRefetchErrorResult<ErrorType = Error> {
|
|
59
|
+
canAccess: Record<string, boolean>;
|
|
60
|
+
error: ErrorType;
|
|
61
|
+
isPending: false;
|
|
62
|
+
}
|
|
63
|
+
export interface UseCanAccessResourcesSuccessResult {
|
|
64
|
+
canAccess: Record<string, boolean>;
|
|
65
|
+
error: null;
|
|
66
|
+
isPending: false;
|
|
67
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
import { useQuery } from '@tanstack/react-query';
|
|
3
|
+
import useAuthProvider from './useAuthProvider';
|
|
4
|
+
import { useRecordContext } from '../controller';
|
|
5
|
+
/**
|
|
6
|
+
* Checks whether users can access the provided resources.
|
|
7
|
+
*
|
|
8
|
+
* `useCanAccessResources` returns an object describing the state of the request:
|
|
9
|
+
*
|
|
10
|
+
* - start: { isPending: true }
|
|
11
|
+
* - success: { canAccess: Object<string, boolean>, isPending: false }
|
|
12
|
+
* - error: { error: [error from provider], isPending: false }
|
|
13
|
+
*
|
|
14
|
+
* @param {Object} params Any params you want to pass to the authProvider
|
|
15
|
+
* @param {string} params.action The action to check access for
|
|
16
|
+
* @param {string[]} params.resources The list of resources to check access for
|
|
17
|
+
* @param {Object} params.record Optional. The record to check access for
|
|
18
|
+
*
|
|
19
|
+
* @returns Return the react-query result and a canAccess property which is a map of the resources and their access status { [resource: string]: boolean }
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* import { useCanAccessResources } from 'react-admin';
|
|
23
|
+
*
|
|
24
|
+
* const UserList = ({ record }) => {
|
|
25
|
+
* const { isPending, canAccess } = useCanAccessResources({
|
|
26
|
+
* action: 'read',
|
|
27
|
+
* resources: ['users.id', 'users.name', 'users.email'],
|
|
28
|
+
* record
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* if (isPending) {
|
|
32
|
+
* return null;
|
|
33
|
+
* }
|
|
34
|
+
* return (
|
|
35
|
+
* <SimpleList
|
|
36
|
+
* primaryText={record => canAccess.users.name ? record.name : ''}
|
|
37
|
+
* secondaryText={record => canAccess.users.email ? record.email : ''}
|
|
38
|
+
* tertiaryText={record => canAccess.users.id ? record.id : ''}
|
|
39
|
+
* />
|
|
40
|
+
* );
|
|
41
|
+
* };
|
|
42
|
+
*/
|
|
43
|
+
export const useCanAccessResources = (params) => {
|
|
44
|
+
const authProvider = useAuthProvider();
|
|
45
|
+
const record = useRecordContext(params);
|
|
46
|
+
const { action, resources, ...options } = params;
|
|
47
|
+
const queryResult = useQuery({
|
|
48
|
+
queryKey: ['auth', 'canAccess', resources, action, record],
|
|
49
|
+
queryFn: async ({ signal }) => {
|
|
50
|
+
const queries = await Promise.all(resources.map(async (resource) => {
|
|
51
|
+
if (!authProvider || !authProvider.canAccess) {
|
|
52
|
+
return { canAccess: true, resource };
|
|
53
|
+
}
|
|
54
|
+
const canAccess = await authProvider.canAccess({
|
|
55
|
+
resource,
|
|
56
|
+
action,
|
|
57
|
+
record,
|
|
58
|
+
signal: authProvider.supportAbortSignal
|
|
59
|
+
? signal
|
|
60
|
+
: undefined,
|
|
61
|
+
});
|
|
62
|
+
return { canAccess, resource };
|
|
63
|
+
}));
|
|
64
|
+
const result = queries.reduce((acc, { resource, canAccess }) => {
|
|
65
|
+
acc[resource] = canAccess;
|
|
66
|
+
return acc;
|
|
67
|
+
}, {});
|
|
68
|
+
return result;
|
|
69
|
+
},
|
|
70
|
+
...options,
|
|
71
|
+
});
|
|
72
|
+
const result = useMemo(() => {
|
|
73
|
+
return {
|
|
74
|
+
canAccess: queryResult.data,
|
|
75
|
+
...queryResult,
|
|
76
|
+
};
|
|
77
|
+
}, [queryResult]);
|
|
78
|
+
const resultWithoutAuthProvider = useMemo(() => {
|
|
79
|
+
return {
|
|
80
|
+
canAccess: resources.reduce((acc, resource) => {
|
|
81
|
+
acc[resource] = true;
|
|
82
|
+
return acc;
|
|
83
|
+
}, {}),
|
|
84
|
+
isPending: false,
|
|
85
|
+
isError: false,
|
|
86
|
+
error: null,
|
|
87
|
+
};
|
|
88
|
+
}, [resources]);
|
|
89
|
+
return !authProvider || !authProvider.canAccess
|
|
90
|
+
? resultWithoutAuthProvider
|
|
91
|
+
: result;
|
|
92
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get a callback for calling the authProvider.checkAuth() method.
|
|
3
|
+
* In case of rejection, redirects to the login page, displays a notification,
|
|
4
|
+
* and throws an error.
|
|
5
|
+
*
|
|
6
|
+
* This is a low level hook. See those more specialized hooks
|
|
7
|
+
* for common authentication tasks, based on useCheckAuth.
|
|
8
|
+
*
|
|
9
|
+
* @see useAuthenticated
|
|
10
|
+
* @see useAuthState
|
|
11
|
+
*
|
|
12
|
+
* @returns {Function} checkAuth callback
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
*
|
|
16
|
+
* import { useCheckAuth } from 'react-admin';
|
|
17
|
+
*
|
|
18
|
+
* const MyProtectedPage = () => {
|
|
19
|
+
* const checkAuth = useCheckAuth();
|
|
20
|
+
* useEffect(() => {
|
|
21
|
+
* checkAuth().catch(() => {});
|
|
22
|
+
* }, []);
|
|
23
|
+
* return <p>Private content: EZAEZEZAET</p>
|
|
24
|
+
* } // tip: use useAuthenticated() hook instead
|
|
25
|
+
*
|
|
26
|
+
* const MyPage = () => {
|
|
27
|
+
* const checkAuth = useCheckAuth();
|
|
28
|
+
* const [authenticated, setAuthenticated] = useState(true); // optimistic auth
|
|
29
|
+
* useEffect(() => {
|
|
30
|
+
* checkAuth({}, false)
|
|
31
|
+
* .then(() => setAuthenticated(true))
|
|
32
|
+
* .catch(() => setAuthenticated(false));
|
|
33
|
+
* }, []);
|
|
34
|
+
* return authenticated ? <Bar /> : <BarNotAuthenticated />;
|
|
35
|
+
* } // tip: use useAuthState() hook instead
|
|
36
|
+
*/
|
|
37
|
+
export declare const useCheckAuth: () => CheckAuth;
|
|
38
|
+
/**
|
|
39
|
+
* Check if the current user is authenticated by calling authProvider.checkAuth().
|
|
40
|
+
* Logs the user out on failure.
|
|
41
|
+
*
|
|
42
|
+
* @param {Object} params The parameters to pass to the authProvider
|
|
43
|
+
* @param {boolean} logoutOnFailure Whether the user should be logged out if the authProvider fails to authenticate them. True by default.
|
|
44
|
+
* @param {string} redirectTo The login form url. Defaults to '/login'
|
|
45
|
+
*
|
|
46
|
+
* @return {Promise} Resolved to the authProvider response if the user passes the check, or rejected with an error otherwise
|
|
47
|
+
*/
|
|
48
|
+
export type CheckAuth = (params?: any, logoutOnFailure?: boolean, redirectTo?: string) => Promise<any>;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
import useAuthProvider, { defaultAuthParams } from './useAuthProvider';
|
|
3
|
+
import useLogout from './useLogout';
|
|
4
|
+
import { useNotify } from '../notification';
|
|
5
|
+
import { useBasename } from '../routing';
|
|
6
|
+
import { removeDoubleSlashes } from '../routing/useCreatePath';
|
|
7
|
+
/**
|
|
8
|
+
* Get a callback for calling the authProvider.checkAuth() method.
|
|
9
|
+
* In case of rejection, redirects to the login page, displays a notification,
|
|
10
|
+
* and throws an error.
|
|
11
|
+
*
|
|
12
|
+
* This is a low level hook. See those more specialized hooks
|
|
13
|
+
* for common authentication tasks, based on useCheckAuth.
|
|
14
|
+
*
|
|
15
|
+
* @see useAuthenticated
|
|
16
|
+
* @see useAuthState
|
|
17
|
+
*
|
|
18
|
+
* @returns {Function} checkAuth callback
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
*
|
|
22
|
+
* import { useCheckAuth } from 'react-admin';
|
|
23
|
+
*
|
|
24
|
+
* const MyProtectedPage = () => {
|
|
25
|
+
* const checkAuth = useCheckAuth();
|
|
26
|
+
* useEffect(() => {
|
|
27
|
+
* checkAuth().catch(() => {});
|
|
28
|
+
* }, []);
|
|
29
|
+
* return <p>Private content: EZAEZEZAET</p>
|
|
30
|
+
* } // tip: use useAuthenticated() hook instead
|
|
31
|
+
*
|
|
32
|
+
* const MyPage = () => {
|
|
33
|
+
* const checkAuth = useCheckAuth();
|
|
34
|
+
* const [authenticated, setAuthenticated] = useState(true); // optimistic auth
|
|
35
|
+
* useEffect(() => {
|
|
36
|
+
* checkAuth({}, false)
|
|
37
|
+
* .then(() => setAuthenticated(true))
|
|
38
|
+
* .catch(() => setAuthenticated(false));
|
|
39
|
+
* }, []);
|
|
40
|
+
* return authenticated ? <Bar /> : <BarNotAuthenticated />;
|
|
41
|
+
* } // tip: use useAuthState() hook instead
|
|
42
|
+
*/
|
|
43
|
+
export const useCheckAuth = () => {
|
|
44
|
+
const authProvider = useAuthProvider();
|
|
45
|
+
const notify = useNotify();
|
|
46
|
+
const logout = useLogout();
|
|
47
|
+
const basename = useBasename();
|
|
48
|
+
const loginUrl = removeDoubleSlashes(`${basename}/${defaultAuthParams.loginUrl}`);
|
|
49
|
+
const checkAuth = useCallback(async (params = {}, logoutOnFailure = true, redirectTo = loginUrl) => {
|
|
50
|
+
// The authProvider is optional in react-admin
|
|
51
|
+
if (!authProvider) {
|
|
52
|
+
return checkAuthWithoutAuthProvider();
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
return await authProvider.checkAuth(params);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
if (logoutOnFailure) {
|
|
59
|
+
logout({}, error && error.redirectTo != null
|
|
60
|
+
? error.redirectTo
|
|
61
|
+
: redirectTo);
|
|
62
|
+
const shouldSkipNotify = error && error.message === false;
|
|
63
|
+
!shouldSkipNotify &&
|
|
64
|
+
notify(getErrorMessage(error, "strato.auth.auth_check_error'), { type: 'error' });
|
|
65
|
+
}
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
}, [authProvider, logout, notify, loginUrl]);
|
|
69
|
+
return checkAuth;
|
|
70
|
+
};
|
|
71
|
+
const checkAuthWithoutAuthProvider = async () => undefined;
|
|
72
|
+
const getErrorMessage = (error, defaultMessage) => typeof error === 'string'
|
|
73
|
+
? error
|
|
74
|
+
: typeof error === 'undefined' || !error.message
|
|
75
|
+
? defaultMessage
|
|
76
|
+
: error.message;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { UseQueryOptions, QueryObserverResult } from '@tanstack/react-query';
|
|
2
|
+
import { UserIdentity } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Return the current user identity by calling authProvider.getIdentity() on mount
|
|
5
|
+
*
|
|
6
|
+
* The return value updates according to the call state:
|
|
7
|
+
*
|
|
8
|
+
* - mount: { isPending: true }
|
|
9
|
+
* - success: { identity, refetch: () => {}, isPending: false }
|
|
10
|
+
* - error: { error: Error, isPending: false }
|
|
11
|
+
*
|
|
12
|
+
* The implementation is left to the authProvider.
|
|
13
|
+
*
|
|
14
|
+
* @returns The current user identity. Destructure as { isPending, identity, error, refetch }.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* import { useGetIdentity, useGetOne } from 'react-admin';
|
|
18
|
+
*
|
|
19
|
+
* const PostDetail = ({ id }) => {
|
|
20
|
+
* const { data: post, isPending: postLoading } = useGetOne('posts', { id });
|
|
21
|
+
* const { identity, isPending: identityLoading } = useGetIdentity();
|
|
22
|
+
* if (postLoading || identityLoading) return <>Loading...</>;
|
|
23
|
+
* if (!post.lockedBy || post.lockedBy === identity.id) {
|
|
24
|
+
* // post isn't locked, or is locked by me
|
|
25
|
+
* return <PostEdit post={post} />
|
|
26
|
+
* } else {
|
|
27
|
+
* // post is locked by someone else and cannot be edited
|
|
28
|
+
* return <PostShow post={post} />
|
|
29
|
+
* }
|
|
30
|
+
* }
|
|
31
|
+
*/
|
|
32
|
+
export declare const useGetIdentity: <ErrorType extends Error = Error>(options?: UseGetIdentityOptions<ErrorType>) => UseGetIdentityResult<ErrorType>;
|
|
33
|
+
export interface UseGetIdentityOptions<ErrorType extends Error = Error> extends Omit<UseQueryOptions<UserIdentity, ErrorType>, 'queryKey' | 'queryFn'> {
|
|
34
|
+
onSuccess?: (data: UserIdentity) => void;
|
|
35
|
+
onError?: (err: Error) => void;
|
|
36
|
+
onSettled?: (data?: UserIdentity, error?: Error | null) => void;
|
|
37
|
+
}
|
|
38
|
+
export type UseGetIdentityResult<ErrorType = Error> = QueryObserverResult<UserIdentity, ErrorType> & {
|
|
39
|
+
identity: UserIdentity | undefined;
|
|
40
|
+
};
|
|
41
|
+
export default useGetIdentity;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { useEffect, useMemo } from 'react';
|
|
2
|
+
import { useQuery, } from '@tanstack/react-query';
|
|
3
|
+
import useAuthProvider from './useAuthProvider';
|
|
4
|
+
import { useEvent } from '../util';
|
|
5
|
+
const defaultIdentity = {
|
|
6
|
+
id: '',
|
|
7
|
+
};
|
|
8
|
+
const defaultQueryParams = {
|
|
9
|
+
staleTime: 5 * 60 * 1000,
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Return the current user identity by calling authProvider.getIdentity() on mount
|
|
13
|
+
*
|
|
14
|
+
* The return value updates according to the call state:
|
|
15
|
+
*
|
|
16
|
+
* - mount: { isPending: true }
|
|
17
|
+
* - success: { identity, refetch: () => {}, isPending: false }
|
|
18
|
+
* - error: { error: Error, isPending: false }
|
|
19
|
+
*
|
|
20
|
+
* The implementation is left to the authProvider.
|
|
21
|
+
*
|
|
22
|
+
* @returns The current user identity. Destructure as { isPending, identity, error, refetch }.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* import { useGetIdentity, useGetOne } from 'react-admin';
|
|
26
|
+
*
|
|
27
|
+
* const PostDetail = ({ id }) => {
|
|
28
|
+
* const { data: post, isPending: postLoading } = useGetOne('posts', { id });
|
|
29
|
+
* const { identity, isPending: identityLoading } = useGetIdentity();
|
|
30
|
+
* if (postLoading || identityLoading) return <>Loading...</>;
|
|
31
|
+
* if (!post.lockedBy || post.lockedBy === identity.id) {
|
|
32
|
+
* // post isn't locked, or is locked by me
|
|
33
|
+
* return <PostEdit post={post} />
|
|
34
|
+
* } else {
|
|
35
|
+
* // post is locked by someone else and cannot be edited
|
|
36
|
+
* return <PostShow post={post} />
|
|
37
|
+
* }
|
|
38
|
+
* }
|
|
39
|
+
*/
|
|
40
|
+
export const useGetIdentity = (options = defaultQueryParams) => {
|
|
41
|
+
const authProvider = useAuthProvider();
|
|
42
|
+
const { onSuccess, onError, onSettled, ...queryOptions } = options;
|
|
43
|
+
const result = useQuery({
|
|
44
|
+
queryKey: ['auth', 'getIdentity'],
|
|
45
|
+
queryFn: async ({ signal }) => {
|
|
46
|
+
if (authProvider &&
|
|
47
|
+
typeof authProvider.getIdentity === 'function') {
|
|
48
|
+
return authProvider.getIdentity({ signal });
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
return defaultIdentity;
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
...queryOptions,
|
|
55
|
+
});
|
|
56
|
+
const onSuccessEvent = useEvent(onSuccess ?? noop);
|
|
57
|
+
const onErrorEvent = useEvent(onError ?? noop);
|
|
58
|
+
const onSettledEvent = useEvent(onSettled ?? noop);
|
|
59
|
+
useEffect(() => {
|
|
60
|
+
if (result.data === undefined || result.isFetching)
|
|
61
|
+
return;
|
|
62
|
+
onSuccessEvent(result.data);
|
|
63
|
+
}, [onSuccessEvent, result.data, result.isFetching]);
|
|
64
|
+
useEffect(() => {
|
|
65
|
+
if (result.error == null || result.isFetching)
|
|
66
|
+
return;
|
|
67
|
+
onErrorEvent(result.error);
|
|
68
|
+
}, [onErrorEvent, result.error, result.isFetching]);
|
|
69
|
+
useEffect(() => {
|
|
70
|
+
if (result.status === 'pending' || result.isFetching)
|
|
71
|
+
return;
|
|
72
|
+
onSettledEvent(result.data, result.error);
|
|
73
|
+
}, [
|
|
74
|
+
onSettledEvent,
|
|
75
|
+
result.data,
|
|
76
|
+
result.error,
|
|
77
|
+
result.status,
|
|
78
|
+
result.isFetching,
|
|
79
|
+
]);
|
|
80
|
+
return useMemo(() => ({
|
|
81
|
+
...result,
|
|
82
|
+
identity: result.data,
|
|
83
|
+
}), [result]);
|
|
84
|
+
};
|
|
85
|
+
export default useGetIdentity;
|
|
86
|
+
const noop = () => { };
|