@dovetail-v2/refine 0.0.45 → 0.0.46-alpha.1

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 (204) hide show
  1. package/dist/{MonacoYamlDiffEditor-0046c95b.js → MonacoYamlDiffEditor-a0787f8d.js} +2 -2
  2. package/dist/{index-15e1d63d.js → index-9a6fb2d3.js} +444 -350
  3. package/dist/refine.js +3 -3
  4. package/dist/refine.umd.cjs +440 -346
  5. package/lib/src/components/ModalContextProvider/index.d.ts +12 -0
  6. package/lib/src/components/NetworkPolicyRulesTable/NetworkPolicyRulesTable.d.ts +2 -1
  7. package/lib/src/components/ShowContent/ShowContent.d.ts +2 -0
  8. package/lib/src/components/Table/index.d.ts +2 -0
  9. package/lib/src/components/YamlForm/index.d.ts +4 -0
  10. package/lib/src/hooks/useDownloadYAML.d.ts +1 -1
  11. package/lib/src/hooks/useEagleForm.d.ts +2 -1
  12. package/lib/src/hooks/useEagleTable/columns.d.ts +1 -1
  13. package/lib/src/hooks/useModal.d.ts +0 -0
  14. package/lib/src/hooks/useNamespaceFilter.d.ts +5 -0
  15. package/lib/src/hooks/useTableData.d.ts +20 -0
  16. package/lib/src/model/cronjob-model.d.ts +9 -0
  17. package/lib/src/model/index.d.ts +6 -0
  18. package/lib/src/model/job-model.d.ts +10 -0
  19. package/lib/src/model/pod-metrics-model.d.ts +7 -0
  20. package/lib/src/model/pod-model.d.ts +15 -0
  21. package/lib/src/model/resource-model.d.ts +17 -0
  22. package/lib/src/model/workload-model.d.ts +17 -0
  23. package/lib/src/types/metric.d.ts +25 -0
  24. package/package.json +2 -2
  25. package/lib/src/App.js +0 -91
  26. package/lib/src/Dovetail.js +0 -45
  27. package/lib/src/components/Breadcrumb/index.js +0 -20
  28. package/lib/src/components/ConditionsTable/ConditionsTable.js +0 -56
  29. package/lib/src/components/ConditionsTable/index.js +0 -1
  30. package/lib/src/components/CreateButton/index.js +0 -10
  31. package/lib/src/components/CronJobDropdown/index.js +0 -26
  32. package/lib/src/components/CronjobJobsTable/index.js +0 -49
  33. package/lib/src/components/DeleteButton/index.js +0 -13
  34. package/lib/src/components/DeleteManyButton/index.js +0 -16
  35. package/lib/src/components/DrawerShow/DrawerShow.js +0 -13
  36. package/lib/src/components/DrawerShow/index.js +0 -1
  37. package/lib/src/components/EditButton/index.js +0 -13
  38. package/lib/src/components/EditField/index.js +0 -47
  39. package/lib/src/components/ErrorContent/index.js +0 -36
  40. package/lib/src/components/EventsTable/EventsTable.js +0 -59
  41. package/lib/src/components/EventsTable/index.js +0 -1
  42. package/lib/src/components/Form/KeyValueListWidget.js +0 -56
  43. package/lib/src/components/Form/MetadataForm.js +0 -9
  44. package/lib/src/components/Form/NameInputWidget.js +0 -50
  45. package/lib/src/components/Form/NamespaceSelectWidget.js +0 -21
  46. package/lib/src/components/Form/index.js +0 -4
  47. package/lib/src/components/Form/widget.js +0 -1
  48. package/lib/src/components/FormErrorAlert/index.js +0 -8
  49. package/lib/src/components/FormLayout/index.js +0 -21
  50. package/lib/src/components/FormModal/index.js +0 -51
  51. package/lib/src/components/ImageNames/index.js +0 -14
  52. package/lib/src/components/IngressRulesComponent/index.js +0 -11
  53. package/lib/src/components/IngressRulesTable/IngressRulesTable.js +0 -51
  54. package/lib/src/components/IngressRulesTable/index.js +0 -1
  55. package/lib/src/components/K8sDropdown/index.js +0 -31
  56. package/lib/src/components/KeyValue/KeyValue.js +0 -27
  57. package/lib/src/components/KeyValue/index.js +0 -1
  58. package/lib/src/components/KeyValueData/index.js +0 -50
  59. package/lib/src/components/Layout/index.js +0 -39
  60. package/lib/src/components/ListPage/index.js +0 -25
  61. package/lib/src/components/Menu/index.js +0 -36
  62. package/lib/src/components/NamespacesFilter/index.js +0 -34
  63. package/lib/src/components/NetworkPolicyRulesTable/NetworkPolicyRulesTable.js +0 -77
  64. package/lib/src/components/NetworkPolicyRulesTable/index.js +0 -1
  65. package/lib/src/components/PageShow/PageShow.js +0 -11
  66. package/lib/src/components/PageShow/index.js +0 -1
  67. package/lib/src/components/PodContainersTable/PodContainersTable.js +0 -78
  68. package/lib/src/components/PodContainersTable/index.js +0 -1
  69. package/lib/src/components/PodLog/index.js +0 -136
  70. package/lib/src/components/ReferenceLink/index.js +0 -17
  71. package/lib/src/components/RefineForm/RefineFormContent.d.ts +0 -10
  72. package/lib/src/components/RefineForm/RefineFormModal.d.ts +0 -8
  73. package/lib/src/components/RefineForm/RefineFormPage.d.ts +0 -7
  74. package/lib/src/components/RefineForm/index.d.ts +0 -3
  75. package/lib/src/components/RefineForm/type.d.ts +0 -20
  76. package/lib/src/components/RefineForm/useRefineForm.d.ts +0 -10
  77. package/lib/src/components/ResourceCRUD/ResourceCRUD.js +0 -15
  78. package/lib/src/components/ResourceCRUD/create/index.js +0 -13
  79. package/lib/src/components/ResourceCRUD/index.js +0 -4
  80. package/lib/src/components/ResourceCRUD/list/index.js +0 -19
  81. package/lib/src/components/ResourceCRUD/show/index.js +0 -6
  82. package/lib/src/components/ResourceLink/index.js +0 -21
  83. package/lib/src/components/ResourceUsageBar/index.js +0 -81
  84. package/lib/src/components/Separator/index.js +0 -11
  85. package/lib/src/components/ShowContent/ShowContent.js +0 -157
  86. package/lib/src/components/ShowContent/fields.js +0 -157
  87. package/lib/src/components/ShowContent/index.js +0 -2
  88. package/lib/src/components/StateTag/StateTag.js +0 -22
  89. package/lib/src/components/StateTag/index.js +0 -1
  90. package/lib/src/components/Table/ErrorContent.js +0 -36
  91. package/lib/src/components/Table/TableToolBar.js +0 -14
  92. package/lib/src/components/Table/TableWidgets.js +0 -28
  93. package/lib/src/components/Table/index.js +0 -69
  94. package/lib/src/components/Tags/index.js +0 -22
  95. package/lib/src/components/Time/index.js +0 -14
  96. package/lib/src/components/WorkloadDropdown/index.js +0 -24
  97. package/lib/src/components/WorkloadPodsTable/WorkloadPodsTable.js +0 -39
  98. package/lib/src/components/WorkloadPodsTable/index.js +0 -1
  99. package/lib/src/components/WorkloadReplicas/index.js +0 -50
  100. package/lib/src/components/YamlEditor/MonacoYamlDiffEditor.js +0 -34
  101. package/lib/src/components/YamlEditor/MonacoYamlEditor.js +0 -149
  102. package/lib/src/components/YamlEditor/YamlEditorComponent.js +0 -90
  103. package/lib/src/components/YamlEditor/index.js +0 -1
  104. package/lib/src/components/YamlEditor/style.js +0 -102
  105. package/lib/src/components/YamlEditor/yaml.worker.js +0 -1
  106. package/lib/src/components/YamlForm/index.js +0 -61
  107. package/lib/src/components/index.js +0 -38
  108. package/lib/src/constants/index.js +0 -2
  109. package/lib/src/constants/k8s.js +0 -203
  110. package/lib/src/constants/state.js +0 -15
  111. package/lib/src/contexts/component.js +0 -3
  112. package/lib/src/contexts/configs.js +0 -3
  113. package/lib/src/contexts/global-store.js +0 -3
  114. package/lib/src/contexts/index.js +0 -3
  115. package/lib/src/hooks/index.js +0 -7
  116. package/lib/src/hooks/useDeleteModal/index.js +0 -1
  117. package/lib/src/hooks/useDeleteModal/useDeleteManyModal.js +0 -31
  118. package/lib/src/hooks/useDeleteModal/useDeleteModal.js +0 -38
  119. package/lib/src/hooks/useDownloadYAML.js +0 -10
  120. package/lib/src/hooks/useEagleForm.js +0 -177
  121. package/lib/src/hooks/useEagleTable/columns.js +0 -246
  122. package/lib/src/hooks/useEagleTable/index.js +0 -2
  123. package/lib/src/hooks/useEagleTable/useEagleTable.js +0 -63
  124. package/lib/src/hooks/useEdit.js +0 -19
  125. package/lib/src/hooks/useGlobalStore.js +0 -5
  126. package/lib/src/hooks/useK8sYamlEditor.js +0 -37
  127. package/lib/src/hooks/useOpenForm.js +0 -43
  128. package/lib/src/hooks/useSchema.js +0 -37
  129. package/lib/src/hooks/useSubmitForm.js +0 -42
  130. package/lib/src/i18n.js +0 -19
  131. package/lib/src/index.js +0 -13
  132. package/lib/src/locales/en-US/dovetail.json +0 -18
  133. package/lib/src/locales/en-US/index.js +0 -4
  134. package/lib/src/locales/index.js +0 -6
  135. package/lib/src/locales/zh-CN/dovetail.json +0 -91
  136. package/lib/src/locales/zh-CN/index.js +0 -4
  137. package/lib/src/main.js +0 -12
  138. package/lib/src/models/cronjob-model.js +0 -32
  139. package/lib/src/models/daemonset-model.js +0 -17
  140. package/lib/src/models/deployment-model.js +0 -17
  141. package/lib/src/models/event-model.js +0 -11
  142. package/lib/src/models/index.js +0 -14
  143. package/lib/src/models/ingress-model.js +0 -24
  144. package/lib/src/models/job-model.js +0 -56
  145. package/lib/src/models/network-policy-model.js +0 -10
  146. package/lib/src/models/pod-metrics-model.js +0 -34
  147. package/lib/src/models/pod-model.js +0 -78
  148. package/lib/src/models/resource-model.js +0 -34
  149. package/lib/src/models/server-instance-model.d.ts +0 -10
  150. package/lib/src/models/service-model.js +0 -17
  151. package/lib/src/models/statefulset-model.js +0 -17
  152. package/lib/src/models/types/index.js +0 -1
  153. package/lib/src/models/types/metric.js +0 -1
  154. package/lib/src/models/workload-base-model.js +0 -22
  155. package/lib/src/models/workload-model.js +0 -51
  156. package/lib/src/pages/configmaps/index.js +0 -15
  157. package/lib/src/pages/cronjobs/create/index.js +0 -6
  158. package/lib/src/pages/cronjobs/index.js +0 -3
  159. package/lib/src/pages/cronjobs/list/index.js +0 -42
  160. package/lib/src/pages/cronjobs/show/index.js +0 -16
  161. package/lib/src/pages/daemonsets/create/index.js +0 -6
  162. package/lib/src/pages/daemonsets/index.js +0 -3
  163. package/lib/src/pages/daemonsets/list/index.js +0 -32
  164. package/lib/src/pages/daemonsets/show/index.js +0 -16
  165. package/lib/src/pages/deployments/create/index.js +0 -7
  166. package/lib/src/pages/deployments/index.js +0 -3
  167. package/lib/src/pages/deployments/list/index.js +0 -26
  168. package/lib/src/pages/deployments/show/index.js +0 -16
  169. package/lib/src/pages/ingresses/index.js +0 -26
  170. package/lib/src/pages/jobs/index.js +0 -34
  171. package/lib/src/pages/networkPolicies/index.js +0 -67
  172. package/lib/src/pages/pods/create/index.js +0 -6
  173. package/lib/src/pages/pods/index.js +0 -3
  174. package/lib/src/pages/pods/list/index.js +0 -81
  175. package/lib/src/pages/pods/show/index.js +0 -54
  176. package/lib/src/pages/secrets/index.js +0 -15
  177. package/lib/src/pages/services/index.js +0 -26
  178. package/lib/src/pages/statefulsets/create/index.js +0 -6
  179. package/lib/src/pages/statefulsets/index.js +0 -3
  180. package/lib/src/pages/statefulsets/list/index.js +0 -26
  181. package/lib/src/pages/statefulsets/show/index.js +0 -16
  182. package/lib/src/plugins/index.js +0 -3
  183. package/lib/src/plugins/model-plugin.js +0 -46
  184. package/lib/src/plugins/relation-plugin.js +0 -81
  185. package/lib/src/plugins/type.js +0 -1
  186. package/lib/src/providers/index.js +0 -1
  187. package/lib/src/providers/router-provider/index.js +0 -100
  188. package/lib/src/types/index.js +0 -1
  189. package/lib/src/types/resource.js +0 -12
  190. package/lib/src/utils/addId.js +0 -8
  191. package/lib/src/utils/download.js +0 -9
  192. package/lib/src/utils/error.js +0 -53
  193. package/lib/src/utils/form.js +0 -9
  194. package/lib/src/utils/k8s.js +0 -6
  195. package/lib/src/utils/labels.js +0 -15
  196. package/lib/src/utils/match-selector.js +0 -12
  197. package/lib/src/utils/openapi.js +0 -33
  198. package/lib/src/utils/schema.js +0 -117
  199. package/lib/src/utils/selector.js +0 -12
  200. package/lib/src/utils/string.js +0 -6
  201. package/lib/src/utils/time.js +0 -46
  202. package/lib/src/utils/unit.js +0 -69
  203. package/lib/src/utils/yaml.js +0 -44
  204. package/lib/vite.config.js +0 -60
