@dovetail-v2/refine 0.0.47 → 0.0.48-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/dist/{MonacoYamlDiffEditor-9ad1c844.js → MonacoYamlDiffEditor-ed04648b.js} +1 -1
  2. package/dist/{index-1a40b2a8.js → index-04f52e89.js} +328 -321
  3. package/dist/refine.js +1 -1
  4. package/dist/refine.umd.cjs +327 -320
  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/WorkloadPodsTable/WorkloadPodsTable.d.ts +0 -1
  8. package/lib/src/components/YamlForm/index.d.ts +4 -0
  9. package/lib/src/hooks/useEagleForm.d.ts +2 -1
  10. package/lib/src/hooks/useModal.d.ts +0 -0
  11. package/lib/src/hooks/useNamespaceFilter.d.ts +5 -0
  12. package/lib/src/model/cronjob-model.d.ts +9 -0
  13. package/lib/src/model/index.d.ts +6 -0
  14. package/lib/src/model/job-model.d.ts +10 -0
  15. package/lib/src/model/pod-metrics-model.d.ts +7 -0
  16. package/lib/src/model/pod-model.d.ts +15 -0
  17. package/lib/src/model/resource-model.d.ts +17 -0
  18. package/lib/src/model/workload-model.d.ts +17 -0
  19. package/lib/src/types/metric.d.ts +25 -0
  20. package/lib/src/utils/match-selector.d.ts +1 -1
  21. package/package.json +2 -2
  22. package/lib/src/App.js +0 -91
  23. package/lib/src/Dovetail.js +0 -45
  24. package/lib/src/components/Breadcrumb/index.js +0 -20
  25. package/lib/src/components/ConditionsTable/ConditionsTable.js +0 -56
  26. package/lib/src/components/ConditionsTable/index.js +0 -1
  27. package/lib/src/components/CreateButton/index.js +0 -10
  28. package/lib/src/components/CronJobDropdown/index.js +0 -26
  29. package/lib/src/components/CronjobJobsTable/index.js +0 -49
  30. package/lib/src/components/DeleteButton/index.js +0 -13
  31. package/lib/src/components/DeleteManyButton/index.js +0 -16
  32. package/lib/src/components/DrawerShow/DrawerShow.js +0 -13
  33. package/lib/src/components/DrawerShow/index.js +0 -1
  34. package/lib/src/components/EditButton/index.js +0 -13
  35. package/lib/src/components/EditField/index.js +0 -47
  36. package/lib/src/components/ErrorContent/index.js +0 -36
  37. package/lib/src/components/EventsTable/EventsTable.js +0 -59
  38. package/lib/src/components/EventsTable/index.js +0 -1
  39. package/lib/src/components/Form/KeyValueListWidget.js +0 -56
  40. package/lib/src/components/Form/MetadataForm.js +0 -9
  41. package/lib/src/components/Form/NameInputWidget.js +0 -50
  42. package/lib/src/components/Form/NamespaceSelectWidget.js +0 -21
  43. package/lib/src/components/Form/index.js +0 -4
  44. package/lib/src/components/Form/widget.js +0 -1
  45. package/lib/src/components/FormErrorAlert/index.js +0 -8
  46. package/lib/src/components/FormLayout/index.js +0 -21
  47. package/lib/src/components/FormModal/index.js +0 -51
  48. package/lib/src/components/ImageNames/index.js +0 -14
  49. package/lib/src/components/IngressRulesComponent/index.js +0 -11
  50. package/lib/src/components/IngressRulesTable/IngressRulesTable.js +0 -51
  51. package/lib/src/components/IngressRulesTable/index.js +0 -1
  52. package/lib/src/components/K8sDropdown/index.js +0 -31
  53. package/lib/src/components/KeyValue/KeyValue.js +0 -27
  54. package/lib/src/components/KeyValue/index.js +0 -1
  55. package/lib/src/components/KeyValueData/index.js +0 -50
  56. package/lib/src/components/Layout/index.js +0 -39
  57. package/lib/src/components/ListPage/index.js +0 -25
  58. package/lib/src/components/Menu/index.js +0 -36
  59. package/lib/src/components/NamespacesFilter/index.js +0 -34
  60. package/lib/src/components/NetworkPolicyRulesTable/NetworkPolicyRulesTable.js +0 -77
  61. package/lib/src/components/NetworkPolicyRulesTable/index.js +0 -1
  62. package/lib/src/components/PageShow/PageShow.js +0 -11
  63. package/lib/src/components/PageShow/index.js +0 -1
  64. package/lib/src/components/PodContainersTable/PodContainersTable.js +0 -78
  65. package/lib/src/components/PodContainersTable/index.js +0 -1
  66. package/lib/src/components/PodLog/index.js +0 -136
  67. package/lib/src/components/ReferenceLink/index.js +0 -17
  68. package/lib/src/components/RefineForm/RefineFormContent.d.ts +0 -10
  69. package/lib/src/components/RefineForm/RefineFormModal.d.ts +0 -8
  70. package/lib/src/components/RefineForm/RefineFormPage.d.ts +0 -7
  71. package/lib/src/components/RefineForm/index.d.ts +0 -3
  72. package/lib/src/components/RefineForm/type.d.ts +0 -20
  73. package/lib/src/components/RefineForm/useRefineForm.d.ts +0 -10
  74. package/lib/src/components/ResourceCRUD/ResourceCRUD.js +0 -15
  75. package/lib/src/components/ResourceCRUD/create/index.js +0 -13
  76. package/lib/src/components/ResourceCRUD/index.js +0 -4
  77. package/lib/src/components/ResourceCRUD/list/index.js +0 -19
  78. package/lib/src/components/ResourceCRUD/show/index.js +0 -6
  79. package/lib/src/components/ResourceLink/index.js +0 -21
  80. package/lib/src/components/ResourceUsageBar/index.js +0 -81
  81. package/lib/src/components/Separator/index.js +0 -11
  82. package/lib/src/components/ShowContent/ShowContent.js +0 -157
  83. package/lib/src/components/ShowContent/fields.js +0 -157
  84. package/lib/src/components/ShowContent/index.js +0 -2
  85. package/lib/src/components/StateTag/StateTag.js +0 -22
  86. package/lib/src/components/StateTag/index.js +0 -1
  87. package/lib/src/components/Table/ErrorContent.js +0 -36
  88. package/lib/src/components/Table/TableToolBar.js +0 -14
  89. package/lib/src/components/Table/TableWidgets.js +0 -28
  90. package/lib/src/components/Table/index.js +0 -69
  91. package/lib/src/components/Tags/index.js +0 -22
  92. package/lib/src/components/Time/index.js +0 -14
  93. package/lib/src/components/WorkloadDropdown/index.js +0 -24
  94. package/lib/src/components/WorkloadPodsTable/WorkloadPodsTable.js +0 -39
  95. package/lib/src/components/WorkloadPodsTable/index.js +0 -1
  96. package/lib/src/components/WorkloadReplicas/index.js +0 -50
  97. package/lib/src/components/YamlEditor/MonacoYamlDiffEditor.js +0 -34
  98. package/lib/src/components/YamlEditor/MonacoYamlEditor.js +0 -149
  99. package/lib/src/components/YamlEditor/YamlEditorComponent.js +0 -90
  100. package/lib/src/components/YamlEditor/index.js +0 -1
  101. package/lib/src/components/YamlEditor/style.js +0 -102
  102. package/lib/src/components/YamlEditor/yaml.worker.js +0 -1
  103. package/lib/src/components/YamlForm/index.js +0 -61
  104. package/lib/src/components/index.js +0 -38
  105. package/lib/src/constants/index.js +0 -2
  106. package/lib/src/constants/k8s.js +0 -203
  107. package/lib/src/constants/state.js +0 -15
  108. package/lib/src/contexts/component.js +0 -3
  109. package/lib/src/contexts/configs.js +0 -3
  110. package/lib/src/contexts/global-store.js +0 -3
  111. package/lib/src/contexts/index.js +0 -3
  112. package/lib/src/hooks/index.js +0 -7
  113. package/lib/src/hooks/useDeleteModal/index.js +0 -1
  114. package/lib/src/hooks/useDeleteModal/useDeleteManyModal.js +0 -31
  115. package/lib/src/hooks/useDeleteModal/useDeleteModal.js +0 -38
  116. package/lib/src/hooks/useDownloadYAML.js +0 -10
  117. package/lib/src/hooks/useEagleForm.js +0 -177
  118. package/lib/src/hooks/useEagleTable/columns.js +0 -246
  119. package/lib/src/hooks/useEagleTable/index.js +0 -2
  120. package/lib/src/hooks/useEagleTable/useEagleTable.js +0 -63
  121. package/lib/src/hooks/useEdit.js +0 -19
  122. package/lib/src/hooks/useGlobalStore.js +0 -5
  123. package/lib/src/hooks/useK8sYamlEditor.js +0 -37
  124. package/lib/src/hooks/useOpenForm.js +0 -43
  125. package/lib/src/hooks/useSchema.js +0 -37
  126. package/lib/src/hooks/useSubmitForm.js +0 -42
  127. package/lib/src/i18n.js +0 -19
  128. package/lib/src/index.js +0 -13
  129. package/lib/src/locales/en-US/dovetail.json +0 -18
  130. package/lib/src/locales/en-US/index.js +0 -4
  131. package/lib/src/locales/index.js +0 -6
  132. package/lib/src/locales/zh-CN/dovetail.json +0 -91
  133. package/lib/src/locales/zh-CN/index.js +0 -4
  134. package/lib/src/main.js +0 -12
  135. package/lib/src/models/cronjob-model.js +0 -32
  136. package/lib/src/models/daemonset-model.js +0 -17
  137. package/lib/src/models/deployment-model.js +0 -17
  138. package/lib/src/models/event-model.js +0 -11
  139. package/lib/src/models/index.js +0 -14
  140. package/lib/src/models/ingress-model.js +0 -24
  141. package/lib/src/models/job-model.js +0 -56
  142. package/lib/src/models/network-policy-model.js +0 -10
  143. package/lib/src/models/pod-metrics-model.js +0 -34
  144. package/lib/src/models/pod-model.js +0 -78
  145. package/lib/src/models/resource-model.js +0 -34
  146. package/lib/src/models/server-instance-model.d.ts +0 -10
  147. package/lib/src/models/service-model.js +0 -17
  148. package/lib/src/models/statefulset-model.js +0 -17
  149. package/lib/src/models/types/index.js +0 -1
  150. package/lib/src/models/types/metric.js +0 -1
  151. package/lib/src/models/workload-base-model.js +0 -22
  152. package/lib/src/models/workload-model.js +0 -51
  153. package/lib/src/pages/configmaps/index.js +0 -15
  154. package/lib/src/pages/cronjobs/create/index.js +0 -6
  155. package/lib/src/pages/cronjobs/index.js +0 -3
  156. package/lib/src/pages/cronjobs/list/index.js +0 -42
  157. package/lib/src/pages/cronjobs/show/index.js +0 -16
  158. package/lib/src/pages/daemonsets/create/index.js +0 -6
  159. package/lib/src/pages/daemonsets/index.js +0 -3
  160. package/lib/src/pages/daemonsets/list/index.js +0 -32
  161. package/lib/src/pages/daemonsets/show/index.js +0 -16
  162. package/lib/src/pages/deployments/create/index.js +0 -7
  163. package/lib/src/pages/deployments/index.js +0 -3
  164. package/lib/src/pages/deployments/list/index.js +0 -26
  165. package/lib/src/pages/deployments/show/index.js +0 -16
  166. package/lib/src/pages/ingresses/index.js +0 -26
  167. package/lib/src/pages/jobs/index.js +0 -34
  168. package/lib/src/pages/networkPolicies/index.js +0 -67
  169. package/lib/src/pages/pods/create/index.js +0 -6
  170. package/lib/src/pages/pods/index.js +0 -3
  171. package/lib/src/pages/pods/list/index.js +0 -81
  172. package/lib/src/pages/pods/show/index.js +0 -54
  173. package/lib/src/pages/secrets/index.js +0 -15
  174. package/lib/src/pages/services/index.js +0 -26
  175. package/lib/src/pages/statefulsets/create/index.js +0 -6
  176. package/lib/src/pages/statefulsets/index.js +0 -3
  177. package/lib/src/pages/statefulsets/list/index.js +0 -26
  178. package/lib/src/pages/statefulsets/show/index.js +0 -16
  179. package/lib/src/plugins/index.js +0 -3
  180. package/lib/src/plugins/model-plugin.js +0 -46
  181. package/lib/src/plugins/relation-plugin.js +0 -81
  182. package/lib/src/plugins/type.js +0 -1
  183. package/lib/src/providers/index.js +0 -1
  184. package/lib/src/providers/router-provider/index.js +0 -100
  185. package/lib/src/types/index.js +0 -1
  186. package/lib/src/types/resource.js +0 -12
  187. package/lib/src/utils/addId.js +0 -8
  188. package/lib/src/utils/download.js +0 -9
  189. package/lib/src/utils/error.js +0 -53
  190. package/lib/src/utils/form.js +0 -9
  191. package/lib/src/utils/k8s.js +0 -6
  192. package/lib/src/utils/labels.js +0 -15
  193. package/lib/src/utils/match-selector.js +0 -12
  194. package/lib/src/utils/openapi.js +0 -33
  195. package/lib/src/utils/schema.js +0 -117
  196. package/lib/src/utils/selector.js +0 -12
  197. package/lib/src/utils/string.js +0 -6
  198. package/lib/src/utils/time.js +0 -46
  199. package/lib/src/utils/unit.js +0 -69
  200. package/lib/src/utils/yaml.js +0 -44
  201. 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,7 +1,6 @@
