@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,10 @@
1
+ /// <reference types="react" />
2
+ import { Control } from 'react-hook-form';
3
+ import { ResourceModel } from '../../models';
4
+ import { ResourceConfig } from '../../types';
5
+ type Props<Model extends ResourceModel> = {
6
+ config?: ResourceConfig<Model>;
7
+ control: Control;
8
+ };
9
+ export declare const RefineFormContent: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(props: Props<Model>) => JSX.Element;
10
+ export {};
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import { ResourceConfig } from '../../types';
3
+ export type RefineFormModalProps = {
4
+ config: ResourceConfig;
5
+ id?: string;
6
+ };
7
+ export declare function RefineFormModal(props: RefineFormModalProps): JSX.Element;
8
+ export default RefineFormModal;
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import { ResourceConfig } from '../../types';
3
+ type Props = {
4
+ config: ResourceConfig<any>;
5
+ };
6
+ export declare const RefineFormPage: (props: Props) => JSX.Element;
7
+ export {};
@@ -0,0 +1,3 @@
1
+ export * from './RefineFormPage';
2
+ export * from './RefineFormModal';
3
+ export * from './type';
@@ -0,0 +1,20 @@
1
+ /// <reference types="react" />
2
+ export type RefineFormValidator = (value: unknown, formValue: unknown) => {
3
+ isValid: boolean;
4
+ errorMsg: string;
5
+ };
6
+ export type RefineFormField = {
7
+ path: string[];
8
+ key: string;
9
+ label: string;
10
+ type?: 'number';
11
+ validators?: RefineFormValidator[];
12
+ render?: React.FC<{
13
+ value: unknown;
14
+ onChange: (event: unknown) => void;
15
+ onBlur: () => void;
16
+ }>;
17
+ };
18
+ export type RefineFormConfig = {
19
+ fields: RefineFormField[];
20
+ };
@@ -0,0 +1,10 @@
1
+ import { UseFormProps } from '@refinedev/core';
2
+ import { ResourceConfig } from '../../types';
3
+ export declare const useRefineForm: (props: {
4
+ config: ResourceConfig;
5
+ id?: string;
6
+ refineProps?: UseFormProps;
7
+ }) => {
8
+ formResult: import("@refinedev/react-hook-form").UseFormReturnType<import("@refinedev/core").BaseRecord, import("@refinedev/core").HttpError, Record<string, unknown>, {}, import("@refinedev/core").BaseRecord, import("@refinedev/core").BaseRecord, import("@refinedev/core").HttpError>;
9
+ responseErrorMsg: string;
10
+ };
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { WorkloadModel } from '../../models';
3
+ import { DropdownSize } from '../K8sDropdown';
4
+ type Props<Model extends WorkloadModel> = {
5
+ record: Model;
6
+ size?: DropdownSize;
7
+ };
8
+ export declare function ReplicasDropdown<Model extends WorkloadModel>(props: React.PropsWithChildren<Props<Model>>): JSX.Element;
9
+ export {};
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { Route } from 'react-router-dom';
4
+ import { FormType } from 'src/types';
5
+ import { ResourceForm } from './create';
6
+ import { ResourceList } from './list';
7
+ import { ResourceShow } from './show';
8
+ export function ResourceCRUD(props) {
9
+ const { configs, urlPrefix } = props;
10
+ return (_jsx(_Fragment, { children: configs.map(config => {
11
+ return (_jsxs(React.Fragment, { children: [_jsx(Route, { path: `${urlPrefix}/${config.name}`, exact: true, children: _jsx(ResourceList, { name: config.kind, formatter: config.formatter, columns: config.columns?.() || [], Dropdown: config.Dropdown }) }), _jsx(Route, { path: `${urlPrefix}/${config.name}/show`, children: _jsx(ResourceShow, { formatter: config.formatter, showConfig: config.showConfig?.() || {}, Dropdown: config.Dropdown }) }),
12
+ // the modals would render in ModalStack
13
+ config.formType === FormType.PAGE ? (_jsxs(_Fragment, { children: [_jsx(Route, { path: `${urlPrefix}/${config.name}/create`, children: _jsx(ResourceForm, { config: config }) }), _jsx(Route, { path: `${urlPrefix}/${config.name}/edit`, children: _jsx(ResourceForm, { config: config }) })] })) : null] }, config.name));
14
+ }) }));
15
+ }
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
3
+ import YamlForm from 'src/components/YamlForm';
4
+ import { getInitialValues } from 'src/utils/form';
5
+ export function ResourceForm(props) {
6
+ const { config } = props;
7
+ const formProps = useMemo(() => {
8
+ return {
9
+ initialValues: getInitialValues(config),
10
+ };
11
+ }, [config]);
12
+ return (_jsx(YamlForm, { ...formProps }));
13
+ }
@@ -0,0 +1,4 @@
1
+ export * from './list';
2
+ export * from './show';
3
+ export * from './create';
4
+ export * from './ResourceCRUD';
@@ -1,13 +1,9 @@
1
+ /// <reference types="react" />
1
2
  import { IResourceComponentsProps } from '@refinedev/core';
