@refinedev/antd 5.0.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/CHANGELOG.md +1689 -0
- package/README.md +285 -0
- package/dist/components/breadcrumb/index.d.ts +6 -0
- package/dist/components/breadcrumb/index.d.ts.map +1 -0
- package/dist/components/buttons/clone/index.d.ts +11 -0
- package/dist/components/buttons/clone/index.d.ts.map +1 -0
- package/dist/components/buttons/create/index.d.ts +11 -0
- package/dist/components/buttons/create/index.d.ts.map +1 -0
- package/dist/components/buttons/delete/index.d.ts +10 -0
- package/dist/components/buttons/delete/index.d.ts.map +1 -0
- package/dist/components/buttons/edit/index.d.ts +11 -0
- package/dist/components/buttons/edit/index.d.ts.map +1 -0
- package/dist/components/buttons/export/index.d.ts +10 -0
- package/dist/components/buttons/export/index.d.ts.map +1 -0
- package/dist/components/buttons/import/index.d.ts +11 -0
- package/dist/components/buttons/import/index.d.ts.map +1 -0
- package/dist/components/buttons/index.d.ts +12 -0
- package/dist/components/buttons/index.d.ts.map +1 -0
- package/dist/components/buttons/list/index.d.ts +11 -0
- package/dist/components/buttons/list/index.d.ts.map +1 -0
- package/dist/components/buttons/refresh/index.d.ts +10 -0
- package/dist/components/buttons/refresh/index.d.ts.map +1 -0
- package/dist/components/buttons/save/index.d.ts +10 -0
- package/dist/components/buttons/save/index.d.ts.map +1 -0
- package/dist/components/buttons/show/index.d.ts +11 -0
- package/dist/components/buttons/show/index.d.ts.map +1 -0
- package/dist/components/buttons/types.d.ts +24 -0
- package/dist/components/buttons/types.d.ts.map +1 -0
- package/dist/components/crud/create/index.d.ts +10 -0
- package/dist/components/crud/create/index.d.ts.map +1 -0
- package/dist/components/crud/edit/index.d.ts +10 -0
- package/dist/components/crud/edit/index.d.ts.map +1 -0
- package/dist/components/crud/index.d.ts +6 -0
- package/dist/components/crud/index.d.ts.map +1 -0
- package/dist/components/crud/list/index.d.ts +10 -0
- package/dist/components/crud/list/index.d.ts.map +1 -0
- package/dist/components/crud/show/index.d.ts +10 -0
- package/dist/components/crud/show/index.d.ts.map +1 -0
- package/dist/components/crud/types.d.ts +10 -0
- package/dist/components/crud/types.d.ts.map +1 -0
- package/dist/components/fields/boolean/index.d.ts +9 -0
- package/dist/components/fields/boolean/index.d.ts.map +1 -0
- package/dist/components/fields/date/index.d.ts +9 -0
- package/dist/components/fields/date/index.d.ts.map +1 -0
- package/dist/components/fields/email/index.d.ts +10 -0
- package/dist/components/fields/email/index.d.ts.map +1 -0
- package/dist/components/fields/file/index.d.ts +9 -0
- package/dist/components/fields/file/index.d.ts.map +1 -0
- package/dist/components/fields/image/index.d.ts +9 -0
- package/dist/components/fields/image/index.d.ts.map +1 -0
- package/dist/components/fields/index.d.ts +12 -0
- package/dist/components/fields/index.d.ts.map +1 -0
- package/dist/components/fields/markdown/index.d.ts +9 -0
- package/dist/components/fields/markdown/index.d.ts.map +1 -0
- package/dist/components/fields/number/index.d.ts +9 -0
- package/dist/components/fields/number/index.d.ts.map +1 -0
- package/dist/components/fields/tag/index.d.ts +9 -0
- package/dist/components/fields/tag/index.d.ts.map +1 -0
- package/dist/components/fields/text/index.d.ts +9 -0
- package/dist/components/fields/text/index.d.ts.map +1 -0
- package/dist/components/fields/types.d.ts +20 -0
- package/dist/components/fields/types.d.ts.map +1 -0
- package/dist/components/fields/url/index.d.ts +10 -0
- package/dist/components/fields/url/index.d.ts.map +1 -0
- package/dist/components/index.d.ts +13 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/layout/header/index.d.ts +4 -0
- package/dist/components/layout/header/index.d.ts.map +1 -0
- package/dist/components/layout/index.d.ts +4 -0
- package/dist/components/layout/index.d.ts.map +1 -0
- package/dist/components/layout/sider/index.d.ts +4 -0
- package/dist/components/layout/sider/index.d.ts.map +1 -0
- package/dist/components/layout/sider/styles.d.ts +3 -0
- package/dist/components/layout/sider/styles.d.ts.map +1 -0
- package/dist/components/layout/title/index.d.ts +4 -0
- package/dist/components/layout/title/index.d.ts.map +1 -0
- package/dist/components/layout/types.d.ts +3 -0
- package/dist/components/layout/types.d.ts.map +1 -0
- package/dist/components/pageHeader/index.d.ts +5 -0
- package/dist/components/pageHeader/index.d.ts.map +1 -0
- package/dist/components/pages/auth/components/forgotPassword/index.d.ts +12 -0
- package/dist/components/pages/auth/components/forgotPassword/index.d.ts.map +1 -0
- package/dist/components/pages/auth/components/index.d.ts +5 -0
- package/dist/components/pages/auth/components/index.d.ts.map +1 -0
- package/dist/components/pages/auth/components/login/index.d.ts +12 -0
- package/dist/components/pages/auth/components/login/index.d.ts.map +1 -0
- package/dist/components/pages/auth/components/register/index.d.ts +12 -0
- package/dist/components/pages/auth/components/register/index.d.ts.map +1 -0
- package/dist/components/pages/auth/components/styles.d.ts +5 -0
- package/dist/components/pages/auth/components/styles.d.ts.map +1 -0
- package/dist/components/pages/auth/components/updatePassword/index.d.ts +12 -0
- package/dist/components/pages/auth/components/updatePassword/index.d.ts.map +1 -0
- package/dist/components/pages/auth/index.d.ts +11 -0
- package/dist/components/pages/auth/index.d.ts.map +1 -0
- package/dist/components/pages/error/index.d.ts +10 -0
- package/dist/components/pages/error/index.d.ts.map +1 -0
- package/dist/components/pages/index.d.ts +7 -0
- package/dist/components/pages/index.d.ts.map +1 -0
- package/dist/components/pages/login/index.d.ts +15 -0
- package/dist/components/pages/login/index.d.ts.map +1 -0
- package/dist/components/pages/login/styles.d.ts +6 -0
- package/dist/components/pages/login/styles.d.ts.map +1 -0
- package/dist/components/pages/ready/index.d.ts +10 -0
- package/dist/components/pages/ready/index.d.ts.map +1 -0
- package/dist/components/pages/welcome/index.d.ts +6 -0
- package/dist/components/pages/welcome/index.d.ts.map +1 -0
- package/dist/components/table/components/filterDropdown/index.d.ts +13 -0
- package/dist/components/table/components/filterDropdown/index.d.ts.map +1 -0
- package/dist/components/table/components/index.d.ts +2 -0
- package/dist/components/table/components/index.d.ts.map +1 -0
- package/dist/components/table/index.d.ts +2 -0
- package/dist/components/table/index.d.ts.map +1 -0
- package/dist/components/undoableNotification/index.d.ts +10 -0
- package/dist/components/undoableNotification/index.d.ts.map +1 -0
- package/dist/definitions/index.d.ts +3 -0
- package/dist/definitions/index.d.ts.map +1 -0
- package/dist/definitions/table/index.d.ts +10 -0
- package/dist/definitions/table/index.d.ts.map +1 -0
- package/dist/definitions/upload/index.d.ts +4 -0
- package/dist/definitions/upload/index.d.ts.map +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/hooks/fields/index.d.ts +4 -0
- package/dist/hooks/fields/index.d.ts.map +1 -0
- package/dist/hooks/fields/useCheckboxGroup/index.d.ts +24 -0
- package/dist/hooks/fields/useCheckboxGroup/index.d.ts.map +1 -0
- package/dist/hooks/fields/useRadioGroup/index.d.ts +24 -0
- package/dist/hooks/fields/useRadioGroup/index.d.ts.map +1 -0
- package/dist/hooks/fields/useSelect/index.d.ts +21 -0
- package/dist/hooks/fields/useSelect/index.d.ts.map +1 -0
- package/dist/hooks/form/index.d.ts +5 -0
- package/dist/hooks/form/index.d.ts.map +1 -0
- package/dist/hooks/form/useDrawerForm/index.d.ts +2 -0
- package/dist/hooks/form/useDrawerForm/index.d.ts.map +1 -0
- package/dist/hooks/form/useDrawerForm/useDrawerForm.d.ts +33 -0
- package/dist/hooks/form/useDrawerForm/useDrawerForm.d.ts.map +1 -0
- package/dist/hooks/form/useForm.d.ts +31 -0
- package/dist/hooks/form/useForm.d.ts.map +1 -0
- package/dist/hooks/form/useModalForm/index.d.ts +2 -0
- package/dist/hooks/form/useModalForm/index.d.ts.map +1 -0
- package/dist/hooks/form/useModalForm/useModalForm.d.ts +39 -0
- package/dist/hooks/form/useModalForm/useModalForm.d.ts.map +1 -0
- package/dist/hooks/form/useStepsForm/index.d.ts +2 -0
- package/dist/hooks/form/useStepsForm/index.d.ts.map +1 -0
- package/dist/hooks/form/useStepsForm/useStepsForm.d.ts +35 -0
- package/dist/hooks/form/useStepsForm/useStepsForm.d.ts.map +1 -0
- package/dist/hooks/import/index.d.ts +18 -0
- package/dist/hooks/import/index.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/list/index.d.ts +2 -0
- package/dist/hooks/list/index.d.ts.map +1 -0
- package/dist/hooks/list/useSimpleList/index.d.ts +2 -0
- package/dist/hooks/list/useSimpleList/index.d.ts.map +1 -0
- package/dist/hooks/list/useSimpleList/useSimpleList.d.ts +23 -0
- package/dist/hooks/list/useSimpleList/useSimpleList.d.ts.map +1 -0
- package/dist/hooks/modal/index.d.ts +2 -0
- package/dist/hooks/modal/index.d.ts.map +1 -0
- package/dist/hooks/modal/useModal/index.d.ts +18 -0
- package/dist/hooks/modal/useModal/index.d.ts.map +1 -0
- package/dist/hooks/table/index.d.ts +3 -0
- package/dist/hooks/table/index.d.ts.map +1 -0
- package/dist/hooks/table/useEditableTable/index.d.ts +2 -0
- package/dist/hooks/table/useEditableTable/index.d.ts.map +1 -0
- package/dist/hooks/table/useEditableTable/useEditableTable.d.ts +28 -0
- package/dist/hooks/table/useEditableTable/useEditableTable.d.ts.map +1 -0
- package/dist/hooks/table/useTable/index.d.ts +2 -0
- package/dist/hooks/table/useTable/index.d.ts.map +1 -0
- package/dist/hooks/table/useTable/paginationLink.d.ts +8 -0
- package/dist/hooks/table/useTable/paginationLink.d.ts.map +1 -0
- package/dist/hooks/table/useTable/useTable.d.ts +18 -0
- package/dist/hooks/table/useTable/useTable.d.ts.map +1 -0
- package/dist/hooks/useFileUploadState/index.d.ts +7 -0
- package/dist/hooks/useFileUploadState/index.d.ts.map +1 -0
- package/dist/iife/index.js +56 -0
- package/dist/iife/index.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/field.d.ts +4 -0
- package/dist/interfaces/field.d.ts.map +1 -0
- package/dist/interfaces/index.d.ts +19 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/upload.d.ts +10 -0
- package/dist/interfaces/upload.d.ts.map +1 -0
- package/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/notificationProvider/index.d.ts +3 -0
- package/dist/providers/notificationProvider/index.d.ts.map +1 -0
- package/dist/reset.css +254 -0
- package/package.json +72 -0
- package/refine.config.js +604 -0
- package/src/assets/styles/reset.css +254 -0
- package/src/components/breadcrumb/index.tsx +70 -0
- package/src/components/buttons/clone/index.tsx +104 -0
- package/src/components/buttons/create/index.tsx +103 -0
- package/src/components/buttons/delete/index.tsx +122 -0
- package/src/components/buttons/edit/index.tsx +105 -0
- package/src/components/buttons/export/index.tsx +32 -0
- package/src/components/buttons/import/index.tsx +36 -0
- package/src/components/buttons/index.ts +11 -0
- package/src/components/buttons/list/index.tsx +122 -0
- package/src/components/buttons/refresh/index.tsx +61 -0
- package/src/components/buttons/save/index.tsx +32 -0
- package/src/components/buttons/show/index.tsx +104 -0
- package/src/components/buttons/types.ts +44 -0
- package/src/components/crud/create/index.tsx +135 -0
- package/src/components/crud/edit/index.tsx +221 -0
- package/src/components/crud/index.ts +6 -0
- package/src/components/crud/list/index.tsx +105 -0
- package/src/components/crud/show/index.tsx +215 -0
- package/src/components/crud/types.ts +63 -0
- package/src/components/fields/boolean/index.tsx +26 -0
- package/src/components/fields/date/index.tsx +33 -0
- package/src/components/fields/email/index.tsx +20 -0
- package/src/components/fields/file/index.tsx +21 -0
- package/src/components/fields/image/index.tsx +17 -0
- package/src/components/fields/index.ts +11 -0
- package/src/components/fields/markdown/index.tsx +16 -0
- package/src/components/fields/number/index.tsx +36 -0
- package/src/components/fields/tag/index.tsx +13 -0
- package/src/components/fields/text/index.tsx +15 -0
- package/src/components/fields/types.ts +49 -0
- package/src/components/fields/url/index.tsx +24 -0
- package/src/components/index.ts +14 -0
- package/src/components/layout/header/index.tsx +37 -0
- package/src/components/layout/index.tsx +41 -0
- package/src/components/layout/sider/index.tsx +261 -0
- package/src/components/layout/sider/styles.ts +9 -0
- package/src/components/layout/title/index.tsx +48 -0
- package/src/components/layout/types.ts +11 -0
- package/src/components/pageHeader/index.tsx +52 -0
- package/src/components/pages/auth/components/forgotPassword/index.tsx +167 -0
- package/src/components/pages/auth/components/index.tsx +4 -0
- package/src/components/pages/auth/components/login/index.tsx +239 -0
- package/src/components/pages/auth/components/register/index.tsx +210 -0
- package/src/components/pages/auth/components/styles.ts +23 -0
- package/src/components/pages/auth/components/updatePassword/index.tsx +158 -0
- package/src/components/pages/auth/index.tsx +35 -0
- package/src/components/pages/error/index.tsx +77 -0
- package/src/components/pages/index.tsx +6 -0
- package/src/components/pages/login/index.tsx +172 -0
- package/src/components/pages/login/styles.ts +25 -0
- package/src/components/pages/ready/index.tsx +96 -0
- package/src/components/pages/welcome/index.tsx +87 -0
- package/src/components/table/components/filterDropdown/index.tsx +112 -0
- package/src/components/table/components/index.ts +1 -0
- package/src/components/table/index.ts +1 -0
- package/src/components/undoableNotification/index.tsx +46 -0
- package/src/definitions/index.ts +2 -0
- package/src/definitions/table/index.ts +113 -0
- package/src/definitions/upload/index.ts +29 -0
- package/src/hooks/fields/index.ts +3 -0
- package/src/hooks/fields/useCheckboxGroup/index.ts +85 -0
- package/src/hooks/fields/useRadioGroup/index.ts +85 -0
- package/src/hooks/fields/useSelect/index.ts +47 -0
- package/src/hooks/form/index.ts +17 -0
- package/src/hooks/form/useDrawerForm/index.ts +6 -0
- package/src/hooks/form/useDrawerForm/useDrawerForm.ts +241 -0
- package/src/hooks/form/useForm.ts +168 -0
- package/src/hooks/form/useModalForm/index.ts +5 -0
- package/src/hooks/form/useModalForm/useModalForm.ts +286 -0
- package/src/hooks/form/useStepsForm/index.ts +5 -0
- package/src/hooks/form/useStepsForm/useStepsForm.ts +91 -0
- package/src/hooks/import/index.tsx +134 -0
- package/src/hooks/index.ts +7 -0
- package/src/hooks/list/index.ts +1 -0
- package/src/hooks/list/useSimpleList/index.ts +1 -0
- package/src/hooks/list/useSimpleList/useSimpleList.ts +229 -0
- package/src/hooks/modal/index.ts +1 -0
- package/src/hooks/modal/useModal/index.tsx +43 -0
- package/src/hooks/table/index.ts +2 -0
- package/src/hooks/table/useEditableTable/index.ts +1 -0
- package/src/hooks/table/useEditableTable/useEditableTable.ts +87 -0
- package/src/hooks/table/useTable/index.ts +1 -0
- package/src/hooks/table/useTable/paginationLink.tsx +27 -0
- package/src/hooks/table/useTable/useTable.ts +267 -0
- package/src/hooks/useFileUploadState/index.ts +34 -0
- package/src/index.tsx +11 -0
- package/src/interfaces/field.ts +3 -0
- package/src/interfaces/index.ts +23 -0
- package/src/interfaces/upload.ts +9 -0
- package/src/providers/index.ts +1 -0
- package/src/providers/notificationProvider/index.tsx +41 -0
- package/src/types/index.d.ts +4 -0
- package/src/types/sunflower.d.ts +86 -0
- package/tsconfig.json +28 -0
@@ -0,0 +1,221 @@
|
|
1
|
+
import React from "react";
|
2
|
+
|
3
|
+
import { Card, Space, Spin } from "antd";
|
4
|
+
import {
|
5
|
+
useMutationMode,
|
6
|
+
useNavigation,
|
7
|
+
useTranslate,
|
8
|
+
userFriendlyResourceName,
|
9
|
+
useRefineContext,
|
10
|
+
useRouterType,
|
11
|
+
useBack,
|
12
|
+
useResource,
|
13
|
+
useGo,
|
14
|
+
useToPath,
|
15
|
+
} from "@refinedev/core";
|
16
|
+
|
17
|
+
import {
|
18
|
+
DeleteButton,
|
19
|
+
RefreshButton,
|
20
|
+
ListButton,
|
21
|
+
SaveButton,
|
22
|
+
Breadcrumb,
|
23
|
+
PageHeader,
|
24
|
+
} from "@components";
|
25
|
+
import { EditProps } from "../types";
|
26
|
+
|
27
|
+
/**
|
28
|
+
* `<Edit>` provides us a layout for displaying the page.
|
29
|
+
* It does not contain any logic but adds extra functionalities like a refresh button.
|
30
|
+
*
|
31
|
+
* @see {@link https://refine.dev/docs/ui-frameworks/antd/components/basic-views/edit} for more details.
|
32
|
+
*/
|
33
|
+
export const Edit: React.FC<EditProps> = ({
|
34
|
+
title,
|
35
|
+
saveButtonProps,
|
36
|
+
mutationMode: mutationModeProp,
|
37
|
+
recordItemId,
|
38
|
+
children,
|
39
|
+
deleteButtonProps,
|
40
|
+
canDelete,
|
41
|
+
resource: resourceFromProps,
|
42
|
+
isLoading = false,
|
43
|
+
dataProviderName,
|
44
|
+
breadcrumb: breadcrumbFromProps,
|
45
|
+
wrapperProps,
|
46
|
+
headerProps,
|
47
|
+
contentProps,
|
48
|
+
headerButtonProps,
|
49
|
+
headerButtons,
|
50
|
+
footerButtonProps,
|
51
|
+
footerButtons,
|
52
|
+
goBack: goBackFromProps,
|
53
|
+
}) => {
|
54
|
+
const translate = useTranslate();
|
55
|
+
const { options: { breadcrumb: globalBreadcrumb } = {} } =
|
56
|
+
useRefineContext();
|
57
|
+
const { mutationMode: mutationModeContext } = useMutationMode();
|
58
|
+
const mutationMode = mutationModeProp ?? mutationModeContext;
|
59
|
+
|
60
|
+
const routerType = useRouterType();
|
61
|
+
const back = useBack();
|
62
|
+
const go = useGo();
|
63
|
+
const { goBack, list: legacyGoList } = useNavigation();
|
64
|
+
|
65
|
+
const {
|
66
|
+
resource,
|
67
|
+
action,
|
68
|
+
id: idFromParams,
|
69
|
+
} = useResource(resourceFromProps);
|
70
|
+
|
71
|
+
const goListPath = useToPath({
|
72
|
+
resource,
|
73
|
+
action: "list",
|
74
|
+
});
|
75
|
+
|
76
|
+
const id = recordItemId ?? idFromParams;
|
77
|
+
|
78
|
+
const breadcrumb =
|
79
|
+
typeof breadcrumbFromProps === "undefined"
|
80
|
+
? globalBreadcrumb
|
81
|
+
: breadcrumbFromProps;
|
82
|
+
|
83
|
+
const isDeleteButtonVisible =
|
84
|
+
canDelete ??
|
85
|
+
((resource?.meta?.canDelete ?? resource?.canDelete) ||
|
86
|
+
deleteButtonProps);
|
87
|
+
|
88
|
+
const defaultHeaderButtons = (
|
89
|
+
<>
|
90
|
+
{!recordItemId && (
|
91
|
+
<ListButton
|
92
|
+
{...(isLoading ? { disabled: true } : {})}
|
93
|
+
resource={
|
94
|
+
routerType === "legacy"
|
95
|
+
? resource?.route
|
96
|
+
: resource?.identifier ?? resource?.name
|
97
|
+
}
|
98
|
+
/>
|
99
|
+
)}
|
100
|
+
<RefreshButton
|
101
|
+
{...(isLoading ? { disabled: true } : {})}
|
102
|
+
resource={
|
103
|
+
routerType === "legacy"
|
104
|
+
? resource?.route
|
105
|
+
: resource?.identifier ?? resource?.name
|
106
|
+
}
|
107
|
+
recordItemId={id}
|
108
|
+
dataProviderName={dataProviderName}
|
109
|
+
/>
|
110
|
+
</>
|
111
|
+
);
|
112
|
+
|
113
|
+
const defaultFooterButtons = (
|
114
|
+
<>
|
115
|
+
{isDeleteButtonVisible && (
|
116
|
+
<DeleteButton
|
117
|
+
{...(isLoading ? { disabled: true } : {})}
|
118
|
+
resource={
|
119
|
+
routerType === "legacy"
|
120
|
+
? resource?.route
|
121
|
+
: resource?.identifier ?? resource?.name
|
122
|
+
}
|
123
|
+
mutationMode={mutationMode}
|
124
|
+
onSuccess={() => {
|
125
|
+
if (routerType === "legacy") {
|
126
|
+
legacyGoList(
|
127
|
+
resource?.route ?? resource?.name ?? "",
|
128
|
+
);
|
129
|
+
} else {
|
130
|
+
go({ to: goListPath });
|
131
|
+
}
|
132
|
+
}}
|
133
|
+
recordItemId={id}
|
134
|
+
dataProviderName={dataProviderName}
|
135
|
+
{...deleteButtonProps}
|
136
|
+
/>
|
137
|
+
)}
|
138
|
+
<SaveButton
|
139
|
+
{...(isLoading ? { disabled: true } : {})}
|
140
|
+
{...saveButtonProps}
|
141
|
+
/>
|
142
|
+
</>
|
143
|
+
);
|
144
|
+
|
145
|
+
return (
|
146
|
+
<div {...(wrapperProps ?? {})}>
|
147
|
+
<PageHeader
|
148
|
+
ghost={false}
|
149
|
+
backIcon={goBackFromProps}
|
150
|
+
onBack={
|
151
|
+
action !== "list" && typeof action !== "undefined"
|
152
|
+
? routerType === "legacy"
|
153
|
+
? goBack
|
154
|
+
: back
|
155
|
+
: undefined
|
156
|
+
}
|
157
|
+
title={
|
158
|
+
title ??
|
159
|
+
translate(
|
160
|
+
`${resource?.name}.titles.edit`,
|
161
|
+
`Edit ${userFriendlyResourceName(
|
162
|
+
resource?.meta?.label ??
|
163
|
+
resource?.options?.label ??
|
164
|
+
resource?.label ??
|
165
|
+
resource?.name,
|
166
|
+
"singular",
|
167
|
+
)}`,
|
168
|
+
)
|
169
|
+
}
|
170
|
+
extra={
|
171
|
+
<Space wrap {...(headerButtonProps ?? {})}>
|
172
|
+
{headerButtons
|
173
|
+
? typeof headerButtons === "function"
|
174
|
+
? headerButtons({
|
175
|
+
defaultButtons: defaultHeaderButtons,
|
176
|
+
})
|
177
|
+
: headerButtons
|
178
|
+
: defaultHeaderButtons}
|
179
|
+
</Space>
|
180
|
+
}
|
181
|
+
breadcrumb={
|
182
|
+
typeof breadcrumb !== "undefined" ? (
|
183
|
+
<>{breadcrumb}</> ?? undefined
|
184
|
+
) : (
|
185
|
+
<Breadcrumb />
|
186
|
+
)
|
187
|
+
}
|
188
|
+
{...(headerProps ?? {})}
|
189
|
+
>
|
190
|
+
<Spin spinning={isLoading}>
|
191
|
+
<Card
|
192
|
+
bordered={false}
|
193
|
+
actions={[
|
194
|
+
<Space
|
195
|
+
key="footer-buttons"
|
196
|
+
wrap
|
197
|
+
style={{
|
198
|
+
float: "right",
|
199
|
+
marginRight: 24,
|
200
|
+
}}
|
201
|
+
{...(footerButtonProps ?? {})}
|
202
|
+
>
|
203
|
+
{footerButtons
|
204
|
+
? typeof footerButtons === "function"
|
205
|
+
? footerButtons({
|
206
|
+
defaultButtons:
|
207
|
+
defaultFooterButtons,
|
208
|
+
})
|
209
|
+
: footerButtons
|
210
|
+
: defaultFooterButtons}
|
211
|
+
</Space>,
|
212
|
+
]}
|
213
|
+
{...(contentProps ?? {})}
|
214
|
+
>
|
215
|
+
{children}
|
216
|
+
</Card>
|
217
|
+
</Spin>
|
218
|
+
</PageHeader>
|
219
|
+
</div>
|
220
|
+
);
|
221
|
+
};
|
@@ -0,0 +1,105 @@
|
|
1
|
+
import React from "react";
|
2
|
+
import { Space } from "antd";
|
3
|
+
import {
|
4
|
+
useTranslate,
|
5
|
+
userFriendlyResourceName,
|
6
|
+
useRefineContext,
|
7
|
+
useRouterType,
|
8
|
+
useResource,
|
9
|
+
} from "@refinedev/core";
|
10
|
+
|
11
|
+
import { Breadcrumb, CreateButton, PageHeader } from "@components";
|
12
|
+
import { ListProps } from "../types";
|
13
|
+
|
14
|
+
/**
|
15
|
+
* `<List>` provides us a layout for displaying the page.
|
16
|
+
* It does not contain any logic but adds extra functionalities like a refresh button.
|
17
|
+
*
|
18
|
+
* @see {@link https://refine.dev/docs/ui-frameworks/antd/components/basic-views/list} for more details.
|
19
|
+
*/
|
20
|
+
export const List: React.FC<ListProps> = ({
|
21
|
+
canCreate,
|
22
|
+
title,
|
23
|
+
children,
|
24
|
+
createButtonProps,
|
25
|
+
resource: resourceFromProps,
|
26
|
+
wrapperProps,
|
27
|
+
contentProps,
|
28
|
+
headerProps,
|
29
|
+
breadcrumb: breadcrumbFromProps,
|
30
|
+
headerButtonProps,
|
31
|
+
headerButtons,
|
32
|
+
}) => {
|
33
|
+
const translate = useTranslate();
|
34
|
+
const { options: { breadcrumb: globalBreadcrumb } = {} } =
|
35
|
+
useRefineContext();
|
36
|
+
|
37
|
+
const routerType = useRouterType();
|
38
|
+
|
39
|
+
const { resource } = useResource(resourceFromProps);
|
40
|
+
|
41
|
+
const isCreateButtonVisible =
|
42
|
+
canCreate ??
|
43
|
+
((resource?.canCreate ?? !!resource?.create) || createButtonProps);
|
44
|
+
|
45
|
+
const breadcrumb =
|
46
|
+
typeof breadcrumbFromProps === "undefined"
|
47
|
+
? globalBreadcrumb
|
48
|
+
: breadcrumbFromProps;
|
49
|
+
|
50
|
+
const defaultExtra = isCreateButtonVisible ? (
|
51
|
+
<CreateButton
|
52
|
+
size="middle"
|
53
|
+
resource={
|
54
|
+
routerType === "legacy"
|
55
|
+
? resource?.route
|
56
|
+
: resource?.identifier ?? resource?.name
|
57
|
+
}
|
58
|
+
{...createButtonProps}
|
59
|
+
/>
|
60
|
+
) : null;
|
61
|
+
|
62
|
+
return (
|
63
|
+
<div {...(wrapperProps ?? {})}>
|
64
|
+
<PageHeader
|
65
|
+
ghost={false}
|
66
|
+
title={
|
67
|
+
title ??
|
68
|
+
translate(
|
69
|
+
`${resource?.name}.titles.list`,
|
70
|
+
userFriendlyResourceName(
|
71
|
+
resource?.meta?.label ??
|
72
|
+
resource?.options?.label ??
|
73
|
+
resource?.label ??
|
74
|
+
resource?.name,
|
75
|
+
"plural",
|
76
|
+
),
|
77
|
+
)
|
78
|
+
}
|
79
|
+
extra={
|
80
|
+
headerButtons ? (
|
81
|
+
<Space wrap {...headerButtonProps}>
|
82
|
+
{typeof headerButtons === "function"
|
83
|
+
? headerButtons({
|
84
|
+
defaultButtons: defaultExtra,
|
85
|
+
})
|
86
|
+
: headerButtons}
|
87
|
+
</Space>
|
88
|
+
) : (
|
89
|
+
defaultExtra
|
90
|
+
)
|
91
|
+
}
|
92
|
+
breadcrumb={
|
93
|
+
typeof breadcrumb !== "undefined" ? (
|
94
|
+
<>{breadcrumb}</> ?? undefined
|
95
|
+
) : (
|
96
|
+
<Breadcrumb />
|
97
|
+
)
|
98
|
+
}
|
99
|
+
{...(headerProps ?? {})}
|
100
|
+
>
|
101
|
+
<div {...(contentProps ?? {})}>{children}</div>
|
102
|
+
</PageHeader>
|
103
|
+
</div>
|
104
|
+
);
|
105
|
+
};
|
@@ -0,0 +1,215 @@
|
|
1
|
+
import React from "react";
|
2
|
+
import { Card, Space, Spin } from "antd";
|
3
|
+
import {
|
4
|
+
useNavigation,
|
5
|
+
useTranslate,
|
6
|
+
userFriendlyResourceName,
|
7
|
+
useRefineContext,
|
8
|
+
useResource,
|
9
|
+
useToPath,
|
10
|
+
useRouterType,
|
11
|
+
useBack,
|
12
|
+
useGo,
|
13
|
+
} from "@refinedev/core";
|
14
|
+
|
15
|
+
import {
|
16
|
+
EditButton,
|
17
|
+
DeleteButton,
|
18
|
+
RefreshButton,
|
19
|
+
ListButton,
|
20
|
+
Breadcrumb,
|
21
|
+
PageHeader,
|
22
|
+
} from "@components";
|
23
|
+
import { ShowProps } from "../types";
|
24
|
+
|
25
|
+
/**
|
26
|
+
* `<Show>` provides us a layout for displaying the page.
|
27
|
+
* It does not contain any logic but adds extra functionalities like a refresh button.
|
28
|
+
*
|
29
|
+
* @see {@link https://refine.dev/docs/ui-frameworks/antd/components/basic-views/show} for more details.
|
30
|
+
*/
|
31
|
+
export const Show: React.FC<ShowProps> = ({
|
32
|
+
title,
|
33
|
+
canEdit,
|
34
|
+
canDelete,
|
35
|
+
isLoading = false,
|
36
|
+
children,
|
37
|
+
resource: resourceFromProps,
|
38
|
+
recordItemId,
|
39
|
+
dataProviderName,
|
40
|
+
breadcrumb: breadcrumbFromProps,
|
41
|
+
contentProps,
|
42
|
+
headerProps,
|
43
|
+
wrapperProps,
|
44
|
+
headerButtons,
|
45
|
+
footerButtons,
|
46
|
+
footerButtonProps,
|
47
|
+
headerButtonProps,
|
48
|
+
goBack: goBackFromProps,
|
49
|
+
}) => {
|
50
|
+
const translate = useTranslate();
|
51
|
+
const { options: { breadcrumb: globalBreadcrumb } = {} } =
|
52
|
+
useRefineContext();
|
53
|
+
|
54
|
+
const routerType = useRouterType();
|
55
|
+
const back = useBack();
|
56
|
+
const go = useGo();
|
57
|
+
const { goBack, list: legacyGoList } = useNavigation();
|
58
|
+
|
59
|
+
const {
|
60
|
+
resource,
|
61
|
+
action,
|
62
|
+
id: idFromParams,
|
63
|
+
} = useResource(resourceFromProps);
|
64
|
+
|
65
|
+
const goListPath = useToPath({
|
66
|
+
resource,
|
67
|
+
action: "list",
|
68
|
+
});
|
69
|
+
|
70
|
+
const id = recordItemId ?? idFromParams;
|
71
|
+
|
72
|
+
const breadcrumb =
|
73
|
+
typeof breadcrumbFromProps === "undefined"
|
74
|
+
? globalBreadcrumb
|
75
|
+
: breadcrumbFromProps;
|
76
|
+
|
77
|
+
const isDeleteButtonVisible =
|
78
|
+
canDelete ?? resource?.meta?.canDelete ?? resource?.canDelete;
|
79
|
+
const isEditButtonVisible =
|
80
|
+
canEdit ?? resource?.canEdit ?? !!resource?.edit;
|
81
|
+
|
82
|
+
const defaultHeaderButtons = (
|
83
|
+
<>
|
84
|
+
{!recordItemId && (
|
85
|
+
<ListButton
|
86
|
+
resource={
|
87
|
+
routerType === "legacy"
|
88
|
+
? resource?.route
|
89
|
+
: resource?.identifier ?? resource?.name
|
90
|
+
}
|
91
|
+
/>
|
92
|
+
)}
|
93
|
+
{isEditButtonVisible && (
|
94
|
+
<EditButton
|
95
|
+
{...(isLoading ? { disabled: true } : {})}
|
96
|
+
resource={
|
97
|
+
routerType === "legacy"
|
98
|
+
? resource?.route
|
99
|
+
: resource?.identifier ?? resource?.name
|
100
|
+
}
|
101
|
+
recordItemId={id}
|
102
|
+
/>
|
103
|
+
)}
|
104
|
+
{isDeleteButtonVisible && (
|
105
|
+
<DeleteButton
|
106
|
+
{...(isLoading ? { disabled: true } : {})}
|
107
|
+
resource={
|
108
|
+
routerType === "legacy"
|
109
|
+
? resource?.route
|
110
|
+
: resource?.identifier ?? resource?.name
|
111
|
+
}
|
112
|
+
recordItemId={id}
|
113
|
+
onSuccess={() => {
|
114
|
+
if (routerType === "legacy") {
|
115
|
+
legacyGoList(
|
116
|
+
resource?.route ?? resource?.name ?? "",
|
117
|
+
);
|
118
|
+
} else {
|
119
|
+
go({ to: goListPath });
|
120
|
+
}
|
121
|
+
}}
|
122
|
+
dataProviderName={dataProviderName}
|
123
|
+
/>
|
124
|
+
)}
|
125
|
+
<RefreshButton
|
126
|
+
{...(isLoading ? { disabled: true } : {})}
|
127
|
+
resource={
|
128
|
+
routerType === "legacy"
|
129
|
+
? resource?.route
|
130
|
+
: resource?.identifier ?? resource?.name
|
131
|
+
}
|
132
|
+
recordItemId={id}
|
133
|
+
dataProviderName={dataProviderName}
|
134
|
+
/>
|
135
|
+
</>
|
136
|
+
);
|
137
|
+
|
138
|
+
return (
|
139
|
+
<div {...(wrapperProps ?? {})}>
|
140
|
+
<PageHeader
|
141
|
+
ghost={false}
|
142
|
+
backIcon={goBackFromProps}
|
143
|
+
onBack={
|
144
|
+
action !== "list" && typeof action !== "undefined"
|
145
|
+
? routerType === "legacy"
|
146
|
+
? goBack
|
147
|
+
: back
|
148
|
+
: undefined
|
149
|
+
}
|
150
|
+
title={
|
151
|
+
title ??
|
152
|
+
translate(
|
153
|
+
`${resource?.name}.titles.show`,
|
154
|
+
`Show ${userFriendlyResourceName(
|
155
|
+
resource?.meta?.label ??
|
156
|
+
resource?.options?.label ??
|
157
|
+
resource?.label ??
|
158
|
+
resource?.name,
|
159
|
+
"singular",
|
160
|
+
)}`,
|
161
|
+
)
|
162
|
+
}
|
163
|
+
extra={
|
164
|
+
<Space
|
165
|
+
key="extra-buttons"
|
166
|
+
wrap
|
167
|
+
{...(headerButtonProps ?? {})}
|
168
|
+
>
|
169
|
+
{headerButtons
|
170
|
+
? typeof headerButtons === "function"
|
171
|
+
? headerButtons({
|
172
|
+
defaultButtons: defaultHeaderButtons,
|
173
|
+
})
|
174
|
+
: headerButtons
|
175
|
+
: defaultHeaderButtons}
|
176
|
+
</Space>
|
177
|
+
}
|
178
|
+
breadcrumb={
|
179
|
+
typeof breadcrumb !== "undefined" ? (
|
180
|
+
<>{breadcrumb}</> ?? undefined
|
181
|
+
) : (
|
182
|
+
<Breadcrumb />
|
183
|
+
)
|
184
|
+
}
|
185
|
+
{...(headerProps ?? {})}
|
186
|
+
>
|
187
|
+
<Spin spinning={isLoading}>
|
188
|
+
<Card
|
189
|
+
bordered={false}
|
190
|
+
actions={
|
191
|
+
footerButtons
|
192
|
+
? [
|
193
|
+
<Space
|
194
|
+
key="footer-buttons"
|
195
|
+
wrap
|
196
|
+
{...footerButtonProps}
|
197
|
+
>
|
198
|
+
{typeof footerButtons === "function"
|
199
|
+
? footerButtons({
|
200
|
+
defaultButtons: null,
|
201
|
+
})
|
202
|
+
: footerButtons}
|
203
|
+
</Space>,
|
204
|
+
]
|
205
|
+
: undefined
|
206
|
+
}
|
207
|
+
{...(contentProps ?? {})}
|
208
|
+
>
|
209
|
+
{children}
|
210
|
+
</Card>
|
211
|
+
</Spin>
|
212
|
+
</PageHeader>
|
213
|
+
</div>
|
214
|
+
);
|
215
|
+
};
|
@@ -0,0 +1,63 @@
|
|
1
|
+
import { CardProps, SpaceProps } from "antd";
|
2
|
+
import {
|
3
|
+
CreateButtonProps,
|
4
|
+
DeleteButtonProps,
|
5
|
+
SaveButtonProps,
|
6
|
+
} from "@components/buttons";
|
7
|
+
import {
|
8
|
+
RefineCrudCreateProps,
|
9
|
+
RefineCrudEditProps,
|
10
|
+
RefineCrudListProps,
|
11
|
+
RefineCrudShowProps,
|
12
|
+
} from "@refinedev/ui-types";
|
13
|
+
import { PageHeaderProps } from "../pageHeader";
|
14
|
+
|
15
|
+
export type CreateProps = RefineCrudCreateProps<
|
16
|
+
SaveButtonProps,
|
17
|
+
SpaceProps,
|
18
|
+
SpaceProps,
|
19
|
+
React.DetailedHTMLProps<
|
20
|
+
React.HTMLAttributes<HTMLDivElement>,
|
21
|
+
HTMLDivElement
|
22
|
+
>,
|
23
|
+
PageHeaderProps,
|
24
|
+
CardProps
|
25
|
+
>;
|
26
|
+
|
27
|
+
export type EditProps = RefineCrudEditProps<
|
28
|
+
SaveButtonProps,
|
29
|
+
DeleteButtonProps,
|
30
|
+
SpaceProps,
|
31
|
+
SpaceProps,
|
32
|
+
React.DetailedHTMLProps<
|
33
|
+
React.HTMLAttributes<HTMLDivElement>,
|
34
|
+
HTMLDivElement
|
35
|
+
>,
|
36
|
+
PageHeaderProps,
|
37
|
+
CardProps
|
38
|
+
>;
|
39
|
+
|
40
|
+
export type ListProps = RefineCrudListProps<
|
41
|
+
CreateButtonProps,
|
42
|
+
SpaceProps,
|
43
|
+
React.DetailedHTMLProps<
|
44
|
+
React.HTMLAttributes<HTMLDivElement>,
|
45
|
+
HTMLDivElement
|
46
|
+
>,
|
47
|
+
PageHeaderProps,
|
48
|
+
React.DetailedHTMLProps<
|
49
|
+
React.HTMLAttributes<HTMLDivElement>,
|
50
|
+
HTMLDivElement
|
51
|
+
>
|
52
|
+
>;
|
53
|
+
|
54
|
+
export type ShowProps = RefineCrudShowProps<
|
55
|
+
SpaceProps,
|
56
|
+
SpaceProps,
|
57
|
+
React.DetailedHTMLProps<
|
58
|
+
React.HTMLAttributes<HTMLDivElement>,
|
59
|
+
HTMLDivElement
|
60
|
+
>,
|
61
|
+
PageHeaderProps,
|
62
|
+
CardProps
|
63
|
+
>;
|
@@ -0,0 +1,26 @@
|
|
1
|
+
import React from "react";
|
2
|
+
import { Tooltip } from "antd";
|
3
|
+
|
4
|
+
import { CheckOutlined, CloseOutlined } from "@ant-design/icons";
|
5
|
+
|
6
|
+
import { BooleanFieldProps } from "../types";
|
7
|
+
|
8
|
+
/**
|
9
|
+
* This field is used to display boolean values. It uses the {@link https://ant.design/components/tooltip/#header `<Tooltip>`} values from Ant Design.
|
10
|
+
*
|
11
|
+
* @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/boolean} for more details.
|
12
|
+
*/
|
13
|
+
export const BooleanField: React.FC<BooleanFieldProps> = ({
|
14
|
+
value,
|
15
|
+
valueLabelTrue = "true",
|
16
|
+
valueLabelFalse = "false",
|
17
|
+
trueIcon = <CheckOutlined />,
|
18
|
+
falseIcon = <CloseOutlined />,
|
19
|
+
...rest
|
20
|
+
}) => {
|
21
|
+
return (
|
22
|
+
<Tooltip title={value ? valueLabelTrue : valueLabelFalse} {...rest}>
|
23
|
+
{value ? <span>{trueIcon}</span> : <span>{falseIcon}</span>}
|
24
|
+
</Tooltip>
|
25
|
+
);
|
26
|
+
};
|
@@ -0,0 +1,33 @@
|
|
1
|
+
import React from "react";
|
2
|
+
import dayjs from "dayjs";
|
3
|
+
import { Typography } from "antd";
|
4
|
+
|
5
|
+
import LocalizedFormat from "dayjs/plugin/localizedFormat";
|
6
|
+
|
7
|
+
dayjs.extend(LocalizedFormat);
|
8
|
+
|
9
|
+
const defaultLocale = dayjs.locale();
|
10
|
+
|
11
|
+
import { DateFieldProps } from "../types";
|
12
|
+
|
13
|
+
/**
|
14
|
+
* This field is used to display dates. It uses {@link https://day.js.org/docs/en/display/format `Day.js`} to display date format.
|
15
|
+
*
|
16
|
+
* @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/date} for more details.
|
17
|
+
*/
|
18
|
+
export const DateField: React.FC<DateFieldProps> = ({
|
19
|
+
value,
|
20
|
+
locales,
|
21
|
+
format: dateFormat = "L",
|
22
|
+
...rest
|
23
|
+
}) => {
|
24
|
+
const { Text } = Typography;
|
25
|
+
|
26
|
+
return (
|
27
|
+
<Text {...rest}>
|
28
|
+
{dayjs(value)
|
29
|
+
.locale(locales || defaultLocale)
|
30
|
+
.format(dateFormat)}
|
31
|
+
</Text>
|
32
|
+
);
|
33
|
+
};
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import React from "react";
|
2
|
+
import { Typography } from "antd";
|
3
|
+
|
4
|
+
const { Link } = Typography;
|
5
|
+
|
6
|
+
import { EmailFieldProps } from "../types";
|
7
|
+
|
8
|
+
/**
|
9
|
+
* This field is used to display email values. It uses the {@link https://ant.design/components/typography/#FAQ `<Link>`} component
|
10
|
+
* of {@link https://ant.design/components/typography `<Typography>`} from Ant Design.
|
11
|
+
*
|
12
|
+
* @see {@link https://refine.dev/docs/ui-frameworks/antd/components/fields/email} for more details.
|
13
|
+
*/
|
14
|
+
export const EmailField: React.FC<EmailFieldProps> = ({ value, ...rest }) => {
|
15
|
+
return (
|
16
|
+
<Link href={`mailto:${value}`} {...rest}>
|
17
|
+
{value}
|
18
|
+
</Link>
|
19
|
+
);
|
20
|
+
};
|