@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.
Files changed (206) hide show
  1. package/dist/{MonacoYamlDiffEditor-3fa57025.js → MonacoYamlDiffEditor-2ec906d2.js} +1 -1
  2. package/dist/{index-8a299a91.js → index-e72498e4.js} +21 -11
  3. package/dist/refine.js +1 -1
  4. package/dist/refine.umd.cjs +20 -10
  5. package/lib/src/App.js +91 -0
  6. package/lib/src/Dovetail.js +45 -0
  7. package/lib/src/components/Breadcrumb/index.js +20 -0
  8. package/lib/src/components/ConditionsTable/ConditionsTable.js +56 -0
  9. package/lib/src/components/ConditionsTable/index.js +1 -0
  10. package/lib/src/components/CreateButton/index.js +10 -0
  11. package/lib/src/components/CronJobDropdown/index.js +26 -0
  12. package/lib/src/components/CronjobJobsTable/index.js +49 -0
  13. package/lib/src/components/DeleteButton/index.js +13 -0
  14. package/lib/src/components/DeleteManyButton/index.js +16 -0
  15. package/lib/src/components/DrawerShow/DrawerShow.js +13 -0
  16. package/lib/src/components/DrawerShow/index.js +1 -0
  17. package/lib/src/components/EditButton/index.js +13 -0
  18. package/lib/src/components/EditField/index.js +47 -0
  19. package/lib/src/components/ErrorContent/index.js +36 -0
  20. package/lib/src/components/EventsTable/EventsTable.js +59 -0
  21. package/lib/src/components/EventsTable/index.js +1 -0
  22. package/lib/src/components/Form/KeyValueListWidget.js +56 -0
  23. package/lib/src/components/Form/MetadataForm.js +9 -0
  24. package/lib/src/components/Form/NameInputWidget.js +50 -0
  25. package/lib/src/components/Form/NamespaceSelectWidget.js +21 -0
  26. package/lib/src/components/Form/index.js +4 -0
  27. package/lib/src/components/Form/widget.js +1 -0
  28. package/lib/src/components/FormErrorAlert/index.js +8 -0
  29. package/lib/src/components/FormLayout/index.js +21 -0
  30. package/lib/src/components/FormModal/index.js +51 -0
  31. package/lib/src/components/ImageNames/index.js +14 -0
  32. package/lib/src/components/IngressRulesComponent/index.js +11 -0
  33. package/lib/src/components/IngressRulesTable/IngressRulesTable.js +51 -0
  34. package/lib/src/components/IngressRulesTable/index.js +1 -0
  35. package/lib/src/components/K8sDropdown/index.js +31 -0
  36. package/lib/src/components/KeyValue/KeyValue.js +27 -0
  37. package/lib/src/components/KeyValue/index.js +1 -0
  38. package/lib/src/components/KeyValueData/index.js +50 -0
  39. package/lib/src/components/Layout/index.js +39 -0
  40. package/lib/src/components/ListPage/index.js +25 -0
  41. package/lib/src/components/Menu/index.js +36 -0
  42. package/lib/src/components/NamespacesFilter/index.js +34 -0
  43. package/lib/src/components/NetworkPolicyRulesTable/NetworkPolicyRulesTable.d.ts +1 -2
  44. package/lib/src/components/NetworkPolicyRulesTable/NetworkPolicyRulesTable.js +77 -0
  45. package/lib/src/components/NetworkPolicyRulesTable/index.js +1 -0
  46. package/lib/src/components/PageShow/PageShow.js +11 -0
  47. package/lib/src/components/PageShow/index.js +1 -0
  48. package/lib/src/components/PodContainersTable/PodContainersTable.js +78 -0
  49. package/lib/src/components/PodContainersTable/index.js +1 -0
  50. package/lib/src/components/PodLog/index.js +136 -0
  51. package/lib/src/components/ReferenceLink/index.js +17 -0
  52. package/lib/src/components/RefineForm/RefineFormContent.d.ts +10 -0
  53. package/lib/src/components/RefineForm/RefineFormModal.d.ts +8 -0
  54. package/lib/src/components/RefineForm/RefineFormPage.d.ts +7 -0
  55. package/lib/src/components/RefineForm/index.d.ts +3 -0
  56. package/lib/src/components/RefineForm/type.d.ts +20 -0
  57. package/lib/src/components/RefineForm/useRefineForm.d.ts +10 -0
  58. package/lib/src/components/ResourceCRUD/ResourceCRUD.js +15 -0
  59. package/lib/src/components/ResourceCRUD/create/index.js +13 -0
  60. package/lib/src/components/ResourceCRUD/index.js +4 -0
  61. package/lib/src/components/ResourceCRUD/list/index.js +19 -0
  62. package/lib/src/components/ResourceCRUD/show/index.js +6 -0
  63. package/lib/src/components/ResourceLink/index.js +21 -0
  64. package/lib/src/components/ResourceUsageBar/index.js +81 -0
  65. package/lib/src/components/Separator/index.js +11 -0
  66. package/lib/src/components/ShowContent/ShowContent.d.ts +1 -1
  67. package/lib/src/components/ShowContent/ShowContent.js +157 -0
  68. package/lib/src/components/ShowContent/fields.js +157 -0
  69. package/lib/src/components/ShowContent/index.js +2 -0
  70. package/lib/src/components/StateTag/StateTag.js +22 -0
  71. package/lib/src/components/StateTag/index.js +1 -0
  72. package/lib/src/components/Table/ErrorContent.js +36 -0
  73. package/lib/src/components/Table/TableToolBar.js +14 -0
  74. package/lib/src/components/Table/TableWidgets.js +28 -0
  75. package/lib/src/components/Table/index.js +69 -0
  76. package/lib/src/components/Tags/index.js +22 -0
  77. package/lib/src/components/Time/index.js +14 -0
  78. package/lib/src/components/WorkloadDropdown/index.js +24 -0
  79. package/lib/src/components/WorkloadPodsTable/WorkloadPodsTable.js +39 -0
  80. package/lib/src/components/WorkloadPodsTable/index.js +1 -0
  81. package/lib/src/components/WorkloadReplicas/index.js +50 -0
  82. package/lib/src/components/YamlEditor/MonacoYamlDiffEditor.js +34 -0
  83. package/lib/src/components/YamlEditor/MonacoYamlEditor.js +149 -0
  84. package/lib/src/components/YamlEditor/YamlEditorComponent.js +90 -0
  85. package/lib/src/components/YamlEditor/index.js +1 -0
  86. package/lib/src/components/YamlEditor/style.js +102 -0
  87. package/lib/src/components/YamlEditor/yaml.worker.js +1 -0
  88. package/lib/src/components/YamlForm/index.d.ts +0 -4
  89. package/lib/src/components/YamlForm/index.js +61 -0
  90. package/lib/src/components/index.js +38 -0
  91. package/lib/src/constants/index.js +2 -0
  92. package/lib/src/constants/k8s.js +203 -0
  93. package/lib/src/constants/state.d.ts +2 -1
  94. package/lib/src/constants/state.js +15 -0
  95. package/lib/src/contexts/component.js +3 -0
  96. package/lib/src/contexts/configs.js +3 -0
  97. package/lib/src/contexts/global-store.js +3 -0
  98. package/lib/src/contexts/index.js +3 -0
  99. package/lib/src/hooks/index.js +7 -0
  100. package/lib/src/hooks/useDeleteModal/index.js +1 -0
  101. package/lib/src/hooks/useDeleteModal/useDeleteManyModal.js +31 -0
  102. package/lib/src/hooks/useDeleteModal/useDeleteModal.js +38 -0
  103. package/lib/src/hooks/useDownloadYAML.js +10 -0
  104. package/lib/src/hooks/useEagleForm.d.ts +1 -2
  105. package/lib/src/hooks/useEagleForm.js +177 -0
  106. package/lib/src/hooks/useEagleTable/columns.js +246 -0
  107. package/lib/src/hooks/useEagleTable/index.js +2 -0
  108. package/lib/src/hooks/useEagleTable/useEagleTable.js +63 -0
  109. package/lib/src/hooks/useEdit.js +19 -0
  110. package/lib/src/hooks/useGlobalStore.js +5 -0
  111. package/lib/src/hooks/useK8sYamlEditor.js +37 -0
  112. package/lib/src/hooks/useOpenForm.js +43 -0
  113. package/lib/src/hooks/useSchema.js +37 -0
  114. package/lib/src/hooks/useSubmitForm.js +42 -0
  115. package/lib/src/i18n.d.ts +2 -0
  116. package/lib/src/i18n.js +19 -0
  117. package/lib/src/index.js +13 -0
  118. package/lib/src/locales/en-US/dovetail.json +18 -0
  119. package/lib/src/locales/en-US/index.d.ts +1 -0
  120. package/lib/src/locales/en-US/index.js +4 -0
  121. package/lib/src/locales/index.js +6 -0
  122. package/lib/src/locales/zh-CN/dovetail.json +91 -0
  123. package/lib/src/locales/zh-CN/index.d.ts +1 -0
  124. package/lib/src/locales/zh-CN/index.js +4 -0
  125. package/lib/src/main.js +12 -0
  126. package/lib/src/models/cronjob-model.js +32 -0
  127. package/lib/src/models/daemonset-model.js +17 -0
  128. package/lib/src/models/deployment-model.d.ts +1 -1
  129. package/lib/src/models/deployment-model.js +17 -0
  130. package/lib/src/models/event-model.js +11 -0
  131. package/lib/src/models/index.js +14 -0
  132. package/lib/src/models/ingress-model.js +24 -0
  133. package/lib/src/models/job-model.js +56 -0
  134. package/lib/src/models/network-policy-model.js +10 -0
  135. package/lib/src/models/pod-metrics-model.js +34 -0
  136. package/lib/src/models/pod-model.js +78 -0
  137. package/lib/src/models/resource-model.js +34 -0
  138. package/lib/src/models/server-instance-model.d.ts +10 -0
  139. package/lib/src/models/service-model.js +17 -0
  140. package/lib/src/models/statefulset-model.d.ts +1 -1
  141. package/lib/src/models/statefulset-model.js +17 -0
  142. package/lib/src/models/types/index.js +1 -0
  143. package/lib/src/models/types/metric.js +1 -0
  144. package/lib/src/models/workload-base-model.js +22 -0
  145. package/lib/src/models/workload-model.js +51 -0
  146. package/lib/src/pages/configmaps/index.js +15 -0
  147. package/lib/src/pages/cronjobs/create/index.js +6 -0
  148. package/lib/src/pages/cronjobs/index.js +3 -0
  149. package/lib/src/pages/cronjobs/list/index.js +42 -0
  150. package/lib/src/pages/cronjobs/show/index.js +16 -0
  151. package/lib/src/pages/daemonsets/create/index.js +6 -0
  152. package/lib/src/pages/daemonsets/index.js +3 -0
  153. package/lib/src/pages/daemonsets/list/index.js +32 -0
  154. package/lib/src/pages/daemonsets/show/index.js +16 -0
  155. package/lib/src/pages/deployments/create/index.js +7 -0
  156. package/lib/src/pages/deployments/index.js +3 -0
  157. package/lib/src/pages/deployments/list/index.js +26 -0
  158. package/lib/src/pages/deployments/show/index.js +16 -0
  159. package/lib/src/pages/ingresses/index.js +26 -0
  160. package/lib/src/pages/jobs/index.js +34 -0
  161. package/lib/src/pages/networkPolicies/index.js +67 -0
  162. package/lib/src/pages/pods/create/index.js +6 -0
  163. package/lib/src/pages/pods/index.js +3 -0
  164. package/lib/src/pages/pods/list/index.js +81 -0
  165. package/lib/src/pages/pods/show/index.js +54 -0
  166. package/lib/src/pages/secrets/index.js +15 -0
  167. package/lib/src/pages/services/index.js +26 -0
  168. package/lib/src/pages/statefulsets/create/index.js +6 -0
  169. package/lib/src/pages/statefulsets/index.js +3 -0
  170. package/lib/src/pages/statefulsets/list/index.js +26 -0
  171. package/lib/src/pages/statefulsets/show/index.js +16 -0
  172. package/lib/src/plugins/index.js +3 -0
  173. package/lib/src/plugins/model-plugin.js +46 -0
  174. package/lib/src/plugins/relation-plugin.js +81 -0
  175. package/lib/src/plugins/type.js +1 -0
  176. package/lib/src/providers/index.js +1 -0
  177. package/lib/src/providers/router-provider/index.js +100 -0
  178. package/lib/src/types/index.js +1 -0
  179. package/lib/src/types/resource.js +12 -0
  180. package/lib/src/utils/addId.js +8 -0
  181. package/lib/src/utils/download.js +9 -0
  182. package/lib/src/utils/error.js +53 -0
  183. package/lib/src/utils/form.js +9 -0
  184. package/lib/src/utils/k8s.js +6 -0
  185. package/lib/src/utils/labels.js +15 -0
  186. package/lib/src/utils/match-selector.js +12 -0
  187. package/lib/src/utils/openapi.js +33 -0
  188. package/lib/src/utils/schema.js +117 -0
  189. package/lib/src/utils/selector.js +12 -0
  190. package/lib/src/utils/string.js +6 -0
  191. package/lib/src/utils/time.js +46 -0
  192. package/lib/src/utils/unit.js +69 -0
  193. package/lib/src/utils/yaml.js +44 -0
  194. package/lib/vite.config.js +60 -0
  195. package/package.json +1 -1
  196. package/lib/src/components/ModalContextProvider/index.d.ts +0 -12
  197. package/lib/src/hooks/useModal.d.ts +0 -0
  198. package/lib/src/hooks/useNamespaceFilter.d.ts +0 -5
  199. package/lib/src/model/cronjob-model.d.ts +0 -9
  200. package/lib/src/model/index.d.ts +0 -6
  201. package/lib/src/model/job-model.d.ts +0 -10
  202. package/lib/src/model/pod-metrics-model.d.ts +0 -7
  203. package/lib/src/model/pod-model.d.ts +0 -15
  204. package/lib/src/model/resource-model.d.ts +0 -17
  205. package/lib/src/model/workload-model.d.ts +0 -17
  206. package/lib/src/types/metric.d.ts +0 -25
@@ -1,4 +1,4 @@
1
- import { j as jsxRuntimeExports } from "./index-8a299a91.js";
1
+ import { j as jsxRuntimeExports } from "./index-e72498e4.js";
2
2
  import * as monaco from "monaco-editor";
3
3
  import { useRef, useEffect } from "react";
4
4
  import "i18next";
@@ -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) !== ((_b = this.status) == null ? void 0 : _b.readyReplicas)) {
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) !== ((_b = this.status) == null ? void 0 : _b.readyReplicas)) {
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-3fa57025.js"));
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-8a299a91.js";
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";
@@ -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) !== ((_b = this.status) == null ? void 0 : _b.readyReplicas)) {
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) !== ((_b = this.status) == null ? void 0 : _b.readyReplicas)) {
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
+ }