2
- import React from 'react';
3
3
  import { ResourceModel } from '../../../models';
4
- import { Column } from '../../Table';
4
+ import { ResourceConfig } from '../../../types';
5
5
  type Props<Model extends ResourceModel> = IResourceComponentsProps & {
6
- formatter?: (v: Model) => Model;
7
- columns: Column<Model>[];
8
- Dropdown?: React.FC<{
9
- record: Model;
10
- }>;
6
+ config: ResourceConfig<Model>;
11
7
  };
12
8
  export declare function ResourceList<Model extends ResourceModel>(props: Props<Model>): JSX.Element;
13
9
  export {};
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEagleTable } from '../../../hooks/useEagleTable';
3
+ import { NameColumnRenderer } from '../../../hooks/useEagleTable/columns';
4
+ import { useD2Translation } from '../../../i18n';
5
+ import { ListPage } from '../../ListPage';
6
+ export function ResourceList(props) {
7
+ const { formatter, name, columns, Dropdown } = props;
8
+ const { i18n } = useD2Translation();
9
+ const { tableProps, selectedKeys } = useEagleTable({
10
+ useTableParams: {},
11
+ columns: [NameColumnRenderer(i18n), ...columns],
12
+ tableProps: {
13
+ currentSize: 10,
14
+ },
15
+ formatter,
16
+ Dropdown,
17
+ });
18
+ return (_jsx(ListPage, { title: name || '', selectedKeys: selectedKeys, tableProps: tableProps }));
19
+ }
@@ -1,13 +1,9 @@
1
+ /// <reference types="react" />
1
2
  import { IResourceComponentsProps } from '@refinedev/core';
2
- import React from 'react';
3
3
  import { ResourceModel } from '../../../models';
4
- import { ShowConfig } from '../../ShowContent';
4
+ import { ResourceConfig } from '../../../types';
5
5
  type Props<Model extends ResourceModel> = IResourceComponentsProps & {
6
- formatter?: (v: Model) => Model;
7
- showConfig: ShowConfig<Model>;
8
- Dropdown?: React.FC<{
9
- record: Model;
10
- }>;
6
+ config: ResourceConfig<Model>;
11
7
  };
12
8
  export declare function ResourceShow<Model extends ResourceModel>(props: Props<Model>): JSX.Element;
