@dovetail-v2/refine 0.1.11 → 0.1.13

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.
@@ -10,8 +10,8 @@ import React__default, { createElement, isValidElement, cloneElement, Children,
10
10
  import { ResourceContext, matchResourceFromRoute, useResource, useDelete, useNavigation, useBreadcrumb, useList, CanAccess, useUpdate, useParsed, useGo, useCan, useTable, useDeleteMany, useShow, useDataProvider, useRefineContext, useTranslate, useWarnAboutChange, useForm as useForm$2, flattenObjectKeys, pickNotDeprecated, useMenu, Refine } from "@refinedev/core";
11
11
  import { parse, stringify } from "qs";
12
12
  import { useLocation, useHistory, useParams, matchPath, Link, Route, NavLink, Router } from "react-router-dom";
13
- import { Typo, Tag, Input, Select, AntdOption, Button, Form, Space, TextArea, kitContext, Loading, Table as Table$2, Pagination, Alert, usePopModal, Modal, usePushModal, Fields, Units, OverflowTooltip, Tooltip, StatusCapsule, Dropdown, Menu as Menu$1, Icon as Icon$1, Divider, Link as Link$1, Tabs as Tabs$1, TabsTabPane, Row, Col, DonutChart, SegmentControl, Checkbox, DropdownMenu, SearchInput, Token, AntdSelectOptGroup, Popover, AntdTable, TableForm, MenuItemGroup, Layout as Layout$1, Time as Time$1, useMessage, ModalStack, KitStoreProvider, ConfigProvider } from "@cloudtower/eagle";
14
- import { EditPen16PrimaryIcon, Download16GradientBlueIcon, TrashBinDelete16Icon, MoreEllipsis324BoldSecondaryIcon, MoreEllipsis324BoldBlueIcon, MoreEllipsis316BoldBlueIcon, PlusAddCreateNew16BoldOntintIcon, ArrowChevronLeft16BoldTertiaryIcon, ArrowChevronLeftSmall16BoldBlueIcon, ViewEye16GradientGrayIcon, EntityFilterIgnoreGradient16GrayIcon, RecoverContinue16GradientBlueIcon, SuspendedPause16GradientBlueIcon, Retry16GradientBlueIcon, FontSize16GrayIcon, FontSize16BlueIcon, LogCollection16GrayIcon, LogCollection16GradientBlueIcon, TrashBinDeletePermanently16GrayIcon, TrashBinDeletePermanently16BlueIcon, Loading24GradientBlueIcon, OpenTerminal16GradientBlueIcon, HierarchyTriangleRight16GrayIcon, HierarchyTriangleRight16BlueIcon, ClipboardCopy16GradientGrayIcon, ClipboardCopy16GradientBlueIcon, Retry16GradientGrayIcon, EditPen16GradientGrayIcon, EditPen16GradientBlueIcon, Showdiff16GradientGrayIcon, Showdiff16GradientBlueIcon, XmarkFailedSeriousWarningFill16RedIcon, ExclamationErrorCircleFill16RedIcon, Pause16GradientBlueIcon, EditPen16BlueIcon } from "@cloudtower/icons-react";
13
+ import { Typo, Tag, Input, Select, AntdOption, Button, Form, Space, TextArea, kitContext, Loading, Table as Table$2, Pagination, Alert, usePopModal, Modal, usePushModal, Fields, Units, OverflowTooltip, Tooltip, StatusCapsule, Dropdown, Menu as Menu$1, Icon as Icon$1, Divider, Link as Link$1, Tabs as Tabs$1, TabsTabPane, Row, Col, Popover, AntdTable, TableForm, getOptions, DonutChart, SegmentControl, Checkbox, DropdownMenu, SearchInput, Token, AntdSelectOptGroup, MenuItemGroup, Layout as Layout$1, Time as Time$1, useMessage, ModalStack, KitStoreProvider, ConfigProvider } from "@cloudtower/eagle";
14
+ import { EditPen16PrimaryIcon, Download16GradientBlueIcon, TrashBinDelete16Icon, MoreEllipsis324BoldSecondaryIcon, MoreEllipsis324BoldBlueIcon, MoreEllipsis316BoldBlueIcon, PlusAddCreateNew16BoldOntintIcon, ArrowChevronLeft16BoldTertiaryIcon, ArrowChevronLeftSmall16BoldBlueIcon, ViewEye16GradientGrayIcon, EntityFilterIgnoreGradient16GrayIcon, InfoICircleFill16GrayIcon, InfoICircleFill16Gray70Icon, RecoverContinue16GradientBlueIcon, SuspendedPause16GradientBlueIcon, Retry16GradientBlueIcon, FontSize16GrayIcon, FontSize16BlueIcon, LogCollection16GrayIcon, LogCollection16GradientBlueIcon, TrashBinDeletePermanently16GrayIcon, TrashBinDeletePermanently16BlueIcon, Loading24GradientBlueIcon, OpenTerminal16GradientBlueIcon, HierarchyTriangleRight16GrayIcon, HierarchyTriangleRight16BlueIcon, ClipboardCopy16GradientGrayIcon, ClipboardCopy16GradientBlueIcon, Retry16GradientGrayIcon, EditPen16GradientGrayIcon, EditPen16GradientBlueIcon, Showdiff16GradientGrayIcon, Showdiff16GradientBlueIcon, XmarkFailedSeriousWarningFill16RedIcon, ExclamationErrorCircleFill16RedIcon, Pause16GradientBlueIcon, EditPen16BlueIcon } from "@cloudtower/icons-react";
15
15
  import { first, cloneDeep, set as set$1, omit as omit$1, merge, get as get$3, debounce, last, isObject as isObject$4, uniq, keyBy } from "lodash-es";
16
16
  import yaml$1 from "js-yaml";
17
17
  import { paginateData, sortData, dataProvider, liveProvider } from "k8s-api-provider";
@@ -1569,6 +1569,12 @@ const suffix_format_rule_3 = "后跟斜杠 (/),即第一个 (/) 前的内容
1569
1569
  const name_format_rule_1 = "由字母、数字、连字符 (-)、下划线(_) 或点 (.) 组成";
1570
1570
  const name_format_rule_2 = "以字母或数字开头和结尾";
1571
1571
  const name_format_rule_3 = "不超过 63 个字符";
1572
+ const taint_effect_NoSchedule_tooltip_1 = "正在节点上运行的 Pod 不会被驱逐。";
1573
+ const taint_effect_NoSchedule_tooltip_2 = "新 Pod 不会调度到污点节点,除非有匹配的容忍度。";
1574
+ const taint_effect_PreferNoSchedule_tooltip_1 = "不容忍污点的 Pod 将被立即驱逐。";
1575
+ const taint_effect_PreferNoSchedule_tooltip_2 = "容忍污点但未设置容忍时长的 Pod 将继续运行。";
1576
+ const taint_effect_PreferNoSchedule_tooltip_3 = "容忍污点并设置了容忍时长的 Pod 将按指定时间运行,时间结束后被驱逐。";
1577
+ const taint_effect_NoExecute_tooltip_3 = "控制平面将尝试避免将不能容忍污点的 Pod 调度到节点上,但无法保证完全避免。";
1572
1578
  const dovetail = {
1573
1579
  copy: copy$1,
1574
1580
  reset_arguments,
@@ -1796,7 +1802,13 @@ const dovetail = {
1796
1802
  suffix_format_rule_3,
1797
1803
  name_format_rule_1,
1798
1804
  name_format_rule_2,
1799
- name_format_rule_3
1805
+ name_format_rule_3,
1806
+ taint_effect_NoSchedule_tooltip_1,
1807
+ taint_effect_NoSchedule_tooltip_2,
1808
+ taint_effect_PreferNoSchedule_tooltip_1,
1809
+ taint_effect_PreferNoSchedule_tooltip_2,
1810
+ taint_effect_PreferNoSchedule_tooltip_3,
1811
+ taint_effect_NoExecute_tooltip_3
1800
1812
  };
1801
1813
  const ZH = {
1802
1814
  dovetail
@@ -8189,6 +8201,9 @@ class K8sOpenAPI {
8189
8201
  }
8190
8202
  // Fetch and process OpenAPI schemas
8191
8203
  async fetch() {
8204
+ if (this.schemas) {
8205
+ return this.schemas;
8206
+ }
8192
8207
  try {
8193
8208
  const response = await fetch(
8194
8209
  `${this.pathPrefix}${this.resourceBasePath}`
@@ -8236,6 +8251,24 @@ class K8sOpenAPI {
8236
8251
  });
8237
8252
  }
8238
8253
  }
8254
+ class SchemaStore {
8255
+ constructor() {
8256
+ __publicField(this, "openapiMap", {});
8257
+ }
8258
+ async fetchSchemas(resourceBasePath, pathPrefix) {
8259
+ const openapi = this.openapiMap[`${resourceBasePath}-${pathPrefix}`] || new K8sOpenAPI(resourceBasePath, pathPrefix);
8260
+ this.openapiMap[`${resourceBasePath}-${pathPrefix}`] = openapi;
8261
+ const schemas = await openapi.fetch();
8262
+ return schemas;
8263
+ }
8264
+ async fetchSchema(resourceBasePath, pathPrefix, kind) {
8265
+ const openapi = this.openapiMap[`${resourceBasePath}-${pathPrefix}`] || new K8sOpenAPI(resourceBasePath, pathPrefix);
8266
+ this.openapiMap[`${resourceBasePath}-${pathPrefix}`] = openapi;
8267
+ await openapi.fetch();
8268
+ return openapi.findSchema(kind);
8269
+ }
8270
+ }
8271
+ const schemaStore = new SchemaStore();
8239
8272
  const ConstantsContext = createContext({
8240
8273
  schemaUrlPrefix: ""
8241
8274
  });
@@ -8254,8 +8287,7 @@ function useApiGroupSchema() {
8254
8287
  if (state2.schemasMap[apiGroup]) {
8255
8288
  return { apiGroup, schemas: state2.schemasMap[apiGroup] };
8256
8289
  }
8257
- const openapi = new K8sOpenAPI(apiGroup, schemaUrlPrefix);
8258
- const groupSchemas = await openapi.fetch();
8290
+ const groupSchemas = await schemaStore.fetchSchemas(apiGroup, schemaUrlPrefix);
8259
8291
  return { apiGroup, schemas: groupSchemas || [] };
8260
8292
  })
8261
8293
  );
@@ -8284,20 +8316,12 @@ function useSchema(options) {
8284
8316
  const useResourceResult = useResource();
8285
8317
  const resource = (options == null ? void 0 : options.resource) || useResourceResult.resource;
8286
8318
  const { schemaUrlPrefix } = useContext(ConstantsContext);
8287
- const openapi = useMemo(
8288
- () => {
8289
- var _a2;
8290
- return new K8sOpenAPI((_a2 = resource == null ? void 0 : resource.meta) == null ? void 0 : _a2.resourceBasePath, schemaUrlPrefix);
8291
- },
8292
- [(_a = resource == null ? void 0 : resource.meta) == null ? void 0 : _a.resourceBasePath, schemaUrlPrefix]
8293
- );
8294
8319
  const fetchSchema = useCallback(async () => {
8295
- var _a2;
8320
+ var _a2, _b2;
8296
8321
  setLoading(true);
8297
8322
  setError(null);
8298
8323
  try {
8299
- await openapi.fetch();
8300
- const schema2 = await openapi.findSchema((_a2 = resource == null ? void 0 : resource.meta) == null ? void 0 : _a2.kind);
8324
+ const schema2 = await schemaStore.fetchSchema((_a2 = resource == null ? void 0 : resource.meta) == null ? void 0 : _a2.resourceBasePath, schemaUrlPrefix, (_b2 = resource == null ? void 0 : resource.meta) == null ? void 0 : _b2.kind);
8301
8325
  setSchema(schema2 || null);
8302
8326
  setError(null);
8303
8327
  } catch (e2) {
@@ -8305,7 +8329,7 @@ function useSchema(options) {
8305
8329
  } finally {
8306
8330
  setLoading(false);
8307
8331
  }
8308
- }, [(_b = resource == null ? void 0 : resource.meta) == null ? void 0 : _b.kind, openapi]);
8332
+ }, [(_a = resource == null ? void 0 : resource.meta) == null ? void 0 : _a.kind, (_b = resource == null ? void 0 : resource.meta) == null ? void 0 : _b.resourceBasePath, schemaUrlPrefix]);
8309
8333
  useEffect(() => {
8310
8334
  if (options == null ? void 0 : options.skip)
8311
8335
  return;
@@ -8930,11 +8954,6 @@ function Table$1(props) {
8930
8954
  } = props;
8931
8955
  const auxiliaryLineRef = useRef(null);
8932
8956
  const wrapperRef = useRef(null);
8933
- useMemo(() => ({
8934
- current: currentPage,
8935
- pageSize: defaultSize,
8936
- onChange: onPageChange
8937
- }), [currentPage, defaultSize, onPageChange]);
8938
8957
  const finalColumns = useMemo(() => {
8939
8958
  if (RowMenu) {
8940
8959
  const actionColumn = {
@@ -9532,10 +9551,8 @@ const DistributeStorageForm = React__default.forwardRef(function DistributeStora
9532
9551
  distributeStorage: validators.distributeStorage(v)
9533
9552
  });
9534
9553
  },
9535
- onBlur: () => {
9536
- },
9537
- onFocus: () => {
9538
- }
9554
+ onBlur: () => void 0,
9555
+ onFocus: () => void 0
9539
9556
  },
9540
9557
  min: 1,
9541
9558
  meta: {},
@@ -11557,7 +11574,7 @@ const EventsTable = ({ uid }) => {
11557
11574
  width: 120,
11558
11575
  render(value2) {
11559
11576
  const colorMap = {
11560
- "Warning": "red",
11577
+ "Warning": "warning",
11561
11578
  "Normal": "green"
11562
11579
  };
11563
11580
  return /* @__PURE__ */ jsxRuntimeExports.jsx(StatusCapsule, { color: colorMap[value2], className: cx_default(StateTagStyle, "no-background"), children: i18n2.t(`dovetail.${value2.toLowerCase()}`) });
@@ -12158,40 +12175,413 @@ function KeyValueSecret(props) {
12158
12175
  })
12159
12176
  });
12160
12177
  }
12161
- const NodeTaintsTable = ({ taints = [] }) => {
12162
- const { t: t2 } = useTranslation();
12163
- const component = useContext(ComponentContext);
12164
- const Table2 = component.Table || Table$1;
12165
- const taintsWithId = addId(taints, "key");
12166
- const columns = [
12167
- {
12168
- key: "key",
12169
- display: true,
12170
- dataIndex: "key",
12171
- title: t2("dovetail.key"),
12172
- width: 120,
12173
- sortable: true
12174
- },
12175
- {
12176
- key: "value",
12177
- display: true,
12178
- dataIndex: "value",
12179
- title: t2("dovetail.value"),
12180
- width: 120,
12181
- sortable: true
12182
- },
12183
- {
12178
+ function validateLabelKey(key2) {
12179
+ const labelPrefixRegex = /(^[a-zA-Z0-9]$)|(^[a-zA-Z0-9][a-zA-Z0-9\.]*[a-zA-Z0-9]$)/;
12180
+ const labelNameRegex = /(^[a-zA-Z0-9]$)|(^[a-zA-Z0-9][a-zA-Z0-9\.\-]*[a-zA-Z0-9]$)/;
12181
+ let prefix, name2;
12182
+ const splitResult = key2.split("/");
12183
+ if (splitResult.length === 1) {
12184
+ name2 = splitResult[0];
12185
+ } else {
12186
+ prefix = splitResult[0];
12187
+ name2 = splitResult[1];
12188
+ }
12189
+ if (prefix === "") {
12190
+ return { isValid: false, errorMessage: "EMPTY_PREFIX" };
12191
+ }
12192
+ if (prefix && !labelPrefixRegex.test(prefix)) {
12193
+ return { isValid: false, errorMessage: "INVALID_PREFIX" };
12194
+ }
12195
+ if (!labelNameRegex.test(name2)) {
12196
+ return { isValid: false, errorMessage: "INVALID_NAME" };
12197
+ }
12198
+ if (prefix && prefix.length > 253) {
12199
+ return { isValid: false, errorMessage: "MAX_253" };
12200
+ }
12201
+ if (name2 && name2.length > 63) {
12202
+ return { isValid: false, errorMessage: "MAX_63" };
12203
+ }
12204
+ return { isValid: true };
12205
+ }
12206
+ function validateLabelValue(value2) {
12207
+ const labelValueRegex = /(^[a-zA-Z0-9]$)|(^[a-zA-Z0-9][a-zA-Z0-9\.\-]*[a-zA-Z0-9]$)/;
12208
+ if (value2 === "") {
12209
+ return { isValid: true };
12210
+ }
12211
+ if (value2.length > 63) {
12212
+ return { isValid: false, errorMessage: "MAX_63" };
12213
+ }
12214
+ if (!labelValueRegex.test(value2)) {
12215
+ return { isValid: false, errorMessage: "INVALID_VALUE" };
12216
+ }
12217
+ return { isValid: true };
12218
+ }
12219
+ const LabelFormatPopover_105yfzn = "";
12220
+ const PodLabelFormatRulePopoverStyle = "p5jt6nm";
12221
+ const LabelFormatPopover = () => {
12222
+ const {
12223
+ t: t2
12224
+ } = useTranslation();
12225
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Popover, {
12226
+ overlayClassName: PodLabelFormatRulePopoverStyle,
12227
+ placement: "bottomRight",
12228
+ content: /* @__PURE__ */ jsxRuntimeExports.jsx(AntdTable, {
12229
+ bordered: true,
12230
+ dataSource: [{
12231
+ object: t2("dovetail.key"),
12232
+ contains: t2("dovetail.suffix"),
12233
+ optional: t2("dovetail.no"),
12234
+ rule: [t2("dovetail.suffix_format_rule_1"), t2("dovetail.suffix_format_rule_2"), t2("dovetail.suffix_format_rule_3")]
12235
+ }, {
12236
+ object: t2("dovetail.key"),
12237
+ contains: t2("dovetail.name"),
12238
+ optional: t2("dovetail.yes"),
12239
+ rule: [t2("dovetail.name_format_rule_1"), t2("dovetail.name_format_rule_2"), t2("dovetail.name_format_rule_3")]
12240
+ }, {
12241
+ object: t2("dovetail.value"),
12242
+ contains: t2("dovetail.name"),
12243
+ optional: t2("dovetail.no"),
12244
+ rule: [t2("dovetail.name_format_rule_1"), t2("dovetail.name_format_rule_2"), t2("dovetail.name_format_rule_3")]
12245
+ }],
12246
+ columns: [{
12247
+ key: "object",
12248
+ title: t2("dovetail.object"),
12249
+ dataIndex: "object",
12250
+ render: (cell, record, index2) => {
12251
+ return {
12252
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", {
12253
+ className: Typo.Label.l4_bold,
12254
+ children: cell
12255
+ }),
12256
+ props: {
12257
+ rowSpan: index2 === 0 ? 2 : index2 === 1 ? 0 : 1
12258
+ }
12259
+ };
12260
+ }
12261
+ }, {
12262
+ key: "contains",
12263
+ title: t2("dovetail.contains"),
12264
+ dataIndex: "contains"
12265
+ }, {
12266
+ key: "optional",
12267
+ title: t2("dovetail.optional"),
12268
+ dataIndex: "optional"
12269
+ }, {
12270
+ key: "rule",
12271
+ title: t2("dovetail.format_requirements"),
12272
+ dataIndex: "rule",
12273
+ render: (cell) => {
12274
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("ul", {
12275
+ className: "rule-list",
12276
+ children: cell.map((rule2, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx("li", {
12277
+ children: rule2
12278
+ }, index2))
12279
+ });
12280
+ }
12281
+ }],
12282
+ pagination: false
12283
+ }),
12284
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Button, {
12285
+ size: "small",
12286
+ type: "link",
12287
+ children: t2("dovetail.look_format_requirement")
12288
+ })
12289
+ });
12290
+ };
12291
+ const KeyValueTableForm_1eydq7y = "";
12292
+ function _KeyValueTableFormForm(props, ref) {
12293
+ const {
12294
+ defaultValue,
12295
+ onSubmit,
12296
+ extraColumns,
12297
+ addButtonText
12298
+ } = props;
12299
+ const {
12300
+ t: t2
12301
+ } = useTranslation();
12302
+ const [value2, setValue] = useState([]);
12303
+ const tableFormRef = useRef(null);
12304
+ useImperativeHandle(ref, () => ({
12305
+ submit: () => {
12306
+ return new Promise((res, rej) => {
12307
+ var _a;
12308
+ (_a = tableFormRef.current) == null ? void 0 : _a.validateWholeFields();
12309
+ setTimeout(() => {
12310
+ var _a2;
12311
+ const isValid = (_a2 = tableFormRef.current) == null ? void 0 : _a2.isValid();
12312
+ if (isValid) {
12313
+ res(onSubmit(value2));
12314
+ } else {
12315
+ rej();
12316
+ }
12317
+ }, 0);
12318
+ });
12319
+ }
12320
+ }), [onSubmit, value2]);
12321
+ const renderTextAreaFunc = ({
12322
+ value: value22,
12323
+ onChange
12324
+ }) => {
12325
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(TextArea, {
12326
+ autoSize: true,
12327
+ className: "clsjtk2",
12328
+ size: "small",
12329
+ value: value22,
12330
+ onChange: (e2) => {
12331
+ onChange(e2.target.value);
12332
+ }
12333
+ });
12334
+ };
12335
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(Space, {
12336
+ size: 8,
12337
+ direction: "vertical",
12338
+ className: "cq3mbby",
12339
+ children: [/* @__PURE__ */ jsxRuntimeExports.jsx(TableForm, {
12340
+ ref: tableFormRef,
12341
+ onBodyChange: (value22) => {
12342
+ setValue(value22);
12343
+ },
12344
+ columns: [{
12345
+ key: "key",
12346
+ title: t2("dovetail.key"),
12347
+ type: "input",
12348
+ validator: ({
12349
+ value: value22
12350
+ }) => {
12351
+ if (!value22)
12352
+ return t2("dovetail.key_empty_text");
12353
+ const {
12354
+ isValid
12355
+ } = validateLabelKey(value22 || "");
12356
+ if (!isValid)
12357
+ return t2("dovetail.format_error");
12358
+ },
12359
+ render: renderTextAreaFunc
12360
+ }, {
12361
+ key: "value",
12362
+ title: t2("dovetail.value_optional"),
12363
+ type: "input",
12364
+ validator: ({
12365
+ value: value22
12366
+ }) => {
12367
+ const {
12368
+ isValid
12369
+ } = validateLabelValue(value22 || "");
12370
+ if (!isValid)
12371
+ return t2("dovetail.format_error");
12372
+ },
12373
+ render: renderTextAreaFunc
12374
+ }, ...extraColumns || []],
12375
+ disableBatchFilling: true,
12376
+ hideEmptyTable: true,
12377
+ rowAddConfig: {
12378
+ addible: true,
12379
+ text: () => addButtonText
12380
+ },
12381
+ defaultData: defaultValue,
12382
+ row: {
12383
+ deletable: true
12384
+ }
12385
+ }), /* @__PURE__ */ jsxRuntimeExports.jsx(LabelFormatPopover, {})]
12386
+ });
12387
+ }
12388
+ const KeyValueTableFormForm = React__default.forwardRef(_KeyValueTableFormForm);
12389
+ const EditNodeTaintForm_cgov7z = "";
12390
+ const UlStyle = "u19jcs7t";
12391
+ const EditNodeTaintForm = React__default.forwardRef(function EditNodeTaintForm2(props, ref) {
12392
+ const {
12393
+ nodeModel
12394
+ } = props;
12395
+ const {
12396
+ mutateAsync
12397
+ } = useUpdate();
12398
+ const {
12399
+ t: t2
12400
+ } = useTranslation();
12401
+ const defaultValue = useMemo(() => {
12402
+ var _a;
12403
+ return ((_a = nodeModel._rawYaml.spec) == null ? void 0 : _a.taints) || [];
12404
+ }, [nodeModel]);
12405
+ const onSubmit = useCallback((_value) => {
12406
+ const value2 = _value;
12407
+ const newYaml = nodeModel._globalStore.restoreItem(nodeModel);
12408
+ if (newYaml.spec) {
12409
+ newYaml.spec.taints = value2;
12410
+ }
12411
+ pruneBeforeEdit(newYaml);
12412
+ return mutateAsync({
12413
+ id: nodeModel.id,
12414
+ resource: nodeModel.name || "",
12415
+ values: newYaml,
12416
+ meta: {
12417
+ resourceBasePath: nodeModel.apiVersion,
12418
+ kind: nodeModel.kind
12419
+ },
12420
+ successNotification() {
12421
+ return {
12422
+ message: t2("dovetail.edit_node_taint_success_toast", {
12423
+ kind: nodeModel.kind,
12424
+ name: nodeModel.metadata.name,
12425
+ interpolation: {
12426
+ escapeValue: false
12427
+ }
12428
+ }),
12429
+ type: "success"
12430
+ };
12431
+ },
12432
+ errorNotification: false
12433
+ });
12434
+ }, [nodeModel, mutateAsync, t2]);
12435
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(KeyValueTableFormForm, {
12436
+ ref,
12437
+ defaultValue,
12438
+ onSubmit,
12439
+ addButtonText: t2("dovetail.add_taint"),
12440
+ extraColumns: [{
12184
12441
  key: "effect",
12185
- display: true,
12186
- dataIndex: "effect",
12187
12442
  title: t2("dovetail.effect"),
12188
- width: 120,
12189
- sortable: true,
12190
- render: (value2) => {
12191
- return t2(`dovetail.node_taint_${value2}`);
12443
+ render: ({
12444
+ value: value2,
12445
+ onChange
12446
+ }) => {
12447
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Select, {
12448
+ input: {},
12449
+ value: value2,
12450
+ onChange,
12451
+ size: "small",
12452
+ children: getOptions([{
12453
+ value: "NoSchedule",
12454
+ children: t2(`dovetail.node_taint_${"NoSchedule"}`),
12455
+ suffix: /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip, {
12456
+ title: /* @__PURE__ */ jsxRuntimeExports.jsx(TaintEffectTooltip, {
12457
+ effect: "NoSchedule"
12458
+ /* NoSchedule */
12459
+ }),
12460
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon$1, {
12461
+ src: InfoICircleFill16GrayIcon,
12462
+ hoverSrc: InfoICircleFill16Gray70Icon
12463
+ })
12464
+ })
12465
+ }, {
12466
+ value: "PreferNoSchedule",
12467
+ children: t2(`dovetail.node_taint_${"PreferNoSchedule"}`),
12468
+ suffix: /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip, {
12469
+ title: /* @__PURE__ */ jsxRuntimeExports.jsx(TaintEffectTooltip, {
12470
+ effect: "PreferNoSchedule"
12471
+ /* PreferNoSchedule */
12472
+ }),
12473
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon$1, {
12474
+ src: InfoICircleFill16GrayIcon,
12475
+ hoverSrc: InfoICircleFill16Gray70Icon
12476
+ })
12477
+ })
12478
+ }, {
12479
+ value: "NoExecute",
12480
+ children: t2(`dovetail.node_taint_${"NoExecute"}`),
12481
+ suffix: /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip, {
12482
+ title: /* @__PURE__ */ jsxRuntimeExports.jsx(TaintEffectTooltip, {
12483
+ effect: "NoExecute"
12484
+ /* NoExecute */
12485
+ }),
12486
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon$1, {
12487
+ src: InfoICircleFill16GrayIcon,
12488
+ hoverSrc: InfoICircleFill16Gray70Icon
12489
+ })
12490
+ })
12491
+ }])
12492
+ });
12493
+ },
12494
+ validator: ({
12495
+ value: value2
12496
+ }) => {
12497
+ if (!value2)
12498
+ return t2("dovetail.taint_effect_empty_text");
12192
12499
  }
12500
+ }]
12501
+ });
12502
+ });
12503
+ const TaintEffectTooltip = ({
12504
+ effect: effect2
12505
+ }) => {
12506
+ const {
12507
+ t: t2
12508
+ } = useTranslation();
12509
+ const TaintEffectTooltipTextConfig = {
12510
+ [
12511
+ "NoSchedule"
12512
+ /* NoSchedule */
12513
+ ]: {
12514
+ title: "NoSchedule",
12515
+ tooltips: [t2("dovetail.taint_effect_NoSchedule_tooltip_1"), t2("dovetail.taint_effect_NoSchedule_tooltip_2")]
12516
+ },
12517
+ [
12518
+ "PreferNoSchedule"
12519
+ /* PreferNoSchedule */
12520
+ ]: {
12521
+ title: "PreferNoSchedule",
12522
+ tooltips: [t2("dovetail.taint_effect_PreferNoSchedule_tooltip_1"), t2("dovetail.taint_effect_PreferNoSchedule_tooltip_2"), t2("dovetail.taint_effect_PreferNoSchedule_tooltip_3")]
12523
+ },
12524
+ [
12525
+ "NoExecute"
12526
+ /* NoExecute */
12527
+ ]: {
12528
+ title: "NoExecute",
12529
+ tooltips: [t2("dovetail.taint_effect_NoExecute_tooltip_3")]
12193
12530
  }
12194
- ];
12531
+ };
12532
+ const config = TaintEffectTooltipTextConfig[effect2];
12533
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", {
12534
+ children: [/* @__PURE__ */ jsxRuntimeExports.jsx("b", {
12535
+ children: config.title
12536
+ }), /* @__PURE__ */ jsxRuntimeExports.jsx("ul", {
12537
+ className: UlStyle,
12538
+ children: config.tooltips.map((tooltip, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx("li", {
12539
+ children: tooltip
12540
+ }, index2))
12541
+ })]
12542
+ });
12543
+ };
12544
+ const NodeTaintsTable_wrxeox = "";
12545
+ const EffectStyle = "evoxbc1";
12546
+ const NodeTaintsTable = ({
12547
+ taints = []
12548
+ }) => {
12549
+ const {
12550
+ t: t2
12551
+ } = useTranslation();
12552
+ const component = useContext(ComponentContext);
12553
+ const Table2 = component.Table || Table$1;
12554
+ const taintsWithId = addId(taints, "key");
12555
+ const columns = [{
12556
+ key: "key",
12557
+ display: true,
12558
+ dataIndex: "key",
12559
+ title: t2("dovetail.key"),
12560
+ sortable: true
12561
+ }, {
12562
+ key: "value",
12563
+ display: true,
12564
+ dataIndex: "value",
12565
+ title: t2("dovetail.value"),
12566
+ sortable: true
12567
+ }, {
12568
+ key: "effect",
12569
+ display: true,
12570
+ dataIndex: "effect",
12571
+ title: t2("dovetail.effect"),
12572
+ sortable: true,
12573
+ render: (value2) => {
12574
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip, {
12575
+ title: /* @__PURE__ */ jsxRuntimeExports.jsx(TaintEffectTooltip, {
12576
+ effect: value2
12577
+ }),
12578
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", {
12579
+ className: EffectStyle,
12580
+ children: t2(`dovetail.node_taint_${value2}`)
12581
+ })
12582
+ });
12583
+ }
12584
+ }];
12195
12585
  const {
12196
12586
  data: finalData,
12197
12587
  currentPage,
@@ -12200,40 +12590,34 @@ const NodeTaintsTable = ({ taints = [] }) => {
12200
12590
  } = useTableData({
12201
12591
  data: taintsWithId,
12202
12592
  columns,
12203
- defaultSorters: [
12204
- {
12205
- field: "lastUpdateTime",
12206
- order: "desc"
12207
- }
12208
- ]
12593
+ defaultSorters: [{
12594
+ field: "lastUpdateTime",
12595
+ order: "desc"
12596
+ }]
12209
12597
  });
12210
12598
  const currentSize = 10;
12211
12599
  if (taintsWithId.length === 0) {
12212
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
12213
- WidgetErrorContent,
12214
- {
12215
- errorText: t2("dovetail.no_resource", { kind: t2("dovetail.taint") }),
12216
- type: ErrorContentType.Card
12217
- }
12218
- );
12600
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(WidgetErrorContent, {
12601
+ errorText: t2("dovetail.no_resource", {
12602
+ kind: t2("dovetail.taint")
12603
+ }),
12604
+ type: ErrorContentType.Card
12605
+ });
12219
12606
  }
