@dovetail-v2/refine 0.0.66-pod-exec.0 → 0.1.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.
Files changed (238) hide show
  1. package/dist/{MonacoYamlDiffEditor-6b799b64.js → MonacoYamlDiffEditor-e737ae8d.js} +1 -1
  2. package/dist/{index-c07bed15.js → index-0c7bfb69.js} +5800 -19551
  3. package/dist/refine.js +162 -161
  4. package/dist/refine.umd.cjs +4780 -18531
  5. package/dist/style.css +11 -229
  6. package/lib/src/App.js +91 -0
  7. package/lib/src/Dovetail.js +45 -0
  8. package/lib/src/components/Breadcrumb/index.js +20 -0
  9. package/lib/src/components/ConditionsTable/ConditionsTable.js +56 -0
  10. package/lib/src/components/ConditionsTable/index.js +1 -0
  11. package/lib/src/components/CreateButton/index.js +10 -0
  12. package/lib/src/components/CronJobDropdown/index.js +26 -0
  13. package/lib/src/components/CronjobJobsTable/index.js +49 -0
  14. package/lib/src/components/DeleteButton/index.js +13 -0
  15. package/lib/src/components/DeleteManyButton/index.js +16 -0
  16. package/lib/src/components/DrawerShow/DrawerShow.js +13 -0
  17. package/lib/src/components/DrawerShow/index.js +1 -0
  18. package/lib/src/components/EditButton/index.js +13 -0
  19. package/lib/src/components/EditField/index.js +47 -0
  20. package/lib/src/components/ErrorContent/index.js +36 -0
  21. package/lib/src/components/EventsTable/EventsTable.js +59 -0
  22. package/lib/src/components/EventsTable/index.js +1 -0
  23. package/lib/src/components/Form/FormModal.d.ts +0 -1
  24. package/lib/src/components/Form/KeyValueListWidget.js +56 -0
  25. package/lib/src/components/Form/MetadataForm.js +9 -0
  26. package/lib/src/components/Form/NameInputWidget.js +50 -0
  27. package/lib/src/components/Form/NamespaceSelectWidget.js +21 -0
  28. package/lib/src/components/Form/index.js +4 -0
  29. package/lib/src/components/Form/widget.js +1 -0
  30. package/lib/src/components/FormErrorAlert/index.js +8 -0
  31. package/lib/src/components/FormLayout/index.js +21 -0
  32. package/lib/src/components/FormModal/index.js +51 -0
  33. package/lib/src/components/ImageNames/index.js +14 -0
  34. package/lib/src/components/IngressRulesComponent/index.js +11 -0
  35. package/lib/src/components/IngressRulesTable/IngressRulesTable.js +51 -0
  36. package/lib/src/components/IngressRulesTable/index.js +1 -0
  37. package/lib/src/components/K8sDropdown/index.js +31 -0
  38. package/lib/src/components/KeyValue/KeyValue.js +27 -0
  39. package/lib/src/components/KeyValue/index.js +1 -0
  40. package/lib/src/components/KeyValueData/index.js +50 -0
  41. package/lib/src/components/Layout/index.js +39 -0
  42. package/lib/src/components/ListPage/index.d.ts +1 -0
  43. package/lib/src/components/ListPage/index.js +25 -0
  44. package/lib/src/components/Menu/index.js +36 -0
  45. package/lib/src/components/NamespacesFilter/index.js +34 -0
  46. package/lib/src/components/NetworkPolicyRulesTable/NetworkPolicyRulesTable.d.ts +1 -2
  47. package/lib/src/components/NetworkPolicyRulesTable/NetworkPolicyRulesTable.js +77 -0
  48. package/lib/src/components/NetworkPolicyRulesTable/index.js +1 -0
  49. package/lib/src/components/PageShow/PageShow.js +11 -0
  50. package/lib/src/components/PageShow/index.js +1 -0
  51. package/lib/src/components/PodContainersTable/PodContainersTable.js +78 -0
  52. package/lib/src/components/PodContainersTable/index.js +1 -0
  53. package/lib/src/components/PodLog/index.js +136 -0
  54. package/lib/src/components/ReferenceLink/index.js +17 -0
  55. package/lib/src/components/RefineForm/RefineFormContent.d.ts +10 -0
  56. package/lib/src/components/RefineForm/RefineFormModal.d.ts +8 -0
  57. package/lib/src/components/RefineForm/RefineFormPage.d.ts +7 -0
  58. package/lib/src/components/RefineForm/index.d.ts +3 -0
  59. package/lib/src/components/RefineForm/type.d.ts +20 -0
  60. package/lib/src/components/RefineForm/useRefineForm.d.ts +10 -0
  61. package/lib/src/components/ResourceCRUD/ResourceCRUD.js +15 -0
  62. package/lib/src/components/ResourceCRUD/create/index.js +13 -0
  63. package/lib/src/components/ResourceCRUD/index.js +4 -0
  64. package/lib/src/components/ResourceCRUD/list/index.js +19 -0
  65. package/lib/src/components/ResourceCRUD/show/index.js +6 -0
  66. package/lib/src/components/ResourceFiledDisplays.d.ts +7 -0
  67. package/lib/src/components/ResourceLink/index.js +21 -0
  68. package/lib/src/components/ResourceUsageBar/index.js +81 -0
  69. package/lib/src/components/Separator/index.js +11 -0
  70. package/lib/src/components/ShowContent/ShowContent.js +157 -0
  71. package/lib/src/components/ShowContent/fields.d.ts +7 -2
  72. package/lib/src/components/ShowContent/fields.js +157 -0
  73. package/lib/src/components/ShowContent/index.js +2 -0
  74. package/lib/src/components/StateTag/StateTag.js +22 -0
  75. package/lib/src/components/StateTag/index.js +1 -0
  76. package/lib/src/components/Table/ErrorContent.js +36 -0
  77. package/lib/src/components/Table/TableToolBar.js +14 -0
  78. package/lib/src/components/Table/TableWidgets.js +28 -0
  79. package/lib/src/components/Table/index.js +69 -0
  80. package/lib/src/components/Tags/index.js +22 -0
  81. package/lib/src/components/Time/index.js +14 -0
  82. package/lib/src/components/WorkloadDropdown/index.js +24 -0
  83. package/lib/src/components/WorkloadPodsTable/WorkloadPodsTable.js +39 -0
  84. package/lib/src/components/WorkloadPodsTable/index.js +1 -0
  85. package/lib/src/components/WorkloadReplicas/index.js +50 -0
  86. package/lib/src/components/YamlEditor/MonacoYamlDiffEditor.js +34 -0
  87. package/lib/src/components/YamlEditor/MonacoYamlEditor.js +149 -0
  88. package/lib/src/components/YamlEditor/YamlEditorComponent.js +90 -0
  89. package/lib/src/components/YamlEditor/index.js +1 -0
  90. package/lib/src/components/YamlEditor/style.js +102 -0
  91. package/lib/src/components/YamlEditor/yaml.worker.js +1 -0
  92. package/lib/src/components/YamlForm/index.d.ts +0 -4
  93. package/lib/src/components/YamlForm/index.js +61 -0
  94. package/lib/src/components/index.d.ts +1 -3
  95. package/lib/src/components/index.js +38 -0
  96. package/lib/src/constants/index.js +2 -0
  97. package/lib/src/constants/k8s.js +203 -0
  98. package/lib/src/constants/state.js +15 -0
  99. package/lib/src/contexts/component.js +3 -0
  100. package/lib/src/contexts/configs.js +3 -0
  101. package/lib/src/contexts/global-store.js +3 -0
  102. package/lib/src/contexts/index.js +3 -0
  103. package/lib/src/hooks/index.js +7 -0
  104. package/lib/src/hooks/useDeleteModal/index.js +1 -0
  105. package/lib/src/hooks/useDeleteModal/useDeleteManyModal.js +31 -0
  106. package/lib/src/hooks/useDeleteModal/useDeleteModal.js +38 -0
  107. package/lib/src/hooks/useDownloadYAML.js +10 -0
  108. package/lib/src/hooks/useEagleForm.d.ts +1 -2
  109. package/lib/src/hooks/useEagleForm.js +177 -0
  110. package/lib/src/hooks/useEagleTable/columns.d.ts +6 -6
  111. package/lib/src/hooks/useEagleTable/columns.js +246 -0
  112. package/lib/src/hooks/useEagleTable/index.js +2 -0
  113. package/lib/src/hooks/useEagleTable/useEagleTable.js +63 -0
  114. package/lib/src/hooks/useEdit.js +19 -0
  115. package/lib/src/hooks/useGlobalStore.js +5 -0
  116. package/lib/src/hooks/useK8sYamlEditor.js +37 -0
  117. package/lib/src/hooks/useOpenForm.js +43 -0
  118. package/lib/src/hooks/useSchema.js +37 -0
  119. package/lib/src/hooks/useSubmitForm.js +42 -0
  120. package/lib/src/i18n.d.ts +26 -2
  121. package/lib/src/i18n.js +19 -0
  122. package/lib/src/index.js +13 -0
  123. package/lib/src/locales/en-US/dovetail.json +18 -0
  124. package/lib/src/locales/en-US/index.d.ts +14 -1
  125. package/lib/src/locales/en-US/index.js +4 -0
  126. package/lib/src/locales/index.js +6 -0
  127. package/lib/src/locales/zh-CN/dovetail.json +91 -0
  128. package/lib/src/locales/zh-CN/index.d.ts +12 -1
  129. package/lib/src/locales/zh-CN/index.js +4 -0
  130. package/lib/src/main.js +12 -0
  131. package/lib/src/models/cronjob-model.d.ts +0 -1
  132. package/lib/src/models/cronjob-model.js +32 -0
  133. package/lib/src/models/daemonset-model.d.ts +0 -1
  134. package/lib/src/models/daemonset-model.js +17 -0
  135. package/lib/src/models/deployment-model.d.ts +0 -1
  136. package/lib/src/models/deployment-model.js +17 -0
  137. package/lib/src/models/event-model.d.ts +0 -1
  138. package/lib/src/models/event-model.js +11 -0
  139. package/lib/src/models/index.js +14 -0
  140. package/lib/src/models/ingress-model.d.ts +0 -1
  141. package/lib/src/models/ingress-model.js +24 -0
  142. package/lib/src/models/job-model.d.ts +0 -1
  143. package/lib/src/models/job-model.js +56 -0
  144. package/lib/src/models/network-policy-model.d.ts +0 -1
  145. package/lib/src/models/network-policy-model.js +10 -0
  146. package/lib/src/models/node-model.d.ts +0 -1
  147. package/lib/src/models/persistent-volume-claim.d.ts +0 -1
  148. package/lib/src/models/persistent-volume.d.ts +0 -1
  149. package/lib/src/models/pod-metrics-model.d.ts +0 -1
  150. package/lib/src/models/pod-metrics-model.js +34 -0
  151. package/lib/src/models/pod-model.d.ts +0 -1
  152. package/lib/src/models/pod-model.js +78 -0
  153. package/lib/src/models/resource-model.d.ts +1 -1
  154. package/lib/src/models/resource-model.js +34 -0
  155. package/lib/src/models/server-instance-model.d.ts +10 -0
  156. package/lib/src/models/service-model.d.ts +0 -1
  157. package/lib/src/models/service-model.js +17 -0
  158. package/lib/src/models/statefulset-model.d.ts +0 -1
  159. package/lib/src/models/statefulset-model.js +17 -0
  160. package/lib/src/models/storage-class.d.ts +0 -1
  161. package/lib/src/models/types/index.js +1 -0
  162. package/lib/src/models/types/metric.js +1 -0
  163. package/lib/src/models/workload-base-model.d.ts +0 -1
  164. package/lib/src/models/workload-base-model.js +22 -0
  165. package/lib/src/models/workload-model.d.ts +0 -1
  166. package/lib/src/models/workload-model.js +51 -0
  167. package/lib/src/pages/configmaps/index.js +15 -0
  168. package/lib/src/pages/cronjobs/create/index.js +6 -0
  169. package/lib/src/pages/cronjobs/index.js +3 -0
  170. package/lib/src/pages/cronjobs/list/index.js +42 -0
  171. package/lib/src/pages/cronjobs/show/index.js +16 -0
  172. package/lib/src/pages/daemonsets/create/index.js +6 -0
  173. package/lib/src/pages/daemonsets/index.js +3 -0
  174. package/lib/src/pages/daemonsets/list/index.js +32 -0
  175. package/lib/src/pages/daemonsets/show/index.js +16 -0
  176. package/lib/src/pages/deployments/create/index.js +7 -0
  177. package/lib/src/pages/deployments/index.js +3 -0
  178. package/lib/src/pages/deployments/list/index.js +26 -0
  179. package/lib/src/pages/deployments/show/index.js +16 -0
  180. package/lib/src/pages/ingresses/index.js +26 -0
  181. package/lib/src/pages/jobs/index.js +34 -0
  182. package/lib/src/pages/networkPolicies/index.js +67 -0
  183. package/lib/src/pages/persistentvolumeclaims/index.d.ts +4 -0
  184. package/lib/src/pages/persistentvolumes/index.d.ts +3 -18
  185. package/lib/src/pages/pods/create/index.js +6 -0
  186. package/lib/src/pages/pods/index.js +3 -0
  187. package/lib/src/pages/pods/list/index.js +81 -0
  188. package/lib/src/pages/pods/show/index.js +54 -0
  189. package/lib/src/pages/secrets/index.js +15 -0
  190. package/lib/src/pages/services/index.js +26 -0
  191. package/lib/src/pages/statefulsets/create/index.js +6 -0
  192. package/lib/src/pages/statefulsets/index.js +3 -0
  193. package/lib/src/pages/statefulsets/list/index.js +26 -0
  194. package/lib/src/pages/statefulsets/show/index.js +16 -0
  195. package/lib/src/plugins/index.js +3 -0
  196. package/lib/src/plugins/model-plugin.js +46 -0
  197. package/lib/src/plugins/relation-plugin.js +81 -0
  198. package/lib/src/plugins/type.js +1 -0
  199. package/lib/src/providers/index.js +1 -0
  200. package/lib/src/providers/router-provider/index.js +100 -0
  201. package/lib/src/types/index.js +1 -0
  202. package/lib/src/types/resource.js +12 -0
  203. package/lib/src/utils/addId.js +8 -0
  204. package/lib/src/utils/download.js +9 -0
  205. package/lib/src/utils/error.js +53 -0
  206. package/lib/src/utils/form.js +9 -0
  207. package/lib/src/utils/k8s.js +6 -0
  208. package/lib/src/utils/labels.js +15 -0
  209. package/lib/src/utils/match-selector.js +12 -0
  210. package/lib/src/utils/openapi.js +33 -0
  211. package/lib/src/utils/schema.js +117 -0
  212. package/lib/src/utils/selector.js +12 -0
  213. package/lib/src/utils/string.js +6 -0
  214. package/lib/src/utils/time.js +46 -0
  215. package/lib/src/utils/unit.js +69 -0
  216. package/lib/src/utils/yaml.js +44 -0
  217. package/lib/vite.config.js +60 -0
  218. package/package.json +1 -10
  219. package/lib/src/components/ModalContextProvider/index.d.ts +0 -12
  220. package/lib/src/components/PodDropdown/index.d.ts +0 -9
  221. package/lib/src/components/PodShellModal/PodShell.d.ts +0 -18
  222. package/lib/src/components/PodShellModal/index.d.ts +0 -10
  223. package/lib/src/components/Shell/index.d.ts +0 -50
  224. package/lib/src/components/Shell/zmodem/index.d.ts +0 -51
  225. package/lib/src/hooks/useModal.d.ts +0 -0
  226. package/lib/src/hooks/useNamespaceFilter.d.ts +0 -5
  227. package/lib/src/model/cronjob-model.d.ts +0 -9
  228. package/lib/src/model/index.d.ts +0 -6
  229. package/lib/src/model/job-model.d.ts +0 -10
  230. package/lib/src/model/pod-metrics-model.d.ts +0 -7
  231. package/lib/src/model/pod-model.d.ts +0 -15
  232. package/lib/src/model/resource-model.d.ts +0 -17
  233. package/lib/src/model/workload-model.d.ts +0 -17
  234. package/lib/src/pages/nodes/hooks/useNodeMetrics.d.ts +0 -17
  235. package/lib/src/pages/storageclasses/list/index.d.ts +0 -3
  236. package/lib/src/pages/storageclasses/show/index.d.ts +0 -3
  237. package/lib/src/types/metric.d.ts +0 -25
  238. package/lib/src/utils/shell.d.ts +0 -16