13
9
  export {};
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { PageShow } from '../../PageShow';
3
+ export function ResourceShow(props) {
4
+ const { formatter, showConfig, Dropdown } = props;
5
+ return (_jsx(PageShow, { showConfig: showConfig, formatter: formatter, Dropdown: Dropdown }));
6
+ }
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useUIKit } from '@cloudtower/eagle';
3
+ import { useGo, useNavigation } from '@refinedev/core';
4
+ export const ResourceLink = props => {
5
+ const { name, namespace, resourceId } = props;
6
+ const kit = useUIKit();
7
+ const navigation = useNavigation();
8
+ const go = useGo();
9
+ const onClick = () => {
10
+ go({
11
+ to: navigation.showUrl(name, ''),
12
+ query: {
13
+ id: `${namespace}/${resourceId}`,
14
+ },
15
+ options: {
16
+ keepQuery: true,
17
+ },
18
+ });
19
+ };
20
+ return _jsx(kit.Link, { onClick: onClick, children: resourceId });
21
+ };
@@ -0,0 +1,81 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { css, cx } from '@linaria/core';
3
+ import { parseSi } from 'src/utils/unit';
4
+ const WrapperStyle = css `
5
+ display: flex;
6
+ align-items: center;
7
+
8
+ .usage-text {
9
+ width: 50px;
10
+ text-align: right;
11
+ }
12
+
13
+ .usage-bar {
14
+ height: 12px;
15
+ width: 100px;
16
+ position: relative;
17
+ border-radius: 2px;
18
+ }
19
+
20
+ .request-anchor {
21
+ position: absolute;
22
+ left: 10%;
23
+ top: -3px;
24
+ height: 18px;
25
+ width: 2px;
26
+ background: #777;
27
+ z-index: 9;
28
+ }
29
+
30
+ .usage-fill-bar {
31
+ position: absolute;
32
+ left: 0;
33
+ top: 0;
34
+ height: 100%;
35
+ background: rgba(0, 128, 255, 0.6);
36
+ z-index: 7;
37
+ }
38
+
39
+ .request-bar {
40
+ position: absolute;
41
+ left: 0;
42
+ top: 0;
43
+ height: 100%;
44
+ background: #d8deeb;
45
+ z-index: 5;
46
+ }
47
+
48
+ .request-to-limit-bar {
49
+ position: absolute;
50
+ right: 0;
51
+ top: 0;
52
+ height: 100%;
53
+ background: #d8deeb;
54
+ z-index: 5;
55
+
56
+ &.no-limit {
57
+ background: linear-gradient(to right, #d8deeb 50%, #d8deeb 50%);
58
+ background-size: 4px 100%;
59
+
60
+ &.exceed-request {
61
+ background: linear-gradient(to right, #d8deeb 50%, rgba(0, 128, 255, 0.6) 50%);
62
+ background-size: 4px 100%;
63
+ }
64
+ }
65
+ }
66
+ `;
67
+ const InnerBar = ({ usage, requestNum, limitNum }) => {
68
+ const usageNum = parseSi(usage);
69
+ const totalNum = limitNum || requestNum / 0.8;
70
+ const requestPercent = (100 * requestNum) / totalNum;
71
+ const usageInRequestPercent = 100 * Math.min(usageNum / requestNum, 1);
72
+ const usageInRequestToLimitPercent = 100 * Math.min(Math.max(usageNum - requestNum, 0) / (totalNum - requestNum), 1);
73
+ const noLimit = limitNum === 0;
74
+ return (_jsxs("div", { className: "usage-bar", style: { marginLeft: 4 }, children: [_jsx("div", { className: "request-anchor", style: {
75
+ left: `${requestPercent}%`,
76
+ } }), _jsx("div", { className: "request-bar", style: { width: `${requestPercent}%` }, children: _jsx("div", { className: "usage-fill-bar", style: { width: `${usageInRequestPercent}%` } }) }), _jsx("div", { className: cx('request-to-limit-bar', noLimit && 'no-limit', usageInRequestToLimitPercent > 0 && 'exceed-request'), style: { width: `${100 - requestPercent}%` }, children: !noLimit && (_jsx("div", { className: "usage-fill-bar", style: { width: `${usageInRequestToLimitPercent}%` } })) })] }));
77
+ };
78
+ export const ResourceUsageBar = props => {
79
+ const { usage, requestNum } = props;
80
+ return (_jsxs("div", { className: cx('usage-wrapper', WrapperStyle), children: [_jsx("div", { className: "usage-text", children: usage }), requestNum > 0 && _jsx(InnerBar, { ...props })] }));
81
+ };
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { css } from '@linaria/core';
3
+ const Style = css `
4
+ width: 1px;
5
+ height: 16px;
6
+ border-radius: 1px;
7
+ background: rgba(172, 186, 211, 0.6);
8
+ `;
9
+ export const Separator = () => {
10
+ return _jsx("div", { className: Style });
11
+ };
@@ -4,5 +4,8 @@ type Props = {
4
4
  service: ServiceModel;
5
5
  };
6
6
  export declare const ServiceInClusterAccessComponent: React.FC<Props>;
7
- export declare const ServiceOutClusterAccessComponent: React.FC<Props>;
7
+ export declare const ServiceOutClusterAccessComponent: React.FC<Props & {
8
+ clusterVip: string;
9
+ separator?: string;
10
+ }>;
8
11
  export {};
@@ -8,5 +8,10 @@ type Props<Model extends ResourceModel> = {
8
8
  record: Model;
9
9
  }>;
10
10
  };
