@dovetail-v2/refine 0.0.2 → 0.0.3-0.beta-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.
- package/dist/{MonacoYamlDiffEditor.a7832cec.js → MonacoYamlDiffEditor-7505595f.js} +5 -4
- package/dist/assets/{yaml.worker.bb17811d.js → yaml.worker-5e5f190c.js} +2153 -992
- package/dist/index-d02782c8.js +19445 -0
- package/dist/refine.js +119 -13
- package/dist/refine.umd.cjs +13392 -3776
- package/dist/style.css +1221 -32362
- package/lib/src/App.d.ts +0 -3
- package/lib/src/App.js +91 -0
- package/lib/src/Dovetail.d.ts +8 -4
- package/lib/src/Dovetail.js +45 -0
- package/lib/src/components/Breadcrumb/index.js +20 -0
- package/lib/src/components/ConditionsTable/ConditionsTable.js +56 -0
- package/lib/src/components/ConditionsTable/index.js +1 -0
- package/lib/src/components/CreateButton/index.js +10 -0
- package/lib/src/components/CronJobDropdown/index.d.ts +2 -2
- package/lib/src/components/CronJobDropdown/index.js +26 -0
- package/lib/src/components/CronjobJobsTable/index.js +49 -0
- package/lib/src/components/DeleteButton/index.js +13 -0
- package/lib/src/components/DeleteManyButton/index.js +16 -0
- package/lib/src/components/DrawerShow/DrawerShow.d.ts +6 -7
- package/lib/src/components/DrawerShow/DrawerShow.js +13 -0
- package/lib/src/components/DrawerShow/index.js +1 -0
- package/lib/src/components/EditButton/index.js +13 -0
- package/lib/src/components/EditField/index.d.ts +15 -0
- package/lib/src/components/EditField/index.js +47 -0
- package/lib/src/components/ErrorContent/index.d.ts +12 -0
- package/lib/src/components/ErrorContent/index.js +36 -0
- package/lib/src/components/EventsTable/EventsTable.d.ts +2 -0
- package/lib/src/components/EventsTable/EventsTable.js +59 -0
- package/lib/src/components/EventsTable/index.d.ts +1 -0
- package/lib/src/components/EventsTable/index.js +1 -0
- package/lib/src/components/Form/KeyValueListWidget.js +56 -0
- package/lib/src/components/Form/MetadataForm.js +9 -0
- package/lib/src/components/Form/NameInputWidget.js +50 -0
- package/lib/src/components/Form/NamespaceSelectWidget.js +21 -0
- package/lib/src/components/Form/index.js +4 -0
- package/lib/src/components/Form/widget.js +1 -0
- package/lib/src/components/FormErrorAlert/index.d.ts +8 -0
- package/lib/src/components/FormErrorAlert/index.js +8 -0
- package/lib/src/components/FormLayout/index.d.ts +5 -1
- package/lib/src/components/FormLayout/index.js +21 -0
- package/lib/src/components/FormModal/index.d.ts +10 -0
- package/lib/src/components/FormModal/index.js +51 -0
- package/lib/src/components/ImageNames/index.js +14 -0
- package/lib/src/components/IngressRulesComponent/index.d.ts +5 -0
- package/lib/src/components/IngressRulesComponent/index.js +11 -0
- package/lib/src/components/IngressRulesTable/IngressRulesTable.d.ts +7 -0
- package/lib/src/components/IngressRulesTable/IngressRulesTable.js +51 -0
- package/lib/src/components/IngressRulesTable/index.d.ts +1 -0
- package/lib/src/components/IngressRulesTable/index.js +1 -0
- package/lib/src/components/K8sDropdown/index.d.ts +2 -2
- package/lib/src/components/K8sDropdown/index.js +31 -0
- package/lib/src/components/KeyValue/KeyValue.js +27 -0
- package/lib/src/components/KeyValue/index.js +1 -0
- package/lib/src/components/KeyValueData/index.d.ts +6 -0
- package/lib/src/components/KeyValueData/index.js +50 -0
- package/lib/src/components/Layout/index.js +39 -0
- package/lib/src/components/ListPage/index.d.ts +3 -3
- package/lib/src/components/ListPage/index.js +25 -0
- package/lib/src/components/Menu/index.js +36 -0
- package/lib/src/components/NamespacesFilter/index.js +34 -0
- package/lib/src/components/NetworkPolicyRulesTable/NetworkPolicyRulesTable.d.ts +7 -0
- package/lib/src/components/NetworkPolicyRulesTable/NetworkPolicyRulesTable.js +77 -0
- package/lib/src/components/NetworkPolicyRulesTable/index.d.ts +1 -0
- package/lib/src/components/NetworkPolicyRulesTable/index.js +1 -0
- package/lib/src/components/PageShow/PageShow.d.ts +7 -8
- package/lib/src/components/PageShow/PageShow.js +11 -0
- package/lib/src/components/PageShow/index.js +1 -0
- package/lib/src/components/PodContainersTable/PodContainersTable.js +78 -0
- package/lib/src/components/PodContainersTable/index.js +1 -0
- package/lib/src/components/PodLog/index.d.ts +6 -0
- package/lib/src/components/PodLog/index.js +136 -0
- package/lib/src/components/ReferenceLink/index.d.ts +8 -0
- package/lib/src/components/ReferenceLink/index.js +17 -0
- package/lib/src/components/ResourceCRUD/ResourceCRUD.d.ts +3 -3
- package/lib/src/components/ResourceCRUD/ResourceCRUD.js +15 -0
- package/lib/src/components/ResourceCRUD/create/index.d.ts +6 -6
- package/lib/src/components/ResourceCRUD/create/index.js +13 -0
- package/lib/src/components/ResourceCRUD/index.d.ts +3 -0
- package/lib/src/components/ResourceCRUD/index.js +4 -0
- package/lib/src/components/ResourceCRUD/list/index.d.ts +4 -5
- package/lib/src/components/ResourceCRUD/list/index.js +19 -0
- package/lib/src/components/ResourceCRUD/show/index.d.ts +6 -7
- package/lib/src/components/ResourceCRUD/show/index.js +6 -0
- package/lib/src/components/ResourceLink/index.d.ts +8 -0
- package/lib/src/components/ResourceLink/index.js +21 -0
- package/lib/src/components/ResourceUsageBar/index.d.ts +8 -0
- package/lib/src/components/ResourceUsageBar/index.js +81 -0
- package/lib/src/components/Separator/index.js +11 -0
- package/lib/src/components/ShowContent/ShowContent.d.ts +7 -8
- package/lib/src/components/ShowContent/ShowContent.js +157 -0
- package/lib/src/components/ShowContent/fields.d.ts +34 -10
- package/lib/src/components/ShowContent/fields.js +157 -0
- package/lib/src/components/ShowContent/index.js +2 -0
- package/lib/src/components/StateTag/StateTag.d.ts +3 -1
- package/lib/src/components/StateTag/StateTag.js +22 -0
- package/lib/src/components/StateTag/index.js +1 -0
- package/lib/src/components/Table/ErrorContent.js +36 -0
- package/lib/src/components/Table/TableToolBar.js +14 -0
- package/lib/src/components/Table/TableWidgets.js +28 -0
- package/lib/src/components/Table/index.d.ts +9 -4
- package/lib/src/components/Table/index.js +69 -0
- package/lib/src/components/Tags/index.d.ts +1 -1
- package/lib/src/components/Tags/index.js +22 -0
- package/lib/src/components/Time/index.js +14 -0
- package/lib/src/components/WorkloadDropdown/index.d.ts +2 -2
- package/lib/src/components/WorkloadDropdown/index.js +24 -0
- package/lib/src/components/WorkloadPodsTable/WorkloadPodsTable.d.ts +5 -2
- package/lib/src/components/WorkloadPodsTable/WorkloadPodsTable.js +39 -0
- package/lib/src/components/WorkloadPodsTable/index.js +1 -0
- package/lib/src/components/WorkloadReplicas/index.d.ts +7 -4
- package/lib/src/components/WorkloadReplicas/index.js +50 -0
- package/lib/src/components/YamlEditor/MonacoYamlDiffEditor.js +34 -0
- package/lib/src/components/YamlEditor/MonacoYamlEditor.d.ts +1 -1
- package/lib/src/components/YamlEditor/MonacoYamlEditor.js +149 -0
- package/lib/src/components/YamlEditor/YamlEditorComponent.d.ts +2 -1
- package/lib/src/components/YamlEditor/YamlEditorComponent.js +90 -0
- package/lib/src/components/YamlEditor/index.js +1 -0
- package/lib/src/components/YamlEditor/style.js +102 -0
- package/lib/src/components/YamlEditor/yaml.worker.js +1 -0
- package/lib/src/components/YamlForm/index.d.ts +14 -1
- package/lib/src/components/YamlForm/index.js +61 -0
- package/lib/src/components/index.d.ts +38 -0
- package/lib/src/components/index.js +38 -0
- package/lib/src/constants/index.d.ts +2 -0
- package/lib/src/constants/index.js +2 -0
- package/lib/src/constants/k8s.d.ts +65 -0
- package/lib/src/constants/k8s.js +203 -0
- package/lib/src/constants/state.d.ts +13 -0
- package/lib/src/constants/state.js +15 -0
- package/lib/src/contexts/component.d.ts +6 -0
- package/lib/src/contexts/component.js +3 -0
- package/lib/src/contexts/configs.d.ts +4 -0
- package/lib/src/contexts/configs.js +3 -0
- package/lib/src/contexts/global-store.d.ts +6 -0
- package/lib/src/contexts/global-store.js +3 -0
- package/lib/src/contexts/index.d.ts +3 -0
- package/lib/src/contexts/index.js +3 -0
- package/lib/src/hooks/index.d.ts +5 -0
- package/lib/src/hooks/index.js +7 -0
- package/lib/src/hooks/useDeleteModal/index.js +1 -0
- package/lib/src/hooks/useDeleteModal/useDeleteManyModal.js +31 -0
- package/lib/src/hooks/useDeleteModal/useDeleteModal.js +38 -0
- package/lib/src/hooks/useDownloadYAML.d.ts +2 -2
- package/lib/src/hooks/useDownloadYAML.js +10 -0
- package/lib/src/hooks/useEagleForm.d.ts +17 -9
- package/lib/src/hooks/useEagleForm.js +177 -0
- package/lib/src/hooks/useEagleTable/columns.d.ts +18 -14
- package/lib/src/hooks/useEagleTable/columns.js +246 -0
- package/lib/src/hooks/useEagleTable/index.d.ts +2 -52
- package/lib/src/hooks/useEagleTable/index.js +2 -0
- package/lib/src/hooks/useEagleTable/useEagleTable.d.ts +51 -0
- package/lib/src/hooks/useEagleTable/useEagleTable.js +63 -0
- package/lib/src/hooks/useEdit.js +19 -0
- package/lib/src/hooks/useGlobalStore.d.ts +3 -0
- package/lib/src/hooks/useGlobalStore.js +5 -0
- package/lib/src/hooks/useK8sYamlEditor.d.ts +5 -0
- package/lib/src/hooks/useK8sYamlEditor.js +37 -0
- package/lib/src/hooks/useOpenForm.d.ts +5 -0
- package/lib/src/hooks/useOpenForm.js +43 -0
- package/lib/src/hooks/useSchema.d.ts +9 -2
- package/lib/src/hooks/useSchema.js +37 -0
- package/lib/src/hooks/useSubmitForm.d.ts +14 -0
- package/lib/src/hooks/useSubmitForm.js +42 -0
- package/lib/src/i18n.d.ts +46 -1
- package/lib/src/i18n.js +19 -0
- package/lib/src/index.d.ts +7 -2
- package/lib/src/index.js +13 -0
- package/lib/src/locales/en-US/dovetail.json +18 -0
- package/lib/src/locales/en-US/index.d.ts +6 -0
- package/lib/src/locales/en-US/index.js +4 -0
- package/lib/src/locales/index.js +6 -0
- package/lib/src/locales/zh-CN/dovetail.json +91 -0
- package/lib/src/locales/zh-CN/index.d.ts +40 -1
- package/lib/src/locales/zh-CN/index.js +4 -0
- package/lib/src/main.d.ts +2 -0
- package/lib/src/main.js +12 -0
- package/lib/src/models/cronjob-model.d.ts +16 -0
- package/lib/src/models/cronjob-model.js +32 -0
- package/lib/src/models/daemonset-model.d.ts +14 -0
- package/lib/src/models/daemonset-model.js +17 -0
- package/lib/src/models/deployment-model.d.ts +14 -0
- package/lib/src/models/deployment-model.js +17 -0
- package/lib/src/models/event-model.d.ts +8 -0
- package/lib/src/models/event-model.js +11 -0
- package/lib/src/models/index.d.ts +14 -0
- package/lib/src/models/index.js +14 -0
- package/lib/src/models/ingress-model.d.ts +18 -0
- package/lib/src/models/ingress-model.js +24 -0
- package/lib/src/models/job-model.d.ts +19 -0
- package/lib/src/models/job-model.js +56 -0
- package/lib/src/models/network-policy-model.d.ts +10 -0
- package/lib/src/models/network-policy-model.js +10 -0
- package/lib/src/models/pod-metrics-model.d.ts +9 -0
- package/lib/src/models/pod-metrics-model.js +34 -0
- package/lib/src/models/pod-model.d.ts +21 -0
- package/lib/src/models/pod-model.js +78 -0
- package/lib/src/models/resource-model.d.ts +21 -0
- package/lib/src/models/resource-model.js +34 -0
- package/lib/src/models/service-model.d.ts +10 -0
- package/lib/src/models/service-model.js +17 -0
- package/lib/src/models/statefulset-model.d.ts +14 -0
- package/lib/src/models/statefulset-model.js +17 -0
- package/lib/src/models/types/index.d.ts +1 -0
- package/lib/src/models/types/index.js +1 -0
- package/lib/src/models/types/metric.d.ts +25 -0
- package/lib/src/models/types/metric.js +1 -0
- package/lib/src/models/workload-base-model.d.ts +13 -0
- package/lib/src/models/workload-base-model.js +22 -0
- package/lib/src/models/workload-model.d.ts +19 -0
- package/lib/src/models/workload-model.js +51 -0
- package/lib/src/pages/configmaps/index.d.ts +4 -3
- package/lib/src/pages/configmaps/index.js +15 -0
- package/lib/src/pages/cronjobs/create/index.js +6 -0
- package/lib/src/pages/cronjobs/index.js +3 -0
- package/lib/src/pages/cronjobs/list/index.js +42 -0
- package/lib/src/pages/cronjobs/show/index.js +16 -0
- package/lib/src/pages/daemonsets/create/index.js +6 -0
- package/lib/src/pages/daemonsets/index.js +3 -0
- package/lib/src/pages/daemonsets/list/index.js +32 -0
- package/lib/src/pages/daemonsets/show/index.js +16 -0
- package/lib/src/pages/deployments/create/index.d.ts +2 -2
- package/lib/src/pages/deployments/create/index.js +7 -0
- package/lib/src/pages/deployments/index.js +3 -0
- package/lib/src/pages/deployments/list/index.js +26 -0
- package/lib/src/pages/deployments/show/index.js +16 -0
- package/lib/src/pages/ingresses/index.d.ts +4 -0
- package/lib/src/pages/ingresses/index.js +26 -0
- package/lib/src/pages/jobs/index.d.ts +4 -4
- package/lib/src/pages/jobs/index.js +34 -0
- package/lib/src/pages/networkPolicies/index.d.ts +4 -0
- package/lib/src/pages/networkPolicies/index.js +67 -0
- package/lib/src/pages/pods/create/index.js +6 -0
- package/lib/src/pages/pods/index.js +3 -0
- package/lib/src/pages/pods/list/index.js +81 -0
- package/lib/src/pages/pods/show/index.js +54 -0
- package/lib/src/pages/secrets/index.d.ts +4 -3
- package/lib/src/pages/secrets/index.js +15 -0
- package/lib/src/pages/services/index.d.ts +4 -0
- package/lib/src/pages/services/index.js +26 -0
- package/lib/src/pages/statefulsets/create/index.js +6 -0
- package/lib/src/pages/statefulsets/index.js +3 -0
- package/lib/src/pages/statefulsets/list/index.js +26 -0
- package/lib/src/pages/statefulsets/show/index.js +16 -0
- package/lib/src/plugins/index.d.ts +2 -0
- package/lib/src/plugins/index.js +3 -0
- package/lib/src/plugins/model-plugin.d.ts +12 -0
- package/lib/src/plugins/model-plugin.js +46 -0
- package/lib/src/plugins/relation-plugin.d.ts +27 -0
- package/lib/src/plugins/relation-plugin.js +81 -0
- package/lib/src/plugins/type.d.ts +8 -0
- package/lib/src/plugins/type.js +1 -0
- package/lib/src/providers/index.js +1 -0
- package/lib/src/providers/router-provider/index.d.ts +1 -1
- package/lib/src/providers/router-provider/index.js +100 -0
- package/lib/src/types/index.js +1 -0
- package/lib/src/types/resource.d.ts +19 -22
- package/lib/src/types/resource.js +12 -0
- package/lib/src/utils/addId.js +8 -0
- package/lib/src/utils/download.js +9 -0
- package/lib/src/utils/error.d.ts +3 -3
- package/lib/src/utils/error.js +53 -0
- package/lib/src/utils/form.d.ts +3 -0
- package/lib/src/utils/form.js +9 -0
- package/lib/src/utils/k8s.js +6 -0
- package/lib/src/utils/labels.js +15 -0
- package/lib/src/utils/match-selector.d.ts +3 -0
- package/lib/src/utils/match-selector.js +12 -0
- package/lib/src/utils/openapi.js +33 -0
- package/lib/src/utils/schema.js +117 -0
- package/lib/src/utils/selector.d.ts +3 -0
- package/lib/src/utils/selector.js +12 -0
- package/lib/src/utils/string.js +6 -0
- package/lib/src/utils/time.d.ts +6 -1
- package/lib/src/utils/time.js +46 -0
- package/lib/src/utils/unit.d.ts +12 -0
- package/lib/src/utils/unit.js +69 -0
- package/lib/src/utils/yaml.js +44 -0
- package/lib/vite.config.d.ts +1 -1
- package/lib/vite.config.js +60 -0
- package/package.json +24 -9
- package/dist/index.bd5d18c4.js +0 -9820
- package/lib/src/model/cronjob-model.d.ts +0 -9
- package/lib/src/model/index.d.ts +0 -5
- package/lib/src/model/job-model.d.ts +0 -10
- package/lib/src/model/pod-model.d.ts +0 -10
- package/lib/src/model/resource-model.d.ts +0 -17
- package/lib/src/model/workload-model.d.ts +0 -17
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { useUIKit } from '@cloudtower/eagle';
|
|
2
|
+
import { useForm as useFormCore, useWarnAboutChange, pickNotDeprecated, useResource, } from '@refinedev/core';
|
|
3
|
+
import yaml from 'js-yaml';
|
|
4
|
+
import React, { useRef, useState, useMemo } from 'react';
|
|
5
|
+
import useK8sYamlEditor from 'src/hooks/useK8sYamlEditor';
|
|
6
|
+
import { useSchema } from 'src/hooks/useSchema';
|
|
7
|
+
import { pruneBeforeEdit } from 'src/utils/k8s';
|
|
8
|
+
import { generateYamlBySchema } from 'src/utils/yaml';
|
|
9
|
+
import { useForm as useFormSF } from 'sunflower-antd';
|
|
10
|
+
import { useD2Translation } from '../i18n';
|
|
11
|
+
import { useGlobalStore } from './useGlobalStore';
|
|
12
|
+
const useEagleForm = ({ action, resource, onMutationSuccess: onMutationSuccessProp, onMutationError, submitOnEnter = false, warnWhenUnsavedChanges: warnWhenUnsavedChangesProp, redirect, successNotification, errorNotification, meta, metaData, queryMeta, mutationMeta, liveMode, liveParams, mutationMode, dataProviderName, onLiveEvent, invalidates, undoableTimeout, queryOptions, createMutationOptions, updateMutationOptions, id: idFromProps, overtimeOptions, editorOptions, initialValuesForCreate, } = {}) => {
|
|
13
|
+
const editor = useRef(null);
|
|
14
|
+
const isFoldRef = useRef(false);
|
|
15
|
+
const { t } = useD2Translation();
|
|
16
|
+
const [enableEditor, setEnableEditor] = useState(false);
|
|
17
|
+
const [isYamlValid, setIsYamlValid] = useState(true);
|
|
18
|
+
const [isSchemaValid, setIsSchemaValid] = useState(true);
|
|
19
|
+
const [editorErrors, setEditorErrors] = useState([]);
|
|
20
|
+
const [errorResponseBody, setErrorResponseBody] = useState(null);
|
|
21
|
+
const useResourceResult = useResource();
|
|
22
|
+
const { globalStore } = useGlobalStore();
|
|
23
|
+
const kit = useUIKit();
|
|
24
|
+
const { schema, loading: isLoadingSchema, error: loadSchemaError, fetchSchema, } = useSchema({
|
|
25
|
+
skip: editorOptions?.isSkipSchema,
|
|
26
|
+
});
|
|
27
|
+
const [formAnt] = kit.form.useForm();
|
|
28
|
+
const formSF = useFormSF({
|
|
29
|
+
form: formAnt,
|
|
30
|
+
});
|
|
31
|
+
const { form } = formSF;
|
|
32
|
+
const { fold } = useK8sYamlEditor();
|
|
33
|
+
const useFormCoreResult = useFormCore({
|
|
34
|
+
onMutationSuccess: onMutationSuccessProp ? onMutationSuccessProp : undefined,
|
|
35
|
+
onMutationError,
|
|
36
|
+
redirect,
|
|
37
|
+
action,
|
|
38
|
+
resource,
|
|
39
|
+
successNotification,
|
|
40
|
+
errorNotification,
|
|
41
|
+
meta: pickNotDeprecated(meta, metaData),
|
|
42
|
+
metaData: pickNotDeprecated(meta, metaData),
|
|
43
|
+
queryMeta,
|
|
44
|
+
mutationMeta,
|
|
45
|
+
liveMode,
|
|
46
|
+
liveParams,
|
|
47
|
+
mutationMode,
|
|
48
|
+
dataProviderName,
|
|
49
|
+
onLiveEvent,
|
|
50
|
+
invalidates,
|
|
51
|
+
undoableTimeout,
|
|
52
|
+
queryOptions,
|
|
53
|
+
createMutationOptions,
|
|
54
|
+
updateMutationOptions,
|
|
55
|
+
id: idFromProps,
|
|
56
|
+
overtimeOptions,
|
|
57
|
+
});
|
|
58
|
+
const { formLoading, onFinish, queryResult, id } = useFormCoreResult;
|
|
59
|
+
const { warnWhenUnsavedChanges: warnWhenUnsavedChangesRefine, setWarnWhen } = useWarnAboutChange();
|
|
60
|
+
const warnWhenUnsavedChanges = warnWhenUnsavedChangesProp ?? warnWhenUnsavedChangesRefine;
|
|
61
|
+
const initialValues = useMemo(() => {
|
|
62
|
+
const initialValues = queryResult?.data?.data
|
|
63
|
+
? globalStore?.restoreItem(queryResult.data.data)
|
|
64
|
+
: initialValuesForCreate;
|
|
65
|
+
if (initialValues) {
|
|
66
|
+
pruneBeforeEdit(initialValues);
|
|
67
|
+
}
|
|
68
|
+
return initialValues;
|
|
69
|
+
}, [queryResult, globalStore, initialValuesForCreate]);
|
|
70
|
+
// Init the editor after the resource value is fetched
|
|
71
|
+
React.useEffect(() => {
|
|
72
|
+
form.resetFields();
|
|
73
|
+
if (editor.current) {
|
|
74
|
+
const editorValue = yaml.dump(initialValues);
|
|
75
|
+
const editorInstance = editor.current.getEditorInstance();
|
|
76
|
+
editor.current.setEditorValue(editorValue);
|
|
77
|
+
editor.current.setValue(editorValue);
|
|
78
|
+
if (queryResult?.data?.data && editorInstance && !isFoldRef.current) {
|
|
79
|
+
fold(editorInstance);
|
|
80
|
+
isFoldRef.current = true;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}, [initialValues, queryResult?.data?.data, id, form, fold]);
|
|
84
|
+
React.useEffect(() => {
|
|
85
|
+
const response = useFormCoreResult.mutationResult.error?.response;
|
|
86
|
+
if (response && !response?.bodyUsed) {
|
|
87
|
+
response.json?.().then((body) => {
|
|
88
|
+
setErrorResponseBody(body);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}, [useFormCoreResult.mutationResult]);
|
|
92
|
+
const onKeyUp = (event) => {
|
|
93
|
+
if (submitOnEnter && event.key === 'Enter') {
|
|
94
|
+
form.submit();
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
const onValuesChange = (changeValues) => {
|
|
98
|
+
if (changeValues && warnWhenUnsavedChanges) {
|
|
99
|
+
setWarnWhen(true);
|
|
100
|
+
}
|
|
101
|
+
return changeValues;
|
|
102
|
+
};
|
|
103
|
+
const saveButtonProps = useMemo(() => ({
|
|
104
|
+
loading: formLoading,
|
|
105
|
+
onClick: () => {
|
|
106
|
+
form.submit();
|
|
107
|
+
},
|
|
108
|
+
}), [formLoading, form]);
|
|
109
|
+
const editorProps = useMemo(() => ({
|
|
110
|
+
ref: editor,
|
|
111
|
+
defaultValue: schema && editorOptions?.isGenerateAnnotations
|
|
112
|
+
? generateYamlBySchema(initialValues || {}, schema)
|
|
113
|
+
: yaml.dump(initialValues),
|
|
114
|
+
schema: schema,
|
|
115
|
+
id: useResourceResult.resource?.name || '',
|
|
116
|
+
errorMsgs: editorErrors,
|
|
117
|
+
onValidate(yamlValid, schemaValid) {
|
|
118
|
+
setIsYamlValid(yamlValid);
|
|
119
|
+
setIsSchemaValid(schemaValid);
|
|
120
|
+
if (yamlValid && schemaValid) {
|
|
121
|
+
setEditorErrors([]);
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
onEditorCreate(editor) {
|
|
125
|
+
if (queryResult?.data?.data && !isFoldRef.current) {
|
|
126
|
+
fold(editor);
|
|
127
|
+
isFoldRef.current = true;
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
}), [editorErrors, editorOptions, fold, initialValues, queryResult?.data?.data, schema, useResourceResult.resource?.name]);
|
|
131
|
+
return {
|
|
132
|
+
form: formSF.form,
|
|
133
|
+
formProps: {
|
|
134
|
+
...formSF.formProps,
|
|
135
|
+
onFinish: values => {
|
|
136
|
+
const errors = [
|
|
137
|
+
!isYamlValid ? t('dovetail.yaml_format_wrong') : '',
|
|
138
|
+
!isSchemaValid ? t('dovetail.yaml_value_wrong') : '',
|
|
139
|
+
].filter(error => !!error);
|
|
140
|
+
if (errors.length) {
|
|
141
|
+
setEditorErrors(errors);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
const finalValues = editor.current
|
|
145
|
+
? yaml.load(editor.current?.getEditorValue() || '')
|
|
146
|
+
: values;
|
|
147
|
+
return onFinish(finalValues);
|
|
148
|
+
},
|
|
149
|
+
onKeyUp,
|
|
150
|
+
onValuesChange,
|
|
151
|
+
initialValues,
|
|
152
|
+
},
|
|
153
|
+
saveButtonProps,
|
|
154
|
+
...useFormCoreResult,
|
|
155
|
+
editorProps,
|
|
156
|
+
enableEditor,
|
|
157
|
+
errorResponseBody,
|
|
158
|
+
schema,
|
|
159
|
+
isLoadingSchema,
|
|
160
|
+
loadSchemaError,
|
|
161
|
+
fetchSchema,
|
|
162
|
+
switchEditor() {
|
|
163
|
+
if (enableEditor && editor.current?.getEditorValue()) {
|
|
164
|
+
const value = yaml.load(editor.current?.getEditorValue());
|
|
165
|
+
form?.setFieldsValue(value);
|
|
166
|
+
}
|
|
167
|
+
setEnableEditor(!enableEditor);
|
|
168
|
+
},
|
|
169
|
+
onFinish: async (values) => {
|
|
170
|
+
const finalValues = enableEditor
|
|
171
|
+
? yaml.load(editor.current?.getEditorValue() || '')
|
|
172
|
+
: values ?? formSF.form.getFieldsValue(true);
|
|
173
|
+
return await onFinish(finalValues);
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
};
|
|
177
|
+
export default useEagleForm;
|
|
@@ -1,15 +1,19 @@
|
|
|
1
|
-
import { i18n } from 'i18next';
|
|
1
|
+
import { i18n as I18nType } from 'i18next';
|
|
2
2
|
import { Column } from '../../components/Table';
|
|
3
|
-
import { JobModel, PodModel, ResourceModel } from '../../
|
|
4
|
-
|
|
5
|
-
export declare const
|
|
6
|
-
export declare const
|
|
7
|
-
export declare const
|
|
8
|
-
export declare const
|
|
9
|
-
export declare const
|
|
10
|
-
export declare const ReplicasColumnRenderer: <Model extends WorkloadModel
|
|
11
|
-
export declare const AgeColumnRenderer: <Model extends ResourceModel
|
|
12
|
-
export declare const NodeNameColumnRenderer: <Model extends PodModel>(i18n:
|
|
13
|
-
export declare const RestartCountColumnRenderer: <Model extends PodModel>(i18n:
|
|
14
|
-
export declare const CompletionsCountColumnRenderer: <Model extends JobModel>(i18n:
|
|
15
|
-
export declare const DurationColumnRenderer: <Model extends JobModel>(i18n:
|
|
3
|
+
import { JobModel, PodModel, ResourceModel, WorkloadModel, WorkloadBaseModel, CronJobModel, IngressModel } from '../../models';
|
|
4
|
+
export declare const CommonSorter: (dataIndex: string[]) => (a: unknown, b: unknown) => 0 | 1 | -1;
|
|
5
|
+
export declare const NameColumnRenderer: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(i18n: I18nType, resource?: string) => Column<Model>;
|
|
6
|
+
export declare const NameSpaceColumnRenderer: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(i18n: I18nType) => Column<Model>;
|
|
7
|
+
export declare const StateDisplayColumnRenderer: <Model extends PodModel | WorkloadModel | CronJobModel>(i18n: I18nType) => Column<Model>;
|
|
8
|
+
export declare const WorkloadImageColumnRenderer: <Model extends WorkloadBaseModel>(i18n: I18nType) => Column<Model>;
|
|
9
|
+
export declare const WorkloadRestartsColumnRenderer: <Model extends WorkloadModel>(i18n: I18nType) => Column<Model>;
|
|
10
|
+
export declare const ReplicasColumnRenderer: <Model extends WorkloadModel>(i18n: I18nType) => Column<Model>;
|
|
11
|
+
export declare const AgeColumnRenderer: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(i18n: I18nType) => Column<Model>;
|
|
12
|
+
export declare const NodeNameColumnRenderer: <Model extends PodModel>(i18n: I18nType, options?: Partial<Column<Model>> | undefined) => Column<Model>;
|
|
13
|
+
export declare const RestartCountColumnRenderer: <Model extends PodModel>(i18n: I18nType) => Column<Model>;
|
|
14
|
+
export declare const CompletionsCountColumnRenderer: <Model extends JobModel | CronJobModel>(i18n: I18nType) => Column<Model>;
|
|
15
|
+
export declare const DurationColumnRenderer: <Model extends JobModel | CronJobModel>(i18n: I18nType) => Column<Model>;
|
|
16
|
+
export declare const ServiceTypeColumnRenderer: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(i18n: I18nType) => Column<Model>;
|
|
17
|
+
export declare const PodWorkloadColumnRenderer: <Model extends PodModel>(i18n: I18nType) => Column<Model>;
|
|
18
|
+
export declare const IngressRulesColumnRenderer: <Model extends IngressModel>(i18n: I18nType) => Column<Model>;
|
|
19
|
+
export declare const IngressDefaultBackendColumnRenderer: <Model extends IngressModel>(i18n: I18nType) => Column<Model>;
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useUIKit } from '@cloudtower/eagle';
|
|
3
|
+
import { useGo, useNavigation, useParsed } from '@refinedev/core';
|
|
4
|
+
import { get } from 'lodash';
|
|
5
|
+
import { ResourceLink } from '../../components';
|
|
6
|
+
import { ImageNames } from '../../components/ImageNames';
|
|
7
|
+
import { IngressRulesComponent } from '../../components/IngressRulesComponent';
|
|
8
|
+
import { ReferenceLink } from '../../components/ReferenceLink';
|
|
9
|
+
import { StateTag } from '../../components/StateTag';
|
|
10
|
+
import Time from '../../components/Time';
|
|
11
|
+
import { elapsedTime } from '../../utils/time';
|
|
12
|
+
const NameLink = props => {
|
|
13
|
+
const { name, id, resource } = props;
|
|
14
|
+
const kit = useUIKit();
|
|
15
|
+
const go = useGo();
|
|
16
|
+
const navigation = useNavigation();
|
|
17
|
+
const parsed = useParsed();
|
|
18
|
+
const resourceName = resource || parsed.resource?.name || '';
|
|
19
|
+
return (_jsx(kit.button, { type: "link", onClick: () => {
|
|
20
|
+
go({
|
|
21
|
+
to: navigation.showUrl(resourceName, ''),
|
|
22
|
+
query: {
|
|
23
|
+
id,
|
|
24
|
+
},
|
|
25
|
+
options: {
|
|
26
|
+
keepQuery: true,
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
}, children: name }));
|
|
30
|
+
};
|
|
31
|
+
export const CommonSorter = (dataIndex) => (a, b) => {
|
|
32
|
+
const valA = get(a, dataIndex);
|
|
33
|
+
const valB = get(b, dataIndex);
|
|
34
|
+
if (valA === valB)
|
|
35
|
+
return 0;
|
|
36
|
+
if (valA > valB)
|
|
37
|
+
return 1;
|
|
38
|
+
return -1;
|
|
39
|
+
};
|
|
40
|
+
export const NameColumnRenderer = (i18n, resource = '') => {
|
|
41
|
+
const dataIndex = ['metadata', 'name'];
|
|
42
|
+
return {
|
|
43
|
+
key: 'name',
|
|
44
|
+
display: true,
|
|
45
|
+
dataIndex,
|
|
46
|
+
title: i18n.t('dovetail.name'),
|
|
47
|
+
sortable: true,
|
|
48
|
+
sorter: CommonSorter(dataIndex),
|
|
49
|
+
render: (v, record) => {
|
|
50
|
+
return _jsx(NameLink, { name: v, id: record.id, resource: resource });
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
export const NameSpaceColumnRenderer = (i18n) => {
|
|
55
|
+
const dataIndex = ['metadata', 'namespace'];
|
|
56
|
+
return {
|
|
57
|
+
key: 'namespace',
|
|
58
|
+
display: true,
|
|
59
|
+
dataIndex,
|
|
60
|
+
title: i18n.t('dovetail.namespace'),
|
|
61
|
+
sortable: true,
|
|
62
|
+
sorter: CommonSorter(dataIndex),
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
export const StateDisplayColumnRenderer = (i18n) => {
|
|
66
|
+
const dataIndex = ['stateDisplay'];
|
|
67
|
+
return {
|
|
68
|
+
key: 'stateDisplay',
|
|
69
|
+
display: true,
|
|
70
|
+
dataIndex: dataIndex,
|
|
71
|
+
title: i18n.t('dovetail.state'),
|
|
72
|
+
sortable: true,
|
|
73
|
+
sorter: CommonSorter(dataIndex),
|
|
74
|
+
render: v => _jsx(StateTag, { state: v }),
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
export const WorkloadImageColumnRenderer = (i18n) => {
|
|
78
|
+
const dataIndex = ['imageNames'];
|
|
79
|
+
return {
|
|
80
|
+
key: 'image',
|
|
81
|
+
display: true,
|
|
82
|
+
dataIndex,
|
|
83
|
+
title: i18n.t('dovetail.image'),
|
|
84
|
+
sortable: true,
|
|
85
|
+
sorter: CommonSorter(dataIndex),
|
|
86
|
+
render(value, record) {
|
|
87
|
+
return _jsx(ImageNames, { value: record.imageNames });
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
export const WorkloadRestartsColumnRenderer = (i18n) => {
|
|
92
|
+
const dataIndex = ['restarts'];
|
|
93
|
+
return {
|
|
94
|
+
key: 'restarts',
|
|
95
|
+
display: true,
|
|
96
|
+
dataIndex,
|
|
97
|
+
title: i18n.t('dovetail.restarts'),
|
|
98
|
+
sortable: false,
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
export const ReplicasColumnRenderer = (i18n) => {
|
|
102
|
+
const dataIndex = ['status', 'replicas'];
|
|
103
|
+
return {
|
|
104
|
+
key: 'replicas',
|
|
105
|
+
display: true,
|
|
106
|
+
dataIndex,
|
|
107
|
+
title: i18n.t('dovetail.replicas'),
|
|
108
|
+
sortable: true,
|
|
109
|
+
sorter: CommonSorter(dataIndex),
|
|
110
|
+
render: (_, record) => {
|
|
111
|
+
return (_jsxs("span", { children: [record.readyReplicas, "/", record.replicas] }));
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
export const AgeColumnRenderer = (i18n) => {
|
|
116
|
+
const dataIndex = ['metadata', 'creationTimestamp'];
|
|
117
|
+
return {
|
|
118
|
+
key: 'creationTimestamp',
|
|
119
|
+
display: true,
|
|
120
|
+
dataIndex,
|
|
121
|
+
title: i18n.t('dovetail.created_time'),
|
|
122
|
+
sortable: true,
|
|
123
|
+
sorter: (a, b) => {
|
|
124
|
+
const valA = new Date(get(a, dataIndex));
|
|
125
|
+
const valB = new Date(get(b, dataIndex));
|
|
126
|
+
if (valA === valB)
|
|
127
|
+
return 0;
|
|
128
|
+
if (valA > valB)
|
|
129
|
+
return 1;
|
|
130
|
+
return -1;
|
|
131
|
+
},
|
|
132
|
+
render: (value) => {
|
|
133
|
+
return _jsx(Time, { date: new Date(value) });
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
};
|
|
137
|
+
export const NodeNameColumnRenderer = (i18n, options) => {
|
|
138
|
+
const dataIndex = ['spec', 'nodeName'];
|
|
139
|
+
return {
|
|
140
|
+
key: 'node',
|
|
141
|
+
display: true,
|
|
142
|
+
dataIndex,
|
|
143
|
+
title: i18n.t('dovetail.node_name'),
|
|
144
|
+
sortable: true,
|
|
145
|
+
sorter: CommonSorter(dataIndex),
|
|
146
|
+
...options,
|
|
147
|
+
};
|
|
148
|
+
};
|
|
149
|
+
export const RestartCountColumnRenderer = (i18n) => {
|
|
150
|
+
const dataIndex = ['restartCount'];
|
|
151
|
+
return {
|
|
152
|
+
key: 'restartCount',
|
|
153
|
+
display: true,
|
|
154
|
+
dataIndex,
|
|
155
|
+
title: i18n.t('dovetail.restarts'),
|
|
156
|
+
sortable: true,
|
|
157
|
+
sorter: CommonSorter(dataIndex),
|
|
158
|
+
};
|
|
159
|
+
};
|
|
160
|
+
export const CompletionsCountColumnRenderer = (i18n) => {
|
|
161
|
+
const dataIndex = ['completionsDisplay'];
|
|
162
|
+
return {
|
|
163
|
+
key: 'completions',
|
|
164
|
+
display: true,
|
|
165
|
+
dataIndex,
|
|
166
|
+
title: i18n.t('completions'),
|
|
167
|
+
sortable: true,
|
|
168
|
+
sorter: CommonSorter(dataIndex),
|
|
169
|
+
};
|
|
170
|
+
};
|
|
171
|
+
export const DurationColumnRenderer = (i18n) => {
|
|
172
|
+
const dataIndex = ['duration'];
|
|
173
|
+
return {
|
|
174
|
+
key: 'duration',
|
|
175
|
+
display: true,
|
|
176
|
+
dataIndex,
|
|
177
|
+
title: i18n.t('dovetail.duration'),
|
|
178
|
+
sortable: true,
|
|
179
|
+
sorter: CommonSorter(dataIndex),
|
|
180
|
+
render: v => {
|
|
181
|
+
const i18nMap = {
|
|
182
|
+
sec: i18n.t('dovetail.sec'),
|
|
183
|
+
day: i18n.t('dovetail.day'),
|
|
184
|
+
min: i18n.t('dovetail.min'),
|
|
185
|
+
hr: i18n.t('dovetail.hr'),
|
|
186
|
+
};
|
|
187
|
+
return _jsx("span", { children: elapsedTime(v, i18nMap).label || '-' });
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
};
|
|
191
|
+
export const ServiceTypeColumnRenderer = (i18n) => {
|
|
192
|
+
const dataIndex = ['spec', 'type'];
|
|
193
|
+
return {
|
|
194
|
+
key: 'type',
|
|
195
|
+
title: i18n.t('dovetail.type'),
|
|
196
|
+
display: true,
|
|
197
|
+
dataIndex,
|
|
198
|
+
sortable: true,
|
|
199
|
+
sorter: CommonSorter(dataIndex),
|
|
200
|
+
};
|
|
201
|
+
};
|
|
202
|
+
export const PodWorkloadColumnRenderer = (i18n) => {
|
|
203
|
+
const dataIndex = ['metadata', 'ownerReferences'];
|
|
204
|
+
return {
|
|
205
|
+
key: 'type',
|
|
206
|
+
title: i18n.t('dovetail.workload'),
|
|
207
|
+
display: true,
|
|
208
|
+
dataIndex,
|
|
209
|
+
sortable: true,
|
|
210
|
+
sorter: CommonSorter(dataIndex),
|
|
211
|
+
render(value, record) {
|
|
212
|
+
return value.map(o => (_jsx(ReferenceLink, { ownerReference: o, namespace: record.metadata.namespace || 'default' }, o.name)));
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
};
|
|
216
|
+
export const IngressRulesColumnRenderer = (i18n) => {
|
|
217
|
+
const dataIndex = ['spec', 'rules'];
|
|
218
|
+
return {
|
|
219
|
+
key: 'type',
|
|
220
|
+
title: i18n.t('dovetail.rule'),
|
|
221
|
+
display: true,
|
|
222
|
+
dataIndex,
|
|
223
|
+
sortable: true,
|
|
224
|
+
sorter: CommonSorter(dataIndex),
|
|
225
|
+
render(_, record) {
|
|
226
|
+
return _jsx(IngressRulesComponent, { ingress: record });
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
};
|
|
230
|
+
export const IngressDefaultBackendColumnRenderer = (i18n) => {
|
|
231
|
+
const dataIndex = ['spec', 'defaultBackend'];
|
|
232
|
+
return {
|
|
233
|
+
key: 'defaultBackend',
|
|
234
|
+
display: true,
|
|
235
|
+
dataIndex,
|
|
236
|
+
title: i18n.t('dovetail.default_backend'),
|
|
237
|
+
sortable: true,
|
|
238
|
+
sorter: CommonSorter(['spec', 'defaultBackend']),
|
|
239
|
+
render: (defaultBackend, record) => {
|
|
240
|
+
if (!defaultBackend?.service?.name)
|
|
241
|
+
return _jsx("span", { children: "-" });
|
|
242
|
+
const divider = 'Default > ';
|
|
243
|
+
return (_jsxs("span", { children: [divider, _jsx(ResourceLink, { name: "services", namespace: record.metadata.namespace || 'default', resourceId: defaultBackend.service?.name || '' })] }));
|
|
244
|
+
},
|
|
245
|
+
};
|
|
246
|
+
};
|
|
@@ -1,52 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { Column, TableProps } from '../../components/Table';
|
|
4
|
-
import { ResourceModel } from '../../model';
|
|
5
|
-
import { Resource } from '../../types';
|
|
6
|
-
type Params<Raw extends Resource, Model extends ResourceModel> = {
|
|
7
|
-
useTableParams: Parameters<typeof useTable<Raw>>[0];
|
|
8
|
-
columns: Column<Model>[];
|
|
9
|
-
tableProps?: Partial<TableProps<Model>>;
|
|
10
|
-
formatter: (d: Raw) => Model;
|
|
11
|
-
Dropdown?: React.FC<{
|
|
12
|
-
data: Model;
|
|
13
|
-
}>;
|
|
14
|
-
};
|
|
15
|
-
export declare enum ColumnKeys {
|
|
16
|
-
age = "age",
|
|
17
|
-
name = "name",
|
|
18
|
-
namespace = "namespace",
|
|
19
|
-
phase = "phase",
|
|
20
|
-
replicas = "replicas",
|
|
21
|
-
deploymentImage = "deploymentImage",
|
|
22
|
-
podImage = "podImage"
|
|
23
|
-
}
|
|
24
|
-
export declare const useEagleTable: <Raw extends Resource, Model extends ResourceModel>(params: Params<Raw, Model>) => {
|
|
25
|
-
tableQueryResult: import("@tanstack/query-core").QueryObserverResult<import("@refinedev/core").GetListResponse<Raw>, import("@refinedev/core").HttpError>;
|
|
26
|
-
sorter: import("@refinedev/core").CrudSorting;
|
|
27
|
-
sorters: import("@refinedev/core").CrudSorting;
|
|
28
|
-
setSorter: (sorter: import("@refinedev/core").CrudSorting) => void;
|
|
29
|
-
setSorters: (sorter: import("@refinedev/core").CrudSorting) => void;
|
|
30
|
-
filters: import("@refinedev/core").CrudFilters;
|
|
31
|
-
setFilters: ((filters: import("@refinedev/core").CrudFilters, behavior?: ("replace" | "merge") | undefined) => void) & ((setter: (prevFilters: import("@refinedev/core").CrudFilters) => import("@refinedev/core").CrudFilters) => void);
|
|
32
|
-
createLinkForSyncWithLocation: (params: {
|
|
33
|
-
pagination: {
|
|
34
|
-
current?: number | undefined;
|
|
35
|
-
pageSize?: number | undefined;
|
|
36
|
-
};
|
|
37
|
-
sorter?: import("@refinedev/core").CrudSorting | undefined;
|
|
38
|
-
sorters: import("@refinedev/core").CrudSorting;
|
|
39
|
-
filters: import("@refinedev/core").CrudFilters;
|
|
40
|
-
}) => string;
|
|
41
|
-
current: number;
|
|
42
|
-
setCurrent: (value: React.SetStateAction<number>) => void;
|
|
43
|
-
pageSize: number;
|
|
44
|
-
setPageSize: (value: React.SetStateAction<number>) => void;
|
|
45
|
-
pageCount: number;
|
|
46
|
-
overtime: {
|
|
47
|
-
elapsedTime?: number | undefined;
|
|
48
|
-
};
|
|
49
|
-
tableProps: TableProps<Model>;
|
|
50
|
-
selectedKeys: string[];
|
|
51
|
-
};
|
|
52
|
-
export {};
|
|
1
|
+
export * from './columns';
|
|
2
|
+
export * from './useEagleTable';
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { useTable } from '@refinedev/core';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Column, TableProps } from '../../components/Table';
|
|
4
|
+
import { ResourceModel } from '../../models';
|
|
5
|
+
type Params<Model extends ResourceModel> = {
|
|
6
|
+
useTableParams: Parameters<typeof useTable<Model>>[0];
|
|
7
|
+
columns: Column<Model>[];
|
|
8
|
+
tableProps?: Partial<TableProps<Model>>;
|
|
9
|
+
formatter?: (d: Model) => Model;
|
|
10
|
+
Dropdown?: React.FC<{
|
|
11
|
+
record: Model;
|
|
12
|
+
}>;
|
|
13
|
+
};
|
|
14
|
+
export declare enum ColumnKeys {
|
|
15
|
+
age = "age",
|
|
16
|
+
name = "name",
|
|
17
|
+
namespace = "namespace",
|
|
18
|
+
phase = "phase",
|
|
19
|
+
replicas = "replicas",
|
|
20
|
+
deploymentImage = "deploymentImage",
|
|
21
|
+
podImage = "podImage"
|
|
22
|
+
}
|
|
23
|
+
export declare const useEagleTable: <Model extends ResourceModel<import("k8s-api-provider").Unstructured>>(params: Params<Model>) => {
|
|
24
|
+
tableQueryResult: import("@tanstack/query-core").QueryObserverResult<import("@refinedev/core").GetListResponse<Model>, import("@refinedev/core").HttpError>;
|
|
25
|
+
sorter: import("@refinedev/core").CrudSorting;
|
|
26
|
+
sorters: import("@refinedev/core").CrudSorting;
|
|
27
|
+
setSorter: (sorter: import("@refinedev/core").CrudSorting) => void;
|
|
28
|
+
setSorters: (sorter: import("@refinedev/core").CrudSorting) => void;
|
|
29
|
+
filters: import("@refinedev/core").CrudFilters;
|
|
30
|
+
setFilters: ((filters: import("@refinedev/core").CrudFilters, behavior?: ("replace" | "merge") | undefined) => void) & ((setter: (prevFilters: import("@refinedev/core").CrudFilters) => import("@refinedev/core").CrudFilters) => void);
|
|
31
|
+
createLinkForSyncWithLocation: (params: {
|
|
32
|
+
pagination: {
|
|
33
|
+
current?: number | undefined;
|
|
34
|
+
pageSize?: number | undefined;
|
|
35
|
+
};
|
|
36
|
+
sorter?: import("@refinedev/core").CrudSorting | undefined;
|
|
37
|
+
sorters: import("@refinedev/core").CrudSorting;
|
|
38
|
+
filters: import("@refinedev/core").CrudFilters;
|
|
39
|
+
}) => string;
|
|
40
|
+
current: number;
|
|
41
|
+
setCurrent: (value: React.SetStateAction<number>) => void;
|
|
42
|
+
pageSize: number;
|
|
43
|
+
setPageSize: (value: React.SetStateAction<number>) => void;
|
|
44
|
+
pageCount: number;
|
|
45
|
+
overtime: {
|
|
46
|
+
elapsedTime?: number | undefined;
|
|
47
|
+
};
|
|
48
|
+
tableProps: TableProps<Model>;
|
|
49
|
+
selectedKeys: string[];
|
|
50
|
+
};
|
|
51
|
+
export {};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { useTable, useResource } from '@refinedev/core';
|
|
2
|
+
import { merge } from 'lodash-es';
|
|
3
|
+
import { useCallback, useMemo, useState } from 'react';
|
|
4
|
+
import K8sDropdown from '../../components/K8sDropdown';
|
|
5
|
+
import { useNamespacesFilter, ALL_NS } from '../../components/NamespacesFilter';
|
|
6
|
+
export var ColumnKeys;
|
|
7
|
+
(function (ColumnKeys) {
|
|
8
|
+
ColumnKeys["age"] = "age";
|
|
9
|
+
ColumnKeys["name"] = "name";
|
|
10
|
+
ColumnKeys["namespace"] = "namespace";
|
|
11
|
+
ColumnKeys["phase"] = "phase";
|
|
12
|
+
ColumnKeys["replicas"] = "replicas";
|
|
13
|
+
ColumnKeys["deploymentImage"] = "deploymentImage";
|
|
14
|
+
ColumnKeys["podImage"] = "podImage";
|
|
15
|
+
})(ColumnKeys || (ColumnKeys = {}));
|
|
16
|
+
export const useEagleTable = (params) => {
|
|
17
|
+
const { columns, tableProps, formatter, Dropdown = K8sDropdown } = params;
|
|
18
|
+
const [selectedKeys, setSelectedKeys] = useState([]);
|
|
19
|
+
const [currentPage, setCurrentPage] = useState(tableProps?.currentPage || 1);
|
|
20
|
+
const { resource } = useResource();
|
|
21
|
+
const { value: nsFilter } = useNamespacesFilter();
|
|
22
|
+
const useTableParams = useMemo(() => {
|
|
23
|
+
// TODO: check whether resource can be namespaced
|
|
24
|
+
const mergedParams = merge(params.useTableParams, {
|
|
25
|
+
pagination: {
|
|
26
|
+
mode: 'off',
|
|
27
|
+
},
|
|
28
|
+
filters: {
|
|
29
|
+
permanent: [
|
|
30
|
+
{
|
|
31
|
+
field: 'metadata.namespace',
|
|
32
|
+
operator: 'eq',
|
|
33
|
+
value: nsFilter === ALL_NS ? null : nsFilter,
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
return mergedParams;
|
|
39
|
+
}, [params.useTableParams, nsFilter]);
|
|
40
|
+
const table = useTable(useTableParams);
|
|
41
|
+
const onPageChange = useCallback((page) => {
|
|
42
|
+
setCurrentPage(page);
|
|
43
|
+
}, [setCurrentPage]);
|
|
44
|
+
const data = table.tableQueryResult.data?.data;
|
|
45
|
+
const finalDataSource = formatter ? data?.map(formatter) : data;
|
|
46
|
+
const finalProps = {
|
|
47
|
+
tableKey: resource?.name || 'table',
|
|
48
|
+
loading: table.tableQueryResult.isLoading,
|
|
49
|
+
data: finalDataSource || [],
|
|
50
|
+
columns,
|
|
51
|
+
refetch: () => null,
|
|
52
|
+
error: false,
|
|
53
|
+
rowKey: 'id',
|
|
54
|
+
currentPage,
|
|
55
|
+
currentSize: tableProps?.currentSize || 5,
|
|
56
|
+
onPageChange: onPageChange,
|
|
57
|
+
onSelect: keys => {
|
|
58
|
+
setSelectedKeys(keys);
|
|
59
|
+
},
|
|
60
|
+
RowMenu: Dropdown
|
|
61
|
+
};
|
|
62
|
+
return { tableProps: finalProps, selectedKeys, ...table };
|
|
63
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { useGo, useNavigation, useParsed } from '@refinedev/core';
|
|
2
|
+
import { useCallback } from 'react';
|
|
3
|
+
export function useEdit() {
|
|
4
|
+
const { resource } = useParsed();
|
|
5
|
+
const go = useGo();
|
|
6
|
+
const navigation = useNavigation();
|
|
7
|
+
const edit = useCallback((id) => {
|
|
8
|
+
go({
|
|
9
|
+
to: navigation.editUrl(resource?.name || '', id),
|
|
10
|
+
query: {
|
|
11
|
+
id,
|
|
12
|
+
},
|
|
13
|
+
options: {
|
|
14
|
+
keepQuery: true,
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
}, [go, resource?.name]);
|
|
18
|
+
return { edit };
|
|
19
|
+
}
|