@gadmin2n/schematics 0.0.65 → 0.0.67

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.
Files changed (72) hide show
  1. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/system.prisma +7 -0
  2. package/dist/lib/application/files/gadmin2-game-angle-demo/server/package.json +3 -3
  3. package/dist/lib/application/files/gadmin2-game-angle-demo/web/package.json +4 -4
  4. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/authProvider.ts +2 -2
  5. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/SqlModal.tsx +419 -0
  6. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/business/index.tsx +1 -1
  7. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/custom-avatar.tsx +1 -1
  8. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/http.ts +28 -0
  9. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/routeRegistry.tsx +1 -1
  10. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/http.ts +87 -0
  11. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/index.tsx +6 -1
  12. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/login.ts +22 -77
  13. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/{utilities → helpers}/utils.tsx +1 -1
  14. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/components/action-cell.tsx +1 -1
  15. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/AssignRolesModal.tsx +3 -3
  16. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/PageDetailDrawer.tsx +1 -1
  17. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/PageFormModal.tsx +1 -1
  18. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/hooks/usePageManagement.ts +1 -1
  19. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/index.ts +0 -7
  20. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/list.tsx +110 -8
  21. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/types.ts +1 -0
  22. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/{permission-readme → permissionReadme}/index.tsx +4 -3
  23. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/ResourceDetailDrawer.tsx +1 -1
  24. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/index.ts +0 -7
  25. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/list.tsx +32 -4
  26. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/RoleDetailDrawer.tsx +1 -1
  27. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/modal.tsx +1 -1
  28. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/hooks/useRolePage.ts +1 -1
  29. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/index.ts +1 -8
  30. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/list.tsx +52 -3
  31. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/form-modal.tsx +2 -2
  32. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/show-drawer.tsx +2 -2
  33. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/index.ts +1 -8
  34. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/list.tsx +41 -11
  35. package/dist/lib/application/files/gadmin2-game-angle-demo/web/tsconfig.json +2 -1
  36. package/dist/lib/application/files/gadmin2-game-angle-demo/web/yarn.lock +8321 -0
  37. package/package.json +1 -1
  38. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/utils.ts +0 -76
  39. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/create.tsx +0 -113
  40. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/edit.tsx +0 -122
  41. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/index.tsx +0 -6
  42. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/show.tsx +0 -61
  43. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/pageResource/create.tsx +0 -113
  44. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/pageResource/edit.tsx +0 -122
  45. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/pageResource/index.tsx +0 -6
  46. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/pageResource/list.tsx +0 -243
  47. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/pageResource/show.tsx +0 -61
  48. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/create.tsx +0 -113
  49. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/edit.tsx +0 -122
  50. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/index.tsx +0 -6
  51. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/show.tsx +0 -61
  52. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/create.tsx +0 -113
  53. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/edit.tsx +0 -122
  54. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/index.tsx +0 -6
  55. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/show.tsx +0 -61
  56. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/rolePages/create.tsx +0 -113
  57. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/rolePages/edit.tsx +0 -122
  58. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/rolePages/index.tsx +0 -6
  59. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/rolePages/list.tsx +0 -243
  60. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/rolePages/show.tsx +0 -61
  61. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/roleResource/create.tsx +0 -113
  62. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/roleResource/edit.tsx +0 -122
  63. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/roleResource/index.tsx +0 -6
  64. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/roleResource/list.tsx +0 -243
  65. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/roleResource/show.tsx +0 -61
  66. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/create.tsx +0 -113
  67. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/edit.tsx +0 -122
  68. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/index.tsx +0 -6
  69. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/show.tsx +0 -61
  70. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/utilities/index.ts +0 -2
  71. /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/{utilities → helpers}/get-name-initials.ts +0 -0
  72. /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/{utilities → helpers}/get-random-color.ts +0 -0
