@dovetail-v2/refine 0.0.32 → 0.0.33

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 (248) hide show
  1. package/dist/{MonacoYamlDiffEditor-6563a22b.js → MonacoYamlDiffEditor-cf5e1ebf.js} +3 -3
  2. package/dist/{MonacoYamlEditor-a6e20f8c.js → MonacoYamlEditor-816f672c.js} +3 -3
  3. package/dist/{index-3d05d4c7.js → index-57b8cbed.js} +11048 -7588
  4. package/dist/refine.js +158 -127
  5. package/dist/refine.umd.cjs +11248 -7788
  6. package/dist/style.css +69 -43
  7. package/lib/src/App.js +91 -0
  8. package/lib/src/Dovetail.js +45 -0
  9. package/lib/src/components/Breadcrumb/index.js +20 -0
  10. package/lib/src/components/ConditionsTable/ConditionsTable.js +56 -0
  11. package/lib/src/components/ConditionsTable/index.js +1 -0
  12. package/lib/src/components/CreateButton/index.js +10 -0
  13. package/lib/src/components/CronJobDropdown/index.js +26 -0
  14. package/lib/src/components/CronjobJobsTable/index.js +49 -0
  15. package/lib/src/components/DeleteButton/index.js +13 -0
  16. package/lib/src/components/DeleteManyButton/index.js +16 -0
  17. package/lib/src/components/DrawerShow/DrawerShow.js +13 -0
  18. package/lib/src/components/DrawerShow/index.js +1 -0
  19. package/lib/src/components/EditButton/index.js +13 -0
  20. package/lib/src/components/EditField/index.js +47 -0
  21. package/lib/src/components/ErrorContent/index.js +36 -0
  22. package/lib/src/components/EventsTable/EventsTable.js +59 -0
  23. package/lib/src/components/EventsTable/index.js +1 -0
  24. package/lib/src/components/Form/FormModal.d.ts +9 -0
  25. package/lib/src/components/Form/KeyValueListWidget.js +56 -0
  26. package/lib/src/components/Form/MetadataForm.js +9 -0
  27. package/lib/src/components/Form/NameInputWidget.js +50 -0
  28. package/lib/src/components/Form/NamespaceSelectWidget.js +21 -0
  29. package/lib/src/components/Form/RefineFormContent.d.ts +12 -0
  30. package/lib/src/components/Form/RefineFormPage.d.ts +7 -0
  31. package/lib/src/components/Form/YamlForm.d.ts +26 -0
  32. package/lib/src/components/Form/index.d.ts +7 -4
  33. package/lib/src/components/Form/index.js +4 -0
  34. package/lib/src/components/Form/type.d.ts +17 -0
  35. package/lib/src/components/Form/useRefineForm.d.ts +10 -0
  36. package/lib/src/components/Form/useYamlForm.d.ts +49 -0
  37. package/lib/src/components/Form/widget.js +1 -0
  38. package/lib/src/components/FormErrorAlert/index.d.ts +1 -0
  39. package/lib/src/components/FormErrorAlert/index.js +8 -0
  40. package/lib/src/components/FormLayout/index.js +21 -0
  41. package/lib/src/components/FormModal/index.js +51 -0
  42. package/lib/src/components/FormWidgets/KeyValueListWidget.d.ts +6 -0
  43. package/lib/src/components/FormWidgets/MetadataForm.d.ts +2 -0
  44. package/lib/src/components/FormWidgets/NameInputWidget.d.ts +51 -0
  45. package/lib/src/components/FormWidgets/NamespaceSelectWidget.d.ts +9 -0
  46. package/lib/src/components/FormWidgets/index.d.ts +4 -0
  47. package/lib/src/components/FormWidgets/widget.d.ts +5 -0
  48. package/lib/src/components/ImageNames/index.d.ts +1 -0
  49. package/lib/src/components/ImageNames/index.js +14 -0
  50. package/lib/src/components/IngressRulesComponent/index.js +11 -0
  51. package/lib/src/components/IngressRulesTable/IngressRulesTable.js +51 -0
  52. package/lib/src/components/IngressRulesTable/index.js +1 -0
  53. package/lib/src/components/K8sDropdown/index.js +31 -0
  54. package/lib/src/components/KeyValue/KeyValue.d.ts +5 -5
  55. package/lib/src/components/KeyValue/KeyValue.js +27 -0
  56. package/lib/src/components/KeyValue/KeyValueAnnotation.d.ts +6 -0
  57. package/lib/src/components/KeyValue/KeyValueSecret.d.ts +5 -0
  58. package/lib/src/components/KeyValue/index.d.ts +2 -0
  59. package/lib/src/components/KeyValue/index.js +1 -0
  60. package/lib/src/components/KeyValueData/index.js +50 -0
  61. package/lib/src/components/Layout/index.js +39 -0
  62. package/lib/src/components/ListPage/index.d.ts +0 -1
  63. package/lib/src/components/ListPage/index.js +25 -0
  64. package/lib/src/components/Menu/index.js +36 -0
  65. package/lib/src/components/NamespacesFilter/index.d.ts +6 -2
  66. package/lib/src/components/NamespacesFilter/index.js +34 -0
  67. package/lib/src/components/NetworkPolicyRulesTable/NetworkPolicyRulesTable.js +77 -0
  68. package/lib/src/components/NetworkPolicyRulesTable/index.js +1 -0
  69. package/lib/src/components/PageShow/PageShow.js +11 -0
  70. package/lib/src/components/PageShow/index.js +1 -0
  71. package/lib/src/components/PodContainersTable/PodContainersTable.js +78 -0
  72. package/lib/src/components/PodContainersTable/index.js +1 -0
  73. package/lib/src/components/PodLog/index.js +136 -0
  74. package/lib/src/components/PodSelectorTable/index.d.ts +6 -0
  75. package/lib/src/components/PortsTable/index.d.ts +7 -0
  76. package/lib/src/components/ReferenceLink/index.js +17 -0
  77. package/lib/src/components/RefineForm/RefineFormContent.d.ts +10 -0
  78. package/lib/src/components/RefineForm/RefineFormModal.d.ts +8 -0
  79. package/lib/src/components/RefineForm/RefineFormPage.d.ts +7 -0
  80. package/lib/src/components/RefineForm/index.d.ts +3 -0
  81. package/lib/src/components/RefineForm/type.d.ts +20 -0
  82. package/lib/src/components/RefineForm/useRefineForm.d.ts +10 -0
  83. package/lib/src/components/ReplicasDropdown/index.d.ts +9 -0
  84. package/lib/src/components/ResourceCRUD/ResourceCRUD.js +15 -0
  85. package/lib/src/components/ResourceCRUD/create/index.js +13 -0
  86. package/lib/src/components/ResourceCRUD/index.js +4 -0
  87. package/lib/src/components/ResourceCRUD/list/index.d.ts +3 -7
  88. package/lib/src/components/ResourceCRUD/list/index.js +19 -0
  89. package/lib/src/components/ResourceCRUD/show/index.d.ts +3 -7
  90. package/lib/src/components/ResourceCRUD/show/index.js +6 -0
  91. package/lib/src/components/ResourceLink/index.js +21 -0
  92. package/lib/src/components/ResourceUsageBar/index.js +81 -0
  93. package/lib/src/components/Separator/index.js +11 -0
  94. package/lib/src/components/ServiceComponents/index.d.ts +4 -1
  95. package/lib/src/components/ShowContent/ShowContent.d.ts +5 -0
  96. package/lib/src/components/ShowContent/ShowContent.js +157 -0
  97. package/lib/src/components/ShowContent/fields.d.ts +17 -11
  98. package/lib/src/components/ShowContent/fields.js +157 -0
  99. package/lib/src/components/ShowContent/groups.d.ts +11 -3
  100. package/lib/src/components/ShowContent/index.js +2 -0
  101. package/lib/src/components/ShowContent/tabs.d.ts +3 -7
  102. package/lib/src/components/StateTag/StateTag.d.ts +1 -0
  103. package/lib/src/components/StateTag/StateTag.js +22 -0
  104. package/lib/src/components/StateTag/index.js +1 -0
  105. package/lib/src/components/Table/ErrorContent.js +36 -0
  106. package/lib/src/components/Table/TableToolBar.d.ts +1 -1
  107. package/lib/src/components/Table/TableToolBar.js +14 -0
  108. package/lib/src/components/Table/TableWidgets.js +28 -0
  109. package/lib/src/components/Table/index.js +69 -0
  110. package/lib/src/components/Tags/index.js +22 -0
  111. package/lib/src/components/Time/index.js +14 -0
  112. package/lib/src/components/ValueDisplay/index.d.ts +8 -0
  113. package/lib/src/components/WorkloadDropdown/index.d.ts +2 -2
  114. package/lib/src/components/WorkloadDropdown/index.js +24 -0
  115. package/lib/src/components/WorkloadPodsTable/WorkloadPodsTable.js +39 -0
  116. package/lib/src/components/WorkloadPodsTable/index.js +1 -0
  117. package/lib/src/components/WorkloadReplicas/index.d.ts +11 -1
  118. package/lib/src/components/WorkloadReplicas/index.js +50 -0
  119. package/lib/src/components/YamlEditor/MonacoYamlDiffEditor.js +34 -0
  120. package/lib/src/components/YamlEditor/MonacoYamlEditor.js +149 -0
  121. package/lib/src/components/YamlEditor/YamlEditorComponent.js +90 -0
  122. package/lib/src/components/YamlEditor/index.js +1 -0
  123. package/lib/src/components/YamlEditor/style.js +102 -0
  124. package/lib/src/components/YamlEditor/yaml.worker.js +1 -0
  125. package/lib/src/components/YamlForm/index.js +61 -0
  126. package/lib/src/components/index.d.ts +2 -3
  127. package/lib/src/components/index.js +38 -0
  128. package/lib/src/constants/index.js +2 -0
  129. package/lib/src/constants/k8s.d.ts +289 -89
  130. package/lib/src/constants/k8s.js +203 -0
  131. package/lib/src/constants/state.d.ts +2 -1
  132. package/lib/src/constants/state.js +15 -0
  133. package/lib/src/contexts/component.js +3 -0
  134. package/lib/src/contexts/configs.js +3 -0
  135. package/lib/src/contexts/global-store.js +3 -0
  136. package/lib/src/contexts/index.js +3 -0
  137. package/lib/src/hooks/index.d.ts +1 -1
  138. package/lib/src/hooks/index.js +7 -0
  139. package/lib/src/hooks/useDeleteModal/index.js +1 -0
  140. package/lib/src/hooks/useDeleteModal/useDeleteManyModal.js +31 -0
  141. package/lib/src/hooks/useDeleteModal/useDeleteModal.js +38 -0
  142. package/lib/src/hooks/useDownloadYAML.js +10 -0
  143. package/lib/src/hooks/useEagleForm.js +177 -0
  144. package/lib/src/hooks/useEagleTable/columns.d.ts +7 -2
  145. package/lib/src/hooks/useEagleTable/columns.js +246 -0
  146. package/lib/src/hooks/useEagleTable/index.js +2 -0
  147. package/lib/src/hooks/useEagleTable/useEagleTable.js +63 -0
  148. package/lib/src/hooks/useEdit.js +19 -0
  149. package/lib/src/hooks/useGlobalStore.js +5 -0
  150. package/lib/src/hooks/useK8sYamlEditor.js +37 -0
  151. package/lib/src/hooks/useOpenForm.d.ts +3 -0
  152. package/lib/src/hooks/useOpenForm.js +43 -0
  153. package/lib/src/hooks/useSchema.js +37 -0
  154. package/lib/src/hooks/useSubmitForm.js +42 -0
  155. package/lib/src/i18n.d.ts +140 -13
  156. package/lib/src/i18n.js +19 -0
  157. package/lib/src/index.js +13 -0
  158. package/lib/src/locales/en-US/dovetail.json +18 -0
  159. package/lib/src/locales/en-US/index.d.ts +98 -1
  160. package/lib/src/locales/en-US/index.js +4 -0
  161. package/lib/src/locales/index.js +6 -0
  162. package/lib/src/locales/zh-CN/dovetail.json +91 -0
  163. package/lib/src/locales/zh-CN/index.d.ts +42 -12
  164. package/lib/src/locales/zh-CN/index.js +4 -0
  165. package/lib/src/main.js +12 -0
  166. package/lib/src/models/cronjob-model.js +32 -0
  167. package/lib/src/models/daemonset-model.d.ts +3 -1
  168. package/lib/src/models/daemonset-model.js +17 -0
  169. package/lib/src/models/deployment-model.d.ts +1 -1
  170. package/lib/src/models/deployment-model.js +17 -0
  171. package/lib/src/models/event-model.js +11 -0
  172. package/lib/src/models/index.js +14 -0
  173. package/lib/src/models/ingress-model.d.ts +5 -3
  174. package/lib/src/models/ingress-model.js +24 -0
  175. package/lib/src/models/job-model.js +56 -0
  176. package/lib/src/models/network-policy-model.js +10 -0
  177. package/lib/src/models/pod-metrics-model.js +34 -0
  178. package/lib/src/models/pod-model.js +78 -0
  179. package/lib/src/models/resource-model.js +34 -0
  180. package/lib/src/models/service-model.js +17 -0
  181. package/lib/src/models/statefulset-model.d.ts +1 -1
  182. package/lib/src/models/statefulset-model.js +17 -0
  183. package/lib/src/models/types/index.js +1 -0
  184. package/lib/src/models/types/metric.js +1 -0
  185. package/lib/src/models/workload-base-model.js +22 -0
  186. package/lib/src/models/workload-model.js +51 -0
  187. package/lib/src/pages/configmaps/index.js +15 -0
  188. package/lib/src/pages/cronjobs/create/index.js +6 -0
  189. package/lib/src/pages/cronjobs/index.js +3 -0
  190. package/lib/src/pages/cronjobs/list/index.js +42 -0
  191. package/lib/src/pages/cronjobs/show/index.js +16 -0
  192. package/lib/src/pages/daemonsets/create/index.js +6 -0
  193. package/lib/src/pages/daemonsets/index.js +3 -0
  194. package/lib/src/pages/daemonsets/list/index.js +32 -0
  195. package/lib/src/pages/daemonsets/show/index.js +16 -0
  196. package/lib/src/pages/deployments/create/index.js +7 -0
  197. package/lib/src/pages/deployments/index.d.ts +0 -1
  198. package/lib/src/pages/deployments/index.js +3 -0
  199. package/lib/src/pages/deployments/list/index.js +26 -0
  200. package/lib/src/pages/deployments/show/index.js +16 -0
  201. package/lib/src/pages/ingresses/index.js +26 -0
  202. package/lib/src/pages/jobs/index.js +34 -0
  203. package/lib/src/pages/networkPolicies/index.js +67 -0
  204. package/lib/src/pages/pods/create/index.js +6 -0
  205. package/lib/src/pages/pods/index.js +3 -0
  206. package/lib/src/pages/pods/list/index.js +81 -0
  207. package/lib/src/pages/pods/show/index.js +54 -0
  208. package/lib/src/pages/secrets/index.js +15 -0
  209. package/lib/src/pages/services/index.js +26 -0
  210. package/lib/src/pages/statefulsets/create/index.js +6 -0
  211. package/lib/src/pages/statefulsets/index.js +3 -0
  212. package/lib/src/pages/statefulsets/list/index.js +26 -0
  213. package/lib/src/pages/statefulsets/show/index.js +16 -0
  214. package/lib/src/plugins/index.js +3 -0
  215. package/lib/src/plugins/model-plugin.js +46 -0
  216. package/lib/src/plugins/relation-plugin.js +81 -0
  217. package/lib/src/plugins/type.js +1 -0
  218. package/lib/src/providers/index.js +1 -0
  219. package/lib/src/providers/router-provider/index.js +100 -0
  220. package/lib/src/types/index.js +1 -0
  221. package/lib/src/types/resource.d.ts +12 -3
  222. package/lib/src/types/resource.js +12 -0
  223. package/lib/src/utils/addId.js +8 -0
  224. package/lib/src/utils/download.js +9 -0
  225. package/lib/src/utils/error.js +53 -0
  226. package/lib/src/utils/form.js +9 -0
  227. package/lib/src/utils/k8s.js +6 -0
  228. package/lib/src/utils/labels.js +15 -0
  229. package/lib/src/utils/match-selector.js +12 -0
  230. package/lib/src/utils/openapi.js +33 -0
  231. package/lib/src/utils/schema.js +117 -0
  232. package/lib/src/utils/selector.js +12 -0
  233. package/lib/src/utils/string.js +6 -0
  234. package/lib/src/utils/time.js +46 -0
  235. package/lib/src/utils/unit.js +69 -0
  236. package/lib/src/utils/yaml.js +44 -0
  237. package/lib/vite.config.js +60 -0
  238. package/package.json +6 -4
  239. package/lib/src/components/ModalContextProvider/index.d.ts +0 -12
  240. package/lib/src/hooks/useModal.d.ts +0 -0
  241. package/lib/src/model/cronjob-model.d.ts +0 -9
  242. package/lib/src/model/index.d.ts +0 -6
  243. package/lib/src/model/job-model.d.ts +0 -10
  244. package/lib/src/model/pod-metrics-model.d.ts +0 -7
  245. package/lib/src/model/pod-model.d.ts +0 -15
  246. package/lib/src/model/resource-model.d.ts +0 -17
  247. package/lib/src/model/workload-model.d.ts +0 -17
  248. package/lib/src/types/metric.d.ts +0 -25
