@dovetail-v2/refine 0.0.56 → 0.0.57

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 (202) hide show
  1. package/dist/{MonacoYamlDiffEditor-fa823881.js → MonacoYamlDiffEditor-06894d28.js} +1 -1
  2. package/dist/{index-4305985d.js → index-ced408be.js} +364 -346
  3. package/dist/refine.js +1 -1
  4. package/dist/refine.umd.cjs +362 -344
  5. package/dist/style.css +1 -1
  6. package/lib/src/components/LinkFallback/index.d.ts +4 -0
  7. package/lib/src/components/ModalContextProvider/index.d.ts +12 -0
  8. package/lib/src/components/NetworkPolicyRulesTable/NetworkPolicyRulesTable.d.ts +2 -1
  9. package/lib/src/components/ShowContent/ShowContent.d.ts +3 -2
  10. package/lib/src/components/YamlForm/index.d.ts +4 -0
  11. package/lib/src/hooks/useEagleForm.d.ts +2 -1
  12. package/lib/src/hooks/useModal.d.ts +0 -0
  13. package/lib/src/hooks/useNamespaceFilter.d.ts +5 -0
  14. package/lib/src/model/cronjob-model.d.ts +9 -0
  15. package/lib/src/model/index.d.ts +6 -0
  16. package/lib/src/model/job-model.d.ts +10 -0
  17. package/lib/src/model/pod-metrics-model.d.ts +7 -0
  18. package/lib/src/model/pod-model.d.ts +15 -0
  19. package/lib/src/model/resource-model.d.ts +17 -0
  20. package/lib/src/model/workload-model.d.ts +17 -0
  21. package/lib/src/types/metric.d.ts +25 -0
  22. package/package.json +1 -1
  23. package/lib/src/App.js +0 -91
  24. package/lib/src/Dovetail.js +0 -45
  25. package/lib/src/components/Breadcrumb/index.js +0 -20
  26. package/lib/src/components/ConditionsTable/ConditionsTable.js +0 -56
  27. package/lib/src/components/ConditionsTable/index.js +0 -1
  28. package/lib/src/components/CreateButton/index.js +0 -10
  29. package/lib/src/components/CronJobDropdown/index.js +0 -26
  30. package/lib/src/components/CronjobJobsTable/index.js +0 -49
  31. package/lib/src/components/DeleteButton/index.js +0 -13
  32. package/lib/src/components/DeleteManyButton/index.js +0 -16
  33. package/lib/src/components/DrawerShow/DrawerShow.js +0 -13
  34. package/lib/src/components/DrawerShow/index.js +0 -1
  35. package/lib/src/components/EditButton/index.js +0 -13
  36. package/lib/src/components/EditField/index.js +0 -47
  37. package/lib/src/components/ErrorContent/index.js +0 -36
  38. package/lib/src/components/EventsTable/EventsTable.js +0 -59
  39. package/lib/src/components/EventsTable/index.js +0 -1
  40. package/lib/src/components/Form/KeyValueListWidget.js +0 -56
  41. package/lib/src/components/Form/MetadataForm.js +0 -9
  42. package/lib/src/components/Form/NameInputWidget.js +0 -50
  43. package/lib/src/components/Form/NamespaceSelectWidget.js +0 -21
  44. package/lib/src/components/Form/index.js +0 -4
  45. package/lib/src/components/Form/widget.js +0 -1
  46. package/lib/src/components/FormErrorAlert/index.js +0 -8
  47. package/lib/src/components/FormLayout/index.js +0 -21
  48. package/lib/src/components/FormModal/index.js +0 -51
  49. package/lib/src/components/ImageNames/index.js +0 -14
  50. package/lib/src/components/IngressRulesComponent/index.js +0 -11
  51. package/lib/src/components/IngressRulesTable/IngressRulesTable.js +0 -51
  52. package/lib/src/components/IngressRulesTable/index.js +0 -1
  53. package/lib/src/components/K8sDropdown/index.js +0 -31
  54. package/lib/src/components/KeyValue/KeyValue.js +0 -27
  55. package/lib/src/components/KeyValue/index.js +0 -1
  56. package/lib/src/components/KeyValueData/index.js +0 -50
  57. package/lib/src/components/Layout/index.js +0 -39
  58. package/lib/src/components/ListPage/index.js +0 -25
  59. package/lib/src/components/Menu/index.js +0 -36
  60. package/lib/src/components/NamespacesFilter/index.js +0 -34
  61. package/lib/src/components/NetworkPolicyRulesTable/NetworkPolicyRulesTable.js +0 -77
  62. package/lib/src/components/NetworkPolicyRulesTable/index.js +0 -1
  63. package/lib/src/components/PageShow/PageShow.js +0 -11
  64. package/lib/src/components/PageShow/index.js +0 -1
  65. package/lib/src/components/PodContainersTable/PodContainersTable.js +0 -78
  66. package/lib/src/components/PodContainersTable/index.js +0 -1
  67. package/lib/src/components/PodLog/index.js +0 -136
  68. package/lib/src/components/ReferenceLink/index.js +0 -17
  69. package/lib/src/components/RefineForm/RefineFormContent.d.ts +0 -10
  70. package/lib/src/components/RefineForm/RefineFormModal.d.ts +0 -8
  71. package/lib/src/components/RefineForm/RefineFormPage.d.ts +0 -7
  72. package/lib/src/components/RefineForm/index.d.ts +0 -3
  73. package/lib/src/components/RefineForm/type.d.ts +0 -20
  74. package/lib/src/components/RefineForm/useRefineForm.d.ts +0 -10
  75. package/lib/src/components/ResourceCRUD/ResourceCRUD.js +0 -15
  76. package/lib/src/components/ResourceCRUD/create/index.js +0 -13
  77. package/lib/src/components/ResourceCRUD/index.js +0 -4
  78. package/lib/src/components/ResourceCRUD/list/index.js +0 -19
  79. package/lib/src/components/ResourceCRUD/show/index.js +0 -6
  80. package/lib/src/components/ResourceLink/index.js +0 -21
  81. package/lib/src/components/ResourceUsageBar/index.js +0 -81
  82. package/lib/src/components/Separator/index.js +0 -11
  83. package/lib/src/components/ShowContent/ShowContent.js +0 -157
  84. package/lib/src/components/ShowContent/fields.js +0 -157
  85. package/lib/src/components/ShowContent/index.js +0 -2
  86. package/lib/src/components/StateTag/StateTag.js +0 -22
  87. package/lib/src/components/StateTag/index.js +0 -1
  88. package/lib/src/components/Table/ErrorContent.js +0 -36
  89. package/lib/src/components/Table/TableToolBar.js +0 -14
  90. package/lib/src/components/Table/TableWidgets.js +0 -28
  91. package/lib/src/components/Table/index.js +0 -69
  92. package/lib/src/components/Tags/index.js +0 -22
  93. package/lib/src/components/Time/index.js +0 -14
  94. package/lib/src/components/WorkloadDropdown/index.js +0 -24
  95. package/lib/src/components/WorkloadPodsTable/WorkloadPodsTable.js +0 -39
  96. package/lib/src/components/WorkloadPodsTable/index.js +0 -1
  97. package/lib/src/components/WorkloadReplicas/index.js +0 -50
  98. package/lib/src/components/YamlEditor/MonacoYamlDiffEditor.js +0 -34
  99. package/lib/src/components/YamlEditor/MonacoYamlEditor.js +0 -149
  100. package/lib/src/components/YamlEditor/YamlEditorComponent.js +0 -90
  101. package/lib/src/components/YamlEditor/index.js +0 -1
  102. package/lib/src/components/YamlEditor/style.js +0 -102
  103. package/lib/src/components/YamlEditor/yaml.worker.js +0 -1
  104. package/lib/src/components/YamlForm/index.js +0 -61
  105. package/lib/src/components/index.js +0 -38
  106. package/lib/src/constants/index.js +0 -2
  107. package/lib/src/constants/k8s.js +0 -203
  108. package/lib/src/constants/state.js +0 -15
  109. package/lib/src/contexts/component.js +0 -3
  110. package/lib/src/contexts/configs.js +0 -3
  111. package/lib/src/contexts/global-store.js +0 -3
  112. package/lib/src/contexts/index.js +0 -3
  113. package/lib/src/hooks/index.js +0 -7
  114. package/lib/src/hooks/useDeleteModal/index.js +0 -1
  115. package/lib/src/hooks/useDeleteModal/useDeleteManyModal.js +0 -31
  116. package/lib/src/hooks/useDeleteModal/useDeleteModal.js +0 -38
  117. package/lib/src/hooks/useDownloadYAML.js +0 -10
  118. package/lib/src/hooks/useEagleForm.js +0 -177
  119. package/lib/src/hooks/useEagleTable/columns.js +0 -246
  120. package/lib/src/hooks/useEagleTable/index.js +0 -2
  121. package/lib/src/hooks/useEagleTable/useEagleTable.js +0 -63
  122. package/lib/src/hooks/useEdit.js +0 -19
  123. package/lib/src/hooks/useGlobalStore.js +0 -5
  124. package/lib/src/hooks/useK8sYamlEditor.js +0 -37
  125. package/lib/src/hooks/useOpenForm.js +0 -43
  126. package/lib/src/hooks/useSchema.js +0 -37
  127. package/lib/src/hooks/useSubmitForm.js +0 -42
  128. package/lib/src/i18n.js +0 -19
  129. package/lib/src/index.js +0 -13
  130. package/lib/src/locales/en-US/dovetail.json +0 -18
  131. package/lib/src/locales/en-US/index.js +0 -4
  132. package/lib/src/locales/index.js +0 -6
  133. package/lib/src/locales/zh-CN/dovetail.json +0 -91
  134. package/lib/src/locales/zh-CN/index.js +0 -4
  135. package/lib/src/main.js +0 -12
  136. package/lib/src/models/cronjob-model.js +0 -32
  137. package/lib/src/models/daemonset-model.js +0 -17
  138. package/lib/src/models/deployment-model.js +0 -17
  139. package/lib/src/models/event-model.js +0 -11
  140. package/lib/src/models/index.js +0 -14
  141. package/lib/src/models/ingress-model.js +0 -24
  142. package/lib/src/models/job-model.js +0 -56
  143. package/lib/src/models/network-policy-model.js +0 -10
  144. package/lib/src/models/pod-metrics-model.js +0 -34
  145. package/lib/src/models/pod-model.js +0 -78
  146. package/lib/src/models/resource-model.js +0 -34
  147. package/lib/src/models/server-instance-model.d.ts +0 -10
  148. package/lib/src/models/service-model.js +0 -17
  149. package/lib/src/models/statefulset-model.js +0 -17
  150. package/lib/src/models/types/index.js +0 -1
  151. package/lib/src/models/types/metric.js +0 -1
  152. package/lib/src/models/workload-base-model.js +0 -22
  153. package/lib/src/models/workload-model.js +0 -51
  154. package/lib/src/pages/configmaps/index.js +0 -15
  155. package/lib/src/pages/cronjobs/create/index.js +0 -6
  156. package/lib/src/pages/cronjobs/index.js +0 -3
  157. package/lib/src/pages/cronjobs/list/index.js +0 -42
  158. package/lib/src/pages/cronjobs/show/index.js +0 -16
  159. package/lib/src/pages/daemonsets/create/index.js +0 -6
  160. package/lib/src/pages/daemonsets/index.js +0 -3
  161. package/lib/src/pages/daemonsets/list/index.js +0 -32
  162. package/lib/src/pages/daemonsets/show/index.js +0 -16
  163. package/lib/src/pages/deployments/create/index.js +0 -7
  164. package/lib/src/pages/deployments/index.js +0 -3
  165. package/lib/src/pages/deployments/list/index.js +0 -26
  166. package/lib/src/pages/deployments/show/index.js +0 -16
  167. package/lib/src/pages/ingresses/index.js +0 -26
  168. package/lib/src/pages/jobs/index.js +0 -34
  169. package/lib/src/pages/networkPolicies/index.js +0 -67
  170. package/lib/src/pages/pods/create/index.js +0 -6
  171. package/lib/src/pages/pods/index.js +0 -3
  172. package/lib/src/pages/pods/list/index.js +0 -81
  173. package/lib/src/pages/pods/show/index.js +0 -54
  174. package/lib/src/pages/secrets/index.js +0 -15
  175. package/lib/src/pages/services/index.js +0 -26
  176. package/lib/src/pages/statefulsets/create/index.js +0 -6
  177. package/lib/src/pages/statefulsets/index.js +0 -3
  178. package/lib/src/pages/statefulsets/list/index.js +0 -26
  179. package/lib/src/pages/statefulsets/show/index.js +0 -16
  180. package/lib/src/plugins/index.js +0 -3
  181. package/lib/src/plugins/model-plugin.js +0 -46
  182. package/lib/src/plugins/relation-plugin.js +0 -81
  183. package/lib/src/plugins/type.js +0 -1
  184. package/lib/src/providers/index.js +0 -1
  185. package/lib/src/providers/router-provider/index.js +0 -100
  186. package/lib/src/types/index.js +0 -1
  187. package/lib/src/types/resource.js +0 -12
  188. package/lib/src/utils/addId.js +0 -8
  189. package/lib/src/utils/download.js +0 -9
  190. package/lib/src/utils/error.js +0 -53
  191. package/lib/src/utils/form.js +0 -9
  192. package/lib/src/utils/k8s.js +0 -6
  193. package/lib/src/utils/labels.js +0 -15
  194. package/lib/src/utils/match-selector.js +0 -12
  195. package/lib/src/utils/openapi.js +0 -33
  196. package/lib/src/utils/schema.js +0 -117
  197. package/lib/src/utils/selector.js +0 -12
  198. package/lib/src/utils/string.js +0 -6
  199. package/lib/src/utils/time.js +0 -46
  200. package/lib/src/utils/unit.js +0 -69
  201. package/lib/src/utils/yaml.js +0 -44
  202. package/lib/vite.config.js +0 -60
