@dovetail-v2/refine 0.0.42 → 0.0.43

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-b007e47c.js → MonacoYamlDiffEditor-b2da37e8.js} +1 -1
  2. package/dist/{index-3ef1da30.js → index-64df5871.js} +577 -440
  3. package/dist/refine.js +1 -1
  4. package/dist/refine.umd.cjs +566 -429
  5. package/dist/style.css +1 -1
  6. package/lib/src/components/Form/useReactHookForm.d.ts +29 -0
  7. package/lib/src/components/Form/useRefineForm.d.ts +1 -1
  8. package/lib/src/components/ModalContextProvider/index.d.ts +12 -0
  9. package/lib/src/components/NetworkPolicyRulesTable/NetworkPolicyRulesTable.d.ts +2 -1
  10. package/lib/src/components/Table/index.d.ts +1 -1
  11. package/lib/src/components/YamlForm/index.d.ts +4 -0
  12. package/lib/src/hooks/useEagleForm.d.ts +2 -1
  13. package/lib/src/hooks/useModal.d.ts +0 -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
@@ -1534,7 +1534,7 @@
1534
1534
  .c1i80kj{height:100%;}
1535
1535
  .s18sezq1.ant-layout-sider{background:#edf0f7;}
1536
1536
  .cyc9hl2.ant-layout-content{background:#fff;}
1537
- .dh5j833{border-bottom:1px dashed rgba(107,128,167,0.6);padding-bottom:2px;}
1537
+ .dh5j833{border-bottom:1px dashed rgba(107,128,167,0.6);padding-bottom:1px;}
1538
1538
  .s1fcgan.ant-tooltip .ant-tooltip-inner{width:256px;}
1539
1539
  body,
1540
1540
  #root {
@@ -0,0 +1,29 @@
1
+ import { BaseRecord, HttpError, UseFormProps as UseFormCoreProps, UseFormReturnType as UseFormReturnTypeCore } from '@refinedev/core';
2
+ import React from 'react';
3
+ import { UseFormProps as UseHookFormProps, UseFormReturn, FieldValues } from 'react-hook-form';
4
+ export type UseFormReturnType<TQueryFnData extends BaseRecord = BaseRecord, TError extends HttpError = HttpError, TVariables extends FieldValues = FieldValues, TContext extends object = object, TData extends BaseRecord = TQueryFnData, TResponse extends BaseRecord = TData, TResponseError extends HttpError = TError> = UseFormReturn<TVariables, TContext> & {
5
+ refineCore: UseFormReturnTypeCore<TQueryFnData, TError, TVariables, TData, TResponse, TResponseError>;
6
+ saveButtonProps: {
7
+ disabled: boolean;
8
+ onClick: (e: React.BaseSyntheticEvent) => void;
9
+ };
10
+ };
11
+ export type UseFormProps<TQueryFnData extends BaseRecord = BaseRecord, TError extends HttpError = HttpError, TVariables extends FieldValues = FieldValues, TContext extends object = object, TData extends BaseRecord = TQueryFnData, TResponse extends BaseRecord = TData, TResponseError extends HttpError = TError> = {
12
+ /**
13
+ * Configuration object for the core of the [useForm](/docs/api-reference/core/hooks/useForm/)
14
+ * @type [`UseFormCoreProps<TQueryFnData, TError, TVariables, TData, TResponse, TResponseError>`](/docs/api-reference/core/hooks/useForm/#properties)
15
+ */
16
+ refineCoreProps?: UseFormCoreProps<TQueryFnData, TError, TVariables, TData, TResponse, TResponseError>;
17
+ /**
18
+ * When you have unsaved changes and try to leave the current page, **refine** shows a confirmation modal box.
19
+ * @default `false*`
20
+ */
21
+ warnWhenUnsavedChanges?: boolean;
22
+ /**
23
+ * Disables server-side validation
24
+ * @default false
25
+ * @see {@link https://refine.dev/docs/advanced-tutorials/forms/server-side-form-validation/}
26
+ */
27
+ disableServerSideValidation?: boolean;
28
+ } & UseHookFormProps<TVariables, TContext>;
29
+ export declare const useForm: <TQueryFnData extends BaseRecord = BaseRecord, TError extends HttpError = HttpError, TVariables extends FieldValues = FieldValues, TContext extends object = object, TData extends BaseRecord = TQueryFnData, TResponse extends BaseRecord = TData, TResponseError extends HttpError = TError>({ refineCoreProps, warnWhenUnsavedChanges: warnWhenUnsavedChangesProp, disableServerSideValidation: disableServerSideValidationProp, ...rest }?: UseFormProps<TQueryFnData, TError, TVariables, TContext, TData, TResponse, TResponseError>) => UseFormReturnType<TQueryFnData, TError, TVariables, TContext, TData, TResponse, TResponseError>;
@@ -5,6 +5,6 @@ export declare const useRefineForm: (props: {
5
5
  id?: string;
6
6
  refineProps?: UseFormProps;
7
7
  }) => {
8
- formResult: import("@refinedev/react-hook-form").UseFormReturnType<import("@refinedev/core").BaseRecord, import("@refinedev/core").HttpError, Record<string, unknown>, {}, import("@refinedev/core").BaseRecord, import("@refinedev/core").BaseRecord, import("@refinedev/core").HttpError>;
8
+ formResult: import("./useReactHookForm").UseFormReturnType<import("@refinedev/core").BaseRecord, import("@refinedev/core").HttpError, Record<string, unknown>, object, import("@refinedev/core").BaseRecord, import("@refinedev/core").BaseRecord, import("@refinedev/core").HttpError>;
9
9
  responseErrorMsg: string;
10
10
  };
@@ -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 {};
@@ -23,7 +23,7 @@ export type TableProps<Data extends {
23
23
  columns: Array<Column<Data>>;
24
24
  scroll?: BaseTableProps<Data>['scroll'];
25
25
  currentPage: number;
26
- currentSize: number;
26
+ defaultSize: number;
27
27
  onActive?: (key: unknown, record: Data) => void;
28
28
  onSelect?: (keys: React.Key[], rows: Data[]) => void;
29
29
  onPageChange: (page: number) => void;
@@ -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,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.42",
3
+ "version": "0.0.43",
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
- };