12220
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
12221
- Table2,
12222
- {
12223
- tableKey: "condition",
12224
- loading: false,
12225
- data: finalData,
12226
- total: taintsWithId.length,
12227
- columns: addDefaultRenderToColumns(columns),
12228
- rowKey: "key",
12229
- empty: t2("dovetail.empty"),
12230
- defaultSize: currentSize,
12231
- currentPage,
12232
- onPageChange,
12233
- onSorterChange,
12234
- showMenuColumn: false
12235
- }
12236
- );
12607
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Table2, {
12608
+ tableKey: "condition",
12609
+ loading: false,
12610
+ data: finalData,
12611
+ total: taintsWithId.length,
12612
+ columns: addDefaultRenderToColumns(columns),
12613
+ rowKey: "key",
12614
+ empty: t2("dovetail.empty"),
12615
+ defaultSize: currentSize,
12616
+ currentPage,
12617
+ onPageChange,
12618
+ onSorterChange,
12619
+ showMenuColumn: false
12620
+ });
12237
12621
  };
12238
12622
  function PVVolumeModeDisplay(props) {
12239
12623
  const { value: value2 } = props;
@@ -18606,7 +18990,6 @@ const PodLog = ({
18606
18990
  const [currentItemCount, setCurrentItemCount] = useState(0);
18607
18991
  const [paused, setPaused] = useState(false);
18608
18992
  const [wrap, setWrap] = useState(false);
18609
- const [linesBehind, setLinesBehind] = useState(0);
18610
18993
  const logViewerRef = useRef(null);
18611
18994
  const abortControllerRef = useRef(null);
18612
18995
  const dataProvider2 = useDataProvider();
@@ -18620,10 +19003,6 @@ const PodLog = ({
18620
19003
  if (logViewerRef && logViewerRef.current) {
18621
19004
  logViewerRef.current.scrollToBottom();
18622
19005
  }
18623
- } else if (logs.length !== currentItemCount) {
18624
- setLinesBehind(logs.length - currentItemCount);
18625
- } else {
18626
- setLinesBehind(0);
18627
19006
  }
18628
19007
  }, [paused, logs, currentItemCount]);
18629
19008
  const onScroll = (params) => {
@@ -18742,7 +19121,6 @@ const PodLog = ({
18742
19121
  setSelectedContainer(newValue);
18743
19122
  setLogs([]);
18744
19123
  setPaused(false);
18745
- setLinesBehind(0);
18746
19124
  },
18747
19125
  value: selectedContainer
18748
19126
  },
@@ -37997,7 +38375,7 @@ const Separator = () => {
37997
38375
  });
37998
38376
  };
37999
38377
  const MonacoYamlEditor = React__default.lazy(() => Promise.resolve().then(() => MonacoYamlEditor$2));
38000
- const MonacoYamlDiffEditor = React__default.lazy(() => import("./MonacoYamlDiffEditor-10d71161.js"));
38378
+ const MonacoYamlDiffEditor = React__default.lazy(() => import("./MonacoYamlDiffEditor-814adc94.js"));
38001
38379
  const YamlEditorComponent = forwardRef(
38002
38380
  function YamlEditorComponent2(props, ref) {
38003
38381
  const {
@@ -39056,218 +39434,6 @@ function CronJobDropdown(props) {
39056
39434
  }
39057
39435
  ) : null });
39058
39436
  }