package/dist/style.css CHANGED
@@ -20,6 +20,7 @@
20
20
  .d1wqyhgc{color:rgba(44,56,82,0.75);}
21
21
  .w16agr8o.ant-space{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}
22
22
  .i1u1f5zp{white-space:pre-line;}
23
+ .lmmrm55{padding:0 !important;}
23
24
  .l1vnw9x0{padding:0 !important;}
24
25
  .c8jy7dc{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:8px 10px;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;gap:8px;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;border-radius:4px;background:rgba(237,241,250,0.6);}.c8jy7dc:not(:last-of-type){margin-bottom:8px;}
25
26
  .k2sddxl{color:rgba(44,56,82,0.75);width:calc(30% - 4px);margin-right:8px;word-break:break-all;}
@@ -1539,7 +1540,6 @@
1539
1540
  .c1i80kj{height:100%;}
1540
1541
  .s18sezq1.ant-layout-sider{background:#edf0f7;}
1541
1542
  .cyc9hl2.ant-layout-content{background:#fff;}
1542
- .l25ca2k{padding:0 !important;}
1543
1543
  .dh5j833{border-bottom:1px dashed rgba(107,128,167,0.6);padding-bottom:1px;}
1544
1544
  .s1fcgan.ant-tooltip .ant-tooltip-inner{width:256px;}
1545
1545
  .ciistgu{padding:0 !important;}
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ export declare function LinkFallback({ fullPath }: {
3
+ fullPath: string;
4
+ }): JSX.Element;
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ interface ModalInfo {
3
+ resource: string;
4
+ id?: string;
5
+ }
6
+ type ModalContextValue = ModalInfo & {
7
+ open: (info: ModalInfo) => void;
8
+ close: () => void;
9
+ };
10
+ export declare const ModalContext: React.Context<ModalContextValue>;
11
+ declare function ModalContextProvider(props: React.PropsWithChildren<Record<string, unknown>>): JSX.Element;
12
+ export default ModalContextProvider;
@@ -2,6 +2,7 @@ import type { NetworkPolicyIngressRule, NetworkPolicyEgressRule } from 'kubernet
2
2
  import React from 'react';
3
3
  type Props = {
4
4
  ingressOrEgress: NetworkPolicyIngressRule[] | NetworkPolicyEgressRule[];
5
+ kind?: string;
5
6
  };
6
- export declare const NetworkPolicyRulesTable: React.FC<Props>;
7
+ export declare const NetworkPolicyRulesViewer: React.FC<Props>;
7
8
  export {};
@@ -8,10 +8,11 @@ type Props<Model extends ResourceModel> = {
8
8
  record: Model;
9
9
  }>;
10
10
  };
11
- export declare function ShowGroupComponent(props: React.PropsWithChildren<{
11
+ type ShowGroupComponentProps = React.PropsWithChildren<{
12
12
  title: string;
13
13
  className?: string;
14
14
  operationEle?: React.ReactElement | null;
15
- }>): JSX.Element;
15
+ }>;
16
+ export declare function ShowGroupComponent(props: ShowGroupComponentProps): JSX.Element;
16
17
  export declare const ShowContent: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(props: Props<Model>) => JSX.Element | null;
17
18
  export {};
@@ -1,4 +1,5 @@
1
1
  /// <reference types="react" />
2
+ import { FormAction } from '@refinedev/core';
2
3
  import useEagleForm from 'src/hooks/useEagleForm';
3
4
  export declare enum SchemaStrategy {
4
5
  Required = "Required",
@@ -7,7 +8,9 @@ export declare enum SchemaStrategy {
7
8
  }
8
9
  export interface YamlFormProps {
9
10
  id?: string;
11
+ action?: FormAction;
10
12
  initialValues?: Record<string, unknown>;
13
+ transformValues?: (values: Record<string, unknown>) => Record<string, unknown>;
11
14
  schemaStrategy?: SchemaStrategy;
12
15
  isShowLayout?: boolean;
13
16
  useFormProps?: Parameters<typeof useEagleForm>[0];
@@ -15,6 +18,7 @@ export interface YamlFormProps {
15
18
  disabled?: boolean;
16
19
  onClick: () => void;
17
20
  }) => void;
21
+ onErrorsChange?: (errors: string[]) => void;
18
22
  onFinish?: () => void;
19
23
  }
20
24
  declare function YamlForm(props: YamlFormProps): JSX.Element;
@@ -20,6 +20,7 @@ export type UseFormProps<TQueryFnData extends BaseRecord = BaseRecord, TError ex
20
20
  isSkipSchema?: boolean;
21
21
  };