11
+ export declare function ShowGroupComponent(props: React.PropsWithChildren<{
12
+ title: string;
13
+ className?: string;
14
+ operationEle?: React.ReactElement;
15
+ }>): JSX.Element;
11
16
  export declare const ShowContent: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(props: Props<Model>) => JSX.Element | null;
12
17
  export {};
@@ -0,0 +1,157 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Typo, useUIKit } from '@cloudtower/eagle';
3
+ import { css } from '@linaria/core';
4
+ import { useParsed, useResource, useShow } from '@refinedev/core';
5
+ import yaml from 'js-yaml';
6
+ import { get, omit } from 'lodash-es';
7
+ import { useState, useMemo, useCallback } from 'react';
8
+ import K8sDropdown from 'src/components/K8sDropdown';
9
+ import { KeyValueData } from 'src/components/KeyValueData';
10
+ import MonacoYamlEditor from 'src/components/YamlEditor/MonacoYamlEditor';
11
+ import useK8sYamlEditor from 'src/hooks/useK8sYamlEditor';
12
+ import { useGlobalStore } from '../../hooks';
13
+ import { useD2Translation } from '../../i18n';
14
+ import { StateTag } from '../StateTag';
15
+ import { Tags } from '../Tags';
16
+ import Time from '../Time';
17
+ const ShowContentWrapperStyle = css `
18
+ .ant-row {
19
+ margin-right: 0 !important;
20
+ }
21
+ `;
22
+ const TopBarStyle = css `
23
+ justify-content: space-between;
24
+ width: 100%;
25
+ `;
26
+ const ShowContentHeaderStyle = css `
27
+ width: 100%;
28
+ height: 100%;
29
+ `;
30
+ const EditorStyle = css `
31
+ margin-top: 16px;
32
+ `;
33
+ const FieldWrapperStyle = css `
34
+ display: flex;
35
+ flex-wrap: nowrap;
36
+ `;
37
+ const TabsStyle = css `
38
+ &.ant-tabs {
39
+ .ant-tabs-nav {
40
+ margin-bottom: 0;
41
+ }
42
+ }
43
+ `;
44
+ const StateTagStyle = css `
45
+ margin-left: 8px;
46
+ `;
47
+ var Mode;
48
+ (function (Mode) {
49
+ Mode["Detail"] = "detail";
50
+ Mode["Yaml"] = "yaml";
51
+ })(Mode || (Mode = {}));
52
+ export const ShowContent = (props) => {
53
+ const { showConfig, formatter, Dropdown = K8sDropdown } = props;
54
+ const kit = useUIKit();
55
+ const { globalStore } = useGlobalStore();
56
+ const parsed = useParsed();
57
+ const { resource } = useResource();
58
+ const [mode, setMode] = useState(Mode.Detail);
59
+ const { queryResult } = useShow({
60
+ id: parsed?.params?.id,
61
+ liveMode: mode === Mode.Yaml ? 'off' : 'auto',
62
+ });
63
+ const { t } = useD2Translation();
64
+ const { fold } = useK8sYamlEditor();
65
+ const { data } = queryResult;
66
+ const schema = useMemo(() => ({}), []);
67
+ const defaultEditorValue = useMemo(() => (data?.data ? yaml.dump(omit(globalStore?.restoreItem(data.data), 'id')) : ''), [globalStore, data]);
68
+ const onEditorCreate = useCallback(editor => {
69
+ fold(editor);
70
+ }, [fold]);
71
+ if (!data?.data) {
72
+ return null;
73
+ }
74
+ const model = data.data;
75
+ const record = formatter ? formatter(model) : data?.data;
76
+ function renderFields(fields) {
77
+ if (!record)
78
+ return null;
79
+ return fields.map(field => {
80
+ let content;
81
+ const value = get(record, field.path);
82
+ if (field.renderContent) {
83
+ content = field.renderContent(value, record, field);
84
+ }
85
+ else {
86
+ content = _jsx("span", { children: get(record, field.path) });
87
+ }
88
+ return (_jsx(kit.col, { span: field.col, children: field.render ? (field.render(value, record, field)) : (_jsxs("div", { className: FieldWrapperStyle, children: [_jsxs("span", { className: Typo.Label.l3_regular, style: { width: field.labelWidth || '64px' }, children: [field.title, ":", ' '] }), content] })) }, field.path.join()));
89
+ });
90
+ }
91
+ const DESCRIPTION_DEFAULT_FIELDS = [
92
+ {
93
+ key: 'NameSpace',
94
+ title: t('dovetail.namespace'),
95
+ path: ['metadata', 'namespace'],
96
+ },
97
+ {
98
+ key: 'Age',
99
+ title: t('dovetail.created_time'),
100
+ path: ['metadata', 'creationTimestamp'],
101
+ renderContent(value) {
102
+ return _jsx(Time, { date: new Date(value) });
103
+ },
104
+ },
105
+ ];
106
+ const LABELS_ANNOTATIONS_GROUP_FIELDS = [
107
+ {
108
+ key: 'Labels',
109
+ title: t('dovetail.label'),
110
+ path: ['metadata', 'labels'],
111
+ col: 24,
112
+ renderContent: value => {
113
+ if (!value) {
114
+ return undefined;
115
+ }
116
+ return _jsx(Tags, { value: value });
117
+ },
118
+ },
119
+ {
120
+ key: 'Annotations',
121
+ title: t('dovetail.annotation'),
122
+ path: ['metadata', 'annotations'],
123
+ col: 24,
124
+ renderContent: value => {
125
+ if (!value) {
126
+ return undefined;
127
+ }
128
+ return _jsx(KeyValueData, { datas: value, expandable: true });
129
+ },
130
+ },
131
+ ];
132
+ const stateDisplay = get(record, 'stateDisplay');
133
+ const topBar = (_jsxs(kit.space, { className: TopBarStyle, children: [_jsxs("div", { children: [_jsxs("span", { className: Typo.Display.d2_bold_title, children: [resource?.meta?.kind, ": "] }), _jsx("span", { className: Typo.Label.l1_regular, children: record?.metadata?.name }), stateDisplay ? (_jsx(StateTag, { className: StateTagStyle, state: stateDisplay })) : undefined] }), _jsxs(kit.space, { children: [_jsxs(kit.radioGroup, { value: mode, onChange: e => setMode(e.target.value), children: [_jsx(kit.radioButton, { value: "detail", children: t('dovetail.detail') }), _jsx(kit.radioButton, { value: "yaml", children: "YAML" })] }), _jsx(Dropdown, { record: record })] })] }));
134
+ const descriptions = (_jsx(kit.row, { gutter: 24, children: renderFields([...DESCRIPTION_DEFAULT_FIELDS, ...(showConfig.descriptions || [])]) }));
135
+ const groups = (showConfig.groups || [])
136
+ .concat([
137
+ {
138
+ fields: LABELS_ANNOTATIONS_GROUP_FIELDS,
139
+ },
140
+ ])
141
+ .map((group, index) => (_jsx(kit.row, { gutter: [24, 16], children: renderFields(group.fields) }, index)));
142
+ const tabs = (_jsx(kit.tabs, { className: TabsStyle, children: (showConfig.tabs || []).map(field => {
143
+ let content;
144
+ if (field.renderContent) {
145
+ content = field.renderContent(get(record, field.path), record, field);
146
+ }
147
+ else {
148
+ content = _jsx("span", { children: get(record, field.path) });
149
+ }
150
+ return (_jsx(kit.tabsTabPane, { tab: field.title, children: content }, field.key));
151
+ }) }));
152
+ const modeMap = {
153
+ [Mode.Detail]: (_jsxs(_Fragment, { children: [groups, _jsx(kit.divider, {}), tabs] })),
154
+ [Mode.Yaml]: (_jsx(MonacoYamlEditor, { className: EditorStyle, defaultValue: defaultEditorValue, schema: schema, onEditorCreate: onEditorCreate, readOnly: true })),
155
+ };
156
+ return (_jsxs("div", { className: ShowContentWrapperStyle, children: [_jsxs(kit.space, { direction: "vertical", className: ShowContentHeaderStyle, children: [topBar, descriptions] }), _jsx(kit.divider, {}), modeMap[mode]] }));
157
+ };
@@ -1,4 +1,6 @@
1
1
  import { i18n as I18nType } from 'i18next';