1
1
  import { LabelSelector } from 'kubernetes-types/meta/v1';
2
2
  import React from 'react';
3
3
  interface WorkloadPodsTableProps {
4
- namespace?: string;
5
4
  selector?: LabelSelector;
6
5
  hideToolbar?: boolean;
7
6
  }
@@ -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 {};
@@ -1,3 +1,3 @@
1
1
  import { LabelSelector } from 'kubernetes-types/meta/v1';
2
2
  import { PodModel } from '../models/pod-model';
3
- export declare function matchSelector(pod: PodModel, selector?: LabelSelector, namespace?: string): boolean;
3
+ export declare function matchSelector(pod: PodModel, selector: LabelSelector): boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dovetail-v2/refine",
3
- "version": "0.0.47",
3
+ "version": "0.0.48-alpha.0",
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.21",
24
+ "k8s-api-provider": "0.0.23-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';
@@ -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
- };
@@ -1,47 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useUIKit, pushModal, popModal } from '@cloudtower/eagle';
3
- import { css } from '@linaria/core';
4
- import { useCallback } from 'react';
5
- import { FormErrorAlert } from 'src/components/FormErrorAlert';
6
- import { useSubmitForm } from 'src/hooks/useSubmitForm';
7
- import { useD2Translation } from '../../i18n';
8
- const EditFieldModalStyle = css `
9
- .ant-modal-content {
10
- border-radius: 16px;
11
- }
12
-
13
- .ant-modal-header {
14
- border-radius: 16px 16px 0 0;
15
- }
16
- `;
17
- const EditButtonStyle = css `
18
- &.ant-btn.ant-btn-link {
19
- height: 22px;
20
- margin-left: 8px;
21
- }
22
- `;
23
- export function EditFieldModal(props) {
24
- const { title, formRef: form, renderContent } = props;
25
- const kit = useUIKit();
26
- const { i18n } = useD2Translation();
27
- const { submitting, errorMsgs, reset, onSubmit, } = useSubmitForm({
28
- formRef: form,
29
- onSubmitSuccess: popModal
30
- });
31
- const close = useCallback(() => {
32
- popModal();
33
- reset();
34
- }, [reset]);
35
- return (_jsxs(kit.modal, { className: EditFieldModalStyle, title: title || i18n.t('dovetail.edit'), confirmLoading: submitting, onOk: onSubmit, onCancel: close, normal: true, destroyOnClose: true, children: [renderContent(), _jsx(FormErrorAlert, { style: { marginTop: 16 }, errorMsgs: errorMsgs })] }));
36
- }
37
- export function EditField(props) {
38
- const { modalProps } = props;
39
- const kit = useUIKit();
40
- const { i18n } = useD2Translation();
41
- return (_jsx(kit.button, { className: EditButtonStyle, type: "link", onClick: () => {
42
- pushModal({
43
- component: EditFieldModal,
44
- props: modalProps
45
- });
46
- }, children: i18n.t('dovetail.edit') }));
47
- }