22
22
  initialValuesForCreate?: Record<string, unknown>;
23
+ transformValues?: (values: Record<string, unknown>) => Record<string, unknown>;
23
24
  };
24
25
  export type UseFormReturnType<TQueryFnData extends BaseRecord = BaseRecord, TError extends HttpError = HttpError, TVariables extends object = object, TData extends BaseRecord = TQueryFnData, TResponse extends BaseRecord = TData, TResponseError extends HttpError = TError> = UseFormReturnTypeCore<TQueryFnData, TError, TVariables, TData, TResponse, TResponseError> & {
25
26
  form: FormInstance;
@@ -43,5 +44,5 @@ declare const useEagleForm: <TQueryFnData extends Unstructured = Unstructured &
43
44
  [prop: string]: unknown;
44
45
  } = {
45
46
  [prop: string]: unknown;
46
- }, TData extends Unstructured = TQueryFnData, TResponse extends BaseRecord = TData, TResponseError extends HttpError = TError>({ action, resource, onMutationSuccess: onMutationSuccessProp, onMutationError, submitOnEnter, warnWhenUnsavedChanges: warnWhenUnsavedChangesProp, redirect, successNotification, errorNotification, meta, metaData, queryMeta, mutationMeta, liveMode, liveParams, mutationMode, dataProviderName, onLiveEvent, invalidates, undoableTimeout, queryOptions, createMutationOptions, updateMutationOptions, id: idFromProps, overtimeOptions, editorOptions, initialValuesForCreate, }?: UseFormProps<TQueryFnData, TError, TVariables, TData, TResponse, TResponseError>) => UseFormReturnType<TQueryFnData, TError, TVariables, TData, TResponse, TResponseError>;
47
+ }, TData extends Unstructured = TQueryFnData, TResponse extends BaseRecord = TData, TResponseError extends HttpError = TError>({ action: actionFromProps, resource, onMutationSuccess: onMutationSuccessProp, onMutationError, submitOnEnter, warnWhenUnsavedChanges: warnWhenUnsavedChangesProp, redirect, successNotification, errorNotification, meta, metaData, queryMeta, mutationMeta, liveMode, liveParams, mutationMode, dataProviderName, onLiveEvent, invalidates, undoableTimeout, queryOptions, createMutationOptions, updateMutationOptions, id: idFromProps, overtimeOptions, editorOptions, initialValuesForCreate, transformValues, }?: UseFormProps<TQueryFnData, TError, TVariables, TData, TResponse, TResponseError>) => UseFormReturnType<TQueryFnData, TError, TVariables, TData, TResponse, TResponseError>;
47
48
  export default useEagleForm;