39059
- function validateLabelKey(key2) {
39060
- const labelPrefixRegex = /(^[a-zA-Z0-9]$)|(^[a-zA-Z0-9][a-zA-Z0-9\.]*[a-zA-Z0-9]$)/;
39061
- const labelNameRegex = /(^[a-zA-Z0-9]$)|(^[a-zA-Z0-9][a-zA-Z0-9\.\-]*[a-zA-Z0-9]$)/;
39062
- let prefix, name2;
39063
- const splitResult = key2.split("/");
39064
- if (splitResult.length === 1) {
39065
- name2 = splitResult[0];
39066
- } else {
39067
- prefix = splitResult[0];
39068
- name2 = splitResult[1];
39069
- }
39070
- if (prefix === "") {
39071
- return { isValid: false, errorMessage: "EMPTY_PREFIX" };
39072
- }
39073
- if (prefix && !labelPrefixRegex.test(prefix)) {
39074
- return { isValid: false, errorMessage: "INVALID_PREFIX" };
39075
- }
39076
- if (!labelNameRegex.test(name2)) {
39077
- return { isValid: false, errorMessage: "INVALID_NAME" };
39078
- }
39079
- if (prefix && prefix.length > 253) {
39080
- return { isValid: false, errorMessage: "MAX_253" };
39081
- }
39082
- if (name2 && name2.length > 63) {
39083
- return { isValid: false, errorMessage: "MAX_63" };
39084
- }
39085
- return { isValid: true };
39086
- }
39087
- function validateLabelValue(value2) {
39088
- const labelValueRegex = /(^[a-zA-Z0-9]$)|(^[a-zA-Z0-9][a-zA-Z0-9\.\-]*[a-zA-Z0-9]$)/;
39089
- if (value2 === "") {
39090
- return { isValid: true };
39091
- }
39092
- if (value2.length > 63) {
39093
- return { isValid: false, errorMessage: "MAX_63" };
39094
- }
39095
- if (!labelValueRegex.test(value2)) {
39096
- return { isValid: false, errorMessage: "INVALID_VALUE" };
39097
- }
39098
- return { isValid: true };
39099
- }
39100
- const LabelFormatPopover_105yfzn = "";
39101
- const PodLabelFormatRulePopoverStyle = "p5jt6nm";
39102
- const LabelFormatPopover = () => {
39103
- const {
39104
- t: t2
39105
- } = useTranslation();
39106
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Popover, {
39107
- overlayClassName: PodLabelFormatRulePopoverStyle,
39108
- placement: "bottomRight",
39109
- content: /* @__PURE__ */ jsxRuntimeExports.jsx(AntdTable, {
39110
- bordered: true,
39111
- dataSource: [{
39112
- object: t2("dovetail.key"),
39113
- contains: t2("dovetail.suffix"),
39114
- optional: t2("dovetail.no"),
39115
- rule: [t2("dovetail.suffix_format_rule_1"), t2("dovetail.suffix_format_rule_2"), t2("dovetail.suffix_format_rule_3")]
39116
- }, {
39117
- object: t2("dovetail.key"),
39118
- contains: t2("dovetail.name"),
39119
- optional: t2("dovetail.yes"),
39120
- rule: [t2("dovetail.name_format_rule_1"), t2("dovetail.name_format_rule_2"), t2("dovetail.name_format_rule_3")]
39121
- }, {
39122
- object: t2("dovetail.value"),
39123
- contains: t2("dovetail.name"),
39124
- optional: t2("dovetail.no"),
39125
- rule: [t2("dovetail.name_format_rule_1"), t2("dovetail.name_format_rule_2"), t2("dovetail.name_format_rule_3")]
39126
- }],
39127
- columns: [{
39128
- key: "object",
39129
- title: t2("dovetail.object"),
39130
- dataIndex: "object",
39131
- render: (cell, record, index2) => {
39132
- return {
39133
- children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", {
39134
- className: Typo.Label.l4_bold,
39135
- children: cell
39136
- }),
39137
- props: {
39138
- rowSpan: index2 === 0 ? 2 : index2 === 1 ? 0 : 1
39139
- }
39140
- };
39141
- }
39142
- }, {
39143
- key: "contains",
39144
- title: t2("dovetail.contains"),
39145
- dataIndex: "contains"
39146
- }, {
39147
- key: "optional",
39148
- title: t2("dovetail.optional"),
39149
- dataIndex: "optional"
39150
- }, {
39151
- key: "rule",
39152
- title: t2("dovetail.format_requirements"),
39153
- dataIndex: "rule",
39154
- render: (cell) => {
39155
- return /* @__PURE__ */ jsxRuntimeExports.jsx("ul", {
39156
- className: "rule-list",
39157
- children: cell.map((rule2, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx("li", {
39158
- children: rule2
39159
- }, index2))
39160
- });
39161
- }
39162
- }],
39163
- pagination: false
39164
- }),
39165
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Button, {
39166
- size: "small",
39167
- type: "link",
39168
- children: t2("dovetail.look_format_requirement")
39169
- })
39170
- });
39171
- };
39172
- const KeyValueTableForm_1eydq7y = "";
39173
- function _KeyValueTableFormForm(props, ref) {
39174
- const {
39175
- defaultValue,
39176
- onSubmit,
39177
- extraColumns,
39178
- addButtonText
39179
- } = props;
39180
- const {
39181
- t: t2
39182
- } = useTranslation();
39183
- const [value2, setValue] = useState([]);
39184
- const tableFormRef = useRef(null);
39185
- useImperativeHandle(ref, () => ({
39186
- submit: () => {
39187
- return new Promise((res, rej) => {
39188
- var _a;
39189
- (_a = tableFormRef.current) == null ? void 0 : _a.validateWholeFields();
39190
- setTimeout(() => {
39191
- var _a2;
39192
- const isValid = (_a2 = tableFormRef.current) == null ? void 0 : _a2.isValid();
39193
- if (isValid) {
39194
- res(onSubmit(value2));
39195
- } else {
39196
- rej();
39197
- }
39198
- }, 0);
39199
- });
39200
- }
39201
- }), [onSubmit, value2]);
39202
- const renderTextAreaFunc = ({
39203
- value: value22,
39204
- onChange
39205
- }) => {
39206
- return /* @__PURE__ */ jsxRuntimeExports.jsx(TextArea, {
39207
- autoSize: true,
39208
- className: "clsjtk2",
39209
- size: "small",
39210
- value: value22,
39211
- onChange: (e2) => {
39212
- onChange(e2.target.value);
39213
- }
39214
- });
39215
- };
39216
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(Space, {
39217
- size: 8,
39218
- direction: "vertical",
39219
- className: "cq3mbby",
39220
- children: [/* @__PURE__ */ jsxRuntimeExports.jsx(TableForm, {
39221
- ref: tableFormRef,
39222
- onBodyChange: (value22) => {
39223
- setValue(value22);
39224
- },
39225
- columns: [{
39226
- key: "key",
39227
- title: t2("dovetail.key"),
39228
- type: "input",
39229
- validator: ({
39230
- value: value22
39231
- }) => {
39232
- if (!value22)
39233
- return t2("dovetail.key_empty_text");
39234
- const {
39235
- isValid,
39236
- errorMessage
39237
- } = validateLabelKey(value22 || "");
39238
- if (!isValid)
39239
- return t2("dovetail.format_error");
39240
- },
39241
- render: renderTextAreaFunc
39242
- }, {
39243
- key: "value",
39244
- title: t2("dovetail.value_optional"),
39245
- type: "input",
39246
- validator: ({
39247
- value: value22
39248
- }) => {
39249
- const {
39250
- isValid
39251
- } = validateLabelValue(value22 || "");
39252
- if (!isValid)
39253
- return t2("dovetail.format_error");
39254
- },
39255
- render: renderTextAreaFunc
39256
- }, ...extraColumns || []],
39257
- disableBatchFilling: true,
39258
- hideEmptyTable: true,
39259
- rowAddConfig: {
39260
- addible: true,
39261
- text: () => addButtonText
39262
- },
39263
- defaultData: defaultValue,
39264
- row: {
39265
- deletable: true
39266
- }
39267
- }), /* @__PURE__ */ jsxRuntimeExports.jsx(LabelFormatPopover, {})]
39268
- });
39269
- }
39270
- const KeyValueTableFormForm = React__default.forwardRef(_KeyValueTableFormForm);
39271
39437
  const EditLabelForm = React__default.forwardRef(
39272
39438
  function EditLabelForm2(props, ref) {
39273
39439
  var _a;
@@ -39332,26 +39498,23 @@ function EditLabelDropdownMenuItem(props) {
39332
39498
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
39333
39499
  Menu$1.Item,
39334
39500
  {
39501
+ ...props,
39335
39502
  className: "ant-dropdown-menu-item",
39336
- onClick: () => {
39503
+ onClick: (e2) => {
39504
+ var _a;
39337
39505
  const modalProps = {
39338
39506
  formRef,
39339
39507
  title: t2("dovetail.edit_label"),
39340
39508
  fullscreen: true,
39341
39509
  renderContent() {
39342
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
39343
- EditLabelForm,
39344
- {
39345
- ref: formRef,
39346
- resourceModel
39347
- }
39348
- );
39510
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(EditLabelForm, { ref: formRef, resourceModel });
39349
39511
  }
39350
39512
  };
39351
39513
  pushModal({
39352
39514
  component: EditFieldModal,
39353
39515
  props: modalProps
39354
39516
  });
39517
+ (_a = props.onClick) == null ? void 0 : _a.call(props, e2);
39355
39518
  },
39356
39519
  children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon$1, { src: EditPen16BlueIcon, children: t2("dovetail.edit_label") })
39357
39520
  }
@@ -39419,31 +39582,57 @@ function EditAnnotationDropdownMenuItem(props) {
39419
39582
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
39420
39583
  Menu$1.Item,
39421
39584
  {
39585
+ ...props,
39422
39586
  className: "ant-dropdown-menu-item",
39423
- onClick: () => {
39587
+ onClick: (e2) => {
39588
+ var _a;
39424
39589
  const modalProps = {
39425
39590
  formRef,
39426
39591
  title: t2("dovetail.edit_annotation"),
39427
39592
  fullscreen: true,
39428
39593
  renderContent() {
39429
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
39430
- EditAnnotationForm,
39431
- {
39432
- ref: formRef,
39433
- resourceModel
39434
- }
39435
- );
39594
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(EditAnnotationForm, { ref: formRef, resourceModel });
39436
39595
  }
39437
39596
  };
39438
39597
  pushModal({
39439
39598
  component: EditFieldModal,
39440
39599
  props: modalProps
39441
39600
  });
39601
+ (_a = props.onClick) == null ? void 0 : _a.call(props, e2);
39442
39602
  },
39443
39603
  children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon$1, { src: EditPen16BlueIcon, children: t2("dovetail.edit_annotation") })
39444
39604
  }
39445
39605
  );
39446
39606
  }