@@ -0,0 +1,157 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { ConditionsTable } from '../ConditionsTable';
3
+ import { CronjobJobsTable } from '../CronjobJobsTable';
4
+ import { EventsTable } from '../EventsTable';
5
+ import { ImageNames } from '../ImageNames';
6
+ import { IngressRulesTable } from '../IngressRulesTable';
7
+ import { KeyValue } from '../KeyValue';
8
+ import Time from '../Time';
9
+ import { WorkloadPodsTable } from '../WorkloadPodsTable';
10
+ import { WorkloadReplicas } from '../WorkloadReplicas';
11
+ export const ImageField = (i18n) => {
12
+ return {
13
+ key: 'Image',
14
+ title: i18n.t('dovetail.image'),
15
+ path: ['imageNames'],
16
+ col: 12,
17
+ renderContent(value) {
18
+ return _jsx(ImageNames, { value: value });
19
+ },
20
+ };
21
+ };
22
+ export const ReplicaField = (i18n) => {
23
+ return {
24
+ key: 'Replicas',
25
+ title: i18n.t('dovetail.replicas'),
26
+ path: ['status', 'replicas'],
27
+ renderContent: (_, record, field) => {
28
+ return _jsx(WorkloadReplicas, { record: record, label: field.title, editable: true });
29
+ },
30
+ };
31
+ };
32
+ export const ConditionsField = (i18n) => {
33
+ return {
34
+ key: 'Conditions',
35
+ title: i18n.t('dovetail.condition'),
36
+ path: ['status', 'conditions'],
37
+ renderContent: value => {
38
+ return _jsx(ConditionsTable, { conditions: value });
39
+ },
40
+ };
41
+ };
42
+ export const PodsField = () => {
43
+ return {
44
+ key: 'pods',
45
+ title: 'Pods',
46
+ path: [],
47
+ renderContent: (_, record) => {
48
+ return (_jsx(WorkloadPodsTable, { selector: record.metadata.relations?.find(r => {
49
+ return r.kind === 'Pod' && r.type === 'creates';
50
+ })?.selector, hideToolbar: true }));
51
+ },
52
+ };
53
+ };
54
+ export const JobsField = () => {
55
+ return {
56
+ key: 'jobs',
57
+ title: 'Jobs',
58
+ path: [],
59
+ renderContent: (_, record) => {
60
+ return (_jsx(CronjobJobsTable, { owner: {
61
+ apiVersion: record.apiVersion || '',
62
+ kind: record.kind || '',
63
+ name: record.metadata?.name || '',
64
+ namespace: record.metadata?.namespace || '',
65
+ uid: record.metadata?.uid || '',
66
+ } }));
67
+ },
68
+ };
69
+ };
70
+ export const DataField = (i18n) => {
71
+ return {
72
+ key: 'data',
73
+ title: i18n.t('dovetail.data'),
74
+ path: ['data'],
75
+ renderContent: val => {
76
+ return _jsx(KeyValue, { value: val });
77
+ },
78
+ };
79
+ };
80
+ export const SecretDataField = (i18n) => {
81
+ return {
82
+ key: 'data',
83
+ title: i18n.t('dovetail.data'),
84
+ path: ['data'],
85
+ renderContent: val => {
86
+ const decodeVal = {};
87
+ for (const key in val) {
88
+ decodeVal[key] = atob(val[key]);
89
+ }
90
+ return _jsx(KeyValue, { value: decodeVal });
91
+ },
92
+ };
93
+ };
94
+ export const StartTimeField = (i18n) => {
95
+ return {
96
+ key: 'started',
97
+ title: i18n.t('dovetail.started'),
98
+ path: ['status', 'startTime'],
99
+ col: 12,
100
+ renderContent(value) {
101
+ return _jsx(Time, { date: value });
102
+ },
103
+ };
104
+ };
105
+ export const ServiceTypeField = (i18n) => {
106
+ return {
107
+ key: 'type',
108
+ title: i18n.t('dovetail.type'),
109
+ path: ['spec', 'type'],
110
+ };
111
+ };
112
+ export const ClusterIpField = (i18n) => {
113
+ return {
114
+ key: 'clusterIp',
115
+ title: i18n.t('dovetail.clusterIp'),
116
+ path: ['spec', 'clusterIP'],
117
+ };
118
+ };
119
+ export const SessionAffinityField = (i18n) => {
120
+ return {
121
+ key: 'clusterIp',
122
+ title: i18n.t('dovetail.sessionAffinity'),
123
+ path: ['spec', 'sessionAffinity'],
124
+ };
125
+ };
126
+ export const ServicePodsField = () => {
127
+ return {
128
+ key: 'pods',
129
+ title: 'Pods',
130
+ path: [],
131
+ renderContent: (_, record) => {
132
+ return (_jsx(WorkloadPodsTable, { selector: record.metadata.relations?.find(r => {
133
+ return r.kind === 'Pod' && r.type === 'selects';
134
+ })?.selector }));
135
+ },
136
+ };
137
+ };
138
+ export const IngressRulesTableTabField = (i18n) => {
139
+ return {
140
+ key: 'rules',
141
+ title: i18n.t('dovetail.rule'),
142
+ path: ['spec', 'rules'],
143
+ renderContent: (_, record) => {
144
+ return _jsx(IngressRulesTable, { ingress: record });
145
+ },
146
+ };
147
+ };
148
+ export const EventsTableTabField = (i18n) => {
149
+ return {
150
+ key: 'event',
151
+ title: i18n.t('dovetail.event'),
152
+ path: [],
153
+ renderContent: () => {
154
+ return _jsx(EventsTable, {});
155
+ },
156
+ };
157
+ };
@@ -1,11 +1,19 @@
1
1
  import { i18n as I18nType } from 'i18next';
