@dovetail-v2/refine 0.0.43 → 0.0.44
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-b2da37e8.js → MonacoYamlDiffEditor-71c3ccc4.js} +1 -1
- package/dist/{index-64df5871.js → index-72d47bc9.js} +28 -17
- package/dist/refine.js +1 -1
- package/dist/refine.umd.cjs +27 -16
- package/lib/src/App.js +91 -0
- 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.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.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.js +47 -0
- package/lib/src/components/ErrorContent/index.js +36 -0
- package/lib/src/components/EventsTable/EventsTable.js +59 -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/RefineFormContent.d.ts +1 -1
- package/lib/src/components/Form/index.js +4 -0
- package/lib/src/components/Form/type.d.ts +2 -1
- package/lib/src/components/Form/useRefineForm.d.ts +2 -2
- package/lib/src/components/Form/widget.js +1 -0
- package/lib/src/components/FormErrorAlert/index.js +8 -0
- package/lib/src/components/FormLayout/index.js +21 -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.js +11 -0
- package/lib/src/components/IngressRulesTable/IngressRulesTable.js +51 -0
- package/lib/src/components/IngressRulesTable/index.js +1 -0
- 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.js +50 -0
- package/lib/src/components/Layout/index.js +39 -0
- 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 +1 -2
- package/lib/src/components/NetworkPolicyRulesTable/NetworkPolicyRulesTable.js +77 -0
- package/lib/src/components/NetworkPolicyRulesTable/index.js +1 -0
- 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.js +136 -0
- package/lib/src/components/ReferenceLink/index.js +17 -0
- package/lib/src/components/RefineForm/RefineFormContent.d.ts +10 -0
- package/lib/src/components/RefineForm/RefineFormModal.d.ts +8 -0
- package/lib/src/components/RefineForm/RefineFormPage.d.ts +7 -0
- package/lib/src/components/RefineForm/index.d.ts +3 -0
- package/lib/src/components/RefineForm/type.d.ts +20 -0
- package/lib/src/components/RefineForm/useRefineForm.d.ts +10 -0
- package/lib/src/components/ResourceCRUD/ResourceCRUD.js +15 -0
- package/lib/src/components/ResourceCRUD/create/index.js +13 -0
- package/lib/src/components/ResourceCRUD/index.js +4 -0
- package/lib/src/components/ResourceCRUD/list/index.js +19 -0
- package/lib/src/components/ResourceCRUD/show/index.js +6 -0
- package/lib/src/components/ResourceLink/index.js +21 -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.js +157 -0
- package/lib/src/components/ShowContent/fields.js +157 -0
- package/lib/src/components/ShowContent/index.js +2 -0
- 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.js +69 -0
- package/lib/src/components/Tags/index.js +22 -0
- package/lib/src/components/Time/index.js +14 -0
- package/lib/src/components/WorkloadDropdown/index.js +24 -0
- package/lib/src/components/WorkloadPodsTable/WorkloadPodsTable.js +39 -0
- package/lib/src/components/WorkloadPodsTable/index.js +1 -0
- package/lib/src/components/WorkloadReplicas/index.js +50 -0
- package/lib/src/components/YamlEditor/MonacoYamlDiffEditor.js +34 -0
- package/lib/src/components/YamlEditor/MonacoYamlEditor.js +149 -0
- 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 +0 -4
- package/lib/src/components/YamlForm/index.js +61 -0
- package/lib/src/components/index.js +38 -0
- package/lib/src/constants/index.js +2 -0
- package/lib/src/constants/k8s.js +203 -0
- package/lib/src/constants/state.js +15 -0
- package/lib/src/contexts/component.js +3 -0
- package/lib/src/contexts/configs.js +3 -0
- package/lib/src/contexts/global-store.js +3 -0
- package/lib/src/contexts/index.js +3 -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.js +10 -0
- package/lib/src/hooks/useEagleForm.d.ts +1 -2
- package/lib/src/hooks/useEagleForm.js +177 -0
- package/lib/src/hooks/useEagleTable/columns.js +246 -0
- package/lib/src/hooks/useEagleTable/index.js +2 -0
- package/lib/src/hooks/useEagleTable/useEagleTable.js +63 -0
- package/lib/src/hooks/useEdit.js +19 -0
- package/lib/src/hooks/useGlobalStore.js +5 -0
- package/lib/src/hooks/useK8sYamlEditor.js +37 -0
- package/lib/src/hooks/useOpenForm.js +43 -0
- package/lib/src/hooks/useSchema.js +37 -0
- package/lib/src/hooks/useSubmitForm.js +42 -0
- package/lib/src/i18n.js +19 -0
- package/lib/src/index.js +13 -0
- package/lib/src/locales/en-US/dovetail.json +18 -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.js +4 -0
- package/lib/src/main.js +12 -0
- package/lib/src/models/cronjob-model.js +32 -0
- package/lib/src/models/daemonset-model.js +17 -0
- package/lib/src/models/deployment-model.js +17 -0
- package/lib/src/models/event-model.js +11 -0
- package/lib/src/models/index.js +14 -0
- package/lib/src/models/ingress-model.js +24 -0
- package/lib/src/models/job-model.js +56 -0
- package/lib/src/models/network-policy-model.js +10 -0
- package/lib/src/models/pod-metrics-model.js +34 -0
- package/lib/src/models/pod-model.js +78 -0
- package/lib/src/models/resource-model.js +34 -0
- package/lib/src/models/server-instance-model.d.ts +10 -0
- package/lib/src/models/service-model.js +17 -0
- package/lib/src/models/statefulset-model.js +17 -0
- package/lib/src/models/types/index.js +1 -0
- package/lib/src/models/types/metric.js +1 -0
- package/lib/src/models/workload-base-model.js +22 -0
- package/lib/src/models/workload-model.js +51 -0
- 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.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.js +26 -0
- package/lib/src/pages/jobs/index.js +34 -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.js +15 -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.js +3 -0
- package/lib/src/plugins/model-plugin.js +46 -0
- package/lib/src/plugins/relation-plugin.js +81 -0
- package/lib/src/plugins/type.js +1 -0
- package/lib/src/providers/index.js +1 -0
- 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 +2 -1
- 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.js +53 -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.js +12 -0
- package/lib/src/utils/openapi.js +33 -0
- package/lib/src/utils/schema.js +117 -0
- package/lib/src/utils/selector.js +12 -0
- package/lib/src/utils/string.js +6 -0
- package/lib/src/utils/time.js +46 -0
- package/lib/src/utils/unit.js +69 -0
- package/lib/src/utils/yaml.js +44 -0
- package/lib/vite.config.js +60 -0
- package/package.json +1 -1
- package/lib/src/components/ModalContextProvider/index.d.ts +0 -12
- package/lib/src/hooks/useModal.d.ts +0 -0
- package/lib/src/model/cronjob-model.d.ts +0 -9
- package/lib/src/model/index.d.ts +0 -6
- package/lib/src/model/job-model.d.ts +0 -10
- package/lib/src/model/pod-metrics-model.d.ts +0 -7
- package/lib/src/model/pod-model.d.ts +0 -15
- package/lib/src/model/resource-model.d.ts +0 -17
- package/lib/src/model/workload-model.d.ts +0 -17
- package/lib/src/types/metric.d.ts +0 -25
|
@@ -21791,13 +21791,13 @@ const RefineFormContent = (props) => {
|
|
|
21791
21791
|
meta: {}
|
|
21792
21792
|
});
|
|
21793
21793
|
}
|
|
21794
|
-
if (action === "edit" && c2.
|
|
21794
|
+
if (action === "edit" && c2.disabledWhenEdit) {
|
|
21795
21795
|
ele = /* @__PURE__ */ jsxRuntimeExports.jsx("div", {
|
|
21796
21796
|
children: value2
|
|
21797
21797
|
});
|
|
21798
21798
|
}
|
|
21799
21799
|
if (c2 == null ? void 0 : c2.render) {
|
|
21800
|
-
ele = c2.render(value2, onChange, formValue, onBlur);
|
|
21800
|
+
ele = c2.render(value2, onChange, formValue, onBlur, action);
|
|
21801
21801
|
}
|
|
21802
21802
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(Form.Item, {
|
|
21803
21803
|
label: c2.label,
|
|
@@ -22490,10 +22490,11 @@ const useRefineForm = (props) => {
|
|
|
22490
22490
|
const response = (_a2 = result.refineCore.mutationResult.error) == null ? void 0 : _a2.response;
|
|
22491
22491
|
if (response && !(response == null ? void 0 : response.bodyUsed)) {
|
|
22492
22492
|
(_b = response.json) == null ? void 0 : _b.call(response).then((body) => {
|
|
22493
|
-
|
|
22493
|
+
var _a3, _b2;
|
|
22494
|
+
setResponseErrorMsg(((_b2 = (_a3 = config.formConfig) == null ? void 0 : _a3.formatError) == null ? void 0 : _b2.call(_a3, body)) || body.message);
|
|
22494
22495
|
});
|
|
22495
22496
|
}
|
|
22496
|
-
}, [(_a = result.refineCore.mutationResult.error) == null ? void 0 : _a.response]);
|
|
22497
|
+
}, [config.formConfig, (_a = result.refineCore.mutationResult.error) == null ? void 0 : _a.response]);
|
|
22497
22498
|
return { formResult: result, responseErrorMsg };
|
|
22498
22499
|
};
|
|
22499
22500
|
const index_12sfrn = "";
|
|
@@ -22504,7 +22505,7 @@ const Separator = () => {
|
|
|
22504
22505
|
});
|
|
22505
22506
|
};
|
|
22506
22507
|
const MonacoYamlEditor = React__default.lazy(() => Promise.resolve().then(() => MonacoYamlEditor$2));
|
|
22507
|
-
const MonacoYamlDiffEditor = React__default.lazy(() => import("./MonacoYamlDiffEditor-
|
|
22508
|
+
const MonacoYamlDiffEditor = React__default.lazy(() => import("./MonacoYamlDiffEditor-71c3ccc4.js"));
|
|
22508
22509
|
const YamlEditorComponent = forwardRef(
|
|
22509
22510
|
function YamlEditorComponent2(props, ref) {
|
|
22510
22511
|
const {
|
|
@@ -23181,7 +23182,7 @@ const FullscreenModalStyle = "f1nltbcu";
|
|
|
23181
23182
|
const FormDescStyle = "f1qgcca6";
|
|
23182
23183
|
const ErrorStyle = "e1tl3wq2";
|
|
23183
23184
|
function FormModal(props) {
|
|
23184
|
-
var _a, _b, _c, _d, _e;
|
|
23185
|
+
var _a, _b, _c, _d, _e, _f;
|
|
23185
23186
|
const {
|
|
23186
23187
|
resource: resourceFromProps,
|
|
23187
23188
|
id,
|
|
@@ -23197,10 +23198,8 @@ function FormModal(props) {
|
|
|
23197
23198
|
const [yamlSaveButtonProps, setYamlSaveButtonProps] = useState({});
|
|
23198
23199
|
const [isError, setIsError] = useState(false);
|
|
23199
23200
|
const config = configs[resourceFromProps || (resource == null ? void 0 : resource.name) || ""];
|
|
23200
|
-
const title = i18n2.t(id ? "dovetail.edit_resource" : "dovetail.create_resource", {
|
|
23201
|
-
resource: config == null ? void 0 : config.kind
|
|
23202
|
-
});
|
|
23203
23201
|
const okText = i18n2.t(id ? "dovetail.save" : "dovetail.create");
|
|
23202
|
+
const action = id ? "edit" : "create";
|
|
23204
23203
|
const yamlFormProps = useMemo(() => {
|
|
23205
23204
|
var _a2, _b2, _c2;
|
|
23206
23205
|
return {
|
|
@@ -23209,7 +23208,7 @@ function FormModal(props) {
|
|
|
23209
23208
|
transformApplyValues: (_b2 = config.formConfig) == null ? void 0 : _b2.transformApplyValues,
|
|
23210
23209
|
initialValues: ((_c2 = props.formProps) == null ? void 0 : _c2.initialValues) || (config == null ? void 0 : config.initValue),
|
|
23211
23210
|
id,
|
|
23212
|
-
action
|
|
23211
|
+
action,
|
|
23213
23212
|
isShowLayout: false,
|
|
23214
23213
|
useFormProps: {
|
|
23215
23214
|
redirect: false
|
|
@@ -23220,7 +23219,7 @@ function FormModal(props) {
|
|
|
23220
23219
|
},
|
|
23221
23220
|
onFinish: popModal
|
|
23222
23221
|
};
|
|
23223
|
-
}, [props.formProps,
|
|
23222
|
+
}, [props.formProps, (_a = config.formConfig) == null ? void 0 : _a.transformInitValues, (_b = config.formConfig) == null ? void 0 : _b.transformApplyValues, config == null ? void 0 : config.initValue, id, action]);
|
|
23224
23223
|
const refineFormResult = useRefineForm({
|
|
23225
23224
|
config,
|
|
23226
23225
|
id,
|
|
@@ -23229,10 +23228,10 @@ function FormModal(props) {
|
|
|
23229
23228
|
popModal();
|
|
23230
23229
|
},
|
|
23231
23230
|
redirect: false,
|
|
23232
|
-
...(
|
|
23231
|
+
...(_c = config.formConfig) == null ? void 0 : _c.refineCoreProps
|
|
23233
23232
|
}
|
|
23234
23233
|
});
|
|
23235
|
-
const isYamlForm = !((
|
|
23234
|
+
const isYamlForm = !((_d = config.formConfig) == null ? void 0 : _d.fields);
|
|
23236
23235
|
const formEle = (() => {
|
|
23237
23236
|
if (renderForm) {
|
|
23238
23237
|
return renderForm(yamlFormProps);
|
|
@@ -23261,10 +23260,21 @@ function FormModal(props) {
|
|
|
23261
23260
|
return i18n2.t(id ? "dovetail.save_failed" : "dovetail.create_failed");
|
|
23262
23261
|
}
|
|
23263
23262
|
})();
|
|
23263
|
+
const title = useMemo(() => {
|
|
23264
|
+
var _a2, _b2, _c2, _d2;
|
|
23265
|
+
if (typeof ((_a2 = config.formConfig) == null ? void 0 : _a2.formTitle) === "string")
|
|
23266
|
+
return (_b2 = config.formConfig) == null ? void 0 : _b2.formTitle;
|
|
23267
|
+
if (typeof ((_c2 = config.formConfig) == null ? void 0 : _c2.formTitle) === "function") {
|
|
23268
|
+
return (_d2 = config.formConfig) == null ? void 0 : _d2.formTitle(action);
|
|
23269
|
+
}
|
|
23270
|
+
return i18n2.t(id ? "dovetail.edit_resource" : "dovetail.create_resource", {
|
|
23271
|
+
resource: config == null ? void 0 : config.kind
|
|
23272
|
+
});
|
|
23273
|
+
}, [action, config.formConfig, config == null ? void 0 : config.kind, i18n2, id]);
|
|
23264
23274
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(Modal, {
|
|
23265
23275
|
className: FullscreenModalStyle,
|
|
23266
23276
|
width: "calc(100vw - 16px)",
|
|
23267
|
-
title
|
|
23277
|
+
title,
|
|
23268
23278
|
error: errorText ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
|
|
23269
23279
|
className: ErrorStyle,
|
|
23270
23280
|
children: [/* @__PURE__ */ jsxRuntimeExports.jsx(ExclamationErrorCircleFill16RedIcon, {}), " ", errorText]
|
|
@@ -23276,9 +23286,9 @@ function FormModal(props) {
|
|
|
23276
23286
|
onCancel,
|
|
23277
23287
|
destroyOnClose: true,
|
|
23278
23288
|
fullscreen: true,
|
|
23279
|
-
children: [((
|
|
23289
|
+
children: [((_e = config.formConfig) == null ? void 0 : _e.formDesc) ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", {
|
|
23280
23290
|
className: FormDescStyle,
|
|
23281
|
-
children: (
|
|
23291
|
+
children: (_f = config.formConfig) == null ? void 0 : _f.formDesc
|
|
23282
23292
|
}) : void 0, formEle]
|
|
23283
23293
|
});
|
|
23284
23294
|
}
|
|
@@ -23316,7 +23326,8 @@ const RefineFormPage = (props) => {
|
|
|
23316
23326
|
className: "c1pvtlkp",
|
|
23317
23327
|
children: [/* @__PURE__ */ jsxRuntimeExports.jsx(RefineFormContent, {
|
|
23318
23328
|
config,
|
|
23319
|
-
formResult
|
|
23329
|
+
formResult,
|
|
23330
|
+
action
|
|
23320
23331
|
}), ";", /* @__PURE__ */ jsxRuntimeExports.jsx(Button, {
|
|
23321
23332
|
...saveButtonProps,
|
|
23322
23333
|
onClick,
|
package/dist/refine.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { b6, bK, A, az, aB, aj, bm, aJ, G, bA, bo, at, w, C, g, bO, am, aN, Y, bQ, a0, a7, bZ, ab, bp, bn, c0, ap, aT, t, ah, aY, b$, bL, b0, D, aG, b2, b_, aH, ax, b9, bN, bP, by, ak, a1, p, o, bR, I, aQ, aw, q, bq, bT, ao, aP, ac, ad, T, ae, aA, ai, aZ, b1, U, M, bz, b5, N, H, b, ay, O, b8, aV, aU, bS, bk, e, bs, V, P, aL, s, Z, bj, aI, bX, bW, aE, aR, n, an, aK, v, aS, aF, c4, bM, b3, ba, bb, al, R, $, a5, a4, b4, a2, bY, a3, a8, f, bF, bI, bE, bD, bG, bH, bB, bt, bw, bx, bv, bu, br, bc, aq, aO, af, k, bf, i, aC, c3, m, bg, aD, l, av, aM, h, c2, as, au, aX, aW, ar, S, a$, a_, c1, bC, bl, bh, bi, X, bV, _, W, bU, a6, aa, a9, c, bJ, ag, bd, x, J, d, Q, L, K, r, a, z, y, B, E, b7, F, be, u } from "./index-
|
|
1
|
+
import { b6, bK, A, az, aB, aj, bm, aJ, G, bA, bo, at, w, C, g, bO, am, aN, Y, bQ, a0, a7, bZ, ab, bp, bn, c0, ap, aT, t, ah, aY, b$, bL, b0, D, aG, b2, b_, aH, ax, b9, bN, bP, by, ak, a1, p, o, bR, I, aQ, aw, q, bq, bT, ao, aP, ac, ad, T, ae, aA, ai, aZ, b1, U, M, bz, b5, N, H, b, ay, O, b8, aV, aU, bS, bk, e, bs, V, P, aL, s, Z, bj, aI, bX, bW, aE, aR, n, an, aK, v, aS, aF, c4, bM, b3, ba, bb, al, R, $, a5, a4, b4, a2, bY, a3, a8, f, bF, bI, bE, bD, bG, bH, bB, bt, bw, bx, bv, bu, br, bc, aq, aO, af, k, bf, i, aC, c3, m, bg, aD, l, av, aM, h, c2, as, au, aX, aW, ar, S, a$, a_, c1, bC, bl, bh, bi, X, bV, _, W, bU, a6, aa, a9, c, bJ, ag, bd, x, J, d, Q, L, K, r, a, z, y, B, E, b7, F, be, u } from "./index-72d47bc9.js";
|
|
2
2
|
import "@cloudtower/eagle";
|
|
3
3
|
import "@refinedev/core";
|
|
4
4
|
import "@cloudtower/icons-react";
|
package/dist/refine.umd.cjs
CHANGED
|
@@ -21797,13 +21797,13 @@ var __publicField = (obj, key, value) => {
|
|
|
21797
21797
|
meta: {}
|
|
21798
21798
|
});
|
|
21799
21799
|
}
|
|
21800
|
-
if (action === "edit" && c2.
|
|
21800
|
+
if (action === "edit" && c2.disabledWhenEdit) {
|
|
21801
21801
|
ele = /* @__PURE__ */ jsxRuntimeExports.jsx("div", {
|
|
21802
21802
|
children: value2
|
|
21803
21803
|
});
|
|
21804
21804
|
}
|
|
21805
21805
|
if (c2 == null ? void 0 : c2.render) {
|
|
21806
|
-
ele = c2.render(value2, onChange, formValue, onBlur);
|
|
21806
|
+
ele = c2.render(value2, onChange, formValue, onBlur, action);
|
|
21807
21807
|
}
|
|
21808
21808
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(eagle.Form.Item, {
|
|
21809
21809
|
label: c2.label,
|
|
@@ -22496,10 +22496,11 @@ var __publicField = (obj, key, value) => {
|
|
|
22496
22496
|
const response = (_a2 = result.refineCore.mutationResult.error) == null ? void 0 : _a2.response;
|
|
22497
22497
|
if (response && !(response == null ? void 0 : response.bodyUsed)) {
|
|
22498
22498
|
(_b = response.json) == null ? void 0 : _b.call(response).then((body) => {
|
|
22499
|
-
|
|
22499
|
+
var _a3, _b2;
|
|
22500
|
+
setResponseErrorMsg(((_b2 = (_a3 = config.formConfig) == null ? void 0 : _a3.formatError) == null ? void 0 : _b2.call(_a3, body)) || body.message);
|
|
22500
22501
|
});
|
|
22501
22502
|
}
|
|
22502
|
-
}, [(_a = result.refineCore.mutationResult.error) == null ? void 0 : _a.response]);
|
|
22503
|
+
}, [config.formConfig, (_a = result.refineCore.mutationResult.error) == null ? void 0 : _a.response]);
|
|
22503
22504
|
return { formResult: result, responseErrorMsg };
|
|
22504
22505
|
};
|
|
22505
22506
|
const index_12sfrn = "";
|
|
@@ -23187,7 +23188,7 @@ var __publicField = (obj, key, value) => {
|
|
|
23187
23188
|
const FormDescStyle = "f1qgcca6";
|
|
23188
23189
|
const ErrorStyle = "e1tl3wq2";
|
|
23189
23190
|
function FormModal(props) {
|
|
23190
|
-
var _a, _b, _c, _d, _e;
|
|
23191
|
+
var _a, _b, _c, _d, _e, _f;
|
|
23191
23192
|
const {
|
|
23192
23193
|
resource: resourceFromProps,
|
|
23193
23194
|
id,
|
|
@@ -23203,10 +23204,8 @@ var __publicField = (obj, key, value) => {
|
|
|
23203
23204
|
const [yamlSaveButtonProps, setYamlSaveButtonProps] = React.useState({});
|
|
23204
23205
|
const [isError, setIsError] = React.useState(false);
|
|
23205
23206
|
const config = configs[resourceFromProps || (resource == null ? void 0 : resource.name) || ""];
|
|
23206
|
-
const title = i18n2.t(id ? "dovetail.edit_resource" : "dovetail.create_resource", {
|
|
23207
|
-
resource: config == null ? void 0 : config.kind
|
|
23208
|
-
});
|
|
23209
23207
|
const okText = i18n2.t(id ? "dovetail.save" : "dovetail.create");
|
|
23208
|
+
const action = id ? "edit" : "create";
|
|
23210
23209
|
const yamlFormProps = React.useMemo(() => {
|
|
23211
23210
|
var _a2, _b2, _c2;
|
|
23212
23211
|
return {
|
|
@@ -23215,7 +23214,7 @@ var __publicField = (obj, key, value) => {
|
|
|
23215
23214
|
transformApplyValues: (_b2 = config.formConfig) == null ? void 0 : _b2.transformApplyValues,
|
|
23216
23215
|
initialValues: ((_c2 = props.formProps) == null ? void 0 : _c2.initialValues) || (config == null ? void 0 : config.initValue),
|
|
23217
23216
|
id,
|
|
23218
|
-
action
|
|
23217
|
+
action,
|
|
23219
23218
|
isShowLayout: false,
|
|
23220
23219
|
useFormProps: {
|
|
23221
23220
|
redirect: false
|
|
@@ -23226,7 +23225,7 @@ var __publicField = (obj, key, value) => {
|
|
|
23226
23225
|
},
|
|
23227
23226
|
onFinish: eagle.popModal
|
|
23228
23227
|
};
|
|
23229
|
-
}, [props.formProps,
|
|
23228
|
+
}, [props.formProps, (_a = config.formConfig) == null ? void 0 : _a.transformInitValues, (_b = config.formConfig) == null ? void 0 : _b.transformApplyValues, config == null ? void 0 : config.initValue, id, action]);
|
|
23230
23229
|
const refineFormResult = useRefineForm({
|
|
23231
23230
|
config,
|
|
23232
23231
|
id,
|
|
@@ -23235,10 +23234,10 @@ var __publicField = (obj, key, value) => {
|
|
|
23235
23234
|
eagle.popModal();
|
|
23236
23235
|
},
|
|
23237
23236
|
redirect: false,
|
|
23238
|
-
...(
|
|
23237
|
+
...(_c = config.formConfig) == null ? void 0 : _c.refineCoreProps
|
|
23239
23238
|
}
|
|
23240
23239
|
});
|
|
23241
|
-
const isYamlForm = !((
|
|
23240
|
+
const isYamlForm = !((_d = config.formConfig) == null ? void 0 : _d.fields);
|
|
23242
23241
|
const formEle = (() => {
|
|
23243
23242
|
if (renderForm) {
|
|
23244
23243
|
return renderForm(yamlFormProps);
|
|
@@ -23267,10 +23266,21 @@ var __publicField = (obj, key, value) => {
|
|
|
23267
23266
|
return i18n2.t(id ? "dovetail.save_failed" : "dovetail.create_failed");
|
|
23268
23267
|
}
|
|
23269
23268
|
})();
|
|
23269
|
+
const title = React.useMemo(() => {
|
|
23270
|
+
var _a2, _b2, _c2, _d2;
|
|
23271
|
+
if (typeof ((_a2 = config.formConfig) == null ? void 0 : _a2.formTitle) === "string")
|
|
23272
|
+
return (_b2 = config.formConfig) == null ? void 0 : _b2.formTitle;
|
|
23273
|
+
if (typeof ((_c2 = config.formConfig) == null ? void 0 : _c2.formTitle) === "function") {
|
|
23274
|
+
return (_d2 = config.formConfig) == null ? void 0 : _d2.formTitle(action);
|
|
23275
|
+
}
|
|
23276
|
+
return i18n2.t(id ? "dovetail.edit_resource" : "dovetail.create_resource", {
|
|
23277
|
+
resource: config == null ? void 0 : config.kind
|
|
23278
|
+
});
|
|
23279
|
+
}, [action, config.formConfig, config == null ? void 0 : config.kind, i18n2, id]);
|
|
23270
23280
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(eagle.Modal, {
|
|
23271
23281
|
className: FullscreenModalStyle,
|
|
23272
23282
|
width: "calc(100vw - 16px)",
|
|
23273
|
-
title
|
|
23283
|
+
title,
|
|
23274
23284
|
error: errorText ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
|
|
23275
23285
|
className: ErrorStyle,
|
|
23276
23286
|
children: [/* @__PURE__ */ jsxRuntimeExports.jsx(iconsReact.ExclamationErrorCircleFill16RedIcon, {}), " ", errorText]
|
|
@@ -23282,9 +23292,9 @@ var __publicField = (obj, key, value) => {
|
|
|
23282
23292
|
onCancel,
|
|
23283
23293
|
destroyOnClose: true,
|
|
23284
23294
|
fullscreen: true,
|
|
23285
|
-
children: [((
|
|
23295
|
+
children: [((_e = config.formConfig) == null ? void 0 : _e.formDesc) ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", {
|
|
23286
23296
|
className: FormDescStyle,
|
|
23287
|
-
children: (
|
|
23297
|
+
children: (_f = config.formConfig) == null ? void 0 : _f.formDesc
|
|
23288
23298
|
}) : void 0, formEle]
|
|
23289
23299
|
});
|
|
23290
23300
|
}
|
|
@@ -23322,7 +23332,8 @@ var __publicField = (obj, key, value) => {
|
|
|
23322
23332
|
className: "c1pvtlkp",
|
|
23323
23333
|
children: [/* @__PURE__ */ jsxRuntimeExports.jsx(RefineFormContent, {
|
|
23324
23334
|
config,
|
|
23325
|
-
formResult
|
|
23335
|
+
formResult,
|
|
23336
|
+
action
|
|
23326
23337
|
}), ";", /* @__PURE__ */ jsxRuntimeExports.jsx(eagle.Button, {
|
|
23327
23338
|
...saveButtonProps,
|
|
23328
23339
|
onClick,
|
package/lib/src/App.js
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
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;
|
|
@@ -0,0 +1,45 @@
|
|
|
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
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
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
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ConditionsTable';
|
|
@@ -0,0 +1,10 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
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
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
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
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
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
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
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
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './DrawerShow';
|
|
@@ -0,0 +1,13 @@
|
|
|
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
|
+
};
|