openxiangda-cli 2.0.0-alpha.61 → 2.0.0-alpha.62

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 (38) hide show
  1. package/dist/create-workspace.d.ts.map +1 -1
  2. package/dist/create-workspace.js +1 -0
  3. package/dist/create-workspace.js.map +1 -1
  4. package/package.json +4 -4
  5. package/template/AGENTS.md +1 -1
  6. package/template/README.md +7 -7
  7. package/template/apps/server/package.json +1 -1
  8. package/template/apps/server/src/app.module.ts +1 -3
  9. package/template/apps/server/test/smoke.test.ts +6 -23
  10. package/template/apps/web/e2e/resources.spec.ts +20 -0
  11. package/template/apps/web/index.html +1 -1
  12. package/template/apps/web/package.json +1 -1
  13. package/template/apps/web/src/AuthoritativeSelector.tsx +38 -29
  14. package/template/apps/web/src/Shell.tsx +39 -211
  15. package/template/apps/web/src/components/platform-fields/AttachmentFileList.tsx +1 -1
  16. package/template/apps/web/src/components/resource/GeneratedResourceCrud.tsx +26 -5
  17. package/template/apps/web/src/components/resource/SurfaceFields.tsx +32 -1
  18. package/template/apps/web/src/data-provider.ts +23 -102
  19. package/template/apps/web/src/main.tsx +22 -82
  20. package/template/apps/web/src/platform-client.ts +71 -415
  21. package/template/apps/web/src/runtime-meta.ts +1 -1
  22. package/template/apps/web/src/styles.css +3 -3
  23. package/template/apps/web/test/contracts.test.ts +31 -769
  24. package/template/openxiangda.config.ts +14 -81
  25. package/template/package.json +3 -3
  26. package/template/packages/contracts/src/generated.ts +7 -804
  27. package/template/apps/server/src/instrument-context.controller.ts +0 -25
  28. package/template/apps/web/e2e/instruments.spec.ts +0 -1338
  29. package/template/apps/web/src/CollegePage.tsx +0 -181
  30. package/template/apps/web/src/InstrumentDetailPage.tsx +0 -176
  31. package/template/apps/web/src/InstrumentForm.tsx +0 -380
  32. package/template/apps/web/src/InstrumentFormPage.tsx +0 -82
  33. package/template/apps/web/src/InstrumentListPage.tsx +0 -457
  34. package/template/apps/web/src/fields.ts +0 -18
  35. package/template/apps/web/src/instrument.ts +0 -56
  36. package/template/platform/data/colleges.ts +0 -21
  37. package/template/platform/data/instrument-surface.ts +0 -125
  38. package/template/platform/data/instruments.ts +0 -83
@@ -4,105 +4,45 @@ import zhCN from 'antd/locale/zh_CN';
4
4
  import React from 'react';
5
5
  import ReactDOM from 'react-dom/client';
6
6
  import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom';
7
+ import { resourceDefinitions } from '../../../packages/contracts/src/generated.js';
7
8
  import { applicationProvider } from './data-provider';
8
- import { CollegePage } from './CollegePage';
9
9
  import { GeneratedResourcePage } from './components/resource/GeneratedResourceCrud';
10
10
  import { FilePreviewPage } from './FilePreviewPage';
11
- import { InstrumentDetailPage } from './InstrumentDetailPage';
12
- import { InstrumentFormPage } from './InstrumentFormPage';
13
- import { InstrumentListPage } from './InstrumentListPage';
11
+ import { EmptyApplicationPage } from './Shell';
14
12
  import { RuntimeBoundary } from './runtime';
15
13
  import { applicationBasename } from './runtime-meta';
16
14
  import './styles.css';
17
- import { resourceDefinitions } from '../../../packages/contracts/src/generated.js';
15
+
16
+ const codes = Object.keys(resourceDefinitions);
17
+ const firstPath = codes[0] ? `/${codes[0]}` : '/';
18
+
19
+ const resourceRoutes = codes.flatMap(resourceCode => [
20
+ <Route key={`${resourceCode}-list`} path={`/${resourceCode}`} element={<GeneratedResourcePage resourceCode={resourceCode} />} />,
21
+ <Route key={`${resourceCode}-new`} path={`/${resourceCode}/new`} element={<GeneratedResourcePage mode="create" resourceCode={resourceCode} />} />,
22
+ <Route key={`${resourceCode}-detail`} path={`/${resourceCode}/:id`} element={<GeneratedResourcePage mode="detail" resourceCode={resourceCode} />} />,
23
+ <Route key={`${resourceCode}-edit`} path={`/${resourceCode}/:id/edit`} element={<GeneratedResourcePage mode="edit" resourceCode={resourceCode} />} />,
24
+ <Route key={`${resourceCode}-mobile-list`} path={`/m/${resourceCode}`} element={<GeneratedResourcePage resourceCode={resourceCode} variant="mobile" />} />,
25
+ <Route key={`${resourceCode}-mobile-new`} path={`/m/${resourceCode}/new`} element={<GeneratedResourcePage mode="create" resourceCode={resourceCode} variant="mobile" />} />,
26
+ <Route key={`${resourceCode}-mobile-detail`} path={`/m/${resourceCode}/:id`} element={<GeneratedResourcePage mode="detail" resourceCode={resourceCode} variant="mobile" />} />,
27
+ <Route key={`${resourceCode}-mobile-edit`} path={`/m/${resourceCode}/:id/edit`} element={<GeneratedResourcePage mode="edit" resourceCode={resourceCode} variant="mobile" />} />,
28
+ ]);
18
29
 