2
- import { ResourceModel, WorkloadBaseModel, ServiceModel } from 'src/models';
2
+ import { Unstructured } from 'k8s-api-provider';
3
+ import { NetworkPolicy } from 'kubernetes-types/networking/v1';
4
+ import { ResourceModel, WorkloadBaseModel, ServiceModel, JobModel, CronJobModel, PodModel, IngressModel } from 'src/models';
3
5
  import { ShowField, ShowArea, ShowGroup } from './fields';
4
- export declare const BasicGroup: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(i18n: I18nType, { upAreas, downAreas, basicFields }?: {
6
+ export declare const BasicGroup: <Model extends ResourceModel<Unstructured>>(i18n: I18nType, { upAreas, downAreas, basicFields, }?: {
5
7
  upAreas?: ShowArea<Model>[] | undefined;
6
8
  downAreas?: ShowArea<Model>[] | undefined;
7
9
  basicFields?: ShowField<Model>[] | undefined;
8
10
  }) => ShowGroup<Model>;
9
11
  export declare const PodsGroup: <Model extends WorkloadBaseModel>() => ShowGroup<Model>;
12
+ export declare const PodContainersGroup: <Model extends PodModel>(i18n: I18nType) => ShowGroup<Model>;
10
13
  export declare const ServicePodsGroup: <Model extends ServiceModel>() => ShowGroup<Model>;
11
- export declare const ConditionsGroup: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(i18n: I18nType) => ShowGroup<Model>;
14
+ export declare const ConditionsGroup: <Model extends ResourceModel<Unstructured>>(i18n: I18nType) => ShowGroup<Model>;
15
+ export declare const SecretDataGroup: <Model extends ResourceModel<Unstructured>>() => ShowGroup<Model>;
16
+ export declare const JobsGroup: <Model extends JobModel | CronJobModel>() => ShowGroup<Model>;
17
+ export declare const IngressRulesGroup: <Model extends IngressModel>(i18n: I18nType) => ShowGroup<Model>;
18
+ export declare const PodSelectorGroup: <Model extends ResourceModel<Required<Unstructured & import("kubernetes-types/core/v1").Service> | (NetworkPolicy & Unstructured)>>(i18n: I18nType) => ShowGroup<Model>;
19
+ export declare const PortsGroup: <Model extends ServiceModel>(i18n: I18nType) => ShowGroup<Model>;
@@ -0,0 +1,2 @@
1
+ export * from './fields';
2
+ export * from './ShowContent';
@@ -1,12 +1,8 @@
1
1
  import { i18n as I18nType } from 'i18next';
2
- import { ResourceModel, IngressModel, JobModel, CronJobModel, PodModel } from 'src/models';
2
+ import { ResourceModel, PodModel } from 'src/models';
3
3
  import { ShowTab } from './fields';
4
- export declare const SecretDataTab: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(i18n: I18nType) => ShowTab<Model>;
5
4
  export declare const EventsTab: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(i18n: I18nType) => ShowTab<Model>;
6
- export declare const IngressRulesTab: <Model extends IngressModel>(i18n: I18nType) => ShowTab<Model>;
7
- export declare const NetworkPolicyIngressRulesTab: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>() => ShowTab<Model>;
8
- export declare const NetworkPolicyEgressRulesTab: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>() => ShowTab<Model>;
5
+ export declare const NetworkPolicyIngressRulesTab: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(i18n: I18nType) => ShowTab<Model>;
6
+ export declare const NetworkPolicyEgressRulesTab: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(i18n: I18nType) => ShowTab<Model>;
9
7
  export declare const DataTab: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(i18n: I18nType) => ShowTab<Model>;
10
- export declare const JobsTab: <Model extends JobModel | CronJobModel>() => ShowTab<Model>;
11
- export declare const PodContainersTab: <Model extends PodModel>(i18n: I18nType) => ShowTab<Model>;
12
8
  export declare const PodLogTab: <Model extends PodModel>(i18n: I18nType) => ShowTab<Model>;
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import { WorkloadState } from '../../constants';
3
+ export declare const StateTagStyle: import("@linaria/core").LinariaClassName;
3
4
  type Props = {
4
5
  state?: WorkloadState;
5
6
  className?: string;
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useUIKit } from '@cloudtower/eagle';
3
+ import { WorkloadState } from '../../constants';
4
+ import { useD2Translation } from '../../i18n';
5
+ export const StateTag = ({ state = WorkloadState.UPDATEING, className }) => {
6
+ const kit = useUIKit();
7
+ const { t } = useD2Translation();
8
+ const colorMap = {
9
+ updating: 'blue',
10
+ ready: 'green',
11
+ completed: 'green',
12
+ failed: 'red',
13
+ suspended: 'gray',
14
+ running: 'blue',
15
+ succeeded: 'green',
16
+ unknown: 'gray',
17
+ terminating: 'gray',
18
+ pending: 'gray',
19
+ waiting: 'gray',
20
+ };
21
+ return _jsx(kit.tag, { className: className, color: colorMap[state], children: t(`dovetail.${state || 'updaing'}`) });
22
+ };
@@ -0,0 +1 @@
1
+ export * from './StateTag';
@@ -0,0 +1,36 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { kitContext } from '@cloudtower/eagle';
3
+ import { Typo } from '@cloudtower/eagle';
4
+ import { cx, css } from '@linaria/core';
5
+ import { useContext } from 'react';
6
+ import { useD2Translation } from '../../i18n';
7
+ export const ErrorWrapper = css `
8
+ display: flex;
9
+ flex-direction: column;
10
+ justify-content: center;
11
+ align-items: center;
12
+ height: 100%;
13
+ `;
14
+ export const ErrorContent = css `
15
+ display: flex;
16
+ flex-direction: column;
17
+ align-items: center;
18
+
19
+ .title {
20
+ margin-bottom: 8px;
21
+ background-clip: text;
22
+ -webkit-background-clip: text;
23
+ -webkit-text-fill-color: transparent;
24
+ background-image: linear-gradient(211.41deg, #929dad 0%, #d3dbe3 100%);
25
+ }
26
+ `;
27
+ const WidgetErrorContent = props => {
28
+ const { refetch } = props;
29
+ const kit = useContext(kitContext);
30
+ const { t } = useD2Translation();
31
+ return (_jsx("div", { className: ErrorWrapper, style: props.style, children: _jsxs("div", { className: ErrorContent, children: [_jsx("p", { className: cx(Typo.Label.l1_regular_title, 'title'), children: props.errorText || t('dovetail.obtain_data_error') }), refetch ? (_jsx(kit.button, { type: "ordinary", onClick: e => {
32
+ e.stopPropagation();
33
+ refetch?.();
34
+ }, children: t('dovetail.retry') })) : null] }) }));
35
+ };
36
+ export default WidgetErrorContent;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  type Props = {
3
- title: string;
3
+ description?: string;
4
4
  selectedKeys: string[];
5
5
  hideCreate?: boolean;
6
6
  };
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useUIKit, Typo } from '@cloudtower/eagle';
3
+ import { css, cx } from '@linaria/core';
4
+ import { CreateButton } from '../CreateButton';
5
+ import { DeleteManyButton } from '../DeleteManyButton';
6
+ const ToolbarStyle = css `
7
+ justify-content: space-between;
8
+ width: 100%;
9
+ margin-bottom: 16px;
10
+ `;
11
+ export const TableToolBar = ({ title, selectedKeys, hideCreate }) => {
12
+ const kit = useUIKit();
13
+ return (_jsxs(kit.space, { className: cx(ToolbarStyle, 'table-toolbar'), children: [_jsx("span", { className: Typo.Display.d2_bold_title, children: title }), _jsxs(kit.space, { children: [selectedKeys.length > 0 ? _jsx(DeleteManyButton, { ids: selectedKeys }) : undefined, !hideCreate ? _jsx(CreateButton, {}) : null] })] }));
14
+ };
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ArrowChevronUp16BoldSecondaryIcon } from '@cloudtower/icons-react';
3
+ import { cx } from '@linaria/core';
4
+ import { styled } from '@linaria/react';
5
+ export const ColumnTitle = props => {
6
+ const { title, sortOrder } = props;
7
+ return (_jsxs(_Fragment, { children: [title, _jsx(ArrowChevronUp16BoldSecondaryIcon, { className: cx('order-icon', sortOrder) })] }));
8
+ };
9
+ export const AuxiliaryLine = styled.div `
10
+ position: absolute;
11
+ top: 0;
12
+ left: 0;
13
+ bottom: 0;
14
+ width: 1px;
15
+ background: $blue-60;
16
+ transform: translateX(-9999px);
17
+ z-index: 999;
18
+
19
+ &::before {
20
+ content: '';
21
+ position: absolute;
22
+ height: 34px;
23
+ width: 3px;
24
+ top: 0;
25
+ left: -1px;
26
+ background: $blue-60;
27
+ }
28
+ `;
@@ -0,0 +1,69 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useUIKit } from '@cloudtower/eagle';
3
+ import { css, cx } from '@linaria/core';
4
+ import { useMemo, useRef } from 'react';
5
+ import { useD2Translation } from '../../i18n';
6
+ import ErrorContent from './ErrorContent';
7
+ import { AuxiliaryLine } from './TableWidgets';
8
+ const TableContainerStyle = css `
9
+ width: 100%;
10
+ border-top: 1px solid rgba(211, 218, 235, 0.6);
11
+ display: flex;
12
+ flex-direction: column;
13
+
14
+ // use eagle's own pagination component, hide antd's
15
+ .ant-table-pagination {
16
+ display: none;
17
+ }
18
+
19
+ .table-container {
20
+ min-height: 0;
21
+ }
22
+ `;
23
+ function Table(props) {
24
+ const kit = useUIKit();
25
+ const { t } = useD2Translation();
26
+ const { loading, error, data: dataSource, rowKey, columns, scroll, currentPage, currentSize, RowMenu, refetch, onSelect, onPageChange, onSizeChange, } = props;
27
+ const auxiliaryLineRef = useRef(null);
28
+ const wrapperRef = useRef(null);
29
+ const pagination = useMemo(() => ({
30
+ current: currentPage,
31
+ pageSize: currentSize,
32
+ onChange: onPageChange,
33
+ }), [currentPage, currentSize, onPageChange]);
34
+ const finalColumns = useMemo(() => {
35
+ if (RowMenu) {
36
+ const actionColumn = {
37
+ key: '_action_',
38
+ display: true,
39
+ dataIndex: [],
40
+ title: '',
41
+ render: (_, record) => {
42
+ return _jsx(RowMenu, { record: record });
43
+ },
44
+ };
45
+ return [
46
+ ...columns,
47
+ actionColumn
48
+ ];
49
+ }
50
+ return columns;
51
+ }, [columns, RowMenu]);
52
+ if (loading) {
53
+ return _jsx(kit.loading, {});
54
+ }
55
+ else if (error) {
56
+ return (_jsx(ErrorContent, { errorText: t('dovetail.retry_when_access_data_failed'), refetch: refetch, style: { padding: '15px 0' } }));
57
+ }
58
+ else if (dataSource.length === 0) {
59
+ return _jsx(ErrorContent, { errorText: t('dovetail.empty'), style: { padding: '15px 0' } });
60
+ }
61
+ return (_jsxs("div", { ref: wrapperRef, className: cx(TableContainerStyle, props.className, 'table-wrapper'), children: [_jsx(kit.table, { tableLayout: "fixed", rowSelection: onSelect
62
+ ? {
63
+ onChange: (keys, rows) => {
64
+ onSelect?.(keys, rows);
65
+ },
66
+ }
67
+ : undefined, columns: finalColumns, dataSource: dataSource, pagination: pagination, error: error, loading: loading, rowKey: rowKey, wrapper: wrapperRef, scroll: scroll }), _jsx(AuxiliaryLine, { ref: auxiliaryLineRef }), _jsx(kit.pagination, { current: currentPage, size: currentSize, count: dataSource.length, onChange: onPageChange, onSizeChange: onSizeChange })] }));
68
+ }
69
+ export default Table;
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useUIKit } from '@cloudtower/eagle';
3
+ import { css } from '@linaria/core';
4
+ const TagWrapper = css `
5
+ flex-wrap: wrap;
6
+ max-width: 100%;
7
+ `;
8
+ const TagStyle = css `
9
+ overflow: hidden;
10
+ text-overflow: ellipsis;
11
+ `;
12
+ export const Tags = props => {
13
+ const { value } = props;
14
+ const kit = useUIKit();
15
+ if (!value) {
16
+ return _jsx("span", { children: "-" });
17
+ }
18
+ const tags = Object.keys(value).map(key => {
19
+ return (_jsx(kit.tag.SplitTag, { className: TagStyle, primaryContent: key, secondaryContent: value[key], title: `${key}:${value[key]}`, color: "gray" }, key));
20
+ });
21
+ return (_jsx(kit.space, { className: TagWrapper, size: 8, children: tags }));
22
+ };
@@ -0,0 +1,14 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // TODO: use ui-kit
3
+ import dayjs from 'dayjs';
4
+ const Time = props => {
5
+ const { className, date, dateTemplate = 'YYYY-MM-DD', timeTemplate = 'HH:mm', plainText, } = props;
6
+ if (!date)
7
+ return _jsx(_Fragment, { children: "-" });
8
+ const time = dayjs(date);
9
+ if (plainText) {
10
+ return (_jsxs(_Fragment, { children: [dateTemplate !== null && time.format(dateTemplate), ' ', timeTemplate !== null && time.format(timeTemplate)] }));
11
+ }
12
+ return (_jsxs("span", { className: `time-wrapper ${className || ''}`, children: [dateTemplate !== null && (_jsxs("span", { className: "date", children: [" ", time.format(dateTemplate)] })), timeTemplate !== null && (_jsxs("span", { className: "time", children: [" ", time.format(timeTemplate)] }))] }));
13
+ };
14
+ export default Time;
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ interface ValueDisplayProps {
3
+ value: React.ReactNode;
4
+ useOverflow?: boolean;
5
+ className?: string;
6
+ }
7
+ declare function ValueDisplay(props: ValueDisplayProps): JSX.Element;
8
+ export default ValueDisplay;
@@ -1,9 +1,9 @@
1
- /// <reference types="react" />
1
+ import React from 'react';
2
2
  import { WorkloadModel } from '../../models';
