@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,112 @@
|
|
1
|
+
import React, { ReactNode, useState } from "react";
|
2
|
+
import { Button, Space } from "antd";
|
3
|
+
import type { FilterDropdownProps as AntdFilterDropdownProps } from "antd/lib/table/interface";
|
4
|
+
import dayjs from "dayjs";
|
5
|
+
import { FilterOutlined } from "@ant-design/icons";
|
6
|
+
import { useTranslate } from "@refinedev/core";
|
7
|
+
|
8
|
+
export type FilterDropdownProps = AntdFilterDropdownProps & {
|
9
|
+
mapValue?: (selectedKeys: React.Key[]) => any;
|
10
|
+
children: ReactNode;
|
11
|
+
};
|
12
|
+
|
13
|
+
/**
|
14
|
+
* `<FilterDropdown>` is a helper component for {@link https://ant.design/components/table/#components-table-demo-custom-filter-panel filter dropdowns in Ant Design `<Table>` components.}
|
15
|
+
*
|
16
|
+
* @see {@link https://refine.dev/docs/ui-frameworks/antd/components/filter-dropdown} for more details.
|
17
|
+
*/
|
18
|
+
export const FilterDropdown: React.FC<FilterDropdownProps> = (props) => {
|
19
|
+
const {
|
20
|
+
setSelectedKeys,
|
21
|
+
confirm,
|
22
|
+
clearFilters,
|
23
|
+
mapValue,
|
24
|
+
selectedKeys,
|
25
|
+
children,
|
26
|
+
} = props;
|
27
|
+
|
28
|
+
const [value, setValue] = useState<any[] | undefined>(selectedKeys);
|
29
|
+
const translate = useTranslate();
|
30
|
+
|
31
|
+
const clearFilter = () => {
|
32
|
+
if (clearFilters) {
|
33
|
+
setValue([]);
|
34
|
+
clearFilters();
|
35
|
+
}
|
36
|
+
};
|
37
|
+
|
38
|
+
const onFilter = () => {
|
39
|
+
const _mappedValue = mappedValue(value);
|
40
|
+
|
41
|
+
let keys;
|
42
|
+
if (typeof _mappedValue === "number") {
|
43
|
+
keys = `${_mappedValue}`;
|
44
|
+
} else if (dayjs.isDayjs(_mappedValue)) {
|
45
|
+
keys = [_mappedValue.toISOString()];
|
46
|
+
} else {
|
47
|
+
keys = _mappedValue;
|
48
|
+
}
|
49
|
+
|
50
|
+
setSelectedKeys(keys);
|
51
|
+
|
52
|
+
confirm?.();
|
53
|
+
};
|
54
|
+
|
55
|
+
const mappedValue = (value: any) => (mapValue ? mapValue(value) : value);
|
56
|
+
|
57
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
58
|
+
const onChange = (e: any) => {
|
59
|
+
if (typeof e === "object") {
|
60
|
+
if (Array.isArray(e)) {
|
61
|
+
const _mappedValue = mappedValue(e);
|
62
|
+
|
63
|
+
setValue(_mappedValue);
|
64
|
+
return setSelectedKeys(_mappedValue);
|
65
|
+
}
|
66
|
+
|
67
|
+
const changeEvent =
|
68
|
+
!e || !e.target || dayjs.isDayjs(e)
|
69
|
+
? { target: { value: e } }
|
70
|
+
: e;
|
71
|
+
|
72
|
+
const { target }: React.ChangeEvent<HTMLInputElement> = changeEvent;
|
73
|
+
const _mappedValue = mappedValue(target.value);
|
74
|
+
setValue(_mappedValue);
|
75
|
+
return;
|
76
|
+
}
|
77
|
+
|
78
|
+
const _mappedValue = mappedValue(e);
|
79
|
+
|
80
|
+
setValue(_mappedValue);
|
81
|
+
};
|
82
|
+
|
83
|
+
const childrenWithProps = React.Children.map(children, (child) => {
|
84
|
+
if (React.isValidElement(child)) {
|
85
|
+
return React.cloneElement(child, {
|
86
|
+
onChange,
|
87
|
+
value: mappedValue(value),
|
88
|
+
});
|
89
|
+
}
|
90
|
+
return child;
|
91
|
+
});
|
92
|
+
return (
|
93
|
+
<div
|
94
|
+
style={{
|
95
|
+
padding: 10,
|
96
|
+
display: "flex",
|
97
|
+
flexDirection: "column",
|
98
|
+
alignItems: "flex-end",
|
99
|
+
}}
|
100
|
+
>
|
101
|
+
<div style={{ marginBottom: 15 }}>{childrenWithProps}</div>
|
102
|
+
<Space>
|
103
|
+
<Button type="primary" size="small" onClick={() => onFilter()}>
|
104
|
+
<FilterOutlined /> {translate("buttons.filter", "Filter")}
|
105
|
+
</Button>
|
106
|
+
<Button danger size="small" onClick={() => clearFilter()}>
|
107
|
+
{translate("buttons.clear", "Clear")}
|
108
|
+
</Button>
|
109
|
+
</Space>
|
110
|
+
</div>
|
111
|
+
);
|
112
|
+
};
|
@@ -0,0 +1 @@
|
|
1
|
+
export { FilterDropdown } from "./filterDropdown";
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from "./components";
|
@@ -0,0 +1,46 @@
|
|
1
|
+
import React from "react";
|
2
|
+
import { Button, notification, Progress } from "antd";
|
3
|
+
import { OpenNotificationParams } from "@refinedev/core";
|
4
|
+
import { UndoOutlined } from "@ant-design/icons";
|
5
|
+
|
6
|
+
export type UndoableNotificationProps = {
|
7
|
+
notificationKey: OpenNotificationParams["key"];
|
8
|
+
message: OpenNotificationParams["message"];
|
9
|
+
cancelMutation: OpenNotificationParams["cancelMutation"];
|
10
|
+
undoableTimeout: OpenNotificationParams["undoableTimeout"];
|
11
|
+
};
|
12
|
+
|
13
|
+
export const UndoableNotification: React.FC<UndoableNotificationProps> = ({
|
14
|
+
notificationKey,
|
15
|
+
message,
|
16
|
+
cancelMutation,
|
17
|
+
undoableTimeout,
|
18
|
+
}) => (
|
19
|
+
<div
|
20
|
+
style={{
|
21
|
+
display: "flex",
|
22
|
+
alignItems: "center",
|
23
|
+
justifyContent: "space-between",
|
24
|
+
marginTop: "-7px",
|
25
|
+
}}
|
26
|
+
>
|
27
|
+
<Progress
|
28
|
+
type="circle"
|
29
|
+
percent={(undoableTimeout ?? 0) * 20}
|
30
|
+
format={(time) => time && time / 20}
|
31
|
+
width={50}
|
32
|
+
strokeColor="#1890ff"
|
33
|
+
status="normal"
|
34
|
+
/>
|
35
|
+
<span style={{ marginLeft: 8, width: "100%" }}>{message}</span>
|
36
|
+
<Button
|
37
|
+
style={{ flexShrink: 0 }}
|
38
|
+
onClick={() => {
|
39
|
+
cancelMutation?.();
|
40
|
+
notification.destroy(notificationKey ?? "");
|
41
|
+
}}
|
42
|
+
disabled={undoableTimeout === 0}
|
43
|
+
icon={<UndoOutlined />}
|
44
|
+
></Button>
|
45
|
+
</div>
|
46
|
+
);
|
@@ -0,0 +1,113 @@
|
|
1
|
+
import {
|
2
|
+
CrudFilters,
|
3
|
+
CrudOperators,
|
4
|
+
CrudSorting,
|
5
|
+
CrudFilter,
|
6
|
+
getDefaultFilter as getDefaultFilterCore,
|
7
|
+
getDefaultSortOrder as getDefaultSortOrderCore,
|
8
|
+
ConditionalFilter,
|
9
|
+
LogicalFilter,
|
10
|
+
} from "@refinedev/core";
|
11
|
+
import { SortOrder, SorterResult } from "antd/lib/table/interface";
|
12
|
+
|
13
|
+
export const getDefaultSortOrder = (
|
14
|
+
columnName: string,
|
15
|
+
sorter?: CrudSorting,
|
16
|
+
): SortOrder | undefined => {
|
17
|
+
const sort = getDefaultSortOrderCore(columnName, sorter);
|
18
|
+
|
19
|
+
if (sort) {
|
20
|
+
return `${sort}end`;
|
21
|
+
}
|
22
|
+
|
23
|
+
return undefined;
|
24
|
+
};
|
25
|
+
|
26
|
+
/**
|
27
|
+
* @deprecated getDefaultFilter moved to `@refinedev/core`. Use from `@refinedev/core`
|
28
|
+
*/
|
29
|
+
export const getDefaultFilter = (
|
30
|
+
columnName: string,
|
31
|
+
filters?: CrudFilters,
|
32
|
+
operatorType: CrudOperators = "eq",
|
33
|
+
): CrudFilter["value"] | undefined => {
|
34
|
+
return getDefaultFilterCore(columnName, filters, operatorType);
|
35
|
+
};
|
36
|
+
|
37
|
+
export const mapAntdSorterToCrudSorting = (
|
38
|
+
sorter: SorterResult<any> | SorterResult<any>[],
|
39
|
+
): CrudSorting => {
|
40
|
+
const crudSorting: CrudSorting = [];
|
41
|
+
if (Array.isArray(sorter)) {
|
42
|
+
sorter
|
43
|
+
.sort((a, b) => {
|
44
|
+
return ((a.column?.sorter as { multiple?: number }).multiple ??
|
45
|
+
0) <
|
46
|
+
((b.column?.sorter as { multiple?: number }).multiple ?? 0)
|
47
|
+
? -1
|
48
|
+
: 0;
|
49
|
+
})
|
50
|
+
.map((item) => {
|
51
|
+
if (item.field && item.order) {
|
52
|
+
const field = Array.isArray(item.field)
|
53
|
+
? item.field.join(".")
|
54
|
+
: `${item.field}`;
|
55
|
+
|
56
|
+
crudSorting.push({
|
57
|
+
field: `${item.columnKey ?? field}`,
|
58
|
+
order: item.order.replace("end", "") as "asc" | "desc",
|
59
|
+
});
|
60
|
+
}
|
61
|
+
});
|
62
|
+
} else {
|
63
|
+
if (sorter.field && sorter.order) {
|
64
|
+
const field = Array.isArray(sorter.field)
|
65
|
+
? sorter.field.join(".")
|
66
|
+
: `${sorter.field}`;
|
67
|
+
|
68
|
+
crudSorting.push({
|
69
|
+
field: `${sorter.columnKey ?? field}`,
|
70
|
+
order: sorter.order.replace("end", "") as "asc" | "desc",
|
71
|
+
});
|
72
|
+
}
|
73
|
+
}
|
74
|
+
|
75
|
+
return crudSorting;
|
76
|
+
};
|
77
|
+
|
78
|
+
export const mapAntdFilterToCrudFilter = (
|
79
|
+
tableFilters: Record<
|
80
|
+
string,
|
81
|
+
(string | number | boolean) | (string | number | boolean)[] | null
|
82
|
+
>,
|
83
|
+
prevFilters: CrudFilters,
|
84
|
+
initialFilters?: CrudFilters,
|
85
|
+
): CrudFilters => {
|
86
|
+
const crudFilters: CrudFilters = [];
|
87
|
+
const mapInitialFilter: Record<string, CrudFilter> = (
|
88
|
+
initialFilters ?? []
|
89
|
+
).reduce((acc, item) => {
|
90
|
+
const field =
|
91
|
+
(item as ConditionalFilter).key || (item as LogicalFilter).field;
|
92
|
+
return { ...acc, [field]: item };
|
93
|
+
}, {});
|
94
|
+
|
95
|
+
Object.keys(tableFilters).map((field) => {
|
96
|
+
const value = tableFilters[field];
|
97
|
+
const operator =
|
98
|
+
prevFilters
|
99
|
+
.filter((i) => i.operator !== "or")
|
100
|
+
.find((p: any) => p.field === field)?.operator ||
|
101
|
+
mapInitialFilter[field]?.operator;
|
102
|
+
|
103
|
+
if (operator !== "or" && operator !== "and") {
|
104
|
+
crudFilters.push({
|
105
|
+
field,
|
106
|
+
operator: operator ?? (Array.isArray(value) ? "in" : "eq"),
|
107
|
+
value,
|
108
|
+
});
|
109
|
+
}
|
110
|
+
});
|
111
|
+
|
112
|
+
return crudFilters;
|
113
|
+
};
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import type { UploadFile, UploadChangeParam } from "antd/lib/upload/interface";
|
2
|
+
|
3
|
+
export const getValueFromEvent = (event: UploadChangeParam): UploadFile[] => {
|
4
|
+
const { fileList } = event;
|
5
|
+
|
6
|
+
return [...fileList];
|
7
|
+
};
|
8
|
+
|
9
|
+
export function file2Base64(file: UploadFile): Promise<string> {
|
10
|
+
return new Promise((resolve, reject) => {
|
11
|
+
const reader = new FileReader();
|
12
|
+
|
13
|
+
const resultHandler = () => {
|
14
|
+
if (reader.result) {
|
15
|
+
reader.removeEventListener("load", resultHandler, false);
|
16
|
+
|
17
|
+
resolve(reader.result as string);
|
18
|
+
}
|
19
|
+
};
|
20
|
+
|
21
|
+
reader.addEventListener("load", resultHandler, false);
|
22
|
+
|
23
|
+
reader.readAsDataURL(file.originFileObj as Blob);
|
24
|
+
reader.onerror = (error) => {
|
25
|
+
reader.removeEventListener("load", resultHandler, false);
|
26
|
+
return reject(error);
|
27
|
+
};
|
28
|
+
});
|
29
|
+
}
|
@@ -0,0 +1,85 @@
|
|
1
|
+
import { QueryObserverResult } from "@tanstack/react-query";
|
2
|
+
|
3
|
+
import { CheckboxGroupProps } from "antd/lib/checkbox";
|
4
|
+
import {
|
5
|
+
BaseRecord,
|
6
|
+
GetListResponse,
|
7
|
+
HttpError,
|
8
|
+
UseSelectProps,
|
9
|
+
useSelect,
|
10
|
+
BaseKey,
|
11
|
+
pickNotDeprecated,
|
12
|
+
} from "@refinedev/core";
|
13
|
+
|
14
|
+
export type UseCheckboxGroupReturnType<TData extends BaseRecord = BaseRecord> =
|
15
|
+
{
|
16
|
+
checkboxGroupProps: CheckboxGroupProps;
|
17
|
+
queryResult: QueryObserverResult<GetListResponse<TData>>;
|
18
|
+
};
|
19
|
+
|
20
|
+
/**
|
21
|
+
* `useCheckboxGroup` hook allows you to manage an Ant Design {@link https://ant.design/components/checkbox/#components-checkbox-demo-group Checkbox.Group} component when records in a resource needs to be used as checkbox options.
|
22
|
+
*
|
23
|
+
* @see {@link https://refine.dev/docs/ui-framewors/antd/hooks/field/useCheckboxGroup} for more details.
|
24
|
+
*
|
25
|
+
* @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-references/interfaceReferences#baserecord `BaseRecord`}
|
26
|
+
*
|
27
|
+
*/
|
28
|
+
|
29
|
+
type UseCheckboxGroupProps<TData, TError> = Omit<
|
30
|
+
UseSelectProps<TData, TError>,
|
31
|
+
"defaultValue"
|
32
|
+
> & {
|
33
|
+
/**
|
34
|
+
* Sets the default value
|
35
|
+
*/
|
36
|
+
defaultValue?: BaseKey[];
|
37
|
+
};
|
38
|
+
|
39
|
+
export const useCheckboxGroup = <
|
40
|
+
TData extends BaseRecord = BaseRecord,
|
41
|
+
TError extends HttpError = HttpError,
|
42
|
+
>({
|
43
|
+
resource,
|
44
|
+
sort,
|
45
|
+
sorters,
|
46
|
+
filters,
|
47
|
+
optionLabel,
|
48
|
+
optionValue,
|
49
|
+
queryOptions,
|
50
|
+
fetchSize,
|
51
|
+
pagination,
|
52
|
+
liveMode,
|
53
|
+
defaultValue,
|
54
|
+
onLiveEvent,
|
55
|
+
liveParams,
|
56
|
+
meta,
|
57
|
+
metaData,
|
58
|
+
dataProviderName,
|
59
|
+
}: UseCheckboxGroupProps<TData, TError>): UseCheckboxGroupReturnType<TData> => {
|
60
|
+
const { queryResult, options } = useSelect({
|
61
|
+
resource,
|
62
|
+
sort,
|
63
|
+
sorters,
|
64
|
+
filters,
|
65
|
+
optionLabel,
|
66
|
+
optionValue,
|
67
|
+
queryOptions,
|
68
|
+
fetchSize,
|
69
|
+
pagination,
|
70
|
+
liveMode,
|
71
|
+
defaultValue,
|
72
|
+
onLiveEvent,
|
73
|
+
liveParams,
|
74
|
+
meta: pickNotDeprecated(meta, metaData),
|
75
|
+
metaData: pickNotDeprecated(meta, metaData),
|
76
|
+
dataProviderName,
|
77
|
+
});
|
78
|
+
return {
|
79
|
+
checkboxGroupProps: {
|
80
|
+
options,
|
81
|
+
defaultValue,
|
82
|
+
},
|
83
|
+
queryResult,
|
84
|
+
};
|
85
|
+
};
|
@@ -0,0 +1,85 @@
|
|
1
|
+
import { QueryObserverResult } from "@tanstack/react-query";
|
2
|
+
|
3
|
+
import { RadioGroupProps } from "antd/lib/radio";
|
4
|
+
import {
|
5
|
+
BaseKey,
|
6
|
+
BaseRecord,
|
7
|
+
GetListResponse,
|
8
|
+
HttpError,
|
9
|
+
pickNotDeprecated,
|
10
|
+
useSelect,
|
11
|
+
UseSelectProps,
|
12
|
+
} from "@refinedev/core";
|
13
|
+
|
14
|
+
export type UseRadioGroupReturnType<TData extends BaseRecord = BaseRecord> = {
|
15
|
+
radioGroupProps: RadioGroupProps;
|
16
|
+
queryResult: QueryObserverResult<GetListResponse<TData>>;
|
17
|
+
};
|
18
|
+
|
19
|
+
/**
|
20
|
+
* `useRadioGroup` hook allows you to manage an Ant Design {@link https://ant.design/components/radio/#components-radio-demo-radiogroup-with-name Radio.Group} component when records in a resource needs to be used as radio options.
|
21
|
+
*
|
22
|
+
* @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/field/useRadioGroup} for more details.
|
23
|
+
*
|
24
|
+
* @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/core/interfaceReferences#baserecord `BaseRecord`}
|
25
|
+
*
|
26
|
+
*/
|
27
|
+
|
28
|
+
type UseRadioGroupProps<TData, TError> = Omit<
|
29
|
+
UseSelectProps<TData, TError>,
|
30
|
+
"defaultValue"
|
31
|
+
> & {
|
32
|
+
/**
|
33
|
+
* Sets the default value
|
34
|
+
*/
|
35
|
+
defaultValue?: BaseKey;
|
36
|
+
};
|
37
|
+
|
38
|
+
export const useRadioGroup = <
|
39
|
+
TData extends BaseRecord = BaseRecord,
|
40
|
+
TError extends HttpError = HttpError,
|
41
|
+
>({
|
42
|
+
resource,
|
43
|
+
sort,
|
44
|
+
sorters,
|
45
|
+
filters,
|
46
|
+
optionLabel,
|
47
|
+
optionValue,
|
48
|
+
queryOptions,
|
49
|
+
fetchSize,
|
50
|
+
pagination,
|
51
|
+
liveMode,
|
52
|
+
defaultValue,
|
53
|
+
onLiveEvent,
|
54
|
+
liveParams,
|
55
|
+
meta,
|
56
|
+
metaData,
|
57
|
+
dataProviderName,
|
58
|
+
}: UseRadioGroupProps<TData, TError>): UseRadioGroupReturnType<TData> => {
|
59
|
+
const { queryResult, options } = useSelect({
|
60
|
+
resource,
|
61
|
+
sort,
|
62
|
+
sorters,
|
63
|
+
filters,
|
64
|
+
optionLabel,
|
65
|
+
optionValue,
|
66
|
+
queryOptions,
|
67
|
+
fetchSize,
|
68
|
+
pagination,
|
69
|
+
liveMode,
|
70
|
+
defaultValue,
|
71
|
+
onLiveEvent,
|
72
|
+
liveParams,
|
73
|
+
meta: pickNotDeprecated(meta, metaData),
|
74
|
+
metaData: pickNotDeprecated(meta, metaData),
|
75
|
+
dataProviderName,
|
76
|
+
});
|
77
|
+
|
78
|
+
return {
|
79
|
+
radioGroupProps: {
|
80
|
+
options,
|
81
|
+
defaultValue,
|
82
|
+
},
|
83
|
+
queryResult,
|
84
|
+
};
|
85
|
+
};
|
@@ -0,0 +1,47 @@
|
|
1
|
+
import { SelectProps } from "antd/lib/select";
|
2
|
+
import { QueryObserverResult } from "@tanstack/react-query";
|
3
|
+
|
4
|
+
import {
|
5
|
+
useSelect as useSelectCore,
|
6
|
+
BaseRecord,
|
7
|
+
GetManyResponse,
|
8
|
+
GetListResponse,
|
9
|
+
HttpError,
|
10
|
+
UseSelectProps,
|
11
|
+
} from "@refinedev/core";
|
12
|
+
|
13
|
+
export type UseSelectReturnType<TData extends BaseRecord = BaseRecord> = {
|
14
|
+
selectProps: SelectProps<{ value: string; label: string }>;
|
15
|
+
queryResult: QueryObserverResult<GetListResponse<TData>>;
|
16
|
+
defaultValueQueryResult: QueryObserverResult<GetManyResponse<TData>>;
|
17
|
+
};
|
18
|
+
|
19
|
+
/**
|
20
|
+
* `useSelect` hook allows you to manage an Ant Design {@link https://ant.design/components/select/ Select} component when records in a resource needs to be used as select options.
|
21
|
+
*
|
22
|
+
* @see {@link https://refine.dev/docs/api-references/hooks/field/useSelect} for more details.
|
23
|
+
*
|
24
|
+
* @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-references/interfaceReferences#baserecord `BaseRecord`}
|
25
|
+
*
|
26
|
+
*/
|
27
|
+
export const useSelect = <
|
28
|
+
TData extends BaseRecord = BaseRecord,
|
29
|
+
TError extends HttpError = HttpError,
|
30
|
+
>(
|
31
|
+
props: UseSelectProps<TData, TError>,
|
32
|
+
): UseSelectReturnType<TData> => {
|
33
|
+
const { queryResult, defaultValueQueryResult, onSearch, options } =
|
34
|
+
useSelectCore(props);
|
35
|
+
|
36
|
+
return {
|
37
|
+
selectProps: {
|
38
|
+
options,
|
39
|
+
onSearch,
|
40
|
+
loading: defaultValueQueryResult.isFetching,
|
41
|
+
showSearch: true,
|
42
|
+
filterOption: false,
|
43
|
+
},
|
44
|
+
queryResult,
|
45
|
+
defaultValueQueryResult,
|
46
|
+
};
|
47
|
+
};
|
@@ -0,0 +1,17 @@
|
|
1
|
+
export { useForm, UseFormProps, UseFormReturnType } from "./useForm";
|
2
|
+
export {
|
3
|
+
useModalForm,
|
4
|
+
UseModalFormProps,
|
5
|
+
UseModalFormReturnType,
|
6
|
+
} from "./useModalForm";
|
7
|
+
export {
|
8
|
+
useDrawerForm,
|
9
|
+
UseDrawerFormProps,
|
10
|
+
UseDrawerFormConfig,
|
11
|
+
UseDrawerFormReturnType,
|
12
|
+
} from "./useDrawerForm";
|
13
|
+
export {
|
14
|
+
useStepsForm,
|
15
|
+
UseStepsFormProps,
|
16
|
+
UseStepsFormReturnType,
|
17
|
+
} from "./useStepsForm";
|