2
+ import { Unstructured } from 'k8s-api-provider';
3
+ import { NetworkPolicy } from 'kubernetes-types/networking/v1';
2
4
  import React from 'react';
3
5
  import { JobModel, ResourceModel, WorkloadModel, WorkloadBaseModel, CronJobModel, IngressModel, ServiceModel } from '../../models';
4
6
  export type ShowField<Model extends ResourceModel> = {
@@ -7,8 +9,8 @@ export type ShowField<Model extends ResourceModel> = {
7
9
  path: string[];
8
10
  labelWidth?: string;
9
11
  col?: number;
10
- render?: (val: unknown, record: Model, field: ShowField<Model>) => React.ReactElement | undefined;
11
- renderContent?: (val: unknown, record: Model, field: ShowField<Model>) => React.ReactElement | undefined;
12
+ render?: (val: unknown, record: Model, field: ShowField<Model>) => React.ReactNode | undefined;
13
+ renderContent?: (val: unknown, record: Model, field: ShowField<Model>) => React.ReactNode | undefined;
12
14
  };
13
15
  export declare enum AreaType {
14
16
  Inline = "Inline",
@@ -32,19 +34,23 @@ export interface ShowConfig<Model extends ResourceModel = ResourceModel> {
32
34
  }
33
35
  export declare const ImageField: <Model extends WorkloadBaseModel>(i18n: I18nType) => ShowField<Model>;
34
36
  export declare const ReplicaField: <Model extends WorkloadModel>() => ShowField<Model>;
35
- export declare const ConditionsField: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>() => ShowField<Model>;
37
+ export declare const ConditionsField: <Model extends ResourceModel<Unstructured>>() => ShowField<Model>;
36
38
  export declare const PodsField: <Model extends WorkloadBaseModel>() => ShowField<Model>;
37
39
  export declare const JobsField: <Model extends JobModel | CronJobModel>() => ShowField<Model>;
38
- export declare const DataField: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>() => ShowField<Model>;
39
- export declare const SecretDataField: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>() => ShowField<Model>;
40
+ export declare const DataField: <Model extends ResourceModel<Unstructured>>() => ShowField<Model>;
41
+ export declare const SecretDataField: <Model extends ResourceModel<Unstructured>>() => ShowField<Model>;
40
42
  export declare const StartTimeField: (i18n: I18nType) => ShowField<JobModel>;
41
43
  export declare const ServiceTypeField: <Model extends ServiceModel>(i18n: I18nType) => ShowField<Model>;
42
44
  export declare const ClusterIpField: <Model extends ServiceModel>(i18n: I18nType) => ShowField<Model>;
43
45
  export declare const SessionAffinityField: <Model extends ServiceModel>(i18n: I18nType) => ShowField<Model>;
44
- export declare const ServicePodsField: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>() => ShowField<Model>;
46
+ export declare const ServicePodsField: <Model extends ResourceModel<Unstructured>>() => ShowField<Model>;
45
47
  export declare const IngressRulesTableTabField: <Model extends IngressModel>() => ShowField<Model>;
46
- export declare const EventsTableTabField: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>() => ShowField<Model>;
47
- export declare const NamespaceField: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(i18n: I18nType) => ShowField<Model>;
48
- export declare const AgeField: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(i18n: I18nType) => ShowField<Model>;
49
- export declare const LabelsField: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(i18n: I18nType) => ShowField<Model>;
50
- export declare const AnnotationsField: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(i18n: I18nType) => ShowField<Model>;
48
+ export declare const EventsTableTabField: <Model extends ResourceModel<Unstructured>>() => ShowField<Model>;
49
+ export declare const NamespaceField: <Model extends ResourceModel<Unstructured>>(i18n: I18nType) => ShowField<Model>;
50
+ export declare const AgeField: <Model extends ResourceModel<Unstructured>>(i18n: I18nType) => ShowField<Model>;
51
+ export declare const LabelsField: <Model extends ResourceModel<Unstructured>>(i18n: I18nType) => ShowField<Model>;
52
+ export declare const AnnotationsField: <Model extends ResourceModel<Unstructured>>(i18n: I18nType) => ShowField<Model>;
53
+ export declare const ServiceInnerClusterAccessField: <Model extends ServiceModel>(i18n: I18nType) => ShowField<Model>;
54
+ export declare const ServiceOutClusterAccessField: <Model extends ServiceModel>(i18n: I18nType, clusterVip: string) => ShowField<Model>;
55
+ export declare const PodSelectorField: <Model extends ResourceModel<Required<Unstructured & import("kubernetes-types/core/v1").Service> | (NetworkPolicy & Unstructured)>>() => ShowField<Model>;
56
+ export declare const PortsTableField: <Model extends ServiceModel>() => ShowField<Model>;