3
3
  import { DropdownSize } from '../K8sDropdown';
4
4
  type Props<Model extends WorkloadModel> = {
5
5
  record: Model;
6
6
  size?: DropdownSize;
7
7
  };
8
- export declare function WorkloadDropdown<Model extends WorkloadModel>(props: Props<Model>): JSX.Element;
8
+ export declare function WorkloadDropdown<Model extends WorkloadModel>(props: React.PropsWithChildren<Props<Model>>): JSX.Element;
9
9
  export {};
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Icon, useUIKit } from '@cloudtower/eagle';
3
+ import { DynamicResourceSchedule16BlueIcon } from '@cloudtower/icons-react';
4
+ import { useResource, useUpdate } from '@refinedev/core';
5
+ import { useD2Translation } from '../../i18n';
6
+ import { pruneBeforeEdit } from '../../utils/k8s';
7
+ import K8sDropdown from '../K8sDropdown';
8
+ export function WorkloadDropdown(props) {
9
+ const { record } = props;
10
+ const kit = useUIKit();
11
+ const { resource } = useResource();
12
+ const { mutate } = useUpdate();
13
+ const { t } = useD2Translation();
14
+ return (_jsx(K8sDropdown, { record: record, children: _jsx(kit.menu.Item, { onClick: () => {
15
+ const v = record.redeploy();
16
+ const id = v.id;
17
+ pruneBeforeEdit(v);
18
+ mutate({
19
+ id,
20
+ resource: resource?.name || '',
21
+ values: v,
22
+ });
23
+ }, children: _jsx(Icon, { src: DynamicResourceSchedule16BlueIcon, children: t('dovetail.redeploy') }) }) }));
24
+ }
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useUIKit } from '@cloudtower/eagle';
3
+ import { css } from '@linaria/core';
4
+ import { useList } from '@refinedev/core';
5
+ import { useMemo, useState } from 'react';
6
+ import { matchSelector } from 'src/utils/match-selector';
7
+ import { NameColumnRenderer, NodeNameColumnRenderer, RestartCountColumnRenderer, StateDisplayColumnRenderer, WorkloadImageColumnRenderer, } from '../../hooks/useEagleTable/columns';
8
+ import { useD2Translation } from '../../i18n';
9
+ import Table from '../Table';
10
+ import { TableToolBar } from '../Table/TableToolBar';
11
+ export const WorkloadPodsTable = ({ selector, hideToolbar, }) => {
12
+ const { i18n } = useD2Translation();
13
+ const kit = useUIKit();
14
+ const [selectedKeys, setSelectedKeys] = useState([]);
15
+ const [currentPage, setCurrentPage] = useState(1);
16
+ const { data } = useList({
17
+ resource: 'pods',
18
+ meta: { resourceBasePath: '/api/v1', kind: 'Pod' },
19
+ pagination: {
20
+ mode: 'off',
21
+ },
22
+ });
23
+ const dataSource = useMemo(() => {
24
+ return data?.data.filter(p => {
25
+ return selector ? matchSelector(p, selector) : true;
26
+ });
27
+ }, [data?.data, selector]);
28
+ const columns = [
29
+ StateDisplayColumnRenderer(i18n),
30
+ NameColumnRenderer(i18n, 'pods'),
31
+ NodeNameColumnRenderer(i18n),
32
+ WorkloadImageColumnRenderer(i18n),
33
+ RestartCountColumnRenderer(i18n),
34
+ ];
35
+ return (_jsxs(kit.space, { direction: "vertical", className: css `
36
+ width: 100%;
37
+ vertical-align: top;
38
+ `, children: [hideToolbar ? null : (_jsx(TableToolBar, { title: "", selectedKeys: selectedKeys, hideCreate: true })), _jsx(Table, { tableKey: "pods", loading: !dataSource, data: dataSource || [], columns: columns, onSelect: keys => setSelectedKeys(keys), rowKey: "id", error: false, currentPage: currentPage, onPageChange: p => setCurrentPage(p), currentSize: 10, refetch: () => null })] }));
39
+ };
@@ -0,0 +1 @@
1
+ export * from './WorkloadPodsTable';
@@ -1,7 +1,17 @@
1
- /// <reference types="react" />
1
+ import React from 'react';
2
2
  import { WorkloadModel } from '../../models';
