@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,34 @@
|
|
|
1
|
+
import { RaRecord } from '../../types';
|
|
2
|
+
/**
|
|
3
|
+
* Hook to read the record from a RecordContext.
|
|
4
|
+
*
|
|
5
|
+
* Must be used within a <RecordContext> such as provided by the <EditContextProvider>
|
|
6
|
+
* (e.g. as a descendent of <Edit> or <EditBase>) or within a <ShowContextProvider>
|
|
7
|
+
* (e.g. as a descendent of <Show> or <ShowBase>)
|
|
8
|
+
*
|
|
9
|
+
* @example // basic usage
|
|
10
|
+
*
|
|
11
|
+
* import { useRecordContext } from '@strato-admin/ra-core';
|
|
12
|
+
*
|
|
13
|
+
* const TitleField = () => {
|
|
14
|
+
* const record = useRecordContext();
|
|
15
|
+
* return <span>{record && record.title}</span>;
|
|
16
|
+
* };
|
|
17
|
+
*
|
|
18
|
+
* @example // allow record override via props
|
|
19
|
+
*
|
|
20
|
+
* import { useRecordContext } from '@strato-admin/ra-core';
|
|
21
|
+
*
|
|
22
|
+
* const TitleField = (props) => {
|
|
23
|
+
* const record = useRecordContext(props);
|
|
24
|
+
* return <span>{record && record.title}</span>;
|
|
25
|
+
* };
|
|
26
|
+
* render(<TextField record={record} />);
|
|
27
|
+
*
|
|
28
|
+
* @returns {RaRecord} A record object
|
|
29
|
+
*/
|
|
30
|
+
export declare const useRecordContext: <RecordType extends RaRecord | Omit<RaRecord, "id"> = RaRecord>(props?: UseRecordContextParams<RecordType>) => RecordType | undefined;
|
|
31
|
+
export interface UseRecordContextParams<RecordType extends RaRecord | Omit<RaRecord, 'id'> = RaRecord> {
|
|
32
|
+
record?: RecordType;
|
|
33
|
+
[key: string]: any;
|
|
34
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { useContext } from 'react';
|
|
2
|
+
import { RecordContext } from './RecordContext';
|
|
3
|
+
/**
|
|
4
|
+
* Hook to read the record from a RecordContext.
|
|
5
|
+
*
|
|
6
|
+
* Must be used within a <RecordContext> such as provided by the <EditContextProvider>
|
|
7
|
+
* (e.g. as a descendent of <Edit> or <EditBase>) or within a <ShowContextProvider>
|
|
8
|
+
* (e.g. as a descendent of <Show> or <ShowBase>)
|
|
9
|
+
*
|
|
10
|
+
* @example // basic usage
|
|
11
|
+
*
|
|
12
|
+
* import { useRecordContext } from '@strato-admin/ra-core';
|
|
13
|
+
*
|
|
14
|
+
* const TitleField = () => {
|
|
15
|
+
* const record = useRecordContext();
|
|
16
|
+
* return <span>{record && record.title}</span>;
|
|
17
|
+
* };
|
|
18
|
+
*
|
|
19
|
+
* @example // allow record override via props
|
|
20
|
+
*
|
|
21
|
+
* import { useRecordContext } from '@strato-admin/ra-core';
|
|
22
|
+
*
|
|
23
|
+
* const TitleField = (props) => {
|
|
24
|
+
* const record = useRecordContext(props);
|
|
25
|
+
* return <span>{record && record.title}</span>;
|
|
26
|
+
* };
|
|
27
|
+
* render(<TextField record={record} />);
|
|
28
|
+
*
|
|
29
|
+
* @returns {RaRecord} A record object
|
|
30
|
+
*/
|
|
31
|
+
export const useRecordContext = (props) => {
|
|
32
|
+
// Can't find a way to specify the RecordType when CreateContext is declared
|
|
33
|
+
// @ts-ignore
|
|
34
|
+
const context = useContext(RecordContext);
|
|
35
|
+
return (props && props.record) || context;
|
|
36
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { RaRecord, OnError, OnSuccess, TransformData, MutationMode } from '../../types';
|
|
2
|
+
import { Middleware } from './useMutationMiddlewares';
|
|
3
|
+
export interface SaveContextValue<RecordType extends RaRecord = any, MutateFunc extends (...args: any[]) => any = (...args: any[]) => any> {
|
|
4
|
+
save?: SaveHandler<RecordType>;
|
|
5
|
+
/**
|
|
6
|
+
* @deprecated. Rely on the form isSubmitting value instead
|
|
7
|
+
*/
|
|
8
|
+
saving?: boolean;
|
|
9
|
+
mutationMode?: MutationMode;
|
|
10
|
+
registerMutationMiddleware?: (callback: Middleware<MutateFunc>) => void;
|
|
11
|
+
unregisterMutationMiddleware?: (callback: Middleware<MutateFunc>) => void;
|
|
12
|
+
}
|
|
13
|
+
export type SaveHandler<RecordType> = (record: Partial<RecordType>, callbacks?: SaveHandlerCallbacks) => Promise<void | RecordType> | Record<string, string>;
|
|
14
|
+
export type SaveHandlerCallbacks = {
|
|
15
|
+
onSuccess?: OnSuccess;
|
|
16
|
+
onError?: OnError;
|
|
17
|
+
transform?: TransformData;
|
|
18
|
+
meta?: any;
|
|
19
|
+
};
|
|
20
|
+
export declare const SaveContext: import("react").Context<SaveContextValue<any, (...args: any[]) => any>>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal hook used to handle mutation middlewares.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* // We have a form creating an order for a new customer.
|
|
6
|
+
* // The form contains the customer fields in addition to the order fields
|
|
7
|
+
* // but they should be saved as a new customer resource record
|
|
8
|
+
* // and the order should only reference this new customer
|
|
9
|
+
* type Order = { id: string; reference: string };
|
|
10
|
+
* type OrderCreateFormData = { id: string; reference: string; customer: Customer };
|
|
11
|
+
* type Customer = { id: string; email: string; firstName: string; lastName: string };
|
|
12
|
+
*
|
|
13
|
+
* const CustomerForm = props => {
|
|
14
|
+
* const [createCustomer] = useCreate<Customer>();
|
|
15
|
+
* const middleware: Middleware<UseCreateResult<OrderCreateFormData>[0]> = useCallback(async (resource, params, next) => {
|
|
16
|
+
* const { data } = params;
|
|
17
|
+
* const { user, ...orderData } = data;
|
|
18
|
+
* const { data = newCustomer } = await createCustomer('customers', { data: user });
|
|
19
|
+
* const orderDataWithCustomer = { ...orderData, customerId: newCustomer.id };
|
|
20
|
+
* next(resource, { data: orderDataWithCustomer });
|
|
21
|
+
* }, [createCustomer]);
|
|
22
|
+
* useRegisterMutationMiddleware(middleware);
|
|
23
|
+
*
|
|
24
|
+
* return (
|
|
25
|
+
* <>
|
|
26
|
+
* <TextInput source="user.email" />
|
|
27
|
+
* <TextInput source="user.firstName" />
|
|
28
|
+
* <TextInput source="user.lastName" />
|
|
29
|
+
* </>
|
|
30
|
+
* );
|
|
31
|
+
* }
|
|
32
|
+
*/
|
|
33
|
+
export declare const useMutationMiddlewares: <MutateFunc extends (...args: any[]) => any = (...args: any[]) => any>() => UseMutationMiddlewaresResult<MutateFunc>;
|
|
34
|
+
export interface UseMutationMiddlewaresResult<MutateFunc extends (...args: any[]) => any = (...args: any[]) => any> {
|
|
35
|
+
registerMutationMiddleware: (callback: Middleware<MutateFunc>) => void;
|
|
36
|
+
getMutateWithMiddlewares: (mutate: MutateFunc) => (...args: Parameters<MutateFunc>) => ReturnType<MutateFunc>;
|
|
37
|
+
unregisterMutationMiddleware: (callback: Middleware<MutateFunc>) => void;
|
|
38
|
+
}
|
|
39
|
+
export type Middleware<MutateFunc = (...args: any[]) => any> = MutateFunc extends (...a: any[]) => infer R ? (...a: [...U: Parameters<MutateFunc>, next: MutateFunc]) => R : never;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { useCallback, useMemo, useRef } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Internal hook used to handle mutation middlewares.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* // We have a form creating an order for a new customer.
|
|
7
|
+
* // The form contains the customer fields in addition to the order fields
|
|
8
|
+
* // but they should be saved as a new customer resource record
|
|
9
|
+
* // and the order should only reference this new customer
|
|
10
|
+
* type Order = { id: string; reference: string };
|
|
11
|
+
* type OrderCreateFormData = { id: string; reference: string; customer: Customer };
|
|
12
|
+
* type Customer = { id: string; email: string; firstName: string; lastName: string };
|
|
13
|
+
*
|
|
14
|
+
* const CustomerForm = props => {
|
|
15
|
+
* const [createCustomer] = useCreate<Customer>();
|
|
16
|
+
* const middleware: Middleware<UseCreateResult<OrderCreateFormData>[0]> = useCallback(async (resource, params, next) => {
|
|
17
|
+
* const { data } = params;
|
|
18
|
+
* const { user, ...orderData } = data;
|
|
19
|
+
* const { data = newCustomer } = await createCustomer('customers', { data: user });
|
|
20
|
+
* const orderDataWithCustomer = { ...orderData, customerId: newCustomer.id };
|
|
21
|
+
* next(resource, { data: orderDataWithCustomer });
|
|
22
|
+
* }, [createCustomer]);
|
|
23
|
+
* useRegisterMutationMiddleware(middleware);
|
|
24
|
+
*
|
|
25
|
+
* return (
|
|
26
|
+
* <>
|
|
27
|
+
* <TextInput source="user.email" />
|
|
28
|
+
* <TextInput source="user.firstName" />
|
|
29
|
+
* <TextInput source="user.lastName" />
|
|
30
|
+
* </>
|
|
31
|
+
* );
|
|
32
|
+
* }
|
|
33
|
+
*/
|
|
34
|
+
export const useMutationMiddlewares = () => {
|
|
35
|
+
const callbacks = useRef([]);
|
|
36
|
+
const registerMutationMiddleware = useCallback((callback) => {
|
|
37
|
+
callbacks.current.push(callback);
|
|
38
|
+
}, []);
|
|
39
|
+
const unregisterMutationMiddleware = useCallback((callback) => {
|
|
40
|
+
callbacks.current = callbacks.current.filter(cb => cb !== callback);
|
|
41
|
+
}, []);
|
|
42
|
+
const getMutateWithMiddlewares = useCallback((fn) => {
|
|
43
|
+
// Stores the current callbacks in a closure to avoid losing them if the calling component is unmounted
|
|
44
|
+
const currentCallbacks = [...callbacks.current];
|
|
45
|
+
return (...args) => {
|
|
46
|
+
let index = currentCallbacks.length - 1;
|
|
47
|
+
// Called by middlewares to call the next middleware function
|
|
48
|
+
// Should take the same arguments as the original mutation function
|
|
49
|
+
const next = (...newArgs) => {
|
|
50
|
+
// Decrement the middlewares counter so that when next is called again, we
|
|
51
|
+
// call the next middleware
|
|
52
|
+
index--;
|
|
53
|
+
// If there are no more middlewares, we call the original mutation function
|
|
54
|
+
if (index >= 0) {
|
|
55
|
+
return currentCallbacks[index](...newArgs, next);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
return fn(...newArgs);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
if (currentCallbacks.length > 0) {
|
|
62
|
+
// Call the first middleware with the same args as the original mutation function
|
|
63
|
+
// with an additional next function
|
|
64
|
+
return currentCallbacks[index](...args, next);
|
|
65
|
+
}
|
|
66
|
+
return fn(...args);
|
|
67
|
+
};
|
|
68
|
+
}, []);
|
|
69
|
+
const functions = useMemo(() => ({
|
|
70
|
+
registerMutationMiddleware,
|
|
71
|
+
getMutateWithMiddlewares,
|
|
72
|
+
unregisterMutationMiddleware,
|
|
73
|
+
}), [
|
|
74
|
+
registerMutationMiddleware,
|
|
75
|
+
getMutateWithMiddlewares,
|
|
76
|
+
unregisterMutationMiddleware,
|
|
77
|
+
]);
|
|
78
|
+
return functions;
|
|
79
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { SaveContextValue } from './SaveContext';
|
|
2
|
+
/**
|
|
3
|
+
* This hook extracts the `save`, `saving` and mutationMode properties from either the `CreateContext` or `EditContext`. This ensures the `SaveContext` doesn't rerender when those two contexts have other properties changes.
|
|
4
|
+
*/
|
|
5
|
+
export declare const usePickSaveContext: <ContextType extends SaveContextValue = SaveContextValue>(context: ContextType) => SaveContextValue;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
import pick from 'lodash/pick.js';
|
|
3
|
+
/**
|
|
4
|
+
* This hook extracts the `save`, `saving` and mutationMode properties from either the `CreateContext` or `EditContext`. This ensures the `SaveContext` doesn't rerender when those two contexts have other properties changes.
|
|
5
|
+
*/
|
|
6
|
+
export const usePickSaveContext = (context) => {
|
|
7
|
+
const value = useMemo(() => pick(context, [
|
|
8
|
+
'save',
|
|
9
|
+
'saving',
|
|
10
|
+
'mutationMode',
|
|
11
|
+
'registerMutationMiddleware',
|
|
12
|
+
'unregisterMutationMiddleware',
|
|
13
|
+
]),
|
|
14
|
+
/* eslint-disable react-hooks/exhaustive-deps */
|
|
15
|
+
[
|
|
16
|
+
context.save,
|
|
17
|
+
context.saving,
|
|
18
|
+
context.mutationMode,
|
|
19
|
+
context.registerMutationMiddleware,
|
|
20
|
+
context.unregisterMutationMiddleware,
|
|
21
|
+
]
|
|
22
|
+
/* eslint-enable react-hooks/exhaustive-deps */
|
|
23
|
+
);
|
|
24
|
+
return value;
|
|
25
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Middleware } from './useMutationMiddlewares';
|
|
2
|
+
/**
|
|
3
|
+
* Internal hook that registers a middleware for the save function in the current SaveContext.
|
|
4
|
+
* @param callback The middleware function.
|
|
5
|
+
*/
|
|
6
|
+
export declare const useRegisterMutationMiddleware: <MutateFunc extends (...args: any[]) => any = (...args: any[]) => any>(callback: Middleware<MutateFunc>) => void;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import { useSaveContext } from './useSaveContext';
|
|
3
|
+
/**
|
|
4
|
+
* Internal hook that registers a middleware for the save function in the current SaveContext.
|
|
5
|
+
* @param callback The middleware function.
|
|
6
|
+
*/
|
|
7
|
+
export const useRegisterMutationMiddleware = (callback) => {
|
|
8
|
+
const { registerMutationMiddleware, unregisterMutationMiddleware } = useSaveContext();
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
if (!registerMutationMiddleware || !unregisterMutationMiddleware) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
registerMutationMiddleware(callback);
|
|
14
|
+
return () => {
|
|
15
|
+
unregisterMutationMiddleware(callback);
|
|
16
|
+
};
|
|
17
|
+
}, [callback, registerMutationMiddleware, unregisterMutationMiddleware]);
|
|
18
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SaveContextValue } from './SaveContext';
|
|
2
|
+
/**
|
|
3
|
+
* Get the save() function and its status
|
|
4
|
+
*
|
|
5
|
+
* Used in forms.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
*
|
|
9
|
+
* const {
|
|
10
|
+
* save,
|
|
11
|
+
* saving
|
|
12
|
+
* } = useSaveContext();
|
|
13
|
+
*/
|
|
14
|
+
export declare const useSaveContext: <PropsType extends SaveContextValue = SaveContextValue>(_props?: PropsType) => SaveContextValue;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { useContext } from 'react';
|
|
2
|
+
import { SaveContext } from './SaveContext';
|
|
3
|
+
/**
|
|
4
|
+
* Get the save() function and its status
|
|
5
|
+
*
|
|
6
|
+
* Used in forms.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
*
|
|
10
|
+
* const {
|
|
11
|
+
* save,
|
|
12
|
+
* saving
|
|
13
|
+
* } = useSaveContext();
|
|
14
|
+
*/
|
|
15
|
+
export const useSaveContext = (_props) => {
|
|
16
|
+
return useContext(SaveContext);
|
|
17
|
+
};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { RaRecord } from '../../types';
|
|
2
|
+
import { UseGetOneHookValue, UseGetOneOptions } from '../../dataProvider';
|
|
3
|
+
import { RedirectionSideEffect } from '../../routing';
|
|
4
|
+
/**
|
|
5
|
+
* Prepare data for the Show view.
|
|
6
|
+
*
|
|
7
|
+
* useShowController does a few things:
|
|
8
|
+
* - it grabs the id from the URL and the resource name from the ResourceContext,
|
|
9
|
+
* - it fetches the record via useGetOne,
|
|
10
|
+
* - it prepares the page title.
|
|
11
|
+
*
|
|
12
|
+
* @param {Object} props The props passed to the Show component.
|
|
13
|
+
*
|
|
14
|
+
* @return {Object} controllerProps Fetched data and callbacks for the Show view
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
*
|
|
18
|
+
* import { useShowController } from 'react-admin';
|
|
19
|
+
* import ShowView from './ShowView';
|
|
20
|
+
*
|
|
21
|
+
* const MyShow = () => {
|
|
22
|
+
* const controllerProps = useShowController();
|
|
23
|
+
* return <ShowView {...controllerProps} />;
|
|
24
|
+
* };
|
|
25
|
+
*
|
|
26
|
+
* @example // useShowController can also take its parameters from props
|
|
27
|
+
*
|
|
28
|
+
* import { useShowController } from 'react-admin';
|
|
29
|
+
* import ShowView from './ShowView';
|
|
30
|
+
*
|
|
31
|
+
* const MyShow = () => {
|
|
32
|
+
* const controllerProps = useShowController({ resource: 'posts', id: 1234 });
|
|
33
|
+
* return <ShowView {...controllerProps} />;
|
|
34
|
+
* };
|
|
35
|
+
*/
|
|
36
|
+
export declare const useShowController: <RecordType extends RaRecord = any, ErrorType = Error>(props?: ShowControllerProps<RecordType, ErrorType>) => ShowControllerResult<RecordType, ErrorType>;
|
|
37
|
+
export interface ShowControllerProps<RecordType extends RaRecord = any, ErrorType = Error> {
|
|
38
|
+
disableAuthentication?: boolean;
|
|
39
|
+
id?: RecordType['id'];
|
|
40
|
+
queryOptions?: UseGetOneOptions<RecordType, ErrorType>;
|
|
41
|
+
resource?: string;
|
|
42
|
+
redirectOnError?: RedirectionSideEffect;
|
|
43
|
+
}
|
|
44
|
+
export interface ShowControllerBaseResult<RecordType extends RaRecord = any> {
|
|
45
|
+
defaultTitle?: string;
|
|
46
|
+
isFetching: boolean;
|
|
47
|
+
isLoading: boolean;
|
|
48
|
+
isPaused?: boolean;
|
|
49
|
+
isPlaceholderData?: boolean;
|
|
50
|
+
redirectOnError?: RedirectionSideEffect;
|
|
51
|
+
resource: string;
|
|
52
|
+
record?: RecordType;
|
|
53
|
+
refetch: UseGetOneHookValue<RecordType>['refetch'];
|
|
54
|
+
}
|
|
55
|
+
export interface ShowControllerLoadingResult<RecordType extends RaRecord = any> extends ShowControllerBaseResult<RecordType> {
|
|
56
|
+
record: undefined;
|
|
57
|
+
error: null;
|
|
58
|
+
isPending: true;
|
|
59
|
+
}
|
|
60
|
+
export interface ShowControllerLoadingErrorResult<RecordType extends RaRecord = any, TError = Error> extends ShowControllerBaseResult<RecordType> {
|
|
61
|
+
record: undefined;
|
|
62
|
+
error: TError;
|
|
63
|
+
isPending: false;
|
|
64
|
+
}
|
|
65
|
+
export interface ShowControllerRefetchErrorResult<RecordType extends RaRecord = any, TError = Error> extends ShowControllerBaseResult<RecordType> {
|
|
66
|
+
record: RecordType;
|
|
67
|
+
error: TError;
|
|
68
|
+
isPending: false;
|
|
69
|
+
}
|
|
70
|
+
export interface ShowControllerSuccessResult<RecordType extends RaRecord = any> extends ShowControllerBaseResult<RecordType> {
|
|
71
|
+
record: RecordType;
|
|
72
|
+
error: null;
|
|
73
|
+
isPending: false;
|
|
74
|
+
}
|
|
75
|
+
export type ShowControllerResult<RecordType extends RaRecord = any, ErrorType = Error> = ShowControllerLoadingResult<RecordType> | ShowControllerLoadingErrorResult<RecordType, ErrorType> | ShowControllerRefetchErrorResult<RecordType, ErrorType> | ShowControllerSuccessResult<RecordType>;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { useAuthenticated, useRequireAccess } from '../../auth';
|
|
2
|
+
import { useGetOne, } from '../../dataProvider';
|
|
3
|
+
import { useTranslate } from '../../i18n';
|
|
4
|
+
import { useRedirect, useParams } from '../../routing';
|
|
5
|
+
import { useNotify } from '../../notification';
|
|
6
|
+
import { useResourceContext, useGetResourceLabel, useGetRecordRepresentation, } from '../../core';
|
|
7
|
+
/**
|
|
8
|
+
* Prepare data for the Show view.
|
|
9
|
+
*
|
|
10
|
+
* useShowController does a few things:
|
|
11
|
+
* - it grabs the id from the URL and the resource name from the ResourceContext,
|
|
12
|
+
* - it fetches the record via useGetOne,
|
|
13
|
+
* - it prepares the page title.
|
|
14
|
+
*
|
|
15
|
+
* @param {Object} props The props passed to the Show component.
|
|
16
|
+
*
|
|
17
|
+
* @return {Object} controllerProps Fetched data and callbacks for the Show view
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
*
|
|
21
|
+
* import { useShowController } from 'react-admin';
|
|
22
|
+
* import ShowView from './ShowView';
|
|
23
|
+
*
|
|
24
|
+
* const MyShow = () => {
|
|
25
|
+
* const controllerProps = useShowController();
|
|
26
|
+
* return <ShowView {...controllerProps} />;
|
|
27
|
+
* };
|
|
28
|
+
*
|
|
29
|
+
* @example // useShowController can also take its parameters from props
|
|
30
|
+
*
|
|
31
|
+
* import { useShowController } from 'react-admin';
|
|
32
|
+
* import ShowView from './ShowView';
|
|
33
|
+
*
|
|
34
|
+
* const MyShow = () => {
|
|
35
|
+
* const controllerProps = useShowController({ resource: 'posts', id: 1234 });
|
|
36
|
+
* return <ShowView {...controllerProps} />;
|
|
37
|
+
* };
|
|
38
|
+
*/
|
|
39
|
+
export const useShowController = (props = {}) => {
|
|
40
|
+
const { disableAuthentication = false, id: propsId, queryOptions = {}, redirectOnError = DefaultRedirectOnError, } = props;
|
|
41
|
+
const resource = useResourceContext(props);
|
|
42
|
+
if (!resource) {
|
|
43
|
+
throw new Error(`useShowController requires a non-empty resource prop or context`);
|
|
44
|
+
}
|
|
45
|
+
const { isPending: isPendingAuthenticated } = useAuthenticated({
|
|
46
|
+
enabled: !disableAuthentication,
|
|
47
|
+
});
|
|
48
|
+
const { isPending: isPendingCanAccess } = useRequireAccess({
|
|
49
|
+
action: 'show',
|
|
50
|
+
resource,
|
|
51
|
+
enabled: !disableAuthentication && !isPendingAuthenticated,
|
|
52
|
+
});
|
|
53
|
+
const getRecordRepresentation = useGetRecordRepresentation(resource);
|
|
54
|
+
const translate = useTranslate();
|
|
55
|
+
const notify = useNotify();
|
|
56
|
+
const redirect = useRedirect();
|
|
57
|
+
const { id: routeId } = useParams();
|
|
58
|
+
if (!routeId && !propsId) {
|
|
59
|
+
throw new Error('useShowController requires an id prop or a route with an /:id? parameter.');
|
|
60
|
+
}
|
|
61
|
+
const id = propsId != null ? propsId : routeId;
|
|
62
|
+
const { meta, ...otherQueryOptions } = queryOptions;
|
|
63
|
+
const { data: record, error, isLoading, isFetching, isPaused, isPending, isPlaceholderData, refetch, } = useGetOne(resource, { id, meta }, {
|
|
64
|
+
enabled: (!isPendingAuthenticated && !isPendingCanAccess) ||
|
|
65
|
+
disableAuthentication,
|
|
66
|
+
onError: () => {
|
|
67
|
+
notify("strato.notification.item_doesnt_exist', {
|
|
68
|
+
type: 'error',
|
|
69
|
+
});
|
|
70
|
+
redirect(redirectOnError, resource, id);
|
|
71
|
+
},
|
|
72
|
+
retry: false,
|
|
73
|
+
...otherQueryOptions,
|
|
74
|
+
});
|
|
75
|
+
// eslint-disable-next-line eqeqeq
|
|
76
|
+
if (record && record.id && record.id != id) {
|
|
77
|
+
throw new Error(`useShowController: Fetched record's id attribute (${record.id}) must match the requested 'id' (${id})`);
|
|
78
|
+
}
|
|
79
|
+
const getResourceLabel = useGetResourceLabel();
|
|
80
|
+
const recordRepresentation = getRecordRepresentation(record);
|
|
81
|
+
const defaultTitle = translate(`resources.${resource}.page.show`, {
|
|
82
|
+
id,
|
|
83
|
+
record,
|
|
84
|
+
recordRepresentation: typeof recordRepresentation === 'string'
|
|
85
|
+
? recordRepresentation
|
|
86
|
+
: '',
|
|
87
|
+
_: translate("strato.page.show', {
|
|
88
|
+
name: getResourceLabel(resource, 1),
|
|
89
|
+
id,
|
|
90
|
+
record,
|
|
91
|
+
recordRepresentation: typeof recordRepresentation === 'string'
|
|
92
|
+
? recordRepresentation
|
|
93
|
+
: '',
|
|
94
|
+
}),
|
|
95
|
+
});
|
|
96
|
+
return {
|
|
97
|
+
defaultTitle,
|
|
98
|
+
error,
|
|
99
|
+
isLoading,
|
|
100
|
+
isFetching,
|
|
101
|
+
isPaused,
|
|
102
|
+
isPending,
|
|
103
|
+
isPlaceholderData,
|
|
104
|
+
record,
|
|
105
|
+
redirectOnError,
|
|
106
|
+
refetch,
|
|
107
|
+
resource,
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
const DefaultRedirectOnError = 'list';
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { FilterPayload } from '../types';
|
|
2
|
+
interface UseFilterStateOptions {
|
|
3
|
+
filterToQuery?: (v: string) => FilterPayload;
|
|
4
|
+
permanentFilter?: FilterPayload;
|
|
5
|
+
debounceTime?: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* @typedef UseFilterStateProps
|
|
9
|
+
* @property {Object} filter: The filter object.
|
|
10
|
+
* @property {setFilter} setFilter: Update the filter with the given string
|
|
11
|
+
*/
|
|
12
|
+
interface UseFilterStateProps {
|
|
13
|
+
filter: FilterPayload;
|
|
14
|
+
setFilter: (v: string) => void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Hooks to provide filter state and setFilter which updates the query part of the filter
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
*
|
|
21
|
+
* const { filter, setFilter } = useFilter({
|
|
22
|
+
* filterToQuery: v => ({ query: v }),
|
|
23
|
+
* permanentFilter: { foo: 'bar' },
|
|
24
|
+
* debounceTime: 500,
|
|
25
|
+
* });
|
|
26
|
+
* // filter initial value:
|
|
27
|
+
* {
|
|
28
|
+
* query: '',
|
|
29
|
+
* foo: 'bar'
|
|
30
|
+
* }
|
|
31
|
+
* // after updating filter
|
|
32
|
+
* setFilter('needle');
|
|
33
|
+
* {
|
|
34
|
+
* query: 'needle',
|
|
35
|
+
* foo: 'bar'
|
|
36
|
+
* }
|
|
37
|
+
*
|
|
38
|
+
* @param {Object} option
|
|
39
|
+
* @param {Function} option.filterToQuery Function to convert the filter string to a filter object. Defaults to v => ({ q: v }).
|
|
40
|
+
* @param {Object} option.permanentFilter Permanent filter to be merged with the filter string. Defaults to {}.
|
|
41
|
+
* @param {number} option.debounceTime Time in ms between filter updates - used to debounce the search. Defaults to 500ms.
|
|
42
|
+
*
|
|
43
|
+
* @returns {UseFilterStateOptions} The filter props
|
|
44
|
+
*/
|
|
45
|
+
declare const _default: ({ filterToQuery, permanentFilter, debounceTime, }: UseFilterStateOptions) => UseFilterStateProps;
|
|
46
|
+
export default _default;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { useEffect, useRef, useCallback, useState } from 'react';
|
|
2
|
+
import debounce from 'lodash/debounce.js';
|
|
3
|
+
import isEqual from 'lodash/isEqual.js';
|
|
4
|
+
const defaultFilter = {};
|
|
5
|
+
const defaultFilterToQuery = (v) => ({ q: v });
|
|
6
|
+
/**
|
|
7
|
+
* Hooks to provide filter state and setFilter which updates the query part of the filter
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
*
|
|
11
|
+
* const { filter, setFilter } = useFilter({
|
|
12
|
+
* filterToQuery: v => ({ query: v }),
|
|
13
|
+
* permanentFilter: { foo: 'bar' },
|
|
14
|
+
* debounceTime: 500,
|
|
15
|
+
* });
|
|
16
|
+
* // filter initial value:
|
|
17
|
+
* {
|
|
18
|
+
* query: '',
|
|
19
|
+
* foo: 'bar'
|
|
20
|
+
* }
|
|
21
|
+
* // after updating filter
|
|
22
|
+
* setFilter('needle');
|
|
23
|
+
* {
|
|
24
|
+
* query: 'needle',
|
|
25
|
+
* foo: 'bar'
|
|
26
|
+
* }
|
|
27
|
+
*
|
|
28
|
+
* @param {Object} option
|
|
29
|
+
* @param {Function} option.filterToQuery Function to convert the filter string to a filter object. Defaults to v => ({ q: v }).
|
|
30
|
+
* @param {Object} option.permanentFilter Permanent filter to be merged with the filter string. Defaults to {}.
|
|
31
|
+
* @param {number} option.debounceTime Time in ms between filter updates - used to debounce the search. Defaults to 500ms.
|
|
32
|
+
*
|
|
33
|
+
* @returns {UseFilterStateOptions} The filter props
|
|
34
|
+
*/
|
|
35
|
+
export default ({ filterToQuery = defaultFilterToQuery, permanentFilter = {}, debounceTime = 500, }) => {
|
|
36
|
+
const permanentFilterProp = useRef(permanentFilter);
|
|
37
|
+
const latestValue = useRef(undefined);
|
|
38
|
+
const [filter, setFilterValue] = useState({
|
|
39
|
+
...permanentFilter,
|
|
40
|
+
...filterToQuery(''),
|
|
41
|
+
});
|
|
42
|
+
// Developers often pass an object literal as permanent filter
|
|
43
|
+
// e.g. <ReferenceInput source="book_id" reference="books" filter={{ is_published: true }}>
|
|
44
|
+
// The effect should execute again when the parent component updates the filter value,
|
|
45
|
+
// but not when the object literal describes the same values. Therefore,
|
|
46
|
+
// we use JSON.stringify(permanentFilter) in the `useEffect` and `useCallback`
|
|
47
|
+
// dependencies instead of permanentFilter.
|
|
48
|
+
const permanentFilterSignature = JSON.stringify(permanentFilter);
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
if (!isEqual(permanentFilterProp.current, permanentFilter)) {
|
|
51
|
+
permanentFilterProp.current = permanentFilter;
|
|
52
|
+
setFilterValue({
|
|
53
|
+
...permanentFilter,
|
|
54
|
+
...filterToQuery(latestValue.current || ''),
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}, [permanentFilterSignature, permanentFilterProp, filterToQuery]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
58
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
59
|
+
const setFilter = useCallback(debounce((value) => {
|
|
60
|
+
setFilterValue({
|
|
61
|
+
...permanentFilter,
|
|
62
|
+
...filterToQuery(value),
|
|
63
|
+
});
|
|
64
|
+
latestValue.current = value;
|
|
65
|
+
}, debounceTime), [permanentFilterSignature]);
|
|
66
|
+
return {
|
|
67
|
+
filter: filter ?? defaultFilter,
|
|
68
|
+
setFilter,
|
|
69
|
+
};
|
|
70
|
+
};
|