@gadmin2n/prisma-react-generator 0.0.35

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 (37) hide show
  1. package/LICENSE +177 -0
  2. package/README.md +1 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +4 -0
  5. package/dist/generator/field-classifiers.d.ts +13 -0
  6. package/dist/generator/field-classifiers.js +45 -0
  7. package/dist/generator/generate-config-props.d.ts +21 -0
  8. package/dist/generator/generate-config-props.js +198 -0
  9. package/dist/generator/generate-create-page.d.ts +13 -0
  10. package/dist/generator/generate-create-page.js +129 -0
  11. package/dist/generator/generate-edit-page.d.ts +13 -0
  12. package/dist/generator/generate-edit-page.js +138 -0
  13. package/dist/generator/generate-index-page.d.ts +13 -0
  14. package/dist/generator/generate-index-page.js +16 -0
  15. package/dist/generator/generate-list-page.d.ts +13 -0
  16. package/dist/generator/generate-list-page.js +262 -0
  17. package/dist/generator/generate-model-props.d.ts +14 -0
  18. package/dist/generator/generate-model-props.js +78 -0
  19. package/dist/generator/generate-models-index.d.ts +9 -0
  20. package/dist/generator/generate-models-index.js +19 -0
  21. package/dist/generator/generate-resources.d.ts +8 -0
  22. package/dist/generator/generate-resources.js +33 -0
  23. package/dist/generator/generate-show-page.d.ts +13 -0
  24. package/dist/generator/generate-show-page.js +71 -0
  25. package/dist/generator/generate-ui-config.d.ts +2 -0
  26. package/dist/generator/generate-ui-config.js +354 -0
  27. package/dist/generator/helpers.d.ts +55 -0
  28. package/dist/generator/helpers.js +356 -0
  29. package/dist/generator/index.d.ts +9 -0
  30. package/dist/generator/index.js +131 -0
  31. package/dist/generator/template-helpers.d.ts +27 -0
  32. package/dist/generator/template-helpers.js +78 -0
  33. package/dist/generator/types.d.ts +27 -0
  34. package/dist/generator/types.js +2 -0
  35. package/dist/index.d.ts +3 -0
  36. package/dist/index.js +53 -0
  37. package/package.json +79 -0
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateEditPage = void 0;
4
+ const case_1 = require("case");
5
+ const helpers_1 = require("./helpers");
6
+ const { readFileSync } = require('fs');
7
+ const generateEditPage = ({ model, templateHelpers: t, uiConfig, allModels, }) => {
8
+ const instanceName = (0, case_1.camel)(model.name);
9
+ const gameAngle = (0, helpers_1.isGameAngle)(model);
10
+ return `
11
+ import {
12
+ FieldDataType,
13
+ handleInitialValues,
14
+ handleOnFinish,
15
+ ModelType,
16
+ produceModel,
17
+ } from "@gadmin2/react-common";
18
+ import { Edit, ListButton, RefreshButton, useFileUploadState, useForm } from "@refinedev/antd";
19
+ import { Form } from "antd";
20
+ import { IResourceComponentsProps, useApiUrl, useParsed, useTranslate } from "@refinedev/core";
21
+ import { getFormItem, onFormValuesChange } from "../../helpers";
22
+ import React, { useContext, useState } from "react";
23
+
24
+ import { modelsMap, modelsEnum } from "../../generated/models.index";
25
+ import {
26
+ ${instanceName}FormConfig as formConfig,
27
+ ${instanceName}FormPrismaSelect as formPrismaSelect,
28
+ } from "../../generated/props/${instanceName}/config";
29
+ import {
30
+ ${instanceName}Model,
31
+ useRelation,
32
+ } from "../../generated/props/${instanceName}/model";
33
+ import { ${model.name} } from "../../generated/types/prisma.types";
34
+ import { ${model.name}Form as transformClass } from "../../generated/props/${instanceName}/form.validator";
35
+ import { BusinessContext } from 'components/contexts/business';
36
+
37
+ export const ${model.name}Edit: React.FC<IResourceComponentsProps> = () => {
38
+ const resourceName = "${instanceName}";
39
+ const t = useTranslate();
40
+ ${gameAngle
41
+ ? 'const {business: { gameId }} = useContext(BusinessContext);'
42
+ : ''}
43
+
44
+ const [[fields, model]] = useState(() => {
45
+ const model: ModelType = produceModel(
46
+ ${instanceName}Model,
47
+ {
48
+ // all formItem attrs surport, https://ant.design/components/form#formitem
49
+ // description : { component : <MDEditor data-color-mode="light" /> },
50
+ // status : { normalize : (value: any) => value ? "1" : "0" },
51
+ // cron: {validator: { validator: runCronValidator },},
52
+ },
53
+ transformClass
54
+ );
55
+
56
+ const fields: FieldDataType[] = formConfig.fields
57
+ .map((fieldName: string) => model[fieldName])
58
+ .filter((field: FieldDataType) => field);
59
+
60
+ return [fields, model] as const;
61
+ });
62
+
63
+ const { formProps, saveButtonProps, onFinish, form } =
64
+ useForm<${model.name}>({
65
+ meta: { select: formPrismaSelect},
66
+ });
67
+ formProps.initialValues = handleInitialValues(
68
+ formProps.initialValues || {},
69
+ fields
70
+ );
71
+
72
+ const apiUrl = useApiUrl();
73
+ const { isLoading, onChange } = useFileUploadState();
74
+
75
+ const relationSelectProps = useRelation(modelsMap);
76
+
77
+ return (
78
+ <Edit
79
+ saveButtonProps={{
80
+ ...saveButtonProps,
81
+ disabled: isLoading,
82
+ }}
83
+ headerButtons={
84
+ <>
85
+ <ListButton />
86
+ <RefreshButton
87
+ meta={{ select: formPrismaSelect}}
88
+ />
89
+ </>
90
+ }
91
+ >
92
+ <Form
93
+ {...formProps}
94
+ validateTrigger="onBlur"
95
+ onFinish={(values) => {
96
+ onFinish(
97
+ handleOnFinish(
98
+ {
99
+ ...values,
100
+ ${gameAngle
101
+ ? 'gameId: gameId === "-1" ? undefined : gameId,'
102
+ : ''}
103
+ id: undefined,
104
+ },
105
+ fields,
106
+ "edit"
107
+ )
108
+ );
109
+ }}
110
+ layout="vertical"
111
+ form={form}
112
+ onValuesChange={onFormValuesChange(
113
+ form,
114
+ formConfig.reaction,
115
+ )}
116
+ >
117
+ {fields.map((field) => {
118
+ return getFormItem(
119
+ field,
120
+ resourceName,
121
+ t,
122
+ form,
123
+ formConfig.reaction,
124
+ modelsEnum,
125
+ model,
126
+ apiUrl,
127
+ relationSelectProps,
128
+ onChange
129
+ );
130
+ })}
131
+ </Form>
132
+ </Edit>
133
+ );
134
+ };
135
+
136
+ `;
137
+ };
138
+ exports.generateEditPage = generateEditPage;
@@ -0,0 +1,13 @@
1
+ import type { TemplateHelpers } from './template-helpers';
2
+ import { DMMF } from '@prisma/generator-helper';
3
+ interface GenerateIndexPage {
4
+ model: DMMF.Model;
5
+ templateHelpers: TemplateHelpers;
6
+ uiConfig: {
7
+ modelsConfig: any;
8
+ pageActions: any;
9
+ };
10
+ allModels: DMMF.Model[];
11
+ }
12
+ export declare const generateIndexPage: ({ model, templateHelpers: t, uiConfig, allModels, }: GenerateIndexPage) => string;
13
+ export {};
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateIndexPage = void 0;
4
+ const case_1 = require("case");
5
+ const fs = require("fs");
6
+ const generateIndexPage = ({ model, templateHelpers: t, uiConfig, allModels, }) => {
7
+ const instanceName = (0, case_1.camel)(model.name);
8
+ return `
9
+ export * from "./list";
10
+ export * from "./create";
11
+ export * from "./edit";
12
+ export * from "./show";
13
+
14
+ `;
15
+ };
16
+ exports.generateIndexPage = generateIndexPage;
@@ -0,0 +1,13 @@
1
+ import type { TemplateHelpers } from './template-helpers';
2
+ import { DMMF } from '@prisma/generator-helper';
3
+ interface GenerateListPage {
4
+ model: DMMF.Model;
5
+ templateHelpers: TemplateHelpers;
6
+ uiConfig: {
7
+ modelsConfig: any;
8
+ pageActions: any;
9
+ };
10
+ allModels: DMMF.Model[];
11
+ }
12
+ export declare const generateListPage: ({ model, templateHelpers: t, uiConfig, allModels, }: GenerateListPage) => string;
13
+ export {};
@@ -0,0 +1,262 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateListPage = void 0;
4
+ const case_1 = require("case");
5
+ const helpers_1 = require("./helpers");
6
+ const generateListPage = ({ model, templateHelpers: t, uiConfig, allModels, }) => {
7
+ const instanceName = (0, case_1.camel)(model.name);
8
+ const gameAngle = (0, helpers_1.isGameAngle)(model);
9
+ return `
10
+ /**
11
+ * ${model.name} List Page
12
+ *
13
+ * Generated using simplified pattern with @gadmin2/react-common hooks and components.
14
+ *
15
+ * Flexibility Levels:
16
+ * 1. Basic usage - Use components with defaults (this file)
17
+ * 2. Render props - Customize specific buttons/elements
18
+ * 3. Children function - Complete UI control
19
+ * 4. Core hooks - No UI assumptions, full control
20
+ *
21
+ * See: examples/ListPageExamples.tsx for all patterns
22
+ */
23
+ import React, { useMemo } from 'react';
24
+ import { Table } from 'antd';
25
+ import { List, useTable, useImport } from '@refinedev/antd';
26
+ import {
27
+ HttpError,
28
+ IResourceComponentsProps,
29
+ parseTableParams,
30
+ useExport,
31
+ useTranslate,
32
+ useApiUrl,
33
+ } from '@refinedev/core';
34
+ import { useLocation } from 'react-router-dom';
35
+ import {
36
+ getColumns,
37
+ ModelType,
38
+ produceModel,
39
+ tableSearchBar,
40
+ } from '@gadmin2/react-common';
41
+
42
+ // Generated imports
43
+ import { modelsEnum, modelsMap } from 'generated/models.index';
44
+ import {
45
+ ${instanceName}TableConfig as tableConfig,
46
+ ${instanceName}TablePrismaSelect as prismaSelect,
47
+ } from 'generated/props/${instanceName}/config';
48
+ import { ${instanceName}Model, useRelation } from 'generated/props/${instanceName}/model';
49
+ import type { ${model.name} } from 'generated/types/prisma.types';
50
+
51
+ // Local imports
52
+ import {
53
+ BulkActions,
54
+ ListPageHeader,
55
+ RowActions,
56
+ SearchBar,
57
+ } from 'components';
58
+ import { getRowActionsColumnProps } from 'components/agentPanel';
59
+ import { LogButton } from 'components/auditLog';
60
+ import { requestHeaders } from 'helpers/login';
61
+ import { useBatchOperations } from 'hooks';
62
+ import {
63
+ createSearchFormOnFinish,
64
+ getSearchFormInitialValues,
65
+ getTableColumnV2,
66
+ TableColumnContext
67
+ } from 'helpers';
68
+ ${gameAngle
69
+ ? "import { BusinessContext } from 'components/contexts/business';"
70
+ : ''}
71
+
72
+ const { placeholder: searchPlaceholder, getSearchFilters } = tableSearchBar(
73
+ tableConfig['toolbar']['searchBar'],
74
+ ${instanceName}Model,
75
+ );
76
+
77
+ // https://refine.dev/docs/api-reference/antd/hooks/table/useTable/
78
+ export const ${model.name}List: React.FC<IResourceComponentsProps> = () => {
79
+ const resourceName = '${instanceName}';
80
+ const t = useTranslate();
81
+ const apiUrl = useApiUrl();
82
+ const { search } = useLocation();
83
+ const { parsedSorter, parsedFilters } = parseTableParams(search);
84
+ ${gameAngle
85
+ ? 'const { business: { gameId } } = React.useContext(BusinessContext);'
86
+ : ''}
87
+
88
+ // Relations
89
+ const relationSelectProps = useRelation(modelsMap);
90
+
91
+ // Model with customizations
92
+ const [columns, model] = useMemo(() => {
93
+ const model: ModelType = produceModel(${instanceName}Model, {
94
+ // Custom column renderers can be added here
95
+ // cron: { render: (value) => humanizeCronInChinese(value) },
96
+ });
97
+
98
+ const columns = getColumns('${model.name}', tableConfig.fields, {
99
+ ...modelsMap,
100
+ ${model.name}: { model, meta: modelsMap['${model.name}'].meta },
101
+ });
102
+
103
+ return [columns, model] as const;
104
+ }, []);
105
+
106
+ // Table hook
107
+ const {
108
+ tableProps,
109
+ sorters: sorter,
110
+ setCurrent,
111
+ setFilters,
112
+ filters,
113
+ tableQueryResult,
114
+ searchFormProps,
115
+ } = useTable<${model.name}, HttpError>({
116
+ meta: { transformQFn: getSearchFilters, select: prismaSelect },
117
+ filters: { initial: parsedFilters, defaultBehavior: 'merge' },
118
+ sorters: { initial: parsedSorter },
119
+ ${gameAngle
120
+ ? `permanentFilter: [{ field: 'gameId', operator: 'eq', value: gameId === '-1' ? undefined : gameId }],`
121
+ : ''}
122
+ });
123
+
124
+ // initialValues: 从 URL 的 parsedFilters 中恢复 q(搜索关键词)和 createdAt(日期范围)
125
+ // onFinish: 将表单值转换为 CrudFilters 并更新筛选条件
126
+ // 有 createdAt 字段的模型(默认)
127
+ searchFormProps.initialValues = getSearchFormInitialValues(parsedFilters);
128
+ searchFormProps.onFinish = createSearchFormOnFinish(setCurrent, setFilters);
129
+
130
+ // 没有 createdAt 字段的模型
131
+ // searchFormProps.initialValues = getSearchFormInitialValues(parsedFilters, { dateField: null });
132
+ // searchFormProps.onFinish = createSearchFormOnFinish(setCurrent, setFilters, { dateField: null });
133
+
134
+ // 使用其他日期字段(如 updatedAt)
135
+ // searchFormProps.initialValues = getSearchFormInitialValues(parsedFilters, { dateField: 'updatedAt' });
136
+ // searchFormProps.onFinish = createSearchFormOnFinish(setCurrent, setFilters, { dateField: 'updatedAt' });
137
+
138
+ // Batch operations (selection, update, delete)
139
+ const batchOps = useBatchOperations({
140
+ resourceName,
141
+ apiUrl,
142
+ requestHeaders,
143
+ onSuccess: () => tableQueryResult.refetch(),
144
+ t,
145
+ });
146
+
147
+ // Export all
148
+ const { triggerExport, isLoading: exportLoading } = useExport<${model.name}>({
149
+ maxItemCount: 200,
150
+ pageSize: 100,
151
+ ${gameAngle
152
+ ? `meta: { where: { gameId: { equals: gameId === '-1' ? undefined : gameId } } },`
153
+ : ''}
154
+ });
155
+
156
+ // Export selected
157
+ const { triggerExport: triggerExportSelected, isLoading: exportSelectedLoading } =
158
+ useExport<${model.name}>({
159
+ pageSize: 100,
160
+ meta: { where: { id: { in: batchOps.selectedRowKeys.map(Number) } } },
161
+ });
162
+
163
+ // Import
164
+ const importProps = useImport<${model.name}>({
165
+ mapData: (item: any) => ({
166
+ ...item,
167
+ ${gameAngle ? "gameId: gameId === '-1' ? undefined : gameId," : ''}
168
+ }),
169
+ batchSize: 1,
170
+ });
171
+
172
+ // Context for table columns
173
+ const columnContext: TableColumnContext = {
174
+ resourceName,
175
+ t,
176
+ model,
177
+ modelsEnum,
178
+ modelsMap,
179
+ tableConfig,
180
+ sorter,
181
+ filters,
182
+ relationSelectProps,
183
+ };
184
+
185
+ return (
186
+ <List
187
+ headerProps={{
188
+ subTitle: batchOps.hasSelected && (
189
+ <BulkActions
190
+ selectedRowKeys={batchOps.selectedRowKeys}
191
+ actions={tableConfig.rowSelection.actions}
192
+ onUpdateSelected={batchOps.updateSelectedItems}
193
+ onDeleteSelected={batchOps.deleteSelectedItems}
194
+ onExportSelected={triggerExportSelected}
195
+ updateLoading={batchOps.updateManyIsLoading}
196
+ deleteLoading={batchOps.deleteManyIsLoading}
197
+ exportLoading={exportSelectedLoading}
198
+ t={t}
199
+ resourceName={resourceName}
200
+ // Render props examples (uncomment to customize):
201
+ // renderDeleteButton={(onClick, loading) => <Button danger onClick={onClick} loading={loading}>Delete</Button>}
202
+ // renderSelectionCount={(count) => <Badge count={count}><Tag>Selected</Tag></Badge>}
203
+ // extraActions={<Button>Custom Action</Button>}
204
+ />
205
+ ),
206
+ extra: (
207
+ <ListPageHeader
208
+ importProps={importProps}
209
+ onExport={triggerExport}
210
+ exportLoading={exportLoading}
211
+ />
212
+ ),
213
+ }}
214
+ >
215
+ {/* Search Bar */}
216
+ <SearchBar
217
+ formProps={searchFormProps}
218
+ t={t}
219
+ resourceName={resourceName}
220
+ searchPlaceholder={searchPlaceholder}
221
+ // Render props examples (uncomment to customize):
222
+ // renderKeywordInput={(field, defaultInput) => <Input.Search placeholder={field.placeholder} />}
223
+ // renderSubmitButton={(defaultButton) => <Space>{defaultButton}<Button>Reset</Button></Space>}
224
+ // extraActions={<Button type="link">Advanced</Button>}
225
+ />
226
+
227
+ {/* Data Table */}
228
+ <Table {...tableProps} rowKey="id" rowSelection={batchOps.rowSelection}>
229
+ {columns.map((col) => getTableColumnV2({ col, context: columnContext }))}
230
+
231
+ {/* Actions Column */}
232
+ <Table.Column<${model.name}>
233
+ title={t('table.actions')}
234
+ dataIndex="actions"
235
+ {...getRowActionsColumnProps(resourceName)}
236
+ render={(_, record) => (
237
+ <RowActions
238
+ record={record}
239
+ actions={tableConfig.rowActions.actions}
240
+ onUpdate={batchOps.updateOne}
241
+ updateLoading={batchOps.updateManyIsLoading}
242
+ t={t}
243
+ resourceName={resourceName}
244
+ LogButton={LogButton}
245
+ // Render props examples (uncomment to customize):
246
+ // showClone={false}
247
+ // showDelete={false}
248
+ // renderEditButton={(id) => <Button type="link" size="small">Quick Edit</Button>}
249
+ // renderDeleteButton={(id) => <Popconfirm title="Sure?"><Button danger size="small">Remove</Button></Popconfirm>}
250
+ // extraPrimaryActions={<Button type="text" size="small">Quick View</Button>}
251
+ />
252
+ )}
253
+ />
254
+ </Table>
255
+ </List>
256
+ );
257
+ };
258
+
259
+ export default ${model.name}List;
260
+ `;
261
+ };
262
+ exports.generateListPage = generateListPage;
@@ -0,0 +1,14 @@
1
+ import { TemplateHelpers } from './template-helpers';
2
+ import { DMMF } from '@prisma/generator-helper';
3
+ interface GenerateModelProps {
4
+ dmmf: DMMF.Document;
5
+ model: DMMF.Model;
6
+ templateHelpers: TemplateHelpers;
7
+ uiConfig: {
8
+ modelsConfig: any;
9
+ pageActions: any;
10
+ };
11
+ allModels: DMMF.Model[];
12
+ }
13
+ export declare const generateModelProps: ({ dmmf, model, templateHelpers: t, uiConfig, allModels, }: GenerateModelProps) => string;
14
+ export {};
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateModelProps = void 0;
4
+ const template_helpers_1 = require("./template-helpers");
5
+ const case_1 = require("case");
6
+ const helpers_1 = require("./helpers");
7
+ const generateModelProps = ({ dmmf, model, templateHelpers: t, uiConfig, allModels, }) => {
8
+ const instanceName = (0, case_1.camel)(model.name);
9
+ return `
10
+ import { ModelsFieldsTypeMap, ModelType } from "@gadmin2/react-common";
11
+ import { useSelect } from "@refinedev/antd";
12
+ ${t.each(dmmf.datamodel.models, (model) => `import type { ${model.name} } from '../../types/prisma.types';`, '\n')}
13
+ import { modelsMap } from '../../models.index';
14
+
15
+ export const ${instanceName}Model: ModelType = ${JSON.stringify(model.fields.reduce((acc, curField) => {
16
+ curField.uiType = (0, helpers_1.parseDocumentation)(curField.documentation || '', curField);
17
+ curField.tsType =
18
+ curField.kind === 'scalar' ? (0, template_helpers_1.scalarToTS)(curField.type) : 'undefined';
19
+ if (curField.kind === 'enum') {
20
+ curField.tsType = 'string';
21
+ }
22
+ acc[curField.name] = curField;
23
+ if (curField.kind === 'object') {
24
+ if (curField.isList) {
25
+ acc[`_count.${curField.name}`] = {
26
+ ...curField,
27
+ name: `_count.${curField.name}`,
28
+ kind: 'scalar',
29
+ isList: false,
30
+ isRequired: false,
31
+ isUnique: false,
32
+ isId: false,
33
+ isReadOnly: true,
34
+ hasDefaultValue: false,
35
+ type: 'Int',
36
+ isGenerated: false,
37
+ isUpdatedAt: false,
38
+ documentation: '',
39
+ tsType: 'number',
40
+ };
41
+ }
42
+ acc[`${curField.name}.connect`] = {
43
+ ...curField,
44
+ name: `${curField.name}.connect`,
45
+ };
46
+ acc[`${curField.name}.create`] = {
47
+ ...curField,
48
+ name: `${curField.name}.create`,
49
+ };
50
+ }
51
+ return acc;
52
+ }, {}))};
53
+
54
+ export function useRelation(modelsMap: ModelsFieldsTypeMap) {
55
+ ${t.each(model.fields.filter((field) => field.kind === 'object'), (field) => `
56
+ const nameKey${field.type} = modelsMap['${field.type}']['meta']['nameKeys'][0] || 'id';
57
+ const { selectProps: ${(0, case_1.camel)(field.type)}SelectProps } = useSelect<${field.type}>({
58
+ resource: "${(0, case_1.camel)(field.type)}",
59
+ optionLabel: nameKey${field.type} || "id",
60
+ optionValue: nameKey${field.type} || "id",
61
+ onSearch: (value: string) => [
62
+ {
63
+ field: nameKey${field.type},
64
+ operator: "contains",
65
+ value,
66
+ },
67
+ ],
68
+ });
69
+ `, '\n')}
70
+
71
+
72
+ return {
73
+ ${t.each(model.fields.filter((field) => field.kind === 'object'), (field) => `${field.name}: ${(0, case_1.camel)(field.type)}SelectProps,`, '\n')}
74
+ };
75
+ }
76
+ `;
77
+ };
78
+ exports.generateModelProps = generateModelProps;
@@ -0,0 +1,9 @@
1
+ import type { TemplateHelpers } from './template-helpers';
2
+ import { DMMF } from '@prisma/generator-helper';
3
+ interface GenerateModelsIndexParam {
4
+ models: DMMF.Model[];
5
+ enums: DMMF.SchemaEnum[];
6
+ templateHelpers: TemplateHelpers;
7
+ }
8
+ export declare const generateModelsIndex: ({ models, enums, templateHelpers: t, }: GenerateModelsIndexParam) => string;
9
+ export {};
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateModelsIndex = void 0;
4
+ const case_1 = require("case");
5
+ const helpers_1 = require("./helpers");
6
+ const generateModelsIndex = ({ models, enums, templateHelpers: t, }) => `
7
+ ${t.each(models, (model) => `
8
+ import { ${(0, case_1.camel)(model.name)}Model } from "./props/${(0, case_1.camel)(model.name)}/model";
9
+ import { ${(0, case_1.camel)(model.name)}Metadata } from "./props/${(0, case_1.camel)(model.name)}/config";
10
+ `, '')}
11
+
12
+ export const modelsEnum = ${JSON.stringify((0, helpers_1.getModelsEnum)(enums || []))};
13
+
14
+ export const modelsMap = {
15
+ ${t.each(models, (model) => `${model.name}: { model: ${(0, case_1.camel)(model.name)}Model , meta: ${(0, case_1.camel)(model.name)}Metadata },`, '\n')}
16
+ };
17
+
18
+ `;
19
+ exports.generateModelsIndex = generateModelsIndex;
@@ -0,0 +1,8 @@
1
+ import type { TemplateHelpers } from './template-helpers';
2
+ import { DMMF } from '@prisma/generator-helper';
3
+ interface GenerateResources {
4
+ models: DMMF.Model[];
5
+ templateHelpers: TemplateHelpers;
6
+ }
7
+ export declare const generateResources: ({ models, templateHelpers: t, }: GenerateResources) => string;
8
+ export {};
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateResources = void 0;
4
+ const case_1 = require("case");
5
+ const generateResources = ({ models, templateHelpers: t, }) => `
6
+ import { ResourceProps } from "@refinedev/core";
7
+
8
+ ${t.each(models, (model) => `import { ${model.name}List, ${model.name}Create, ${model.name}Edit, ${model.name}Show } from "../pages/${(0, case_1.camel)(model.name)}";`, '\n')}
9
+
10
+ const resources: ResourceProps[] = [
11
+ ${t.each(models, (model) => `{
12
+ name: "${(0, case_1.camel)(model.name)}",
13
+ list: '/${(0, case_1.camel)(model.name)}',
14
+ create: "/${(0, case_1.camel)(model.name)}/create",
15
+ edit: "/${(0, case_1.camel)(model.name)}/edit/:id",
16
+ clone: "/${(0, case_1.camel)(model.name)}/clone/:id",
17
+ show: "/${(0, case_1.camel)(model.name)}/show/:id",
18
+ meta: {
19
+ canDelete: true,
20
+ components: {
21
+ list: ${model.name}List,
22
+ create: ${model.name}Create,
23
+ edit: ${model.name}Edit,
24
+ show: ${model.name}Show,
25
+ },
26
+ }
27
+ },`, '\n')}
28
+ ];
29
+
30
+ export default resources;
31
+
32
+ `;
33
+ exports.generateResources = generateResources;
@@ -0,0 +1,13 @@
1
+ import type { TemplateHelpers } from './template-helpers';
2
+ import { DMMF } from '@prisma/generator-helper';
3
+ interface GeneratePageShow {
4
+ model: DMMF.Model;
5
+ templateHelpers: TemplateHelpers;
6
+ uiConfig: {
7
+ modelsConfig: any;
8
+ pageActions: any;
9
+ };
10
+ allModels: DMMF.Model[];
11
+ }
12
+ export declare const generatePageShow: ({ model, templateHelpers: t, uiConfig, allModels, }: GeneratePageShow) => string;
13
+ export {};