@@ -0,0 +1,246 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useUIKit } from '@cloudtower/eagle';
3
+ import { useGo, useNavigation, useParsed } from '@refinedev/core';
4
+ import { get } from 'lodash';
5
+ import { ResourceLink } from '../../components';
6
+ import { ImageNames } from '../../components/ImageNames';
7
+ import { IngressRulesComponent } from '../../components/IngressRulesComponent';
8
+ import { ReferenceLink } from '../../components/ReferenceLink';
9
+ import { StateTag } from '../../components/StateTag';
10
+ import Time from '../../components/Time';
11
+ import { elapsedTime } from '../../utils/time';
12
+ const NameLink = props => {
13
+ const { name, id, resource } = props;
14
+ const kit = useUIKit();
15
+ const go = useGo();
16
+ const navigation = useNavigation();
17
+ const parsed = useParsed();
18
+ const resourceName = resource || parsed.resource?.name || '';
19
+ return (_jsx(kit.button, { type: "link", onClick: () => {
20
+ go({
21
+ to: navigation.showUrl(resourceName, ''),
22
+ query: {
23
+ id,
24
+ },
25
+ options: {
26
+ keepQuery: true,
27
+ },
28
+ });
29
+ }, children: name }));
30
+ };
31
+ export const CommonSorter = (dataIndex) => (a, b) => {
32
+ const valA = get(a, dataIndex);
33
+ const valB = get(b, dataIndex);
34
+ if (valA === valB)
35
+ return 0;
36
+ if (valA > valB)
37
+ return 1;
38
+ return -1;
39
+ };
40
+ export const NameColumnRenderer = (i18n, resource = '') => {
41
+ const dataIndex = ['metadata', 'name'];
42
+ return {
43
+ key: 'name',
44
+ display: true,
45
+ dataIndex,
46
+ title: i18n.t('dovetail.name'),
47
+ sortable: true,
48
+ sorter: CommonSorter(dataIndex),
49
+ render: (v, record) => {
50
+ return _jsx(NameLink, { name: v, id: record.id, resource: resource });
51
+ },
52
+ };
53
+ };
54
+ export const NameSpaceColumnRenderer = (i18n) => {
55
+ const dataIndex = ['metadata', 'namespace'];
56
+ return {
57
+ key: 'namespace',
58
+ display: true,
59
+ dataIndex,
60
+ title: i18n.t('dovetail.namespace'),
61
+ sortable: true,
62
+ sorter: CommonSorter(dataIndex),
63
+ };
64
+ };
65
+ export const StateDisplayColumnRenderer = (i18n) => {
66
+ const dataIndex = ['stateDisplay'];
67
+ return {
68
+ key: 'stateDisplay',
69
+ display: true,
70
+ dataIndex: dataIndex,
71
+ title: i18n.t('dovetail.state'),
72
+ sortable: true,
73
+ sorter: CommonSorter(dataIndex),
74
+ render: v => _jsx(StateTag, { state: v }),
75
+ };
76
+ };
77
+ export const WorkloadImageColumnRenderer = (i18n) => {
78
+ const dataIndex = ['imageNames'];
79
+ return {
80
+ key: 'image',
81
+ display: true,
82
+ dataIndex,
83
+ title: i18n.t('dovetail.image'),
84
+ sortable: true,
85
+ sorter: CommonSorter(dataIndex),
86
+ render(value, record) {
87
+ return _jsx(ImageNames, { value: record.imageNames });
88
+ },
89
+ };
90
+ };
91
+ export const WorkloadRestartsColumnRenderer = (i18n) => {
92
+ const dataIndex = ['restarts'];
93
+ return {
94
+ key: 'restarts',
95
+ display: true,
96
+ dataIndex,
97
+ title: i18n.t('dovetail.restarts'),
98
+ sortable: false,
99
+ };
100
+ };
101
+ export const ReplicasColumnRenderer = (i18n) => {
102
+ const dataIndex = ['status', 'replicas'];
103
+ return {
104
+ key: 'replicas',
105
+ display: true,
106
+ dataIndex,
107
+ title: i18n.t('dovetail.replicas'),
108
+ sortable: true,
109
+ sorter: CommonSorter(dataIndex),
110
+ render: (_, record) => {
111
+ return (_jsxs("span", { children: [record.readyReplicas, "/", record.replicas] }));
112
+ },
113
+ };
114
+ };
115
+ export const AgeColumnRenderer = (i18n) => {
116
+ const dataIndex = ['metadata', 'creationTimestamp'];
117
+ return {
118
+ key: 'creationTimestamp',
119
+ display: true,
120
+ dataIndex,
121
+ title: i18n.t('dovetail.created_time'),
122
+ sortable: true,
123
+ sorter: (a, b) => {
124
+ const valA = new Date(get(a, dataIndex));
125
+ const valB = new Date(get(b, dataIndex));
126
+ if (valA === valB)
127
+ return 0;
128
+ if (valA > valB)
129
+ return 1;
130
+ return -1;
131
+ },
132
+ render: (value) => {
133
+ return _jsx(Time, { date: new Date(value) });
134
+ },
135
+ };
136
+ };
137
+ export const NodeNameColumnRenderer = (i18n, options) => {
138
+ const dataIndex = ['spec', 'nodeName'];
139
+ return {
140
+ key: 'node',
141
+ display: true,
142
+ dataIndex,
143
+ title: i18n.t('dovetail.node_name'),
144
+ sortable: true,
145
+ sorter: CommonSorter(dataIndex),
146
+ ...options,
147
+ };
148
+ };
149
+ export const RestartCountColumnRenderer = (i18n) => {
150
+ const dataIndex = ['restartCount'];
151
+ return {
152
+ key: 'restartCount',
153
+ display: true,
154
+ dataIndex,
155
+ title: i18n.t('dovetail.restarts'),
156
+ sortable: true,
157
+ sorter: CommonSorter(dataIndex),
158
+ };
159
+ };
160
+ export const CompletionsCountColumnRenderer = (i18n) => {
161
+ const dataIndex = ['completionsDisplay'];
162
+ return {
163
+ key: 'completions',
164
+ display: true,
165
+ dataIndex,
166
+ title: i18n.t('completions'),
167
+ sortable: true,
168
+ sorter: CommonSorter(dataIndex),
169
+ };
170
+ };
171
+ export const DurationColumnRenderer = (i18n) => {
172
+ const dataIndex = ['duration'];
173
+ return {
174
+ key: 'duration',
175
+ display: true,
176
+ dataIndex,
177
+ title: i18n.t('dovetail.duration'),
178
+ sortable: true,
179
+ sorter: CommonSorter(dataIndex),
180
+ render: v => {
181
+ const i18nMap = {
182
+ sec: i18n.t('dovetail.sec'),
183
+ day: i18n.t('dovetail.day'),
184
+ min: i18n.t('dovetail.min'),
185
+ hr: i18n.t('dovetail.hr'),
186
+ };
187
+ return _jsx("span", { children: elapsedTime(v, i18nMap).label || '-' });
188
+ },
189
+ };
190
+ };
191
+ export const ServiceTypeColumnRenderer = (i18n) => {
192
+ const dataIndex = ['spec', 'type'];
193
+ return {
194
+ key: 'type',
195
+ title: i18n.t('dovetail.type'),
196
+ display: true,
197
+ dataIndex,
198
+ sortable: true,
199
+ sorter: CommonSorter(dataIndex),
200
+ };
201
+ };
202
+ export const PodWorkloadColumnRenderer = (i18n) => {
203
+ const dataIndex = ['metadata', 'ownerReferences'];
204
+ return {
205
+ key: 'type',
206
+ title: i18n.t('dovetail.workload'),
207
+ display: true,
208
+ dataIndex,
209
+ sortable: true,
210
+ sorter: CommonSorter(dataIndex),
211
+ render(value, record) {
212
+ return value.map(o => (_jsx(ReferenceLink, { ownerReference: o, namespace: record.metadata.namespace || 'default' }, o.name)));
213
+ },
214
+ };
215
+ };
216
+ export const IngressRulesColumnRenderer = (i18n) => {
217
+ const dataIndex = ['spec', 'rules'];
218
+ return {
219
+ key: 'type',
220
+ title: i18n.t('dovetail.rule'),
221
+ display: true,
222
+ dataIndex,
223
+ sortable: true,
224
+ sorter: CommonSorter(dataIndex),
225
+ render(_, record) {
226
+ return _jsx(IngressRulesComponent, { ingress: record });
227
+ },
228
+ };
229
+ };
230
+ export const IngressDefaultBackendColumnRenderer = (i18n) => {
231
+ const dataIndex = ['spec', 'defaultBackend'];
232
+ return {
233
+ key: 'defaultBackend',
234
+ display: true,
235
+ dataIndex,
236
+ title: i18n.t('dovetail.default_backend'),
237
+ sortable: true,
238
+ sorter: CommonSorter(['spec', 'defaultBackend']),
239
+ render: (defaultBackend, record) => {
240
+ if (!defaultBackend?.service?.name)
241
+ return _jsx("span", { children: "-" });
242
+ const divider = 'Default > ';
243
+ return (_jsxs("span", { children: [divider, _jsx(ResourceLink, { name: "services", namespace: record.metadata.namespace || 'default', resourceId: defaultBackend.service?.name || '' })] }));
244
+ },
245
+ };
246
+ };
@@ -0,0 +1,2 @@
1
+ export * from './columns';
2
+ export * from './useEagleTable';
@@ -0,0 +1,63 @@
1
+ import { useTable, useResource } from '@refinedev/core';
2
+ import { merge } from 'lodash-es';
3
+ import { useCallback, useMemo, useState } from 'react';
4
+ import K8sDropdown from '../../components/K8sDropdown';
5
+ import { useNamespacesFilter, ALL_NS } from '../../components/NamespacesFilter';
6
+ export var ColumnKeys;
7
+ (function (ColumnKeys) {
8
+ ColumnKeys["age"] = "age";
9
+ ColumnKeys["name"] = "name";
10
+ ColumnKeys["namespace"] = "namespace";
11
+ ColumnKeys["phase"] = "phase";
12
+ ColumnKeys["replicas"] = "replicas";
13
+ ColumnKeys["deploymentImage"] = "deploymentImage";
14
+ ColumnKeys["podImage"] = "podImage";
15
+ })(ColumnKeys || (ColumnKeys = {}));
16
+ export const useEagleTable = (params) => {
17
+ const { columns, tableProps, formatter, Dropdown = K8sDropdown } = params;
18
+ const [selectedKeys, setSelectedKeys] = useState([]);
19
+ const [currentPage, setCurrentPage] = useState(tableProps?.currentPage || 1);
20
+ const { resource } = useResource();
21
+ const { value: nsFilter } = useNamespacesFilter();
22
+ const useTableParams = useMemo(() => {
23
+ // TODO: check whether resource can be namespaced
24
+ const mergedParams = merge(params.useTableParams, {
25
+ pagination: {
26
+ mode: 'off',
27
+ },
28
+ filters: {
29
+ permanent: [
30
+ {
31
+ field: 'metadata.namespace',
32
+ operator: 'eq',
33
+ value: nsFilter === ALL_NS ? null : nsFilter,
34
+ },
35
+ ],
36
+ },
37
+ });
38
+ return mergedParams;
39
+ }, [params.useTableParams, nsFilter]);
40
+ const table = useTable(useTableParams);
41
+ const onPageChange = useCallback((page) => {
42
+ setCurrentPage(page);
43
+ }, [setCurrentPage]);
44
+ const data = table.tableQueryResult.data?.data;
45
+ const finalDataSource = formatter ? data?.map(formatter) : data;
46
+ const finalProps = {
47
+ tableKey: resource?.name || 'table',
48
+ loading: table.tableQueryResult.isLoading,
49
+ data: finalDataSource || [],
50
+ columns,
51
+ refetch: () => null,
52
+ error: false,
53
+ rowKey: 'id',
54
+ currentPage,
55
+ currentSize: tableProps?.currentSize || 5,
56
+ onPageChange: onPageChange,
57
+ onSelect: keys => {
58
+ setSelectedKeys(keys);
59
+ },
60
+ RowMenu: Dropdown
61
+ };
62
+ return { tableProps: finalProps, selectedKeys, ...table };
63
+ };
@@ -0,0 +1,19 @@
1
+ import { useGo, useNavigation, useParsed } from '@refinedev/core';
2
+ import { useCallback } from 'react';
3
+ export function useEdit() {
4
+ const { resource } = useParsed();
5
+ const go = useGo();
6
+ const navigation = useNavigation();
7
+ const edit = useCallback((id) => {
8
+ go({
9
+ to: navigation.editUrl(resource?.name || '', id),
10
+ query: {
11
+ id,
12
+ },
13
+ options: {
14
+ keepQuery: true,
15
+ },
16
+ });
17
+ }, [go, resource?.name]);
18
+ return { edit };
19
+ }
@@ -0,0 +1,5 @@
1
+ import { useContext } from 'react';
2
+ import GlobalStoreContext from '../contexts/global-store';
3
+ export const useGlobalStore = () => {
4
+ return useContext(GlobalStoreContext);
5
+ };
@@ -0,0 +1,37 @@
1
+ import { useCallback } from 'react';
2
+ function useK8sYamlEditor() {
3
+ const foldSymbol = useCallback(function (editor, symbol) {
4
+ const model = editor.getModel();
5
+ const matchs = model?.findMatches(symbol, false, false, false, '', false).filter(match => match.range.startColumn === 1) || [];
6
+ return new Promise(async (resolve, reject) => {
7
+ try {
8
+ for (const match of matchs) {
9
+ const lineNumber = match.range.startLineNumber;
10
+ editor.setPosition({ lineNumber, column: 1 });
11
+ await editor.getAction('editor.fold').run();
12
+ }
13
+ resolve(null);
14
+ }
15
+ catch (e) {
16
+ reject(e);
17
+ }
18
+ });
19
+ }, []);
20
+ const fold = useCallback(async function (editor) {
21
+ await editor.getAction('editor.unfoldAll').run();
22
+ const symbols = [
23
+ ' annotations:',
24
+ ' managedFields:',
25
+ 'status:',
26
+ ' kubectl.kubernetes.io/last-applied-configuration:'
27
+ ];
28
+ for (const symbol of symbols) {
29
+ await foldSymbol(editor, symbol);
30
+ }
31
+ editor.setScrollPosition({ scrollTop: 0 });
32
+ }, [foldSymbol]);
33
+ return {
34
+ fold,
35
+ };
36
+ }
37
+ export default useK8sYamlEditor;
@@ -0,0 +1,43 @@
1
+ import { pushModal } from '@cloudtower/eagle';
2
+ import { useResource, useGo, useNavigation, } from '@refinedev/core';
3
+ import { useContext } from 'react';
4
+ import FormModal from 'src/components/FormModal';
5
+ import ConfigsContext from 'src/contexts/configs';
6
+ import { useEdit } from 'src/hooks/useEdit';
7
+ import { FormType } from 'src/types';
8
+ import { getInitialValues } from 'src/utils/form';
9
+ export function useOpenForm(options) {
10
+ const { resource } = useResource();
11
+ const configs = useContext(ConfigsContext);
12
+ const { edit } = useEdit();
13
+ const navigation = useNavigation();
14
+ const go = useGo();
15
+ return function openForm() {
16
+ if (resource?.name) {
17
+ const config = configs[resource.name];
18
+ if (config.formType === undefined || config.formType === FormType.MODAL) {
19
+ pushModal({
20
+ component: config.FormModal || FormModal,
21
+ props: {
22
+ resource: resource.name,
23
+ id: options?.id,
24
+ formProps: {
25
+ initialValues: getInitialValues(config),
26
+ }
27
+ }
28
+ });
29
+ }
30
+ else if (options?.id) {
31
+ edit(options.id);
32
+ }
33
+ else {
34
+ go({
35
+ to: navigation.createUrl(resource.name),
36
+ options: {
37
+ keepQuery: true,
38
+ },
39
+ });
40
+ }
41
+ }
42
+ };
43
+ }
@@ -0,0 +1,37 @@
1
+ import { useResource } from '@refinedev/core';
2
+ import { useState, useEffect, useMemo, useCallback } from 'react';
3
+ import OpenAPI from 'src/utils/openapi';
4
+ export function useSchema(options) {
5
+ const [schema, setSchema] = useState(null);
6
+ const [loading, setLoading] = useState(false);
7
+ const [error, setError] = useState(null);
8
+ const useResourceResult = useResource();
9
+ const resource = options?.resource || useResourceResult.resource;
10
+ const openapi = useMemo(() => new OpenAPI(resource?.meta?.resourceBasePath), [resource?.meta?.resourceBasePath]);
11
+ const fetchSchema = useCallback(async () => {
12
+ setLoading(true);
13
+ setError(null);
14
+ try {
15
+ const schema = await openapi.findSchema(resource?.meta?.kind);
16
+ setSchema(schema || null);
17
+ setError(null);
18
+ }
19
+ catch (e) {
20
+ setError(e);
21
+ }
22
+ finally {
23
+ setLoading(false);
24
+ }
25
+ }, [resource, openapi]);
26
+ useEffect(() => {
27
+ if (options?.skip)
28
+ return;
29
+ fetchSchema();
30
+ }, [fetchSchema]);
31
+ return {
32
+ schema,
33
+ loading,
34
+ error,
35
+ fetchSchema,
36
+ };
37
+ }
@@ -0,0 +1,42 @@
1
+ import { useState, useCallback } from 'react';
2
+ import { getCommonErrors } from 'src/utils/error';
3
+ import { useD2Translation } from '../i18n';
4
+ export function useSubmitForm(options) {
5
+ const { formRef, onSubmitSuccess } = options;
6
+ const { i18n } = useD2Translation();
7
+ const [submitting, setSubmitting] = useState(false);
8
+ const [errorMsgs, setErrorMsgs] = useState([]);
9
+ const reset = useCallback(() => {
10
+ setSubmitting(false);
11
+ setErrorMsgs([]);
12
+ }, []);
13
+ const onSubmit = useCallback(async () => {
14
+ try {
15
+ setSubmitting(true);
16
+ await formRef.current?.submit();
17
+ onSubmitSuccess?.();
18
+ reset();
19
+ }
20
+ catch (error) {
21
+ if (error instanceof Object) {
22
+ if ('response' in error && error.response instanceof Response) {
23
+ const response = error.response;
24
+ const body = await response.json();
25
+ setErrorMsgs(getCommonErrors(body, i18n));
26
+ }
27
+ else if ('message' in error && typeof error.message === 'string') {
28
+ setErrorMsgs([error.message]);
29
+ }
30
+ }
31
+ }
32
+ finally {
33
+ setSubmitting(false);
34
+ }
35
+ }, [formRef, i18n, reset, onSubmitSuccess]);
36
+ return {
37
+ submitting,
38
+ errorMsgs,
39
+ reset,
40
+ onSubmit,
41
+ };
42
+ }
package/lib/src/i18n.d.ts CHANGED
@@ -158,7 +158,20 @@ export declare const resources: {
158
158
  not_support: string;
159
159
  stopped: string;
160
160
  any_node_ip: string;
161
- exec_pod: string;
161
+ storage_class: string;
162
+ persistent_volume: string;
163
+ provisioner: string;
164
+ file_system: string;
165
+ capacity: string;
166
+ phase: string;
167
+ volume_mode: string;
168
+ access_mode: string;
169
+ block: string;
170
+ pv_phase_available: string;
171
+ pv_phase_bound: string;
172
+ pv_phase_released: string;
173
+ pv_phase_failed: string;
174
+ pv_phase_pending: string;
162
175
  };