39607
+ function EditNodeTaintDropdownMenuItem(props) {
39608
+ const { formRef, resourceModel } = props;
39609
+ const { t: t2 } = useTranslation();
39610
+ const pushModal = usePushModal();
39611
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
39612
+ Menu$1.Item,
39613
+ {
39614
+ ...props,
39615
+ className: "ant-dropdown-menu-item",
39616
+ onClick: (e2) => {
39617
+ var _a;
39618
+ const modalProps = {
39619
+ formRef,
39620
+ title: t2("dovetail.edit_node_taint"),
39621
+ fullscreen: true,
39622
+ renderContent() {
39623
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(EditNodeTaintForm, { ref: formRef, nodeModel: resourceModel });
39624
+ }
39625
+ };
39626
+ pushModal({
39627
+ component: EditFieldModal,
39628
+ props: modalProps
39629
+ });
39630
+ (_a = props.onClick) == null ? void 0 : _a.call(props, e2);
39631
+ },
39632
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon$1, { src: EditPen16BlueIcon, children: t2("dovetail.edit_node_taint") })
39633
+ }
39634
+ );
39635
+ }
39447
39636
  const index_sazpyf = "";
39448
39637
  const WrapperStyle = "wfg6u6g";
39449
39638
  const InnerBar = ({
@@ -40683,7 +40872,7 @@ export {
40683
40872
  useGlobalStore as Z,
40684
40873
  useOpenForm as _,
40685
40874
  useApiGroupSchema as a,
40686
- PortsTableField as a$,
40875
+ PodSelectorField as a$,
40687
40876
  WidgetErrorContent as a0,
40688
40877
  Breadcrumb as a1,
40689
40878
  NameInputWidget as a2,
@@ -40694,33 +40883,33 @@ export {
40694
40883
  namespaceRules as a7,
40695
40884
  KeyValueListWidget as a8,
40696
40885
  MetadataForm as a9,
40697
- Separator as aA,
40698
- YamlEditorComponent as aB,
40699
- DeleteButton as aC,
40700
- Layout as aD,
40701
- AreaType as aE,
40702
- ImageField as aF,
40703
- ReplicaField as aG,
40704
- ConditionsField as aH,
40705
- NodeTaintsField as aI,
40706
- PodsField as aJ,
40707
- JobsField as aK,
40708
- DataField as aL,
40709
- SecretDataField as aM,
40710
- StartTimeField as aN,
40711
- ServiceTypeField as aO,
40712
- ClusterIpField as aP,
40713
- SessionAffinityField as aQ,
40714
- ServicePodsField as aR,
40715
- IngressRulesTableTabField as aS,
40716
- EventsTableTabField as aT,
40717
- NamespaceField as aU,
40718
- AgeField as aV,
40719
- LabelsField as aW,
40720
- AnnotationsField as aX,
40721
- ServiceInnerClusterAccessField as aY,
40722
- ServiceOutClusterAccessField as aZ,
40723
- PodSelectorField as a_,
40886
+ KeyValueSecret as aA,
40887
+ Separator as aB,
40888
+ YamlEditorComponent as aC,
40889
+ DeleteButton as aD,
40890
+ Layout as aE,
40891
+ AreaType as aF,
40892
+ ImageField as aG,
40893
+ ReplicaField as aH,
40894
+ ConditionsField as aI,
40895
+ NodeTaintsField as aJ,
40896
+ PodsField as aK,
40897
+ JobsField as aL,
40898
+ DataField as aM,
40899
+ SecretDataField as aN,
40900
+ StartTimeField as aO,
40901
+ ServiceTypeField as aP,
40902
+ ClusterIpField as aQ,
40903
+ SessionAffinityField as aR,
40904
+ ServicePodsField as aS,
40905
+ IngressRulesTableTabField as aT,
40906
+ EventsTableTabField as aU,
40907
+ NamespaceField as aV,
40908
+ AgeField as aW,
40909
+ LabelsField as aX,
40910
+ AnnotationsField as aY,
40911
+ ServiceInnerClusterAccessField as aZ,
40912
+ ServiceOutClusterAccessField as a_,
40724
40913
  PageShow as aa,
40725
40914
  Time as ab,
40726
40915
  ConditionsTable as ac,
@@ -40740,154 +40929,155 @@ export {
40740
40929
  K8sDropdown as aq,
40741
40930
  EditLabelDropdownMenuItem as ar,
40742
40931
  EditAnnotationDropdownMenuItem as as,
40743
- ResourceUsageBar as at,
40744
- WorkloadReplicasForm as au,
40745
- WorkloadReplicas as av,
40746
- CronjobJobsTable as aw,
40747
- KeyValue as ax,
40748
- KeyValueAnnotation as ay,
40749
- KeyValueSecret as az,
40932
+ EditNodeTaintDropdownMenuItem as at,
40933
+ ResourceUsageBar as au,
40934
+ WorkloadReplicasForm as av,
40935
+ WorkloadReplicas as aw,
40936
+ CronjobJobsTable as ax,
40937
+ KeyValue as ay,
40938
+ KeyValueAnnotation as az,
40750
40939
  useSchema as b,
40751
- PVVolumeModeDisplay as b$,
40752
- DurationField as b0,
40753
- StorageClassProvisionerField as b1,
40754
- StorageClassPvField as b2,
40755
- PVCapacityField as b3,
40756
- PVCStorageField as b4,
40757
- PVRefField as b5,
40758
- PVStorageClassField as b6,
40759
- PVPhaseField as b7,
40760
- PVVolumeModeField as b8,
40761
- PVAccessModeField as b9,
40762
- ShowGroupComponent as bA,
40763
- ShowContent as bB,
40764
- DeleteManyButton as bC,
40765
- ListPage as bD,
40766
- StateTag as bE,
40767
- DrawerShow as bF,
40768
- Menu as bG,
40769
- Table as bH,
40770
- EditButton as bI,
40771
- ReferenceLink as bJ,
40772
- ResourceLink as bK,
40773
- NS_STORE_KEY as bL,
40774
- ALL_NS as bM,
40775
- useNamespacesFilter as bN,
40776
- NamespacesFilter as bO,
40777
- FormModal as bP,
40778
- RefineFormContent as bQ,
40779
- RefineFormPage as bR,
40780
- SchemaStrategy as bS,
40781
- YamlForm as bT,
40782
- useRefineForm as bU,
40783
- ServiceInClusterAccessComponent as bV,
40784
- ServiceOutClusterAccessComponent as bW,
40785
- Tags as bX,
40786
- TextTags as bY,
40787
- PodLog as bZ,
40788
- NetworkPolicyRulesViewer as b_,
40789
- PVCPodsField as ba,
40790
- PVCRefField as bb,
40791
- PVCSIRefField as bc,
40792
- IsDefaultSCField as bd,
40793
- SCReclaimPolicyField as be,
40794
- IsSCAllowVolumeExpansionField as bf,
40795
- ResourceTableField as bg,
40796
- EventsTab as bh,
40797
- PodLogTab as bi,
40798
- BasicGroup as bj,
40799
- PodsGroup as bk,
40800
- PodContainersGroup as bl,
40801
- ServicePodsGroup as bm,
40802
- PVCPodsGroup as bn,
40803
- ConditionsGroup as bo,
40804
- NodeTaintsGroup as bp,
40805
- SecretDataGroup as bq,
40806
- JobsGroup as br,
40807
- IngressRulesGroup as bs,
40808
- PodSelectorGroup as bt,
40809
- PortsGroup as bu,
40810
- DataGroup as bv,
40811
- NetworkPolicyIngressRulesGroup as bw,
40812
- NetworkPolicyEgressRulesGroup as bx,
40813
- StorageClassPvGroup as by,
40814
- ResourceTableGroup as bz,
40940
+ NetworkPolicyRulesViewer as b$,
40941
+ PortsTableField as b0,
40942
+ DurationField as b1,
40943
+ StorageClassProvisionerField as b2,
40944
+ StorageClassPvField as b3,
40945
+ PVCapacityField as b4,
40946
+ PVCStorageField as b5,
40947
+ PVRefField as b6,
40948
+ PVStorageClassField as b7,
40949
+ PVPhaseField as b8,
40950
+ PVVolumeModeField as b9,
40951
+ ResourceTableGroup as bA,
40952
+ ShowGroupComponent as bB,
40953
+ ShowContent as bC,
40954
+ DeleteManyButton as bD,
40955
+ ListPage as bE,
40956
+ StateTag as bF,
40957
+ DrawerShow as bG,
40958
+ Menu as bH,
40959
+ Table as bI,
40960
+ EditButton as bJ,
40961
+ ReferenceLink as bK,
40962
+ ResourceLink as bL,
40963
+ NS_STORE_KEY as bM,
40964
+ ALL_NS as bN,
40965
+ useNamespacesFilter as bO,
40966
+ NamespacesFilter as bP,
40967
+ FormModal as bQ,
40968
+ RefineFormContent as bR,
40969
+ RefineFormPage as bS,
40970
+ SchemaStrategy as bT,
40971
+ YamlForm as bU,
40972
+ useRefineForm as bV,
40973
+ ServiceInClusterAccessComponent as bW,
40974
+ ServiceOutClusterAccessComponent as bX,
40975
+ Tags as bY,
40976
+ TextTags as bZ,
40977
+ PodLog as b_,
40978
+ PVAccessModeField as ba,
40979
+ PVCPodsField as bb,
40980
+ PVCRefField as bc,
40981
+ PVCSIRefField as bd,
40982
+ IsDefaultSCField as be,
40983
+ SCReclaimPolicyField as bf,
40984
+ IsSCAllowVolumeExpansionField as bg,
40985
+ ResourceTableField as bh,
40986
+ EventsTab as bi,
40987
+ PodLogTab as bj,
40988
+ BasicGroup as bk,
40989
+ PodsGroup as bl,
40990
+ PodContainersGroup as bm,
40991
+ ServicePodsGroup as bn,
40992
+ PVCPodsGroup as bo,
40993
+ ConditionsGroup as bp,
40994
+ NodeTaintsGroup as bq,
40995
+ SecretDataGroup as br,
40996
+ JobsGroup as bs,
40997
+ IngressRulesGroup as bt,
40998
+ PodSelectorGroup as bu,
40999
+ PortsGroup as bv,
41000
+ DataGroup as bw,
41001
+ NetworkPolicyIngressRulesGroup as bx,
41002
+ NetworkPolicyEgressRulesGroup as by,
41003
+ StorageClassPvGroup as bz,
40815
41004
  useDeleteModal as c,
40816
- PersistentVolumeClaimModel as c$,
40817
- Tabs as c0,
40818
- ResourceSelect as c1,
40819
- SocketStatus as c2,
40820
- Shell as c3,
40821
- PodShellModal as c4,
40822
- PodShell as c5,
40823
- ResourceTable as c6,
40824
- ErrorWrapper as c7,
40825
- ErrorContentType as c8,
40826
- BASE_INIT_VALUE as c9,
40827
- ResourceState as cA,
40828
- AccessControlAuth as cB,
40829
- Dovetail as cC,
40830
- RESOURCE_GROUP as cD,
40831
- FormType as cE,
40832
- ComponentContext as cF,
40833
- GlobalStoreContext as cG,
40834
- ConfigsContext as cH,
40835
- IngressModel as cI,
40836
- NetworkPolicyModel as cJ,
40837
- JobModel as cK,
40838
- WorkloadModel as cL,
40839
- WorkloadBaseModel as cM,
40840
- PodModel as cN,
40841
- PodMetricsModel as cO,
40842
- ResourceModel as cP,
40843
- CronJobModel as cQ,
40844
- EventModel as cR,
40845
- DeploymentModel as cS,
40846
- DaemonSetModel as cT,
40847
- StatefulSetModel as cU,
40848
- ServiceTypeEnum as cV,
40849
- ServiceModel as cW,
40850
- NodeRole as cX,
40851
- NodeModel as cY,
40852
- StorageClassModel as cZ,
40853
- PersistentVolumeModel as c_,
40854
- DEPLOYMENT_INIT_VALUE as ca,
40855
- CRONJOB_INIT_VALUE as cb,
40856
- DAEMONSET_INIT_VALUE as cc,
40857
- JOB_INIT_VALUE as cd,
40858
- STATEFULSET_INIT_VALUE as ce,
40859
- POD_INIT_VALUE as cf,
40860
- SERVICE_CLUSTER_IP_INIT_VALUE as cg,
40861
- SERVICE_NODE_PORT_INIT_VALUE as ch,
40862
- SERVICE_LOAD_BALANCER_INIT_VALUE as ci,
40863
- SERVICE_EXTERNAL_NAME_INIT_VALUE as cj,
40864
- SERVICE_HEADLESS_INIT_VALUE as ck,
40865
- INGRESS_INIT_VALUE as cl,
40866
- NETWORK_POLICY_INIT_VALUE as cm,
40867
- CONFIG_MAP_INIT_VALUE as cn,
40868
- SERVER_INSTANCE_INIT_VALUE as co,
40869
- REDEPLOY_TIMESTAMP_KEY as cp,
40870
- SECRET_OPAQUE_INIT_VALUE as cq,
40871
- SECRET_IMAGE_REPO_INIT_VALUE as cr,
40872
- SECRET_BASIC_AUTH_INIT_VALUE as cs,
40873
- SECRET_SSH_AUTH_INIT_VALUE as ct,
40874
- SECRET_TLS_INIT_VALUE as cu,
40875
- SECRET_CUSTOM_INIT_VALUE as cv,
40876
- NODE_INIT_VALUE as cw,
40877
- STORAGE_CLASS_INIT_VALUE as cx,
40878
- PV_INIT_VALUE as cy,
40879
- PVC_INIT_VALUE as cz,
41005
+ PersistentVolumeModel as c$,
41006
+ PVVolumeModeDisplay as c0,
41007
+ Tabs as c1,
41008
+ ResourceSelect as c2,
41009
+ SocketStatus as c3,
41010
+ Shell as c4,
41011
+ PodShellModal as c5,
41012
+ PodShell as c6,
41013
+ ResourceTable as c7,
41014
+ ErrorWrapper as c8,
41015
+ ErrorContentType as c9,
41016
+ PVC_INIT_VALUE as cA,
41017
+ ResourceState as cB,
41018
+ AccessControlAuth as cC,
41019
+ Dovetail as cD,
41020
+ RESOURCE_GROUP as cE,
41021
+ FormType as cF,
41022
+ ComponentContext as cG,
41023
+ GlobalStoreContext as cH,
41024
+ ConfigsContext as cI,
41025
+ IngressModel as cJ,
41026
+ NetworkPolicyModel as cK,
41027
+ JobModel as cL,
41028
+ WorkloadModel as cM,
41029
+ WorkloadBaseModel as cN,
41030
+ PodModel as cO,
41031
+ PodMetricsModel as cP,
41032
+ ResourceModel as cQ,
41033
+ CronJobModel as cR,
41034
+ EventModel as cS,
41035
+ DeploymentModel as cT,
41036
+ DaemonSetModel as cU,
41037
+ StatefulSetModel as cV,
41038
+ ServiceTypeEnum as cW,
41039
+ ServiceModel as cX,
41040
+ NodeRole as cY,
41041
+ NodeModel as cZ,
41042
+ StorageClassModel as c_,
41043
+ BASE_INIT_VALUE as ca,
41044
+ DEPLOYMENT_INIT_VALUE as cb,
41045
+ CRONJOB_INIT_VALUE as cc,
41046
+ DAEMONSET_INIT_VALUE as cd,
41047
+ JOB_INIT_VALUE as ce,
41048
+ STATEFULSET_INIT_VALUE as cf,
41049
+ POD_INIT_VALUE as cg,
41050
+ SERVICE_CLUSTER_IP_INIT_VALUE as ch,
41051
+ SERVICE_NODE_PORT_INIT_VALUE as ci,
41052
+ SERVICE_LOAD_BALANCER_INIT_VALUE as cj,
41053
+ SERVICE_EXTERNAL_NAME_INIT_VALUE as ck,
41054
+ SERVICE_HEADLESS_INIT_VALUE as cl,
41055
+ INGRESS_INIT_VALUE as cm,
41056
+ NETWORK_POLICY_INIT_VALUE as cn,
41057
+ CONFIG_MAP_INIT_VALUE as co,
41058
+ SERVER_INSTANCE_INIT_VALUE as cp,
41059
+ REDEPLOY_TIMESTAMP_KEY as cq,
41060
+ SECRET_OPAQUE_INIT_VALUE as cr,
41061
+ SECRET_IMAGE_REPO_INIT_VALUE as cs,
41062
+ SECRET_BASIC_AUTH_INIT_VALUE as ct,
41063
+ SECRET_SSH_AUTH_INIT_VALUE as cu,
41064
+ SECRET_TLS_INIT_VALUE as cv,
41065
+ SECRET_CUSTOM_INIT_VALUE as cw,
41066
+ NODE_INIT_VALUE as cx,
41067
+ STORAGE_CLASS_INIT_VALUE as cy,
41068
+ PV_INIT_VALUE as cz,
40880
41069
  dovetailRefineI18n as d,
40881
- ProviderPlugins as d0,
40882
- ModelPlugin as d1,
40883
- modelPlugin as d2,
40884
- RelationPlugin as d3,
40885
- relationPlugin as d4,
40886
- generateValueFromSchema as d5,
40887
- generateSchemaTypeValue as d6,
40888
- resolveRef as d7,
40889
- getApiVersion as d8,
40890
- pruneBeforeEdit as d9,
41070
+ PersistentVolumeClaimModel as d0,
41071
+ ProviderPlugins as d1,
41072
+ ModelPlugin as d2,
41073
+ modelPlugin as d3,
41074
+ RelationPlugin as d4,
41075
+ relationPlugin as d5,
41076
+ generateValueFromSchema as d6,
41077
+ generateSchemaTypeValue as d7,
41078
+ resolveRef as d8,
41079
+ getApiVersion as d9,
41080
+ pruneBeforeEdit as da,
40891
41081
  NameSpaceColumnRenderer as e,
40892
41082
  WorkloadRestartsColumnRenderer as f,
40893
41083
  NodeNameColumnRenderer as g,