@@ -1,243 +0,0 @@
1
-
2
- /**
3
- * PageResource List Page
4
- *
5
- * Generated using simplified pattern with @gadmin2n/react-common hooks and components.
6
- *
7
- * Flexibility Levels:
8
- * 1. Basic usage - Use components with defaults (this file)
9
- * 2. Render props - Customize specific buttons/elements
10
- * 3. Children function - Complete UI control
11
- * 4. Core hooks - No UI assumptions, full control
12
- *
13
- * See: examples/ListPageExamples.tsx for all patterns
14
- */
15
- import React, { useMemo } from 'react';
16
- import { Table } from 'antd';
17
- import { List, useTable, useImport } from '@refinedev/antd';
18
- import {
19
- HttpError,
20
- IResourceComponentsProps,
21
- parseTableParams,
22
- useExport,
23
- useTranslate,
24
- useApiUrl,
25
- } from '@refinedev/core';
26
- import { useLocation } from 'react-router-dom';
27
- import {
28
- getColumns,
29
- ModelType,
30
- produceModel,
31
- tableSearchBar,
32
- } from '@gadmin2n/react-common';
33
-
34
- // Generated imports
35
- import { modelsEnum, modelsMap } from 'generated/models.index';
36
- import {
37
- pageResourceTableConfig as tableConfig,
38
- pageResourceTablePrismaSelect as prismaSelect,
39
- } from 'generated/props/pageResource/config';
40
- import { pageResourceModel, useRelation } from 'generated/props/pageResource/model';
41
- import type { PageResource } from 'generated/types/prisma.types';
42
-
43
- // Local imports
44
- import {
45
- BulkActions,
46
- ListPageHeader,
47
- RowActions,
48
- SearchBar,
49
- } from 'components';
50
- import { getRowActionsColumnProps } from 'components/agentPanel';
51
- import { LogButton } from 'components/auditLog';
52
- import { requestHeaders } from 'helpers/login';
53
- import { useBatchOperations } from 'hooks';
54
- import {
55
- createSearchFormOnFinish,
56
- getSearchFormInitialValues,
57
- getTableColumnV2,
58
- TableColumnContext
59
- } from 'helpers';
60
-
61
-
62
- const { placeholder: searchPlaceholder, getSearchFilters } = tableSearchBar(
63
- tableConfig['toolbar']['searchBar'],
64
- pageResourceModel,
65
- );
66
-
67
- // https://refine.dev/docs/api-reference/antd/hooks/table/useTable/
68
- export const PageResourceList: React.FC<IResourceComponentsProps> = () => {
69
- const resourceName = 'pageResource';
70
- const t = useTranslate();
71
- const apiUrl = useApiUrl();
72
- const { search } = useLocation();
73
- const { parsedSorter, parsedFilters } = parseTableParams(search);
74
-
75
-
76
- // Relations
77
- const relationSelectProps = useRelation(modelsMap);
78
-
79
- // Model with customizations
80
- const [columns, model] = useMemo(() => {
81
- const model: ModelType = produceModel(pageResourceModel, {
82
- // Custom column renderers can be added here
83
- // cron: { render: (value) => humanizeCronInChinese(value) },
84
- });
85
-
86
- const columns = getColumns('PageResource', tableConfig.fields, {
87
- ...modelsMap,
88
- PageResource: { model, meta: modelsMap['PageResource'].meta },
89
- });
90
-
91
- return [columns, model] as const;
92
- }, []);
93
-
94
- // Table hook
95
- const {
96
- tableProps,
97
- sorters: sorter,
98
- setCurrent,
99
- setFilters,
100
- filters,
101
- tableQueryResult,
102
- searchFormProps,
103
- } = useTable<PageResource, HttpError>({
104
- meta: { transformQFn: getSearchFilters, select: prismaSelect },
105
- filters: { initial: parsedFilters, defaultBehavior: 'merge' },
106
- sorters: { initial: parsedSorter },
107
-
108
- });
109
-
110
- // initialValues: 从 URL 的 parsedFilters 中恢复 q(搜索关键词)和 createdAt(日期范围)
111
- // onFinish: 将表单值转换为 CrudFilters 并更新筛选条件
112
- // 有 createdAt 字段的模型(默认)
113
- searchFormProps.initialValues = getSearchFormInitialValues(parsedFilters);
114
- searchFormProps.onFinish = createSearchFormOnFinish(setCurrent, setFilters);
115
-
116
- // 没有 createdAt 字段的模型
117
- // searchFormProps.initialValues = getSearchFormInitialValues(parsedFilters, { dateField: null });
118
- // searchFormProps.onFinish = createSearchFormOnFinish(setCurrent, setFilters, { dateField: null });
119
-
120
- // 使用其他日期字段(如 updatedAt)
121
- // searchFormProps.initialValues = getSearchFormInitialValues(parsedFilters, { dateField: 'updatedAt' });
122
- // searchFormProps.onFinish = createSearchFormOnFinish(setCurrent, setFilters, { dateField: 'updatedAt' });
123
-
124
- // Batch operations (selection, update, delete)
125
- const batchOps = useBatchOperations({
126
- resourceName,
127
- apiUrl,
128
- requestHeaders,
129
- onSuccess: () => tableQueryResult.refetch(),
130
- t,
131
- });
132
-
133
- // Export all
134
- const { triggerExport, isLoading: exportLoading } = useExport<PageResource>({
135
- maxItemCount: 200,
136
- pageSize: 100,
137
-
138
- });
139
-
140
- // Export selected
141
- const { triggerExport: triggerExportSelected, isLoading: exportSelectedLoading } =
142
- useExport<PageResource>({
143
- pageSize: 100,
144
- meta: { where: { id: { in: batchOps.selectedRowKeys.map(Number) } } },
145
- });
146
-
147
- // Import
148
- const importProps = useImport<PageResource>({
149
- mapData: (item: any) => ({
150
- ...item,
151
-
152
- }),
153
- batchSize: 1,
154
- });
155
-
156
- // Context for table columns
157
- const columnContext: TableColumnContext = {
158
- resourceName,
159
- t,
160
- model,
161
- modelsEnum,
162
- modelsMap,
163
- tableConfig,
164
- sorter,
165
- filters,
166
- relationSelectProps,
167
- };
168
-
169
- return (
170
- <List
171
- headerProps={{
172
- subTitle: batchOps.hasSelected && (
173
- <BulkActions
174
- selectedRowKeys={batchOps.selectedRowKeys}
175
- actions={tableConfig.rowSelection.actions}
176
- onUpdateSelected={batchOps.updateSelectedItems}
177
- onDeleteSelected={batchOps.deleteSelectedItems}
178
- onExportSelected={triggerExportSelected}
179
- updateLoading={batchOps.updateManyIsLoading}
180
- deleteLoading={batchOps.deleteManyIsLoading}
181
- exportLoading={exportSelectedLoading}
182
- t={t}
183
- resourceName={resourceName}
184
- // Render props examples (uncomment to customize):
185
- // renderDeleteButton={(onClick, loading) => <Button danger onClick={onClick} loading={loading}>Delete</Button>}
186
- // renderSelectionCount={(count) => <Badge count={count}><Tag>Selected</Tag></Badge>}
187
- // extraActions={<Button>Custom Action</Button>}
188
- />
189
- ),
190
- extra: (
191
- <ListPageHeader
192
- importProps={importProps}
193
- onExport={triggerExport}
194
- exportLoading={exportLoading}
195
- />
196
- ),
197
- }}
198
- >
199
- {/* Search Bar */}
200
- <SearchBar
201
- formProps={searchFormProps}
202
- t={t}
203
- resourceName={resourceName}
204
- searchPlaceholder={searchPlaceholder}
205
- // Render props examples (uncomment to customize):
206
- // renderKeywordInput={(field, defaultInput) => <Input.Search placeholder={field.placeholder} />}
207
- // renderSubmitButton={(defaultButton) => <Space>{defaultButton}<Button>Reset</Button></Space>}
208
- // extraActions={<Button type="link">Advanced</Button>}
209
- />
210
-
211
- {/* Data Table */}
212
- <Table {...tableProps} rowKey="id" rowSelection={batchOps.rowSelection}>
213
- {columns.map((col) => getTableColumnV2({ col, context: columnContext }))}
214
-
215
- {/* Actions Column */}
216
- <Table.Column<PageResource>
217
- title={t('table.actions')}
218
- dataIndex="actions"
219
- {...getRowActionsColumnProps(resourceName)}
220
- render={(_, record) => (
221
- <RowActions
222
- record={record}
223
- actions={tableConfig.rowActions.actions}
224
- onUpdate={batchOps.updateOne}
225
- updateLoading={batchOps.updateManyIsLoading}
226
- t={t}
227
- resourceName={resourceName}
228
- LogButton={LogButton}
229
- // Render props examples (uncomment to customize):
230
- // showClone={false}
231
- // showDelete={false}
232
- // renderEditButton={(id) => <Button type="link" size="small">Quick Edit</Button>}
233
- // renderDeleteButton={(id) => <Popconfirm title="Sure?"><Button danger size="small">Remove</Button></Popconfirm>}
234
- // extraPrimaryActions={<Button type="text" size="small">Quick View</Button>}
235
- />
236
- )}
237
- />
238
- </Table>
239
- </List>
240
- );
241
- };
242
-
243
- export default PageResourceList;
@@ -1,61 +0,0 @@
1
-
2
- import { ModelType, getColumns, produceModel } from "@gadmin2n/react-common";
3
- import { CloneButton, DeleteButton, EditButton, ListButton, RefreshButton, Show } from "@refinedev/antd";
4
- import { IResourceComponentsProps, useShow, useTranslate } from "@refinedev/core";
5
- import React, { useState } from "react";
6
- import { getShowField } from "../../helpers";
7
- import type { PageResource } from "../../generated/types/prisma.types"; //'.prisma/client/index';
8
- import {
9
- pageResourceShowConfig as showConfig,
10
- pageResourceShowPrismaSelect as showPrismaSelect,
11
- } from "../../generated/props/pageResource/config";
12
- import { pageResourceModel } from "../../generated/props/pageResource/model";
13
- import { modelsMap } from "generated/models.index";
14
-
15
- export const PageResourceShow: React.FC<IResourceComponentsProps> = () => {
16
- const resourceName = "pageResource";
17
- const t = useTranslate();
18
-
19
- const { queryResult } = useShow<PageResource>({
20
- meta: { select: showPrismaSelect},
21
- });
22
- const { data, isLoading } = queryResult;
23
- const record = data?.data;
24
-
25
- const [[fields, model]] = useState(() => {
26
- const model: ModelType = produceModel(pageResourceModel, {
27
- // status: { render: xxxxx }
28
- });
29
-
30
- // getColumns is a function that returns an array of fields
31
- const fields = getColumns("PageResource", showConfig.fields, {
32
- ...modelsMap,
33
- PageResource: { model, meta: modelsMap["PageResource"].meta },
34
- });
35
-
36
- return [fields, model] as const;
37
- });
38
-
39
- return (
40
- <Show
41
- isLoading={isLoading}
42
- headerButtons={
43
- <>
44
- <ListButton/>
45
- <EditButton recordItemId={record?.id} />
46
- <CloneButton recordItemId={record?.id} />
47
- <DeleteButton recordItemId={record?.id} />
48
- <RefreshButton
49
- recordItemId={record?.id}
50
- meta={{ select: showPrismaSelect}}
51
- />
52
- </>
53
- }
54
- >
55
- {fields.map((field: any) => {
56
- return getShowField(field, resourceName, record, t, model, modelsMap);
57
- })}
58
- </Show>
59
- );
60
- };
61
-
@@ -1,113 +0,0 @@
1
-
2
- import {
3
- FieldDataType,
4
- handleInitialValues,
5
- handleOnFinish,
6
- ModelType,
7
- produceModel,
8
- } from '@gadmin2n/react-common';
9
- import { Create, useFileUploadState, useForm } from "@refinedev/antd";
10
- import { Form } from "antd";
11
- import { IResourceComponentsProps, useApiUrl, useTranslate } from "@refinedev/core";
12
- import React, { useContext, useState } from "react";
13
- import { getFormItem, onFormValuesChange } from "../../helpers";
14
- import { modelsMap, modelsEnum } from "../../generated/models.index";
15
- import {
16
- resourceFormConfig as formConfig,
17
- resourceFormPrismaSelect as formPrismaSelect,
18
- } from "../../generated/props/resource/config";
19
- import {
20
- resourceModel,
21
- useRelation,
22
- } from "../../generated/props/resource/model";
23
- import { Resource } from "../../generated/types/prisma.types";
24
- import { ResourceForm as transformClass } from "../../generated/props/resource/form.validator";
25
- import { BusinessContext } from 'components/contexts/business';
26
-
27
- export const ResourceCreate: React.FC<IResourceComponentsProps> = () => {
28
- const resourceName = "resource";
29
- const t = useTranslate();
30
-
31
-
32
-
33
- const [[fields, model]] = useState(() => {
34
- const model: ModelType = produceModel(
35
- resourceModel,
36
- {
37
- // all formItem attrs surport, https://ant.design/components/form#formitem
38
- // description : { component : <MDEditor data-color-mode="light" /> },
39
- // status : { normalize : (value: any) => value ? "1" : "0" },
40
- // cron: {validator: { validator: runCronValidator },},
41
- },
42
- transformClass
43
- );
44
-
45
- const fields: FieldDataType[] = formConfig.fields
46
- .map((fieldName: string) => model[fieldName])
47
- .filter((field: FieldDataType) => field);
48
-
49
- return [fields, model] as const;
50
- });
51
-
52
- const { formProps, saveButtonProps, onFinish, form } =
53
- useForm<Resource>({
54
- meta: { select: formPrismaSelect},
55
- });
56
- if (formProps.initialValues || formConfig.initialValues) {
57
- formProps.initialValues = handleInitialValues(
58
- formProps.initialValues || formConfig.initialValues || {},
59
- fields,
60
- );
61
- }
62
-
63
- const apiUrl = useApiUrl();
64
- const { isLoading, onChange } = useFileUploadState();
65
- const relationSelectProps = useRelation(modelsMap);
66
-
67
- return (
68
- <Create
69
- saveButtonProps={{
70
- ...saveButtonProps,
71
- disabled: isLoading,
72
- }}
73
- >
74
- <Form
75
- {...formProps}
76
- validateTrigger="onBlur"
77
- onFinish={(values) => {
78
- onFinish(
79
- handleOnFinish(
80
- {
81
- ...values,
82
-
83
- },
84
- fields
85
- )
86
- );
87
- }}
88
- layout="vertical"
89
- form={form}
90
- onValuesChange={onFormValuesChange(
91
- form,
92
- formConfig.reaction,
93
- )}
94
- >
95
- {fields.map((field) => {
96
- return getFormItem(
97
- field,
98
- resourceName,
99
- t,
100
- form,
101
- formConfig.reaction,
102
- modelsEnum,
103
- model,
104
- apiUrl,
105
- relationSelectProps,
106
- onChange
107
- );
108
- })}
109
- </Form>
110
- </Create>
111
- );
112
- };
113
-
@@ -1,122 +0,0 @@
1
-
2
- import {
3
- FieldDataType,
4
- handleInitialValues,
5
- handleOnFinish,
6
- ModelType,
7
- produceModel,
8
- } from "@gadmin2n/react-common";
9
- import { Edit, ListButton, RefreshButton, useFileUploadState, useForm } from "@refinedev/antd";
10
- import { Form } from "antd";
11
- import { IResourceComponentsProps, useApiUrl, useParsed, useTranslate } from "@refinedev/core";
12
- import { getFormItem, onFormValuesChange } from "../../helpers";
13
- import React, { useContext, useState } from "react";
14
-
15
- import { modelsMap, modelsEnum } from "../../generated/models.index";
16
- import {
17
- resourceFormConfig as formConfig,
18
- resourceFormPrismaSelect as formPrismaSelect,
19
- } from "../../generated/props/resource/config";
20
- import {
21
- resourceModel,
22
- useRelation,
23
- } from "../../generated/props/resource/model";
24
- import { Resource } from "../../generated/types/prisma.types";
25
- import { ResourceForm as transformClass } from "../../generated/props/resource/form.validator";
26
- import { BusinessContext } from 'components/contexts/business';
27
-
28
- export const ResourceEdit: React.FC<IResourceComponentsProps> = () => {
29
- const resourceName = "resource";
30
- const t = useTranslate();
31
-
32
-
33
- const [[fields, model]] = useState(() => {
34
- const model: ModelType = produceModel(
35
- resourceModel,
36
- {
37
- // all formItem attrs surport, https://ant.design/components/form#formitem
38
- // description : { component : <MDEditor data-color-mode="light" /> },
39
- // status : { normalize : (value: any) => value ? "1" : "0" },
40
- // cron: {validator: { validator: runCronValidator },},
41
- },
42
- transformClass
43
- );
44
-
45
- const fields: FieldDataType[] = formConfig.fields
46
- .map((fieldName: string) => model[fieldName])
47
- .filter((field: FieldDataType) => field);
48
-
49
- return [fields, model] as const;
50
- });
51
-
52
- const { formProps, saveButtonProps, onFinish, form } =
53
- useForm<Resource>({
54
- meta: { select: formPrismaSelect},
55
- });
56
- formProps.initialValues = handleInitialValues(
57
- formProps.initialValues || {},
58
- fields
59
- );
60
-
61
- const apiUrl = useApiUrl();
62
- const { isLoading, onChange } = useFileUploadState();
63
-
64
- const relationSelectProps = useRelation(modelsMap);
65
-
66
- return (
67
- <Edit
68
- saveButtonProps={{
69
- ...saveButtonProps,
70
- disabled: isLoading,
71
- }}
72
- headerButtons={
73
- <>
74
- <ListButton />
75
- <RefreshButton
76
- meta={{ select: formPrismaSelect}}
77
- />
78
- </>
79
- }
80
- >
81
- <Form
82
- {...formProps}
83
- validateTrigger="onBlur"
84
- onFinish={(values) => {
85
- onFinish(
86
- handleOnFinish(
87
- {
88
- ...values,
89
-
90
- id: undefined,
91
- },
92
- fields,
93
- "edit"
94
- )
95
- );
96
- }}
97
- layout="vertical"
98
- form={form}
99
- onValuesChange={onFormValuesChange(
100
- form,
101
- formConfig.reaction,
102
- )}
103
- >
104
- {fields.map((field) => {
105
- return getFormItem(
106
- field,
107
- resourceName,
108
- t,
109
- form,
110
- formConfig.reaction,
111
- modelsEnum,
112
- model,
113
- apiUrl,
114
- relationSelectProps,
115
- onChange
116
- );
117
- })}
118
- </Form>
119
- </Edit>
120
- );
121
- };
122
-
@@ -1,6 +0,0 @@
1
-
2
- export * from "./list";
3
- export * from "./create";
4
- export * from "./edit";
5
- export * from "./show";
6
-
@@ -1,61 +0,0 @@
1
-
2
- import { ModelType, getColumns, produceModel } from "@gadmin2n/react-common";
3
- import { CloneButton, DeleteButton, EditButton, ListButton, RefreshButton, Show } from "@refinedev/antd";
4
- import { IResourceComponentsProps, useShow, useTranslate } from "@refinedev/core";
5
- import React, { useState } from "react";
6
- import { getShowField } from "../../helpers";
7
- import type { Resource } from "../../generated/types/prisma.types"; //'.prisma/client/index';
8
- import {
9
- resourceShowConfig as showConfig,
10
- resourceShowPrismaSelect as showPrismaSelect,
11
- } from "../../generated/props/resource/config";
12
- import { resourceModel } from "../../generated/props/resource/model";
13
- import { modelsMap } from "generated/models.index";
14
-
15
- export const ResourceShow: React.FC<IResourceComponentsProps> = () => {
16
- const resourceName = "resource";
17
- const t = useTranslate();
18
-
19
- const { queryResult } = useShow<Resource>({
20
- meta: { select: showPrismaSelect},
21
- });
22
- const { data, isLoading } = queryResult;
23
- const record = data?.data;
24
-
25
- const [[fields, model]] = useState(() => {
26
- const model: ModelType = produceModel(resourceModel, {
27
- // status: { render: xxxxx }
28
- });
29
-
30
- // getColumns is a function that returns an array of fields
31
- const fields = getColumns("Resource", showConfig.fields, {
32
- ...modelsMap,
33
- Resource: { model, meta: modelsMap["Resource"].meta },
34
- });
35
-
36
- return [fields, model] as const;
37
- });
38
-
39
- return (
40
- <Show
41
- isLoading={isLoading}
42
- headerButtons={
43
- <>
44
- <ListButton/>
45
- <EditButton recordItemId={record?.id} />
46
- <CloneButton recordItemId={record?.id} />
47
- <DeleteButton recordItemId={record?.id} />
48
- <RefreshButton
49
- recordItemId={record?.id}
50
- meta={{ select: showPrismaSelect}}
51
- />
52
- </>
53
- }
54
- >
55
- {fields.map((field: any) => {
56
- return getShowField(field, resourceName, record, t, model, modelsMap);
57
- })}
58
- </Show>
59
- );
60
- };
61
-