163
176
  };
164
177
  'zh-CN': {
@@ -318,10 +331,21 @@ export declare const resources: {
318
331
  only_support_one_yaml: string;
319
332
  not_support: string;
320
333
  stopped: string;
334
+ any_node_ip: string;
321
335
  storage_class: string;
322
- persistent_volumn: string;
336
+ persistent_volume: string;
323
337
  provisioner: string;
324
338
  file_system: string;
339
+ capacity: string;
340
+ phase: string;
341
+ volume_mode: string;
342
+ access_mode: string;
343
+ block: string;
344
+ pv_phase_available: string;
345
+ pv_phase_bound: string;
346
+ pv_phase_released: string;
347
+ pv_phase_failed: string;
348
+ pv_phase_pending: string;
325
349
  };
326
350
  };
327
351
  };
@@ -0,0 +1,19 @@
1
+ import i18n from 'i18next';
2
+ import { initReactI18next, useTranslation } from 'react-i18next';
3
+ import { D2Locales } from 'src/locales';
4
+ export const resources = D2Locales;
5
+ i18n.use(initReactI18next).init({
6
+ supportedLngs: ['en-US', 'zh-CN'],
7
+ resources,
8
+ ns: Object.keys(resources['zh-CN']),
9
+ defaultNS: 'dovetail',
10
+ fallbackLng: ['en-US', 'zh-CN'],
11
+ lng: 'zh-CN',
12
+ nsSeparator: '.',
13
+ });
14
+ export const useD2Translation = () => {
15
+ return useTranslation(undefined, {
16
+ i18n,
17
+ });
18
+ };
19
+ export default i18n;
@@ -0,0 +1,13 @@
1
+ import i18n from './i18n';
2
+ export const dovetailRefineI18n = i18n;
3
+ export { D2Locales } from './locales';
4
+ export * from './providers';
5
+ export * from './hooks';
6
+ export * from './components';
7
+ export * from './constants';
8
+ export * from './hooks';
9
+ export * from './Dovetail';
10
+ export * from './types';
11
+ export * from './contexts';
12
+ export * from './models';
13
+ export * from './plugins';
@@ -0,0 +1,18 @@
1
+ {
2
+ "copy": "Copy",
3
+ "reset_arguments": "Reset",
4
+ "view_changes": "Show Diff",
5
+ "back_to_edit": "Edit",
6
+ "configure_file": "Configuration",
7
+ "yaml_format_wrong": "Configuration is in an invalid YAML format.",
8
+ "yaml_value_wrong": "Configuration has invalid values.",
9
+ "edit_yaml": "Edit YAML",
10
+ "copied": "Copied",
11
+ "already_reset": "Already reset",
12
+ "fetch_schema_fail": "Failed to fetch schema.",
13
+ "obtain_data_error": "Having trouble getting data.",
14
+ "retry": "Retry",
15
+ "create_resource": "Create {{resource}}",
16
+ "edit_resource": "Edit {{resource}}",
17
+ "status": "Status"
18
+ }
@@ -155,7 +155,20 @@ declare const _default: {
155
155
  not_support: string;
156
156
  stopped: string;
157
157
  any_node_ip: string;
158
- exec_pod: string;
158
+ storage_class: string;
159
+ persistent_volume: string;
160
+ provisioner: string;
161
+ file_system: string;
162
+ capacity: string;
163
+ phase: string;
164
+ volume_mode: string;
165
+ access_mode: string;
166
+ block: string;
167
+ pv_phase_available: string;
168
+ pv_phase_bound: string;
169
+ pv_phase_released: string;
170
+ pv_phase_failed: string;
171
+ pv_phase_pending: string;
159
172
  };
160
173
  };
161
174
  export default _default;
@@ -0,0 +1,4 @@
1
+ import dovetail from './dovetail.json';
2
+ export default {
3
+ dovetail,
4
+ };
@@ -0,0 +1,6 @@
1
+ import D2LocalesEN from './en-US';
2
+ import D2LocalesZH from './zh-CN';
3
+ export const D2Locales = {
4
+ 'en-US': D2LocalesEN,
5
+ 'zh-CN': D2LocalesZH,
6
+ };