@@ -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 {};
@@ -1,3 +1,4 @@
1
+ import { GetOneResponse } from '@refinedev/core';
1
2
  import React from 'react';
2
3
  import { ResourceModel } from '../../models';
3
4
  import { ShowConfig } from './fields';
@@ -7,6 +8,7 @@ type Props<Model extends ResourceModel> = {
7
8
  Dropdown?: React.FC<{
8
9
  record: Model;
9
10
  }>;
11
+ data: GetOneResponse<Model> | undefined;
10
12
  };
11
13
  export declare function ShowGroupComponent(props: React.PropsWithChildren<{
12
14
  title: string;
@@ -4,6 +4,7 @@ import { FormType } from 'src/types';
4
4
  export type IDObject = {
5
5
  id: string;
6
6
  };
7
+ export type SorterOrder = 'descend' | 'ascend' | undefined;
7
8
  export type Column<Data extends {
8
9
  id: string;
9
10
  }> = RequiredColumnProps<Data> & {
@@ -28,6 +29,7 @@ export type TableProps<Data extends {
28
29
  onSelect?: (keys: React.Key[], rows: Data[]) => void;
29
30
  onPageChange: (page: number) => void;
30
31
  onSizeChange?: (size: number) => void;
32
+ onSorterChange?: (order: SorterOrder | null, key?: string) => void;
31
33
  RowMenu?: React.FC<{
32
34
  record: Data;
33
35
  formType?: FormType;
@@ -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;
@@ -1,7 +1,7 @@
1
1
  import { Unstructured } from 'k8s-api-provider';
2
2
  type DownloadYAMLOptions = {
3
3
  name: string;
4
- item: Unstructured;
4
+ item: Omit<Unstructured, 'id'>;
5
5
  };
6
6
  export declare function useDownloadYAML(): (options: DownloadYAMLOptions) => void;
7
7
  export {};
@@ -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;
@@ -18,7 +18,7 @@ export declare const AgeColumnRenderer: <Model extends ResourceModel<import("k8s
18
18
  }) => Column<Model>;
19
19
  export declare const NodeNameColumnRenderer: <Model extends PodModel>(i18n: I18nType, options?: Partial<Column<Model>> | undefined) => Column<Model>;
20
20
  export declare const RestartCountColumnRenderer: <Model extends PodModel>(i18n: I18nType) => Column<Model>;
21
- export declare const CompletionsCountColumnRenderer: <Model extends JobModel | CronJobModel>(i18n: I18nType) => Column<Model>;
21
+ export declare const CompletionsCountColumnRenderer: <Model extends JobModel>(i18n: I18nType) => Column<Model>;
22
22
  export declare const DurationColumnRenderer: <Model extends JobModel | CronJobModel>(i18n: I18nType) => Column<Model>;
23
23
  export declare const ServiceTypeColumnRenderer: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(i18n: I18nType) => Column<Model>;
24
24
  export declare function ServiceInClusterAccessTitle(): JSX.Element;
File without changes
@@ -0,0 +1,5 @@
1
+ import { CrudFilters } from '@refinedev/core';
2
+ declare function useNamespaceFilter(): {
3
+ permanent: CrudFilters;
4
+ };
5
+ export default useNamespaceFilter;
@@ -0,0 +1,20 @@
1
+ /// <reference types="react" />
2
+ import { CrudSorting } from '@refinedev/core';
3
+ import { Column, SorterOrder } from 'src/components/Table';
4
+ type UseTableDataProps<Data extends {
5
+ id: string;
6
+ }> = {
7
+ pageSize?: number;
8
+ defaultSorters?: CrudSorting;
9
+ data: Data[];
10
+ columns: Column<Data>[];
11
+ };
12
+ declare function useTableData<Data extends {
13
+ id: string;
14
+ }>({ data, columns, pageSize, defaultSorters }: UseTableDataProps<Data>): {
15
+ data: Data[];
16
+ currentPage: number;
17
+ onPageChange: import("react").Dispatch<import("react").SetStateAction<number>>;
18
+ onSorterChange: (order?: SorterOrder | null, key?: string) => void;
19
+ };
20
+ export default useTableData;
@@ -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.45",
3
+ "version": "0.0.46-alpha.1",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist",
@@ -21,7 +21,7 @@
21
21
  "dayjs": "^1.11.10",
22
22
  "i18next": "^23.2.3",
23
23
  "js-yaml": "^4.1.0",
24
- "k8s-api-provider": "0.0.19",
24
+ "k8s-api-provider": "0.0.21-alpha.0",
25
25
  "ky": "^0.33.3",
26
26
  "lodash-es": "^4.17.21",
27
27
  "mitt": "^3.0.1",
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';