19
30
  ReactDOM.createRoot(document.getElementById('root')!).render(
20
31
  <React.StrictMode>
21
- <ConfigProvider
22
- locale={zhCN}
23
- theme={{
24
- token: {
25
- borderRadius: 8,
26
- colorBgLayout: '#f3f7fd',
27
- colorPrimary: '#1677ff',
28
- colorText: '#172033',
29
- fontSize: 14,
30
- },
31
- components: {
32
- Card: { headerFontSize: 16 },
33
- Layout: { bodyBg: '#f3f7fd', headerBg: '#ffffff', siderBg: '#ffffff' },
34
- Menu: { itemBorderRadius: 8, itemSelectedBg: '#eaf3ff' },
35
- },
36
- }}
37
- >
32
+ <ConfigProvider locale={zhCN} theme={{ token: { borderRadius: 8, colorBgLayout: '#f3f7fd', colorPrimary: '#1677ff', colorText: '#172033', fontSize: 14 }, components: { Card: { headerFontSize: 16 }, Layout: { bodyBg: '#f3f7fd', headerBg: '#ffffff', siderBg: '#ffffff' }, Menu: { itemBorderRadius: 8, itemSelectedBg: '#eaf3ff' } } }}>
38
33
  <AntdApp>
39
34
  <RuntimeBoundary>
40
35
  <BrowserRouter basename={applicationBasename()}>
41
- <Refine
42
- dataProvider={applicationProvider}
43
- resources={[
44
- {
45
- name: 'instruments',
46
- list: '/instruments',
47
- create: '/instruments/new',
48
- edit: '/instruments/:id/edit',
49
- show: '/instruments/:id',
50
- },
51
- ]}
52
- >
36
+ <Refine dataProvider={applicationProvider} resources={codes.map(code => ({ name: code, list: `/${code}`, create: `/${code}/new`, edit: `/${code}/:id/edit`, show: `/${code}/:id` }))}>
53
37
  <Routes>
54
- <Route path="/" element={<Navigate replace to="/instruments" />} />
55
- <Route path="/instruments" element={<InstrumentListPage />} />
56
- <Route
57
- path="/m/instruments"
58
- element={<InstrumentListPage variant="mobile" />}
59
- />
60
- <Route path="/colleges" element={<CollegePage />} />
61
- <Route
62
- path="/files/:resourceCode/:fileId/preview"
63
- element={<FilePreviewPage />}
64
- />
65
- <Route
66
- path="/instruments/new"
67
- element={<InstrumentFormPage mode="create" />}
68
- />
69
- <Route
70
- path="/instruments/:id/edit"
71
- element={<InstrumentFormPage mode="edit" />}
72
- />
73
- <Route
74
- path="/instruments/:id"
75
- element={<InstrumentDetailPage />}
76
- />
77
- <Route
78
- path="/m/instruments/:id"
79
- element={<InstrumentDetailPage variant="mobile" />}
80
- />
81
- <Route
82
- path="/m/instruments/new"
83
- element={<InstrumentFormPage mode="create" variant="mobile" />}
84
- />
85
- <Route
86
- path="/m/instruments/:id/edit"
87
- element={<InstrumentFormPage mode="edit" variant="mobile" />}
88
- />
89
- {Object.entries(resourceDefinitions)
90
- .filter(([, definition]) => definition.surface.generated !== false)
91
- .flatMap(([resourceCode]) => [
92
- <Route key={`${resourceCode}-list`} path={`/${resourceCode}`} element={<GeneratedResourcePage resourceCode={resourceCode} />} />,
93
- <Route key={`${resourceCode}-new`} path={`/${resourceCode}/new`} element={<GeneratedResourcePage mode="create" resourceCode={resourceCode} />} />,
94
- <Route key={`${resourceCode}-detail`} path={`/${resourceCode}/:id`} element={<GeneratedResourcePage mode="detail" resourceCode={resourceCode} />} />,
95
- <Route key={`${resourceCode}-edit`} path={`/${resourceCode}/:id/edit`} element={<GeneratedResourcePage mode="edit" resourceCode={resourceCode} />} />,
96
- <Route key={`${resourceCode}-mobile-list`} path={`/m/${resourceCode}`} element={<GeneratedResourcePage resourceCode={resourceCode} variant="mobile" />} />,
97
- <Route key={`${resourceCode}-mobile-new`} path={`/m/${resourceCode}/new`} element={<GeneratedResourcePage mode="create" resourceCode={resourceCode} variant="mobile" />} />,
98
- <Route key={`${resourceCode}-mobile-detail`} path={`/m/${resourceCode}/:id`} element={<GeneratedResourcePage mode="detail" resourceCode={resourceCode} variant="mobile" />} />,
99
- <Route key={`${resourceCode}-mobile-edit`} path={`/m/${resourceCode}/:id/edit`} element={<GeneratedResourcePage mode="edit" resourceCode={resourceCode} variant="mobile" />} />,
100
- ])}
38
+ <Route path="/" element={codes.length ? <Navigate replace to={firstPath} /> : <EmptyApplicationPage />} />
39
+ <Route path="/files/:resourceCode/:fileId/preview" element={<FilePreviewPage />} />
40
+ {resourceRoutes}
101
41
  </Routes>
102
42
  </Refine>
103
43
  </BrowserRouter>
104
44
  </RuntimeBoundary>
105
45
  </AntdApp>
106
46
  </ConfigProvider>
107
- </React.StrictMode>
47
+ </React.StrictMode>,
108
48
  );