3
+ interface WorkloadReplicasFormProps {
4
+ defaultValue: number;
5
+ record: WorkloadModel;
6
+ label: string;
7
+ }
8
+ interface WorkloadReplicasFormHandler {
9
+ submit: () => Promise<unknown> | undefined;
10
+ }
11
+ export declare const WorkloadReplicasForm: React.ForwardRefExoticComponent<WorkloadReplicasFormProps & React.RefAttributes<WorkloadReplicasFormHandler>>;
3
12
  export interface WorkloadReplicasProps {
4
13
  record: WorkloadModel;
5
14
  editable?: boolean;
6
15
  }
7
16
  export declare function WorkloadReplicas({ record, editable }: WorkloadReplicasProps): JSX.Element;
17
+ export {};
@@ -0,0 +1,50 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /* eslint-disable @typescript-eslint/no-empty-function */
3
+ import { useUIKit } from '@cloudtower/eagle';
4
+ import { useResource, useUpdate } from '@refinedev/core';
5
+ import { get } from 'lodash-es';
6
+ import React, { useState, useCallback, useImperativeHandle, useRef } from 'react';
7
+ import { EditField } from 'src/components/EditField';
8
+ import { pruneBeforeEdit } from '../../utils/k8s';
9
+ const WorkloadReplicasForm = React.forwardRef(function WorkloadReplicasForm(props, ref) {
10
+ const { defaultValue, record, label } = props;
11
+ const kit = useUIKit();
12
+ const { resource } = useResource();
13
+ const { mutateAsync } = useUpdate();
14
+ const [replicas, setReplicas] = useState(defaultValue);
15
+ const submit = useCallback(() => {
16
+ const v = record.scale(replicas);
17
+ const id = record.id;
18
+ pruneBeforeEdit(v);
19
+ return mutateAsync({
20
+ id,
21
+ resource: resource?.name || '',
22
+ values: v,
23
+ });
24
+ }, [record, replicas, resource?.name, mutateAsync]);
25
+ useImperativeHandle(ref, () => ({
26
+ submit,
27
+ }), [submit]);
28
+ return (_jsx(kit.form.Item, { label: label, children: _jsx(kit.fields.Integer, { input: {
29
+ name: 'replicas',
30
+ value: replicas,
31
+ onChange: (value) => {
32
+ setReplicas(Number(value));
33
+ },
34
+ onBlur: () => { },
35
+ onFocus: () => { },
36
+ }, meta: {}, controls: true }) }));
37
+ });
38
+ export function WorkloadReplicas({ record, label, editable }) {
39
+ const formRef = useRef(null);
40
+ const readyReplicas = record.status && 'readyReplicas' in record.status ? record.status.readyReplicas : 0;
41
+ const replicas = record.spec && 'replicas' in record.spec ? record.spec.replicas : 0;
42
+ const canScale = record.kind === 'Deployment' || record.kind === 'StatefulSet';
43
+ const currentReplicas = get(record, 'spec.replicas', 0);
44
+ return (_jsxs("span", { children: [readyReplicas, "/", replicas, editable && canScale && (_jsx(EditField, { modalProps: {
45
+ formRef,
46
+ renderContent() {
47
+ return (_jsx(WorkloadReplicasForm, { ref: formRef, defaultValue: currentReplicas, record: record, label: label || '' }));
48
+ }
49
+ } }))] }));
50
+ }
@@ -0,0 +1,34 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as monaco from 'monaco-editor';
3
+ import { useEffect, useRef } from 'react';
4
+ const MonacoYamlDiffEditor = props => {
5
+ const ref = useRef(null);
6
+ const { origin, modified, id, height } = props;
7
+ useEffect(() => {
8
+ const originalUri = id ? monaco.Uri.parse(`${id}_original.yaml`) : undefined;
9
+ const modifiedUri = id ? monaco.Uri.parse(`${id}_modified.yaml`) : undefined;
10
+ const originalModel = monaco.editor.createModel(origin, 'yaml', originalUri);
11
+ const modifiedModel = monaco.editor.createModel(modified, 'yaml', modifiedUri);
12
+ const diffEditor = monaco.editor.createDiffEditor(ref.current, {
13
+ renderSideBySide: true,
14
+ originalEditable: false,
15
+ readOnly: true,
16
+ ignoreTrimWhitespace: false,
17
+ scrollBeyondLastLine: false,
18
+ });
19
+ diffEditor.setModel({
20
+ original: originalModel,
21
+ modified: modifiedModel,
22
+ });
23
+ return () => {
24
+ diffEditor.dispose();
25
+ originalModel.dispose();
26
+ modifiedModel.dispose();
27
+ };
28
+ }, [modified, origin, id]);
29
+ return (_jsx("div", { ref: ref, style: {
30
+ width: '100%',
31
+ height: height || '500px',
32
+ } }));
33
+ };
34
+ export default MonacoYamlDiffEditor;