@dovetail-v2/refine 0.0.48 → 0.0.50
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-3fa57025.js → MonacoYamlDiffEditor-2ec906d2.js} +1 -1
- package/dist/{index-8a299a91.js → index-e72498e4.js} +21 -11
- package/dist/refine.js +1 -1
- package/dist/refine.umd.cjs +20 -10
- 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/index.js +4 -0
- 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.d.ts +1 -1
- 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.d.ts +2 -1
- 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.d.ts +2 -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.d.ts +1 -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 +1 -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.d.ts +1 -1
- 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.d.ts +1 -1
- 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.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/hooks/useNamespaceFilter.d.ts +0 -5
- 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
|
@@ -1151,6 +1151,7 @@ const pod_port$1 = "Pod port";
|
|
|
1151
1151
|
const path_type$1 = "Path type";
|
|
1152
1152
|
const only_support_one_yaml$1 = "Only one YAML configuration is supported at a time.";
|
|
1153
1153
|
const not_support$1 = "Not supported";
|
|
1154
|
+
const stopped$1 = "Stopped";
|
|
1154
1155
|
const dovetail$1 = {
|
|
1155
1156
|
copy: copy$1,
|
|
1156
1157
|
reset_arguments: reset_arguments$1,
|
|
@@ -1304,7 +1305,8 @@ const dovetail$1 = {
|
|
|
1304
1305
|
pod_port: pod_port$1,
|
|
1305
1306
|
path_type: path_type$1,
|
|
1306
1307
|
only_support_one_yaml: only_support_one_yaml$1,
|
|
1307
|
-
not_support: not_support$1
|
|
1308
|
+
not_support: not_support$1,
|
|
1309
|
+
stopped: stopped$1
|
|
1308
1310
|
};
|
|
1309
1311
|
const EN = {
|
|
1310
1312
|
dovetail: dovetail$1
|
|
@@ -1460,6 +1462,7 @@ const out_cluster_lb_desc = "LoadBalancer 展示 <strong>ingress[*].ip</strong>
|
|
|
1460
1462
|
const out_external_name_desc = "ExternalName 展示 <strong>external-ip</strong>。";
|
|
1461
1463
|
const only_support_one_yaml = "一次仅支持输入一个 YAML 配置。";
|
|
1462
1464
|
const not_support = "不支持";
|
|
1465
|
+
const stopped = "已停止";
|
|
1463
1466
|
const dovetail = {
|
|
1464
1467
|
copy,
|
|
1465
1468
|
reset_arguments,
|
|
@@ -1614,7 +1617,8 @@ const dovetail = {
|
|
|
1614
1617
|
out_cluster_lb_desc,
|
|
1615
1618
|
out_external_name_desc,
|
|
1616
1619
|
only_support_one_yaml,
|
|
1617
|
-
not_support
|
|
1620
|
+
not_support,
|
|
1621
|
+
stopped
|
|
1618
1622
|
};
|
|
1619
1623
|
const ZH = {
|
|
1620
1624
|
dovetail
|
|
@@ -9537,6 +9541,7 @@ var WorkloadState = /* @__PURE__ */ ((WorkloadState2) => {
|
|
|
9537
9541
|
WorkloadState2["TERMINATING"] = "terminating";
|
|
9538
9542
|
WorkloadState2["PENDING"] = "pending";
|
|
9539
9543
|
WorkloadState2["WAITING"] = "waiting";
|
|
9544
|
+
WorkloadState2["STOPPED"] = "stopped";
|
|
9540
9545
|
return WorkloadState2;
|
|
9541
9546
|
})(WorkloadState || {});
|
|
9542
9547
|
var AccessControlAuth = /* @__PURE__ */ ((AccessControlAuth2) => {
|
|
@@ -9827,7 +9832,7 @@ class PodModel extends WorkloadBaseModel {
|
|
|
9827
9832
|
}
|
|
9828
9833
|
get readyDisplay() {
|
|
9829
9834
|
var _a, _b, _c;
|
|
9830
|
-
return `${(_b = (_a = this._rawYaml.status) == null ? void 0 : _a.containerStatuses) == null ? void 0 : _b.filter((c2) => c2.ready).length}/${(_c = this._rawYaml.spec) == null ? void 0 : _c.containers.length}`;
|
|
9835
|
+
return `${((_b = (_a = this._rawYaml.status) == null ? void 0 : _a.containerStatuses) == null ? void 0 : _b.filter((c2) => c2.ready).length) || 0}/${((_c = this._rawYaml.spec) == null ? void 0 : _c.containers.length) || 0}`;
|
|
9831
9836
|
}
|
|
9832
9837
|
get readyContainerCount() {
|
|
9833
9838
|
var _a, _b;
|
|
@@ -9918,8 +9923,10 @@ class DeploymentModel extends WorkloadModel {
|
|
|
9918
9923
|
this._globalStore = _globalStore;
|
|
9919
9924
|
}
|
|
9920
9925
|
get stateDisplay() {
|
|
9921
|
-
var _a, _b;
|
|
9922
|
-
if (((_a = this.spec) == null ? void 0 : _a.replicas)
|
|
9926
|
+
var _a, _b, _c;
|
|
9927
|
+
if (((_a = this.spec) == null ? void 0 : _a.replicas) === 0) {
|
|
9928
|
+
return WorkloadState.STOPPED;
|
|
9929
|
+
} else if (((_b = this.spec) == null ? void 0 : _b.replicas) !== ((_c = this.status) == null ? void 0 : _c.readyReplicas)) {
|
|
9923
9930
|
return WorkloadState.UPDATING;
|
|
9924
9931
|
}
|
|
9925
9932
|
return WorkloadState.READY;
|
|
@@ -9952,8 +9959,10 @@ class StatefulSetModel extends WorkloadModel {
|
|
|
9952
9959
|
this._globalStore = _globalStore;
|
|
9953
9960
|
}
|
|
9954
9961
|
get stateDisplay() {
|
|
9955
|
-
var _a, _b;
|
|
9956
|
-
if (((_a = this.spec) == null ? void 0 : _a.replicas)
|
|
9962
|
+
var _a, _b, _c;
|
|
9963
|
+
if (((_a = this.spec) == null ? void 0 : _a.replicas) === 0) {
|
|
9964
|
+
return WorkloadState.STOPPED;
|
|
9965
|
+
} else if (((_b = this.spec) == null ? void 0 : _b.replicas) !== ((_c = this.status) == null ? void 0 : _c.readyReplicas)) {
|
|
9957
9966
|
return WorkloadState.UPDATING;
|
|
9958
9967
|
}
|
|
9959
9968
|
return WorkloadState.READY;
|
|
@@ -10129,7 +10138,8 @@ const StateTag = ({
|
|
|
10129
10138
|
terminating: "loading",
|
|
10130
10139
|
pending: "warning",
|
|
10131
10140
|
waiting: "warning",
|
|
10132
|
-
terminated: "red"
|
|
10141
|
+
terminated: "red",
|
|
10142
|
+
stopped: "gray"
|
|
10133
10143
|
};
|
|
10134
10144
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(kit.statusCapsule, {
|
|
10135
10145
|
className: cx_default(className, StateTagStyle, hideBackground && "no-background"),
|
|
@@ -11310,7 +11320,7 @@ function KeyValueSecret(props) {
|
|
|
11310
11320
|
i18n: i18n2
|
|
11311
11321
|
} = useTranslation();
|
|
11312
11322
|
const [hideSecret, setHideSecret] = useState(true);
|
|
11313
|
-
const toggleButton = /* @__PURE__ */ jsxRuntimeExports.jsx(Button, {
|
|
11323
|
+
const toggleButton = Object.keys(data2).length ? /* @__PURE__ */ jsxRuntimeExports.jsx(Button, {
|
|
11314
11324
|
type: "quiet",
|
|
11315
11325
|
prefixIcon: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon$1, {
|
|
11316
11326
|
src: hideSecret ? ViewEye16GradientGrayIcon : EntityFilterIgnoreGradient16GrayIcon
|
|
@@ -11319,7 +11329,7 @@ function KeyValueSecret(props) {
|
|
|
11319
11329
|
className: ButtonStyle,
|
|
11320
11330
|
size: "small",
|
|
11321
11331
|
children: hideSecret ? i18n2.t("dovetail.show_data_value") : i18n2.t("dovetail.hide_data_value")
|
|
11322
|
-
});
|
|
11332
|
+
}) : null;
|
|
11323
11333
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(ShowGroupComponent, {
|
|
11324
11334
|
title: i18n2.t("dovetail.data"),
|
|
11325
11335
|
operationEle: toggleButton,
|
|
@@ -22865,7 +22875,7 @@ const Separator = () => {
|
|
|
22865
22875
|
});
|
|
22866
22876
|
};
|
|
22867
22877
|
const MonacoYamlEditor = React__default.lazy(() => Promise.resolve().then(() => MonacoYamlEditor$2));
|
|
22868
|
-
const MonacoYamlDiffEditor = React__default.lazy(() => import("./MonacoYamlDiffEditor-
|
|
22878
|
+
const MonacoYamlDiffEditor = React__default.lazy(() => import("./MonacoYamlDiffEditor-2ec906d2.js"));
|
|
22869
22879
|
const YamlEditorComponent = forwardRef(
|
|
22870
22880
|
function YamlEditorComponent2(props, ref) {
|
|
22871
22881
|
const {
|
package/dist/refine.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { b7, bL, A, aA, aC, ak, bn, aK, H, bB, bp, au, x, C, h, bP, an, aO, Z, bR, a1, a8, b_, ac, bq, bo, c1, aq, aU, v, ai, aZ, c0, bM, b1, D, aH, b3, b$, aI, ay, ba, bO, bQ, bz, al, a2, q, p, bS, I, aR, ax, s, br, bU, ap, aQ, ad, ae, U, af, aB, aj, a_, b2, V, M, bA, b6, N, J, c, az, Q, b9, aW, aV, bT, bl, f, bt, X, P, aM, t, _, bk, aJ, bY, bX, aF, aS, o, ao, aL, w, aT, aG, c5, bN, b4, bb, bc, am, R, a0, a6, a5, b5, a3, bZ, a4, a9, g, bG, bJ, bF, bE, bH, bI, bC, bu, bx, by, bw, bv, bs, bd, ar, aP, ag, l, bg, k, aD, c4, n, bh, aE, m, aw, aN, i, c3, at, av, aY, aX, as, S, b0, a$, c2, bD, bm, bi, bj, Y, bW, $, W, bV, a7, ab, aa, e, bK, ah, be, y, K, d, T, O, L, r, b, B, z, E, F, u, b8, G, bf, a } from "./index-
|
|
1
|
+
import { b7, bL, A, aA, aC, ak, bn, aK, H, bB, bp, au, x, C, h, bP, an, aO, Z, bR, a1, a8, b_, ac, bq, bo, c1, aq, aU, v, ai, aZ, c0, bM, b1, D, aH, b3, b$, aI, ay, ba, bO, bQ, bz, al, a2, q, p, bS, I, aR, ax, s, br, bU, ap, aQ, ad, ae, U, af, aB, aj, a_, b2, V, M, bA, b6, N, J, c, az, Q, b9, aW, aV, bT, bl, f, bt, X, P, aM, t, _, bk, aJ, bY, bX, aF, aS, o, ao, aL, w, aT, aG, c5, bN, b4, bb, bc, am, R, a0, a6, a5, b5, a3, bZ, a4, a9, g, bG, bJ, bF, bE, bH, bI, bC, bu, bx, by, bw, bv, bs, bd, ar, aP, ag, l, bg, k, aD, c4, n, bh, aE, m, aw, aN, i, c3, at, av, aY, aX, as, S, b0, a$, c2, bD, bm, bi, bj, Y, bW, $, W, bV, a7, ab, aa, e, bK, ah, be, y, K, d, T, O, L, r, b, B, z, E, F, u, b8, G, bf, a } from "./index-e72498e4.js";
|
|
2
2
|
import "@cloudtower/eagle";
|
|
3
3
|
import "@refinedev/core";
|
|
4
4
|
import "@cloudtower/icons-react";
|
package/dist/refine.umd.cjs
CHANGED
|
@@ -1157,6 +1157,7 @@ var __publicField = (obj, key, value) => {
|
|
|
1157
1157
|
const path_type$1 = "Path type";
|
|
1158
1158
|
const only_support_one_yaml$1 = "Only one YAML configuration is supported at a time.";
|
|
1159
1159
|
const not_support$1 = "Not supported";
|
|
1160
|
+
const stopped$1 = "Stopped";
|
|
1160
1161
|
const dovetail$1 = {
|
|
1161
1162
|
copy: copy$1,
|
|
1162
1163
|
reset_arguments: reset_arguments$1,
|
|
@@ -1310,7 +1311,8 @@ var __publicField = (obj, key, value) => {
|
|
|
1310
1311
|
pod_port: pod_port$1,
|
|
1311
1312
|
path_type: path_type$1,
|
|
1312
1313
|
only_support_one_yaml: only_support_one_yaml$1,
|
|
1313
|
-
not_support: not_support$1
|
|
1314
|
+
not_support: not_support$1,
|
|
1315
|
+
stopped: stopped$1
|
|
1314
1316
|
};
|
|
1315
1317
|
const EN = {
|
|
1316
1318
|
dovetail: dovetail$1
|
|
@@ -1466,6 +1468,7 @@ var __publicField = (obj, key, value) => {
|
|
|
1466
1468
|
const out_external_name_desc = "ExternalName 展示 <strong>external-ip</strong>。";
|
|
1467
1469
|
const only_support_one_yaml = "一次仅支持输入一个 YAML 配置。";
|
|
1468
1470
|
const not_support = "不支持";
|
|
1471
|
+
const stopped = "已停止";
|
|
1469
1472
|
const dovetail = {
|
|
1470
1473
|
copy,
|
|
1471
1474
|
reset_arguments,
|
|
@@ -1620,7 +1623,8 @@ var __publicField = (obj, key, value) => {
|
|
|
1620
1623
|
out_cluster_lb_desc,
|
|
1621
1624
|
out_external_name_desc,
|
|
1622
1625
|
only_support_one_yaml,
|
|
1623
|
-
not_support
|
|
1626
|
+
not_support,
|
|
1627
|
+
stopped
|
|
1624
1628
|
};
|
|
1625
1629
|
const ZH = {
|
|
1626
1630
|
dovetail
|
|
@@ -9543,6 +9547,7 @@ var __publicField = (obj, key, value) => {
|
|
|
9543
9547
|
WorkloadState2["TERMINATING"] = "terminating";
|
|
9544
9548
|
WorkloadState2["PENDING"] = "pending";
|
|
9545
9549
|
WorkloadState2["WAITING"] = "waiting";
|
|
9550
|
+
WorkloadState2["STOPPED"] = "stopped";
|
|
9546
9551
|
return WorkloadState2;
|
|
9547
9552
|
})(WorkloadState || {});
|
|
9548
9553
|
var AccessControlAuth = /* @__PURE__ */ ((AccessControlAuth2) => {
|
|
@@ -9833,7 +9838,7 @@ var __publicField = (obj, key, value) => {
|
|
|
9833
9838
|
}
|
|
9834
9839
|
get readyDisplay() {
|
|
9835
9840
|
var _a, _b, _c;
|
|
9836
|
-
return `${(_b = (_a = this._rawYaml.status) == null ? void 0 : _a.containerStatuses) == null ? void 0 : _b.filter((c2) => c2.ready).length}/${(_c = this._rawYaml.spec) == null ? void 0 : _c.containers.length}`;
|
|
9841
|
+
return `${((_b = (_a = this._rawYaml.status) == null ? void 0 : _a.containerStatuses) == null ? void 0 : _b.filter((c2) => c2.ready).length) || 0}/${((_c = this._rawYaml.spec) == null ? void 0 : _c.containers.length) || 0}`;
|
|
9837
9842
|
}
|
|
9838
9843
|
get readyContainerCount() {
|
|
9839
9844
|
var _a, _b;
|
|
@@ -9924,8 +9929,10 @@ var __publicField = (obj, key, value) => {
|
|
|
9924
9929
|
this._globalStore = _globalStore;
|
|
9925
9930
|
}
|
|
9926
9931
|
get stateDisplay() {
|
|
9927
|
-
var _a, _b;
|
|
9928
|
-
if (((_a = this.spec) == null ? void 0 : _a.replicas)
|
|
9932
|
+
var _a, _b, _c;
|
|
9933
|
+
if (((_a = this.spec) == null ? void 0 : _a.replicas) === 0) {
|
|
9934
|
+
return WorkloadState.STOPPED;
|
|
9935
|
+
} else if (((_b = this.spec) == null ? void 0 : _b.replicas) !== ((_c = this.status) == null ? void 0 : _c.readyReplicas)) {
|
|
9929
9936
|
return WorkloadState.UPDATING;
|
|
9930
9937
|
}
|
|
9931
9938
|
return WorkloadState.READY;
|
|
@@ -9958,8 +9965,10 @@ var __publicField = (obj, key, value) => {
|
|
|
9958
9965
|
this._globalStore = _globalStore;
|
|
9959
9966
|
}
|
|
9960
9967
|
get stateDisplay() {
|
|
9961
|
-
var _a, _b;
|
|
9962
|
-
if (((_a = this.spec) == null ? void 0 : _a.replicas)
|
|
9968
|
+
var _a, _b, _c;
|
|
9969
|
+
if (((_a = this.spec) == null ? void 0 : _a.replicas) === 0) {
|
|
9970
|
+
return WorkloadState.STOPPED;
|
|
9971
|
+
} else if (((_b = this.spec) == null ? void 0 : _b.replicas) !== ((_c = this.status) == null ? void 0 : _c.readyReplicas)) {
|
|
9963
9972
|
return WorkloadState.UPDATING;
|
|
9964
9973
|
}
|
|
9965
9974
|
return WorkloadState.READY;
|
|
@@ -10135,7 +10144,8 @@ var __publicField = (obj, key, value) => {
|
|
|
10135
10144
|
terminating: "loading",
|
|
10136
10145
|
pending: "warning",
|
|
10137
10146
|
waiting: "warning",
|
|
10138
|
-
terminated: "red"
|
|
10147
|
+
terminated: "red",
|
|
10148
|
+
stopped: "gray"
|
|
10139
10149
|
};
|
|
10140
10150
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(kit.statusCapsule, {
|
|
10141
10151
|
className: cx_default(className, StateTagStyle, hideBackground && "no-background"),
|
|
@@ -11316,7 +11326,7 @@ var __publicField = (obj, key, value) => {
|
|
|
11316
11326
|
i18n: i18n2
|
|
11317
11327
|
} = useTranslation();
|
|
11318
11328
|
const [hideSecret, setHideSecret] = React.useState(true);
|
|
11319
|
-
const toggleButton = /* @__PURE__ */ jsxRuntimeExports.jsx(eagle.Button, {
|
|
11329
|
+
const toggleButton = Object.keys(data2).length ? /* @__PURE__ */ jsxRuntimeExports.jsx(eagle.Button, {
|
|
11320
11330
|
type: "quiet",
|
|
11321
11331
|
prefixIcon: /* @__PURE__ */ jsxRuntimeExports.jsx(eagle.Icon, {
|
|
11322
11332
|
src: hideSecret ? iconsReact.ViewEye16GradientGrayIcon : iconsReact.EntityFilterIgnoreGradient16GrayIcon
|
|
@@ -11325,7 +11335,7 @@ var __publicField = (obj, key, value) => {
|
|
|
11325
11335
|
className: ButtonStyle,
|
|
11326
11336
|
size: "small",
|
|
11327
11337
|
children: hideSecret ? i18n2.t("dovetail.show_data_value") : i18n2.t("dovetail.hide_data_value")
|
|
11328
|
-
});
|
|
11338
|
+
}) : null;
|
|
11329
11339
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(ShowGroupComponent, {
|
|
11330
11340
|
title: i18n2.t("dovetail.data"),
|
|
11331
11341
|
operationEle: toggleButton,
|
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
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useUIKit, pushModal, popModal } from '@cloudtower/eagle';
|
|
3
|
+
import { css } from '@linaria/core';
|
|
4
|
+
import { useCallback } from 'react';
|
|
5
|
+
import { FormErrorAlert } from 'src/components/FormErrorAlert';
|
|
6
|
+
import { useSubmitForm } from 'src/hooks/useSubmitForm';
|
|
7
|
+
import { useD2Translation } from '../../i18n';
|
|
8
|
+
const EditFieldModalStyle = css `
|
|
9
|
+
.ant-modal-content {
|
|
10
|
+
border-radius: 16px;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.ant-modal-header {
|
|
14
|
+
border-radius: 16px 16px 0 0;
|
|
15
|
+
}
|
|
16
|
+
`;
|
|
17
|
+
const EditButtonStyle = css `
|
|
18
|
+
&.ant-btn.ant-btn-link {
|
|
19
|
+
height: 22px;
|
|
20
|
+
margin-left: 8px;
|
|
21
|
+
}
|
|
22
|
+
`;
|
|
23
|
+
export function EditFieldModal(props) {
|
|
24
|
+
const { title, formRef: form, renderContent } = props;
|
|
25
|
+
const kit = useUIKit();
|
|
26
|
+
const { i18n } = useD2Translation();
|
|
27
|
+
const { submitting, errorMsgs, reset, onSubmit, } = useSubmitForm({
|
|
28
|
+
formRef: form,
|
|
29
|
+
onSubmitSuccess: popModal
|
|
30
|
+
});
|
|
31
|
+
const close = useCallback(() => {
|
|
32
|
+
popModal();
|
|
33
|
+
reset();
|
|
34
|
+
}, [reset]);
|
|
35
|
+
return (_jsxs(kit.modal, { className: EditFieldModalStyle, title: title || i18n.t('dovetail.edit'), confirmLoading: submitting, onOk: onSubmit, onCancel: close, normal: true, destroyOnClose: true, children: [renderContent(), _jsx(FormErrorAlert, { style: { marginTop: 16 }, errorMsgs: errorMsgs })] }));
|
|
36
|
+
}
|
|
37
|
+
export function EditField(props) {
|
|
38
|
+
const { modalProps } = props;
|
|
39
|
+
const kit = useUIKit();
|
|
40
|
+
const { i18n } = useD2Translation();
|
|
41
|
+
return (_jsx(kit.button, { className: EditButtonStyle, type: "link", onClick: () => {
|
|
42
|
+
pushModal({
|
|
43
|
+
component: EditFieldModal,
|
|
44
|
+
props: modalProps
|
|
45
|
+
});
|
|
46
|
+
}, children: i18n.t('dovetail.edit') }));
|
|
47
|
+
}
|