File without changes
@@ -0,0 +1,5 @@
1
+ import { CrudFilters } from '@refinedev/core';
2
+ declare function useNamespaceRefineFilter(): {
3
+ permanent: CrudFilters;
4
+ };
5
+ export default useNamespaceRefineFilter;
@@ -0,0 +1,9 @@
1
+ import { CronJob } from 'kubernetes-types/batch/v1';
2
+ import { WithId } from '../types';
3
+ import { WorkloadModel } from './workload-model';
4
+ export declare class CronJobModel extends WorkloadModel<CronJob> {
5
+ data: WithId<CronJob>;
6
+ constructor(data: WithId<CronJob>);
7
+ suspend(): WithId<CronJob>;
8
+ resume(): WithId<CronJob>;
9
+ }
@@ -0,0 +1,6 @@
1
+ export * from './job-model';
2
+ export * from './pod-model';
3
+ export * from './pod-metrics-model';
4
+ export * from './resource-model';
5
+ export * from './workload-model';
6
+ export * from './cronjob-model';
@@ -0,0 +1,10 @@
1
+ import { Job } from 'kubernetes-types/batch/v1';
2
+ import { WithId } from '../types';
3
+ import { WorkloadModel } from './workload-model';
4
+ export declare class JobModel extends WorkloadModel<Job> {
5
+ rawYaml: WithId<Job>;
6
+ constructor(rawYaml: WithId<Job>);
7
+ get duration(): number;
8
+ get durationDisplay(): string | undefined;
9
+ get completionsDisplay(): string;
10
+ }
@@ -0,0 +1,7 @@
1
+ import { PodMetrics, ResourceQuantity } from 'src/types/metric';
2
+ import { ResourceModel } from './resource-model';
3
+ export declare class PodMetricsModel extends ResourceModel {
4
+ data: PodMetrics;
5
+ usage: ResourceQuantity;
6
+ constructor(data: PodMetrics);
7
+ }
@@ -0,0 +1,15 @@
1
+ import type { Pod } from 'kubernetes-types/core/v1';
2
+ import { ResourceQuantity } from 'src/types/metric';
3
+ import { WithId } from '../types';
4
+ import { WorkloadModel } from './workload-model';
5
+ export declare class PodModel extends WorkloadModel<Pod> {
6
+ rawYaml: WithId<Pod>;
7
+ request: ResourceQuantity;
8
+ limit: ResourceQuantity;
9
+ constructor(rawYaml: WithId<Pod>);
10
+ get imageNames(): string[];
11
+ get restartCount(): number;
12
+ get readyDisplay(): string;
13
+ get readyContainerCount(): number | undefined;
14
+ get containerCount(): number | undefined;
15
+ }
@@ -0,0 +1,17 @@
1
+ import { Resource } from '../types';
2
+ export declare class ResourceModel implements Resource {
3
+ rawYaml: Resource;
4
+ id: Resource['id'];
5
+ apiVersion: Resource['apiVersion'];
6
+ kind: Resource['kind'];
7
+ metadata: Resource['metadata'];
8
+ constructor(rawYaml: Resource);
9
+ get name(): string | undefined;
10
+ get namespace(): string | undefined;
11
+ get labels(): {
12
+ [name: string]: string;
13
+ } | undefined;
14
+ get annotations(): {
15
+ [name: string]: string;
16
+ } | undefined;
17
+ }
@@ -0,0 +1,17 @@
1
+ import type { DaemonSet, Deployment, StatefulSet } from 'kubernetes-types/apps/v1';
2
+ import type { CronJob, Job } from 'kubernetes-types/batch/v1';
3
+ import { Pod } from 'kubernetes-types/core/v1';
4
+ import { WithId } from '../types';
5
+ import { ResourceModel } from './resource-model';
6
+ type WorkloadTypes = Deployment | StatefulSet | Job | DaemonSet | CronJob | Pod;
7
+ export declare class WorkloadModel<T extends WorkloadTypes = WorkloadTypes> extends ResourceModel {
8
+ rawYaml: WithId<T>;
9
+ constructor(rawYaml: WithId<T>);
10
+ get status(): T['status'];
11
+ get spec(): T['spec'];
12
+ get imageNames(): string[];
13
+ get restartCount(): number;
14
+ redeploy(): WithId<T>;
15
+ scale(value: number): WithId<T>;
16
+ }
17
+ export {};
@@ -0,0 +1,25 @@
1
+ import { Resource } from './resource';
2
+ type Quantity = string;
3
+ export type ContainerMetrics = {
4
+ name: string;
5
+ usage: {
6
+ cpu?: Quantity;
7
+ memory?: Quantity;
8
+ };
9
+ };
10
+ export type PodMetrics = {
11
+ timestamp: string;
12
+ window: string;
13
+ containers: ContainerMetrics[];
14
+ } & Resource;
15
+ export type ResourceQuantity = {
16
+ cpu: {
17
+ si: string;
18
+ value: number;
19
+ };
20
+ memory: {
21
+ si: string;
22
+ value: number;
23
+ };
24
+ };
25
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dovetail-v2/refine",
3
- "version": "0.0.56",
3
+ "version": "0.0.57",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist",
package/lib/src/App.js DELETED
@@ -1,91 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { createBrowserHistory } from 'history';
3
- import { GlobalStore } from 'k8s-api-provider';
4
- import { useMemo } from 'react';
5
- import { I18nextProvider } from 'react-i18next';
6
- import { Route, Router } from 'react-router-dom';
7
- import { Layout } from './components';
8
- import { CRONJOB_INIT_VALUE, DAEMONSET_INIT_VALUE, STATEFULSET_INIT_VALUE, POD_INIT_VALUE, } from './constants/k8s';
9
- import { Dovetail } from './Dovetail';
10
- import i18n from './i18n';
11
- import { ConfigMapConfig } from './pages/configmaps';
12
- import { CronJobForm, CronJobList, CronJobShow } from './pages/cronjobs';
13
- import { DaemonSetForm, DaemonSetList, DaemonSetShow } from './pages/daemonsets';
14
- import { DeploymentForm, DeploymentList, DeploymentShow } from './pages/deployments';
15
- import { IngressConfig } from './pages/ingresses';
16
- import { JobConfig } from './pages/jobs';
17
- import { NetworkPolicyConfig } from './pages/networkPolicies';
18
- import { PodShow, PodList, PodForm } from './pages/pods';
19
- import { SecretsConfig } from './pages/secrets';
20
- import { ServicesConfig } from './pages/services';
21
- import { StatefulSetShow, StatefulSetList, StatefulSetForm } from './pages/statefulsets';
22
- import { ProviderPlugins } from './plugins';
23
- import { RESOURCE_GROUP, FormType } from './types';
24
- function App() {
25
- const histroy = createBrowserHistory();
26
- const resourcesConfig = useMemo(() => {
27
- return [
28
- {
29
- name: 'cronjobs',
30
- basePath: '/apis/batch/v1beta1',
31
- kind: 'CronJob',
32
- parent: RESOURCE_GROUP.WORKLOAD,
33
- label: 'CronJobs',
34
- initValue: CRONJOB_INIT_VALUE,
35
- isCustom: true,
36
- },
37
- {
38
- name: 'daemonsets',
39
- basePath: '/apis/apps/v1',
40
- kind: 'DaemonSet',
41
- parent: RESOURCE_GROUP.WORKLOAD,
42
- label: 'DaemonSets',
43
- initValue: DAEMONSET_INIT_VALUE,
44
- isCustom: true,
45
- },
46
- {
47
- name: 'deployments',
48
- basePath: '/apis/apps/v1',
49
- kind: 'Deployment',
50
- parent: RESOURCE_GROUP.WORKLOAD,
51
- label: 'Deployments',
52
- formType: FormType.MODAL,
53
- FormModal: DeploymentForm,
54
- isCustom: true,
55
- },
56
- {
57
- name: 'statefulsets',
58
- basePath: '/apis/apps/v1',
59
- kind: 'StatefulSet',
60
- parent: RESOURCE_GROUP.WORKLOAD,
61
- label: 'StatefulSets',
62
- initValue: STATEFULSET_INIT_VALUE,
63
- isCustom: true,
64
- },
65
- {
66
- name: 'pods',
67
- basePath: '/api/v1',
68
- kind: 'Pod',
69
- parent: RESOURCE_GROUP.WORKLOAD,
70
- label: 'Pods',
71
- initValue: POD_INIT_VALUE,
72
- isCustom: true,
73
- },
74
- JobConfig,
75
- IngressConfig,
76
- NetworkPolicyConfig,
77
- ConfigMapConfig,
78
- SecretsConfig,
79
- ServicesConfig,
80
- ];
81
- }, []);
82
- const globalStore = useMemo(() => {
83
- return new GlobalStore({
84
- apiUrl: '/api/k8s',
85
- watchWsApiUrl: 'api/sks-ws/k8s',
86
- prefix: 'default',
87
- }, ProviderPlugins);
88
- }, []);
89
- return (_jsx(I18nextProvider, { i18n: i18n, children: _jsx(Dovetail, { resourcesConfig: resourcesConfig, Layout: Layout, history: histroy, globalStore: globalStore, children: _jsxs(Router, { history: histroy, children: [_jsx(Route, { path: "/cronjobs", exact: true, children: _jsx(CronJobList, {}) }), _jsx(Route, { path: "/cronjobs/show", children: _jsx(CronJobShow, {}) }), _jsx(Route, { path: "/cronjobs/create", children: _jsx(CronJobForm, {}) }), _jsx(Route, { path: "/cronjobs/edit", children: _jsx(CronJobForm, {}) }), _jsx(Route, { path: "/daemonsets", exact: true, children: _jsx(DaemonSetList, {}) }), _jsx(Route, { path: "/daemonsets/show", children: _jsx(DaemonSetShow, {}) }), _jsx(Route, { path: "/daemonsets/create", children: _jsx(DaemonSetForm, {}) }), _jsx(Route, { path: "/daemonsets/edit", children: _jsx(DaemonSetForm, {}) }), _jsx(Route, { path: "/deployments", exact: true, children: _jsx(DeploymentList, {}) }), _jsx(Route, { path: "/deployments/show", children: _jsx(DeploymentShow, {}) }), _jsx(Route, { path: "/statefulsets", exact: true, children: _jsx(StatefulSetList, {}) }), _jsx(Route, { path: "/statefulsets/show", children: _jsx(StatefulSetShow, {}) }), _jsx(Route, { path: "/statefulsets/create", children: _jsx(StatefulSetForm, {}) }), _jsx(Route, { path: "/statefulsets/edit", children: _jsx(StatefulSetForm, {}) }), _jsx(Route, { path: "/pods", exact: true, children: _jsx(PodList, {}) }), _jsx(Route, { path: "/pods/show", children: _jsx(PodShow, {}) }), _jsx(Route, { path: "/pods/create", children: _jsx(PodForm, {}) }), _jsx(Route, { path: "/pods/edit", children: _jsx(PodForm, {}) })] }) }) }));
90
- }
91
- export default App;
@@ -1,45 +0,0 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { KitStoreProvider, ModalStack } from '@cloudtower/eagle';
3
- import { Refine } from '@refinedev/core';
4
- import { dataProvider, liveProvider } from 'k8s-api-provider';
5
- import { keyBy } from 'lodash-es';
6
- import { useMemo } from 'react';
7
- import { Router } from 'react-router-dom';
8
- import ConfigsContext from 'src/contexts/configs';
9
- import { ResourceCRUD } from './components/ResourceCRUD';
10
- import GlobalStoreContext from './contexts/global-store';
11
- import { routerProvider } from './providers/router-provider';
12
- import './styles.css';
13
- export const Dovetail = props => {
14
- const { resourcesConfig, urlPrefix = '', Layout, history, globalStore } = props;
15
- const notCustomResources = useMemo(() => {
16
- return resourcesConfig.filter(c => !c.isCustom);
17
- }, [resourcesConfig]);
18
- const content = useMemo(() => {
19
- const _content = (_jsxs(_Fragment, { children: [_jsx(ModalStack, {}), _jsx(ResourceCRUD, { configs: notCustomResources, urlPrefix: urlPrefix }), props.children] }));
20
- if (Layout) {
21
- return _jsx(Layout, { children: _content });
22
- }
23
- return _content;
24
- }, [Layout, notCustomResources, props.children, urlPrefix]);
25
- return (_jsx(Router, { history: history, children: _jsx(KitStoreProvider, { children: _jsx(GlobalStoreContext.Provider, { value: { globalStore }, children: _jsx(ConfigsContext.Provider, { value: keyBy(resourcesConfig, 'name'), children: _jsx(Refine, { dataProvider: {
26
- default: dataProvider(globalStore),
27
- }, routerProvider: routerProvider, liveProvider: liveProvider(globalStore), options: {
28
- warnWhenUnsavedChanges: true,
29
- liveMode: 'auto',
30
- }, resources: resourcesConfig.map(c => {
31
- return {
32
- name: c.name,
33
- meta: {
34
- resourceBasePath: c.basePath,
35
- kind: c.kind,
36
- parent: c.parent,
37
- label: `${c.kind}s`,
38
- },
39
- list: `${urlPrefix}/${c.name}`,
40
- show: `${urlPrefix}/${c.name}/show`,
41
- create: `${urlPrefix}/${c.name}/create`,
42
- edit: `${urlPrefix}/${c.name}/edit`,
43
- };
44
- }), children: content }) }) }) }) }));
45
- };
@@ -1,20 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { css, cx } from '@linaria/core';
3
- import { useBreadcrumb } from '@refinedev/core';
4
- import { Link } from 'react-router-dom';
5
- const BreadcrumbStyle = css `
6
- display: flex;
7
-
8
- .breadcrumb-item {
9
- &:not(:last-of-type):after {
10
- content: '>';
11
- margin: 0 8px;
12
- }
13
- }
14
- `;
15
- export function Breadcrumb(props) {
16
- const { breadcrumbs } = useBreadcrumb();
17
- return (_jsx("ul", { className: cx(BreadcrumbStyle, props.className), children: breadcrumbs.map(breadcrumb => {
18
- return (_jsx("li", { className: "breadcrumb-item", children: breadcrumb.href ? (_jsx(Link, { to: breadcrumb.href, children: breadcrumb.label })) : (_jsx("span", { children: breadcrumb.label })) }, `breadcrumb-${breadcrumb.label}`));
19
- }) }));
20
- }
@@ -1,56 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useUIKit } from '@cloudtower/eagle';
3
- import { useD2Translation } from '../../i18n';
4
- import { addId } from '../../utils/addId';
5
- import ErrorContent from '../Table/ErrorContent';
6
- import Time from '../Time';
7
- export const ConditionsTable = ({ conditions = [] }) => {
8
- const kit = useUIKit();
9
- const { t } = useD2Translation();
10
- const conditionsWithId = addId(conditions, 'type');
11
- const columns = [
12
- {
13
- key: 'type',
14
- display: true,
15
- dataIndex: 'type',
16
- title: t('dovetail.condition'),
17
- sortable: true,
18
- },
19
- {
20
- key: 'status',
21
- display: true,
22
- dataIndex: 'status',
23
- title: t('dovetail.status'),
24
- sortable: true,
25
- },
26
- {
27
- key: 'reason',
28
- display: true,
29
- dataIndex: 'reason',
30
- title: t('dovetail.reason'),
31
- sortable: true,
32
- },
33
- {
34
- key: 'lastUpdateTime',
35
- display: true,
36
- dataIndex: 'lastUpdateTime',
37
- title: t('dovetail.updated_time'),
38
- sortable: true,
39
- render: (value, record) => {
40
- const time = value || record.lastTransitionTime;
41
- return _jsx(Time, { date: new Date(time) });
42
- },
43
- },
44
- {
45
- key: 'message',
46
- display: true,
47
- dataIndex: 'message',
48
- title: t('dovetail.message'),
49
- sortable: true,
50
- },
51
- ];
52
- if (conditionsWithId.length === 0) {
53
- return _jsx(ErrorContent, { errorText: t('dovetail.empty'), style: { padding: '15px 0' } });
54
- }
55
- return (_jsx(kit.table, { loading: false, dataSource: conditionsWithId, columns: columns, rowKey: "type", empty: t('dovetail.empty') }));
56
- };
@@ -1 +0,0 @@
1
- export * from './ConditionsTable';
@@ -1,10 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useUIKit } from '@cloudtower/eagle';
3
- import { useOpenForm } from 'src/hooks/useOpenForm';
4
- import { useD2Translation } from '../../i18n';
5
- export function CreateButton() {
6
- const kit = useUIKit();
7
- const { t } = useD2Translation();
8
- const openForm = useOpenForm();
9
- return (_jsx(kit.button, { type: "primary", onClick: openForm, children: t('dovetail.create') }));
10
- }
@@ -1,26 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Icon, useUIKit } from '@cloudtower/eagle';
3
- import { SuspendedPause16GradientGrayIcon, VmResume16Icon, } 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 CronJobDropdown(props) {
9
- const { record } = props;
10
- const { spec } = record;
11
- const kit = useUIKit();
12
- const { resource } = useResource();
13
- const { mutate } = useUpdate();
14
- const { t } = useD2Translation();
15
- const suspended = Boolean(spec?.suspend);
16
- return (_jsx(K8sDropdown, { record: record, children: _jsx(kit.menu.Item, { onClick: () => {
17
- const v = suspended ? record.resume() : record.suspend();
18
- const id = record.id;
19
- pruneBeforeEdit(v);
20
- mutate({
21
- id,
22
- resource: resource?.name || '',
23
- values: v,
24
- });
25
- }, children: _jsx(Icon, { src: suspended ? VmResume16Icon : SuspendedPause16GradientGrayIcon, children: t(suspended ? 'dovetail.resume' : 'dovetail.suspend') }) }) }));
26
- }
@@ -1,49 +0,0 @@
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 { AgeColumnRenderer, CompletionsCountColumnRenderer, DurationColumnRenderer, NameColumnRenderer, NameSpaceColumnRenderer, StateDisplayColumnRenderer, WorkloadImageColumnRenderer, } from '../../hooks/useEagleTable/columns';
7
- import { useD2Translation } from '../../i18n';
8
- import Table from '../Table';
9
- import { TableToolBar } from '../Table/TableToolBar';
10
- function matchOwner(job, owner) {
11
- let match = false;
12
- // TODO: use relations
13
- for (const o of job.metadata?.ownerReferences || []) {
14
- if (o.apiVersion === owner.apiVersion &&
15
- o.kind === owner.kind &&
16
- o.name === owner.name &&
17
- job.namespace === owner.namespace) {
18
- match = true;
19
- }
20
- }
21
- return match;
22
- }
23
- export const CronjobJobsTable = ({ owner }) => {
24
- const { i18n } = useD2Translation();
25
- const kit = useUIKit();
26
- const [selectedKeys, setSelectedKeys] = useState([]);
27
- const [currentPage, setCurrentPage] = useState(1);
28
- const { data } = useList({
29
- resource: 'jobs',
30
- meta: { resourceBasePath: '/apis/batch/v1', kind: 'Job' },
31
- });
32
- const dataSource = useMemo(() => {
33
- return data?.data.filter(p => {
34
- return owner ? matchOwner(p, owner) : true;
35
- });
36
- }, [data?.data, owner]);
37
- const columns = [
38
- NameColumnRenderer(i18n, 'jobs'),
39
- StateDisplayColumnRenderer(i18n),
40
- NameSpaceColumnRenderer(i18n),
41
- WorkloadImageColumnRenderer(i18n),
42
- CompletionsCountColumnRenderer(i18n),
43
- DurationColumnRenderer(i18n),
44
- AgeColumnRenderer(i18n),
45
- ];
46
- return (_jsxs(kit.space, { direction: "vertical", className: css `
47
- width: 100%;
48
- `, children: [_jsx(TableToolBar, { title: "Jobs", selectedKeys: selectedKeys, hideCreate: true }), _jsx(Table, { tableKey: "cronjobs", loading: !dataSource, data: dataSource || [], columns: columns, onSelect: keys => setSelectedKeys(keys), rowKey: "id", error: false, currentPage: currentPage, onPageChange: p => setCurrentPage(p), currentSize: 10, refetch: () => null })] }));
49
- };
@@ -1,13 +0,0 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useUIKit } from '@cloudtower/eagle';
3
- import { useResource, useParsed } from '@refinedev/core';
4
- import { useDeleteModal } from '../../hooks/useDeleteModal';
5
- import { useD2Translation } from '../../i18n';
6
- export const DeleteButton = () => {
7
- const { resource } = useResource();
8
- const { id } = useParsed();
9
- const kit = useUIKit();
10
- const { t } = useD2Translation();
11
- const { modalProps, visible, openDeleteConfirmModal } = useDeleteModal(resource?.name || '');
12
- return (_jsxs(_Fragment, { children: [_jsx(kit.button, { type: "primary", danger: true, onClick: () => openDeleteConfirmModal(id || ''), children: t('dovetail.delete') }), visible ? _jsx(kit.modal, { ...modalProps }) : null] }));
13
- };
@@ -1,16 +0,0 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useUIKit } from '@cloudtower/eagle';
3
- import { useResource } from '@refinedev/core';
4
- import { useCallback } from 'react';
5
- import { useDeleteManyModal } from '../../hooks/useDeleteModal/useDeleteManyModal';
6
- import { useD2Translation } from '../../i18n';
7
- export const DeleteManyButton = props => {
8
- const { resource } = useResource();
9
- const kit = useUIKit();
10
- const { t } = useD2Translation();
11
- const { modalProps, visible, setVisible } = useDeleteManyModal(resource?.name || '', props.ids);
12
- const onClick = useCallback(() => {
13
- setVisible(true);
14
- }, [setVisible]);
15
- return (_jsxs(_Fragment, { children: [_jsx(kit.button, { type: "primary", danger: true, onClick: onClick, children: t('dovetail.delete') }), visible ? _jsx(kit.modal, { ...modalProps }) : null] }));
16
- };
@@ -1,13 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useUIKit } from '@cloudtower/eagle';
3
- import { useNavigation, useParsed, useShow } from '@refinedev/core';
4
- import { Drawer } from 'antd';
5
- import { ShowContent } from '../ShowContent';
6
- export const DrawerShow = (props) => {
7
- const kit = useUIKit();
8
- const parsed = useParsed();
9
- const nav = useNavigation();
10
- const { queryResult } = useShow({ id: parsed?.params?.id });
11
- const { isLoading } = queryResult;
12
- return (_jsx(Drawer, { title: "Show Drawer", placement: "right", onClose: () => nav.goBack(), width: "50%", visible: !!parsed?.params?.id, children: isLoading ? _jsx(kit.loading, {}) : _jsx(ShowContent, { ...props }) }));
13
- };
@@ -1 +0,0 @@
1
- export * from './DrawerShow';
@@ -1,13 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useUIKit } from '@cloudtower/eagle';
3
- import { useParsed } from '@refinedev/core';
4
- import { useEdit } from '../../hooks/useEdit';
5
- export const EditButton = () => {
6
- const { id } = useParsed();
7
- const kit = useUIKit();
8
- const { edit } = useEdit();
9
- return (_jsx(kit.button, { type: "primary", onClick: () => {
10
- if (id)
11
- edit(id);
12
- }, children: "Edit" }));
13
- };