@prorobotech/openapi-k8s-toolkit 1.4.0-alpha.3 → 1.4.0-alpha.4

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.
@@ -1,45 +1,12 @@
1
- import { j as jsxRuntimeExports, S as Spacer, u as useMultiQuery, a as useTheme, b as usePartsOfUrl, p as parseAll, c as usePermissions, s as serializeLabelsWithNoEncoding, _, d as jp, e as useDirectUnknownResource, f as useK8sSmartResource, E as EnrichedTableProvider, D as DeleteIcon, g as EditIcon, P as PaddingContainer, h as getLinkToForm, i as DeleteModal, k as DeleteModalMany } from './index-b0CnxhD6.mjs';
1
+ import { u as useMultiQuery, a as useTheme, b as usePartsOfUrl, p as parseAll, c as usePermissions, s as serializeLabelsWithNoEncoding, _, j as jp, d as useDirectUnknownResource, e as useK8sSmartResource, f as jsxRuntimeExports, R as ReadOnlyModal, E as EnrichedTableProvider, D as DeleteIcon, g as EditIcon, P as PaddingContainer, h as getLinkToForm, i as DeleteModal, k as DeleteModalMany } from './index-CLIs5B-m.mjs';
2
2
  import { useState } from 'react';
3
3
  import { useLocation, useParams, useNavigate } from 'react-router-dom';
4
- import { Modal, theme, Flex, Spin, Button } from 'antd';
4
+ import { theme, Flex, Spin, Button } from 'antd';
5
5
  import { PlusOutlined, ClearOutlined, MinusOutlined } from '@ant-design/icons';
6
6
  import '@tanstack/react-query';
7
7
  import 'novnc-next';
8
8
  import styled from 'styled-components';
9
9
 
10
- const ReadOnlyModal = ({
11
- open,
12
- close,
13
- modalTitle,
14
- modalDescriptionText,
15
- modalDescriptionTextStyle,
16
- editModalWidth,
17
- children
18
- }) => {
19
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(
20
- Modal,
21
- {
22
- title: modalTitle,
23
- open,
24
- okButtonProps: { style: { display: "none" } },
25
- onCancel: () => {
26
- close();
27
- },
28
- maskClosable: false,
29
- width: editModalWidth || 520,
30
- destroyOnHidden: true,
31
- centered: true,
32
- children: [
33
- modalDescriptionText && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
34
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: modalDescriptionTextStyle, children: modalDescriptionText }),
35
- /* @__PURE__ */ jsxRuntimeExports.jsx(Spacer, { $space: 10, $samespace: true })
36
- ] }),
37
- children
38
- ]
39
- }
40
- );
41
- };
42
-
43
10
  const ColorContainer = styled.div`
44
11
  color: ${({ $colorText }) => $colorText};
45
12
 
@@ -328,4 +295,4 @@ const EnrichedTableModal = ({
328
295
  };
329
296
 
330
297
  export { EnrichedTableModal };
331
- //# sourceMappingURL=index-1rnPhsJg.mjs.map
298
+ //# sourceMappingURL=index-C-R1fVhB.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-C-R1fVhB.mjs","sources":["../src/components/organisms/DynamicComponents/molecules/AggregatedCounterCard/molecules/EnrichedTableModal/styled.ts","../src/components/organisms/DynamicComponents/molecules/AggregatedCounterCard/molecules/EnrichedTableModal/EnrichedTableModal.tsx"],"sourcesContent":["import styled from 'styled-components'\n\ntype TColorContainerProps = {\n $colorText: string\n}\n\nconst ColorContainer = styled.div<TColorContainerProps>`\n color: ${({ $colorText }) => $colorText};\n\n & tr,\n td {\n color: ${({ $colorText }) => $colorText};\n }\n`\n\nexport const Styled = {\n ColorContainer,\n}\n","/* eslint-disable max-lines-per-function */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { FC, useState, CSSProperties } from 'react'\nimport jp from 'jsonpath'\nimport _ from 'lodash'\nimport { useLocation, useNavigate, useParams } from 'react-router-dom'\nimport { Flex, Spin, Button, theme as antdtheme } from 'antd'\nimport { PlusOutlined, ClearOutlined, MinusOutlined } from '@ant-design/icons'\nimport { EditIcon, DeleteIcon, PaddingContainer, DeleteModal, DeleteModalMany } from 'components/atoms'\nimport { EnrichedTableProvider } from 'components/molecules'\nimport { usePermissions } from 'hooks/usePermissions'\nimport { useK8sSmartResource } from 'hooks/useK8sSmartResource'\nimport { useDirectUnknownResource } from 'hooks/useDirectUnknownResource'\nimport { getLinkToForm } from 'utils/tableLocations'\nimport { useMultiQuery } from '../../../../../DynamicRendererWithProviders/providers/hybridDataProvider'\nimport { usePartsOfUrl } from '../../../../../DynamicRendererWithProviders/providers/partsOfUrlContext'\nimport { useTheme } from '../../../../../DynamicRendererWithProviders/providers/themeContext'\nimport { serializeLabelsWithNoEncoding } from '../../../../utils/EnrichedTable'\nimport { TEnrichedTableProps as TInnerProps } from '../../../../types/EnrichedTable'\nimport { parseAll } from '../../../utils'\nimport { ReadOnlyModal } from '../../../../atoms/modals'\nimport { Styled } from './styled'\n\ntype TEnrichedTableModalProps = {\n open: boolean\n onClose: () => void\n modalTitle?: string\n modalDescriptionText?: string\n modalDescriptionTextStyle?: CSSProperties\n editModalWidth?: number | string\n} & TInnerProps\n\nexport const EnrichedTableModal: FC<TEnrichedTableModalProps> = ({\n open,\n onClose,\n modalTitle,\n modalDescriptionText,\n modalDescriptionTextStyle,\n editModalWidth,\n fetchUrl,\n k8sResourceToFetch,\n pathToItems,\n additionalReqsDataToEachItem,\n cluster,\n labelSelector,\n labelSelectorFull,\n fieldSelector,\n namespace,\n k8sResource,\n dataForControls,\n baseprefix,\n pathToKey,\n ...props\n}) => {\n const location = useLocation()\n const params = useParams()\n const navigate = useNavigate()\n const { token } = antdtheme.useToken()\n\n const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([])\n const [selectedRowsData, setSelectedRowsData] = useState<{ name: string; endpoint: string }[]>([])\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState<false | { name: string; endpoint: string }>(false)\n const [isDeleteModalManyOpen, setIsDeleteModalManyOpen] = useState<false | { name: string; endpoint: string }[]>(\n false,\n )\n\n const { data: multiQueryData, isLoading: isMultiqueryLoading } = useMultiQuery()\n\n const theme = useTheme()\n const partsOfUrl = usePartsOfUrl()\n\n const replaceValues = partsOfUrl.partsOfUrl.reduce<Record<string, string | undefined>>((acc, value, index) => {\n acc[index.toString()] = value\n return acc\n }, {})\n\n const clusterPrepared = parseAll({ text: cluster, replaceValues, multiQueryData })\n\n const namespacePrepared = namespace ? parseAll({ text: namespace, replaceValues, multiQueryData }) : undefined\n\n const k8sResourcePrePrepared = k8sResource\n ? {\n apiGroup: k8sResource.apiGroup\n ? parseAll({ text: k8sResource.apiGroup, replaceValues, multiQueryData })\n : undefined,\n apiVersion: parseAll({ text: k8sResource.apiVersion, replaceValues, multiQueryData }),\n plural: parseAll({ text: k8sResource.plural, replaceValues, multiQueryData }),\n }\n : undefined\n\n const k8sResourcePrepared =\n k8sResourcePrePrepared?.apiGroup === '-'\n ? { apiVersion: k8sResourcePrePrepared.apiVersion, plural: k8sResourcePrePrepared.plural }\n : k8sResourcePrePrepared\n\n const dataForControlsPrepared = dataForControls\n ? {\n cluster: clusterPrepared,\n syntheticProject: dataForControls.syntheticProject\n ? parseAll({ text: dataForControls.syntheticProject, replaceValues, multiQueryData })\n : undefined,\n plural: parseAll({ text: dataForControls.plural, replaceValues, multiQueryData }),\n apiGroup: dataForControls.apiGroup\n ? parseAll({ text: dataForControls.apiGroup, replaceValues, multiQueryData })\n : undefined,\n apiVersion: parseAll({ text: dataForControls.apiVersion, replaceValues, multiQueryData }),\n }\n : undefined\n\n const createPermission = usePermissions({\n apiGroup: dataForControlsPrepared?.apiGroup,\n plural: dataForControlsPrepared?.plural || '',\n namespace: namespacePrepared,\n cluster: clusterPrepared,\n verb: 'create',\n refetchInterval: false,\n enabler: Boolean(dataForControlsPrepared && clusterPrepared && !isMultiqueryLoading),\n })\n\n const fetchUrlPrepared = fetchUrl ? parseAll({ text: fetchUrl, replaceValues, multiQueryData }) : undefined\n\n const k8sResourceToFetchPrepared = k8sResourceToFetch\n ? {\n apiGroup: k8sResourceToFetch.apiGroup\n ? parseAll({ text: k8sResourceToFetch.apiGroup, replaceValues, multiQueryData })\n : undefined,\n apiVersion: parseAll({ text: k8sResourceToFetch.apiVersion, replaceValues, multiQueryData }),\n plural: parseAll({ text: k8sResourceToFetch.plural, replaceValues, multiQueryData }),\n namespace: k8sResourceToFetch.namespace\n ? parseAll({ text: k8sResourceToFetch.namespace, replaceValues, multiQueryData })\n : undefined,\n }\n : undefined\n\n const sParams = new URLSearchParams()\n\n if (labelSelector && Object.keys(labelSelector).length > 0) {\n const parsedObject: Record<string, string> = Object.fromEntries(\n Object.entries(labelSelector).map(\n ([k, v]) => [k, parseAll({ text: v, replaceValues, multiQueryData })] as [string, string],\n ),\n )\n const serializedLabels = serializeLabelsWithNoEncoding(parsedObject)\n if (serializedLabels.length > 0) sParams.set('labelSelector', serializedLabels)\n }\n\n if (labelSelectorFull) {\n const root = multiQueryData[`req${labelSelectorFull.reqIndex}`]\n const value = Array.isArray(labelSelectorFull.pathToLabels)\n ? _.get(root || {}, labelSelectorFull.pathToLabels)\n : jp.query(root || {}, `$${labelSelectorFull.pathToLabels}`)[0]\n\n const serializedLabels = serializeLabelsWithNoEncoding(value)\n if (serializedLabels.length > 0) sParams.set('labelSelector', serializedLabels)\n }\n\n if (fieldSelector) {\n const parsedObject: Record<string, string> = Object.fromEntries(\n Object.entries(fieldSelector).map(\n ([k, v]) =>\n [\n parseAll({ text: k, replaceValues, multiQueryData }),\n parseAll({ text: v, replaceValues, multiQueryData }),\n ] as [string, string],\n ),\n )\n const serializedFields = serializeLabelsWithNoEncoding(parsedObject)\n\n if (serializedFields.length > 0) sParams.set('fieldSelector', serializedFields)\n }\n\n const searchParams = sParams.toString()\n\n const {\n data: fetchedData,\n isLoading: isFetchedDataLoading,\n error: fetchedDataError,\n } = useDirectUnknownResource<unknown>({\n uri: `${fetchUrlPrepared}${searchParams ? `?${searchParams}` : ''}`,\n queryKey: [`${fetchUrlPrepared}${searchParams ? `?${searchParams}` : ''}`],\n isEnabled: Boolean(!isMultiqueryLoading && fetchUrlPrepared),\n })\n\n const {\n data: fetchedDataSocket,\n isLoading: isFetchedDataSocketLoading,\n error: fetchedDataSocketError,\n } = useK8sSmartResource<{ items?: unknown }>({\n cluster: clusterPrepared || '',\n namespace: k8sResourceToFetchPrepared?.namespace,\n apiGroup: k8sResourceToFetchPrepared?.apiGroup,\n apiVersion: k8sResourceToFetchPrepared?.apiVersion || '',\n plural: k8sResourceToFetchPrepared?.plural || '',\n fieldSelector: sParams.get('fieldSelector') || undefined,\n labelSelector: sParams.get('labelSelector') || undefined,\n isEnabled: Boolean(!isMultiqueryLoading && k8sResourceToFetchPrepared),\n })\n\n if (fetchUrlPrepared && isMultiqueryLoading) {\n return <div>Loading multiquery</div>\n }\n\n if (k8sResourceToFetchPrepared && isMultiqueryLoading) {\n return <div>Loading multiquery</div>\n }\n\n // if (!fetchedData) {\n // return <div>No data has been fetched</div>\n // }\n\n if (fetchUrlPrepared && isFetchedDataLoading) {\n return (\n <Flex justify=\"center\">\n <Spin />\n </Flex>\n )\n }\n\n if (k8sResourceToFetchPrepared && isFetchedDataSocketLoading) {\n return (\n <Flex justify=\"center\">\n <Spin />\n </Flex>\n )\n }\n\n if (fetchUrlPrepared && fetchedDataError) {\n return <div>Error: {JSON.stringify(fetchedDataError)}</div>\n }\n\n if (k8sResourceToFetchPrepared && fetchedDataSocketError) {\n return <div>Error: {JSON.stringify(fetchedDataError)}</div>\n }\n\n const dataFromOneOfHooks = fetchedData || fetchedDataSocket || {}\n\n const items = Array.isArray(pathToItems)\n ? _.get(dataFromOneOfHooks || {}, pathToItems)\n : jp.query(dataFromOneOfHooks || {}, `$${pathToItems}`)[0]\n\n const itemsAlwaysArr = Array.isArray(items) ? items : []\n\n let additionalReqsData: any[] | undefined = []\n if (additionalReqsDataToEachItem) {\n additionalReqsDataToEachItem.forEach(item => {\n additionalReqsData?.push(multiQueryData[`req${item}`])\n })\n }\n additionalReqsData = additionalReqsData.length > 0 ? additionalReqsData : undefined\n\n const itemsAlwaysArrWithAdditionalData = itemsAlwaysArr.map(el => ({\n ...el,\n ...(additionalReqsData ? { additionalReqsData } : {}),\n }))\n\n // if (!items) {\n // return <div>No data on this path {JSON.stringify(pathToItems)}</div>\n // }\n\n const clearSelected = () => {\n setSelectedRowKeys([])\n setSelectedRowsData([])\n }\n\n const onDeleteHandle = (name: string, endpoint: string) => {\n setIsDeleteModalOpen({ name, endpoint })\n }\n\n const fullPath = `${location.pathname}${location.search}`\n\n const modalTitlePrepared = modalTitle ? parseAll({ text: modalTitle, replaceValues, multiQueryData }) : 'Edit'\n const modalDescriptionTextPrepared = modalDescriptionText\n ? parseAll({ text: modalDescriptionText, replaceValues, multiQueryData })\n : undefined\n\n return (\n <>\n <ReadOnlyModal\n open={open}\n close={onClose}\n modalTitle={modalTitlePrepared}\n modalDescriptionText={modalDescriptionTextPrepared}\n modalDescriptionTextStyle={modalDescriptionTextStyle}\n editModalWidth={editModalWidth}\n >\n <Styled.ColorContainer $colorText={token.colorText}>\n <EnrichedTableProvider\n tableMappingsReplaceValues={replaceValues}\n cluster={clusterPrepared}\n namespace={namespacePrepared}\n theme={theme}\n dataItems={itemsAlwaysArrWithAdditionalData}\n tableProps={{\n borderless: true,\n paginationPosition: ['bottomRight'],\n isTotalLeft: true,\n editIcon: <EditIcon />,\n deleteIcon: <DeleteIcon />,\n disablePagination: true,\n }}\n selectData={\n dataForControlsPrepared\n ? {\n selectedRowKeys,\n onChange: (\n selectedRowKeys: React.Key[],\n selectedRowsData: { name: string; endpoint: string }[],\n ) => {\n setSelectedRowKeys(selectedRowKeys)\n setSelectedRowsData(selectedRowsData)\n },\n }\n : undefined\n }\n k8sResource={k8sResourcePrepared}\n dataForControlsInternal={{ onDeleteHandle }}\n dataForControls={dataForControlsPrepared}\n withoutControls={!dataForControlsPrepared}\n baseprefix={baseprefix}\n pathToKey={pathToKey}\n {...props}\n />\n </Styled.ColorContainer>\n </ReadOnlyModal>\n {dataForControlsPrepared && (\n <PaddingContainer $padding=\"4px\">\n <Flex justify=\"space-between\">\n <Button\n type=\"primary\"\n onClick={() => {\n const url = getLinkToForm({\n cluster: clusterPrepared,\n baseprefix,\n namespace: namespacePrepared,\n syntheticProject: params.syntheticProject,\n apiGroup: dataForControlsPrepared.apiGroup,\n apiVersion: dataForControlsPrepared.apiVersion,\n plural: dataForControlsPrepared.plural,\n fullPath,\n })\n navigate(url)\n }}\n loading={createPermission.isPending}\n disabled={!createPermission.data?.status.allowed}\n >\n <PlusOutlined />\n Add\n </Button>\n {selectedRowKeys.length > 0 && (\n <Flex gap={16}>\n <Button type=\"primary\" onClick={clearSelected}>\n <ClearOutlined />\n Clear\n </Button>\n <Button type=\"primary\" onClick={() => setIsDeleteModalManyOpen(selectedRowsData)}>\n <MinusOutlined />\n Delete\n </Button>\n </Flex>\n )}\n </Flex>\n </PaddingContainer>\n )}\n {isDeleteModalOpen && (\n <DeleteModal\n name={isDeleteModalOpen.name}\n onClose={() => {\n setIsDeleteModalOpen(false)\n clearSelected()\n }}\n endpoint={isDeleteModalOpen.endpoint}\n />\n )}\n {isDeleteModalManyOpen !== false && (\n <DeleteModalMany\n data={isDeleteModalManyOpen}\n onClose={() => {\n setIsDeleteModalManyOpen(false)\n clearSelected()\n }}\n />\n )}\n </>\n )\n}\n"],"names":["antdtheme","theme","jsx","jsxs","Fragment","selectedRowKeys","selectedRowsData"],"mappings":";;;;;;;;;AAMA,MAAM,iBAAiB,MAAO,CAAA,GAAA;AAAA,SAAA,EACnB,CAAC,EAAE,UAAW,EAAA,KAAM,UAAU,CAAA;;AAAA;AAAA;AAAA,WAAA,EAI5B,CAAC,EAAE,UAAW,EAAA,KAAM,UAAU,CAAA;AAAA;AAAA,CAAA;AAIpC,MAAM,MAAS,GAAA;AAAA,EACpB;AACF,CAAA;;ACeO,MAAM,qBAAmD,CAAC;AAAA,EAC/D,IAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,oBAAA;AAAA,EACA,yBAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,kBAAA;AAAA,EACA,WAAA;AAAA,EACA,4BAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,iBAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAM,KAAA;AACJ,EAAA,MAAM,WAAW,WAAY,EAAA;AAC7B,EAAA,MAAM,SAAS,SAAU,EAAA;AACzB,EAAA,MAAM,WAAW,WAAY,EAAA;AAC7B,EAAA,MAAM,EAAE,KAAA,EAAU,GAAAA,KAAA,CAAU,QAAS,EAAA;AAErC,EAAA,MAAM,CAAC,eAAiB,EAAA,kBAAkB,CAAI,GAAA,QAAA,CAAsB,EAAE,CAAA;AACtE,EAAA,MAAM,CAAC,gBAAkB,EAAA,mBAAmB,CAAI,GAAA,QAAA,CAA+C,EAAE,CAAA;AACjG,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAI,SAAqD,KAAK,CAAA;AAC5G,EAAM,MAAA,CAAC,qBAAuB,EAAA,wBAAwB,CAAI,GAAA,QAAA;AAAA,IACxD;AAAA,GACF;AAEA,EAAA,MAAM,EAAE,IAAM,EAAA,cAAA,EAAgB,SAAW,EAAA,mBAAA,KAAwB,aAAc,EAAA;AAE/E,EAAA,MAAMC,UAAQ,QAAS,EAAA;AACvB,EAAA,MAAM,aAAa,aAAc,EAAA;AAEjC,EAAA,MAAM,gBAAgB,UAAW,CAAA,UAAA,CAAW,OAA2C,CAAC,GAAA,EAAK,OAAO,KAAU,KAAA;AAC5G,IAAI,GAAA,CAAA,KAAA,CAAM,QAAS,EAAC,CAAI,GAAA,KAAA;AACxB,IAAO,OAAA,GAAA;AAAA,GACT,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,kBAAkB,QAAS,CAAA,EAAE,MAAM,OAAS,EAAA,aAAA,EAAe,gBAAgB,CAAA;AAEjF,EAAM,MAAA,iBAAA,GAAoB,YAAY,QAAS,CAAA,EAAE,MAAM,SAAW,EAAA,aAAA,EAAe,cAAe,EAAC,CAAI,GAAA,MAAA;AAErG,EAAA,MAAM,yBAAyB,WAC3B,GAAA;AAAA,IACE,QAAA,EAAU,WAAY,CAAA,QAAA,GAClB,QAAS,CAAA,EAAE,IAAM,EAAA,WAAA,CAAY,QAAU,EAAA,aAAA,EAAe,cAAe,EAAC,CACtE,GAAA,MAAA;AAAA,IACJ,UAAA,EAAY,SAAS,EAAE,IAAA,EAAM,YAAY,UAAY,EAAA,aAAA,EAAe,gBAAgB,CAAA;AAAA,IACpF,MAAA,EAAQ,SAAS,EAAE,IAAA,EAAM,YAAY,MAAQ,EAAA,aAAA,EAAe,gBAAgB;AAAA,GAE9E,GAAA,MAAA;AAEJ,EAAM,MAAA,mBAAA,GACJ,sBAAwB,EAAA,QAAA,KAAa,GACjC,GAAA,EAAE,UAAY,EAAA,sBAAA,CAAuB,UAAY,EAAA,MAAA,EAAQ,sBAAuB,CAAA,MAAA,EAChF,GAAA,sBAAA;AAEN,EAAA,MAAM,0BAA0B,eAC5B,GAAA;AAAA,IACE,OAAS,EAAA,eAAA;AAAA,IACT,gBAAA,EAAkB,eAAgB,CAAA,gBAAA,GAC9B,QAAS,CAAA,EAAE,IAAM,EAAA,eAAA,CAAgB,gBAAkB,EAAA,aAAA,EAAe,cAAe,EAAC,CAClF,GAAA,MAAA;AAAA,IACJ,MAAA,EAAQ,SAAS,EAAE,IAAA,EAAM,gBAAgB,MAAQ,EAAA,aAAA,EAAe,gBAAgB,CAAA;AAAA,IAChF,QAAA,EAAU,eAAgB,CAAA,QAAA,GACtB,QAAS,CAAA,EAAE,IAAM,EAAA,eAAA,CAAgB,QAAU,EAAA,aAAA,EAAe,cAAe,EAAC,CAC1E,GAAA,MAAA;AAAA,IACJ,UAAA,EAAY,SAAS,EAAE,IAAA,EAAM,gBAAgB,UAAY,EAAA,aAAA,EAAe,gBAAgB;AAAA,GAE1F,GAAA,MAAA;AAEJ,EAAA,MAAM,mBAAmB,cAAe,CAAA;AAAA,IACtC,UAAU,uBAAyB,EAAA,QAAA;AAAA,IACnC,MAAA,EAAQ,yBAAyB,MAAU,IAAA,EAAA;AAAA,IAC3C,SAAW,EAAA,iBAAA;AAAA,IACX,OAAS,EAAA,eAAA;AAAA,IACT,IAAM,EAAA,QAAA;AAAA,IACN,eAAiB,EAAA,KAAA;AAAA,IACjB,OAAS,EAAA,OAAA,CAAQ,uBAA2B,IAAA,eAAA,IAAmB,CAAC,mBAAmB;AAAA,GACpF,CAAA;AAED,EAAM,MAAA,gBAAA,GAAmB,WAAW,QAAS,CAAA,EAAE,MAAM,QAAU,EAAA,aAAA,EAAe,cAAe,EAAC,CAAI,GAAA,MAAA;AAElG,EAAA,MAAM,6BAA6B,kBAC/B,GAAA;AAAA,IACE,QAAA,EAAU,kBAAmB,CAAA,QAAA,GACzB,QAAS,CAAA,EAAE,IAAM,EAAA,kBAAA,CAAmB,QAAU,EAAA,aAAA,EAAe,cAAe,EAAC,CAC7E,GAAA,MAAA;AAAA,IACJ,UAAA,EAAY,SAAS,EAAE,IAAA,EAAM,mBAAmB,UAAY,EAAA,aAAA,EAAe,gBAAgB,CAAA;AAAA,IAC3F,MAAA,EAAQ,SAAS,EAAE,IAAA,EAAM,mBAAmB,MAAQ,EAAA,aAAA,EAAe,gBAAgB,CAAA;AAAA,IACnF,SAAA,EAAW,kBAAmB,CAAA,SAAA,GAC1B,QAAS,CAAA,EAAE,IAAM,EAAA,kBAAA,CAAmB,SAAW,EAAA,aAAA,EAAe,cAAe,EAAC,CAC9E,GAAA;AAAA,GAEN,GAAA,MAAA;AAEJ,EAAM,MAAA,OAAA,GAAU,IAAI,eAAgB,EAAA;AAEpC,EAAA,IAAI,iBAAiB,MAAO,CAAA,IAAA,CAAK,aAAa,CAAA,CAAE,SAAS,CAAG,EAAA;AAC1D,IAAA,MAAM,eAAuC,MAAO,CAAA,WAAA;AAAA,MAClD,MAAA,CAAO,OAAQ,CAAA,aAAa,CAAE,CAAA,GAAA;AAAA,QAC5B,CAAC,CAAC,CAAG,EAAA,CAAC,MAAM,CAAC,CAAA,EAAG,QAAS,CAAA,EAAE,IAAM,EAAA,CAAA,EAAG,aAAe,EAAA,cAAA,EAAgB,CAAC;AAAA;AACtE,KACF;AACA,IAAM,MAAA,gBAAA,GAAmB,8BAA8B,YAAY,CAAA;AACnE,IAAA,IAAI,iBAAiB,MAAS,GAAA,CAAA,EAAW,OAAA,CAAA,GAAA,CAAI,iBAAiB,gBAAgB,CAAA;AAAA;AAGhF,EAAA,IAAI,iBAAmB,EAAA;AACrB,IAAA,MAAM,IAAO,GAAA,cAAA,CAAe,CAAM,GAAA,EAAA,iBAAA,CAAkB,QAAQ,CAAE,CAAA,CAAA;AAC9D,IAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,OAAA,CAAQ,iBAAkB,CAAA,YAAY,IACtD,CAAE,CAAA,GAAA,CAAI,IAAQ,IAAA,EAAI,EAAA,iBAAA,CAAkB,YAAY,CAChD,GAAA,EAAA,CAAG,KAAM,CAAA,IAAA,IAAQ,EAAC,EAAG,IAAI,iBAAkB,CAAA,YAAY,CAAE,CAAA,CAAA,CAAE,CAAC,CAAA;AAEhE,IAAM,MAAA,gBAAA,GAAmB,8BAA8B,KAAK,CAAA;AAC5D,IAAA,IAAI,iBAAiB,MAAS,GAAA,CAAA,EAAW,OAAA,CAAA,GAAA,CAAI,iBAAiB,gBAAgB,CAAA;AAAA;AAGhF,EAAA,IAAI,aAAe,EAAA;AACjB,IAAA,MAAM,eAAuC,MAAO,CAAA,WAAA;AAAA,MAClD,MAAA,CAAO,OAAQ,CAAA,aAAa,CAAE,CAAA,GAAA;AAAA,QAC5B,CAAC,CAAC,CAAG,EAAA,CAAC,CACJ,KAAA;AAAA,UACE,SAAS,EAAE,IAAA,EAAM,CAAG,EAAA,aAAA,EAAe,gBAAgB,CAAA;AAAA,UACnD,SAAS,EAAE,IAAA,EAAM,CAAG,EAAA,aAAA,EAAe,gBAAgB;AAAA;AACrD;AACJ,KACF;AACA,IAAM,MAAA,gBAAA,GAAmB,8BAA8B,YAAY,CAAA;AAEnE,IAAA,IAAI,iBAAiB,MAAS,GAAA,CAAA,EAAW,OAAA,CAAA,GAAA,CAAI,iBAAiB,gBAAgB,CAAA;AAAA;AAGhF,EAAM,MAAA,YAAA,GAAe,QAAQ,QAAS,EAAA;AAEtC,EAAM,MAAA;AAAA,IACJ,IAAM,EAAA,WAAA;AAAA,IACN,SAAW,EAAA,oBAAA;AAAA,IACX,KAAO,EAAA;AAAA,MACL,wBAAkC,CAAA;AAAA,IACpC,GAAA,EAAK,GAAG,gBAAgB,CAAA,EAAG,eAAe,CAAI,CAAA,EAAA,YAAY,KAAK,EAAE,CAAA,CAAA;AAAA,IACjE,QAAA,EAAU,CAAC,CAAA,EAAG,gBAAgB,CAAA,EAAG,eAAe,CAAI,CAAA,EAAA,YAAY,CAAK,CAAA,GAAA,EAAE,CAAE,CAAA,CAAA;AAAA,IACzE,SAAW,EAAA,OAAA,CAAQ,CAAC,mBAAA,IAAuB,gBAAgB;AAAA,GAC5D,CAAA;AAED,EAAM,MAAA;AAAA,IACJ,IAAM,EAAA,iBAAA;AAAA,IACN,SAAW,EAAA,0BAAA;AAAA,IACX,KAAO,EAAA;AAAA,MACL,mBAAyC,CAAA;AAAA,IAC3C,SAAS,eAAmB,IAAA,EAAA;AAAA,IAC5B,WAAW,0BAA4B,EAAA,SAAA;AAAA,IACvC,UAAU,0BAA4B,EAAA,QAAA;AAAA,IACtC,UAAA,EAAY,4BAA4B,UAAc,IAAA,EAAA;AAAA,IACtD,MAAA,EAAQ,4BAA4B,MAAU,IAAA,EAAA;AAAA,IAC9C,aAAe,EAAA,OAAA,CAAQ,GAAI,CAAA,eAAe,CAAK,IAAA,MAAA;AAAA,IAC/C,aAAe,EAAA,OAAA,CAAQ,GAAI,CAAA,eAAe,CAAK,IAAA,MAAA;AAAA,IAC/C,SAAW,EAAA,OAAA,CAAQ,CAAC,mBAAA,IAAuB,0BAA0B;AAAA,GACtE,CAAA;AAED,EAAA,IAAI,oBAAoB,mBAAqB,EAAA;AAC3C,IAAO,uBAAAC,qBAAA,CAAC,SAAI,QAAkB,EAAA,oBAAA,EAAA,CAAA;AAAA;AAGhC,EAAA,IAAI,8BAA8B,mBAAqB,EAAA;AACrD,IAAO,uBAAAA,qBAAA,CAAC,SAAI,QAAkB,EAAA,oBAAA,EAAA,CAAA;AAAA;AAOhC,EAAA,IAAI,oBAAoB,oBAAsB,EAAA;AAC5C,IAAA,6CACG,IAAK,EAAA,EAAA,OAAA,EAAQ,QACZ,EAAA,QAAA,kBAAAA,qBAAA,CAAC,QAAK,CACR,EAAA,CAAA;AAAA;AAIJ,EAAA,IAAI,8BAA8B,0BAA4B,EAAA;AAC5D,IAAA,6CACG,IAAK,EAAA,EAAA,OAAA,EAAQ,QACZ,EAAA,QAAA,kBAAAA,qBAAA,CAAC,QAAK,CACR,EAAA,CAAA;AAAA;AAIJ,EAAA,IAAI,oBAAoB,gBAAkB,EAAA;AACxC,IAAA,8CAAQ,KAAI,EAAA,EAAA,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,MAAQ,IAAA,CAAK,UAAU,gBAAgB;AAAA,KAAE,EAAA,CAAA;AAAA;AAGvD,EAAA,IAAI,8BAA8B,sBAAwB,EAAA;AACxD,IAAA,8CAAQ,KAAI,EAAA,EAAA,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,MAAQ,IAAA,CAAK,UAAU,gBAAgB;AAAA,KAAE,EAAA,CAAA;AAAA;AAGvD,EAAM,MAAA,kBAAA,GAAqB,WAAe,IAAA,iBAAA,IAAqB,EAAC;AAEhE,EAAM,MAAA,KAAA,GAAQ,MAAM,OAAQ,CAAA,WAAW,IACnC,CAAE,CAAA,GAAA,CAAI,sBAAsB,EAAC,EAAG,WAAW,CAC3C,GAAA,EAAA,CAAG,MAAM,kBAAsB,IAAA,IAAI,CAAI,CAAA,EAAA,WAAW,CAAE,CAAA,CAAA,CAAE,CAAC,CAAA;AAE3D,EAAA,MAAM,iBAAiB,KAAM,CAAA,OAAA,CAAQ,KAAK,CAAA,GAAI,QAAQ,EAAC;AAEvD,EAAA,IAAI,qBAAwC,EAAC;AAC7C,EAAA,IAAI,4BAA8B,EAAA;AAChC,IAAA,4BAAA,CAA6B,QAAQ,CAAQ,IAAA,KAAA;AAC3C,MAAA,kBAAA,EAAoB,IAAK,CAAA,cAAA,CAAe,CAAM,GAAA,EAAA,IAAI,EAAE,CAAC,CAAA;AAAA,KACtD,CAAA;AAAA;AAEH,EAAqB,kBAAA,GAAA,kBAAA,CAAmB,MAAS,GAAA,CAAA,GAAI,kBAAqB,GAAA,MAAA;AAE1E,EAAM,MAAA,gCAAA,GAAmC,cAAe,CAAA,GAAA,CAAI,CAAO,EAAA,MAAA;AAAA,IACjE,GAAG,EAAA;AAAA,IACH,GAAI,kBAAA,GAAqB,EAAE,kBAAA,KAAuB;AAAC,GACnD,CAAA,CAAA;AAMF,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,kBAAA,CAAmB,EAAE,CAAA;AACrB,IAAA,mBAAA,CAAoB,EAAE,CAAA;AAAA,GACxB;AAEA,EAAM,MAAA,cAAA,GAAiB,CAAC,IAAA,EAAc,QAAqB,KAAA;AACzD,IAAqB,oBAAA,CAAA,EAAE,IAAM,EAAA,QAAA,EAAU,CAAA;AAAA,GACzC;AAEA,EAAA,MAAM,WAAW,CAAG,EAAA,QAAA,CAAS,QAAQ,CAAA,EAAG,SAAS,MAAM,CAAA,CAAA;AAEvD,EAAM,MAAA,kBAAA,GAAqB,aAAa,QAAS,CAAA,EAAE,MAAM,UAAY,EAAA,aAAA,EAAe,cAAe,EAAC,CAAI,GAAA,MAAA;AACxG,EAAM,MAAA,4BAAA,GAA+B,uBACjC,QAAS,CAAA,EAAE,MAAM,oBAAsB,EAAA,aAAA,EAAe,cAAe,EAAC,CACtE,GAAA,MAAA;AAEJ,EAAA,uBAEIC,sBAAA,CAAAC,0BAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAAF,qBAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,KAAO,EAAA,OAAA;AAAA,QACP,UAAY,EAAA,kBAAA;AAAA,QACZ,oBAAsB,EAAA,4BAAA;AAAA,QACtB,yBAAA;AAAA,QACA,cAAA;AAAA,QAEA,gDAAC,MAAO,CAAA,cAAA,EAAP,EAAsB,UAAA,EAAY,MAAM,SACvC,EAAA,QAAA,kBAAAA,qBAAA;AAAA,UAAC,qBAAA;AAAA,UAAA;AAAA,YACC,0BAA4B,EAAA,aAAA;AAAA,YAC5B,OAAS,EAAA,eAAA;AAAA,YACT,SAAW,EAAA,iBAAA;AAAA,mBACXD,OAAA;AAAA,YACA,SAAW,EAAA,gCAAA;AAAA,YACX,UAAY,EAAA;AAAA,cACV,UAAY,EAAA,IAAA;AAAA,cACZ,kBAAA,EAAoB,CAAC,aAAa,CAAA;AAAA,cAClC,WAAa,EAAA,IAAA;AAAA,cACb,QAAA,wCAAW,QAAS,EAAA,EAAA,CAAA;AAAA,cACpB,UAAA,wCAAa,UAAW,EAAA,EAAA,CAAA;AAAA,cACxB,iBAAmB,EAAA;AAAA,aACrB;AAAA,YACA,YACE,uBACI,GAAA;AAAA,cACE,eAAA;AAAA,cACA,QAAA,EAAU,CACRI,gBAAAA,EACAC,iBACG,KAAA;AACH,gBAAA,kBAAA,CAAmBD,gBAAe,CAAA;AAClC,gBAAA,mBAAA,CAAoBC,iBAAgB,CAAA;AAAA;AACtC,aAEF,GAAA,MAAA;AAAA,YAEN,WAAa,EAAA,mBAAA;AAAA,YACb,uBAAA,EAAyB,EAAE,cAAe,EAAA;AAAA,YAC1C,eAAiB,EAAA,uBAAA;AAAA,YACjB,iBAAiB,CAAC,uBAAA;AAAA,YAClB,UAAA;AAAA,YACA,SAAA;AAAA,YACC,GAAG;AAAA;AAAA,SAER,EAAA;AAAA;AAAA,KACF;AAAA,IACC,uBAAA,0CACE,gBAAiB,EAAA,EAAA,QAAA,EAAS,OACzB,QAAC,kBAAAH,sBAAA,CAAA,IAAA,EAAA,EAAK,SAAQ,eACZ,EAAA,QAAA,EAAA;AAAA,sBAAAA,sBAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,SAAA;AAAA,UACL,SAAS,MAAM;AACb,YAAA,MAAM,MAAM,aAAc,CAAA;AAAA,cACxB,OAAS,EAAA,eAAA;AAAA,cACT,UAAA;AAAA,cACA,SAAW,EAAA,iBAAA;AAAA,cACX,kBAAkB,MAAO,CAAA,gBAAA;AAAA,cACzB,UAAU,uBAAwB,CAAA,QAAA;AAAA,cAClC,YAAY,uBAAwB,CAAA,UAAA;AAAA,cACpC,QAAQ,uBAAwB,CAAA,MAAA;AAAA,cAChC;AAAA,aACD,CAAA;AACD,YAAA,QAAA,CAAS,GAAG,CAAA;AAAA,WACd;AAAA,UACA,SAAS,gBAAiB,CAAA,SAAA;AAAA,UAC1B,QAAU,EAAA,CAAC,gBAAiB,CAAA,IAAA,EAAM,MAAO,CAAA,OAAA;AAAA,UAEzC,QAAA,EAAA;AAAA,4BAAAD,qBAAA,CAAC,YAAa,EAAA,EAAA,CAAA;AAAA,YAAE;AAAA;AAAA;AAAA,OAElB;AAAA,MACC,gBAAgB,MAAS,GAAA,CAAA,oBACvBC,sBAAA,CAAA,IAAA,EAAA,EAAK,KAAK,EACT,EAAA,QAAA,EAAA;AAAA,wBAAAA,sBAAA,CAAC,MAAO,EAAA,EAAA,IAAA,EAAK,SAAU,EAAA,OAAA,EAAS,aAC9B,EAAA,QAAA,EAAA;AAAA,0BAAAD,qBAAA,CAAC,aAAc,EAAA,EAAA,CAAA;AAAA,UAAE;AAAA,SAEnB,EAAA,CAAA;AAAA,wBACAC,sBAAA,CAAC,UAAO,IAAK,EAAA,SAAA,EAAU,SAAS,MAAM,wBAAA,CAAyB,gBAAgB,CAC7E,EAAA,QAAA,EAAA;AAAA,0BAAAD,qBAAA,CAAC,aAAc,EAAA,EAAA,CAAA;AAAA,UAAE;AAAA,SAEnB,EAAA;AAAA,OACF,EAAA;AAAA,KAAA,EAEJ,CACF,EAAA,CAAA;AAAA,IAED,iBACC,oBAAAA,qBAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,MAAM,iBAAkB,CAAA,IAAA;AAAA,QACxB,SAAS,MAAM;AACb,UAAA,oBAAA,CAAqB,KAAK,CAAA;AAC1B,UAAc,aAAA,EAAA;AAAA,SAChB;AAAA,QACA,UAAU,iBAAkB,CAAA;AAAA;AAAA,KAC9B;AAAA,IAED,0BAA0B,KACzB,oBAAAA,qBAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,IAAM,EAAA,qBAAA;AAAA,QACN,SAAS,MAAM;AACb,UAAA,wBAAA,CAAyB,KAAK,CAAA;AAC9B,UAAc,aAAA,EAAA;AAAA;AAChB;AAAA;AACF,GAEJ,EAAA,CAAA;AAEJ;;;;"}
@@ -44504,6 +44504,39 @@ const AnnotationsEditModal = ({
44504
44504
  );
44505
44505
  };
44506
44506
 
44507
+ const ReadOnlyModal = ({
44508
+ open,
44509
+ close,
44510
+ modalTitle,
44511
+ modalDescriptionText,
44512
+ modalDescriptionTextStyle,
44513
+ editModalWidth,
44514
+ children
44515
+ }) => {
44516
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(
44517
+ Modal,
44518
+ {
44519
+ title: modalTitle,
44520
+ open,
44521
+ okButtonProps: { style: { display: "none" } },
44522
+ onCancel: () => {
44523
+ close();
44524
+ },
44525
+ maskClosable: false,
44526
+ width: editModalWidth || 520,
44527
+ destroyOnHidden: true,
44528
+ centered: true,
44529
+ children: [
44530
+ modalDescriptionText && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
44531
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: modalDescriptionTextStyle, children: modalDescriptionText }),
44532
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Spacer$1, { $space: 10, $samespace: true })
44533
+ ] }),
44534
+ children
44535
+ ]
44536
+ }
44537
+ );
44538
+ };
44539
+
44507
44540
  const isRecordStringNumber = (value) => typeof value === "object" && value !== null && !Array.isArray(value) && Object.entries(value).every(([k, v]) => typeof k === "string" && (typeof v === "string" || typeof v === "number"));
44508
44541
  const parseLabelsArrayOfAny = (value) => {
44509
44542
  if (!Array.isArray(value)) {
@@ -77883,7 +77916,7 @@ const TolerationsModal = ({
77883
77916
  };
77884
77917
 
77885
77918
  const LazyEnrichedTableModal = lazy(
77886
- () => import('./index-1rnPhsJg.mjs').then((mod) => ({ default: mod.EnrichedTableModal }))
77919
+ () => import('./index-C-R1fVhB.mjs').then((mod) => ({ default: mod.EnrichedTableModal }))
77887
77920
  );
77888
77921
  const renderActiveType = (activeType, extraProps) => {
77889
77922
  if (!activeType) return null;
@@ -78992,34 +79025,6 @@ const buildEditUrl = (props, fullPath) => {
78992
79025
  ].filter(Boolean);
78993
79026
  return `/${parts.join("/")}?backlink=${backlink}`;
78994
79027
  };
78995
- const renderActionModal = (action, extraProps) => {
78996
- switch (action.type) {
78997
- case "edit":
78998
- return null;
78999
- case "editLabels":
79000
- return /* @__PURE__ */ jsxRuntimeExports.jsx(LabelsModal, { ...action.props, ...extraProps });
79001
- case "editAnnotations":
79002
- return /* @__PURE__ */ jsxRuntimeExports.jsx(AnnotationsModal, { ...action.props, ...extraProps });
79003
- case "editTaints":
79004
- return /* @__PURE__ */ jsxRuntimeExports.jsx(TaintsModal, { ...action.props, ...extraProps });
79005
- case "editTolerations":
79006
- return /* @__PURE__ */ jsxRuntimeExports.jsx(TolerationsModal, { ...action.props, ...extraProps });
79007
- case "delete":
79008
- return null;
79009
- case "cordon":
79010
- case "uncordon":
79011
- case "suspend":
79012
- case "resume":
79013
- case "rolloutRestart":
79014
- case "evict":
79015
- case "openKubeletConfig":
79016
- return null;
79017
- default: {
79018
- const _exhaustive = action;
79019
- return _exhaustive;
79020
- }
79021
- }
79022
- };
79023
79028
  const getActionIcon = (action) => {
79024
79029
  if (action.props.iconBase64Encoded) {
79025
79030
  return /* @__PURE__ */ jsxRuntimeExports.jsx(Styled$m.IconWrapper, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(Styled$m.IconScaler, { children: renderIcon$1(action.props.iconBase64Encoded, "currentColor") }) });
@@ -79100,6 +79105,92 @@ const buildEvictBody = (data) => {
79100
79105
  ...Object.keys(deleteOptions).length > 0 ? { deleteOptions } : {}
79101
79106
  };
79102
79107
  };
79108
+ const handleEditAction = (action, ctx, fullPath, navigate) => {
79109
+ const clusterPrepared = parseAll({ text: action.props.cluster, ...ctx });
79110
+ const namespacePrepared = action.props.namespace ? parseAll({ text: action.props.namespace, ...ctx }) : void 0;
79111
+ const syntheticProjectPrepared = action.props.syntheticProject ? parseAll({ text: action.props.syntheticProject, ...ctx }) : void 0;
79112
+ const apiGroupPrepared = action.props.apiGroup ? parseAll({ text: action.props.apiGroup, ...ctx }) : void 0;
79113
+ const apiVersionPrepared = parseAll({ text: action.props.apiVersion, ...ctx });
79114
+ const pluralPrepared = parseAll({ text: action.props.plural, ...ctx });
79115
+ const namePrepared = parseAll({ text: action.props.name, ...ctx });
79116
+ const baseprefixPrepared = action.props.baseprefix ? parseAll({ text: action.props.baseprefix, ...ctx }) : void 0;
79117
+ const url = buildEditUrl(
79118
+ {
79119
+ ...action.props,
79120
+ cluster: clusterPrepared,
79121
+ namespace: namespacePrepared,
79122
+ syntheticProject: syntheticProjectPrepared,
79123
+ apiGroup: apiGroupPrepared,
79124
+ apiVersion: apiVersionPrepared,
79125
+ plural: pluralPrepared,
79126
+ name: namePrepared,
79127
+ baseprefix: baseprefixPrepared
79128
+ },
79129
+ fullPath
79130
+ );
79131
+ navigate(url);
79132
+ };
79133
+ const handleDeleteAction = (action, ctx, setDeleteModalData) => {
79134
+ const endpointPrepared = parseAll({ text: action.props.endpoint, ...ctx });
79135
+ const namePrepared = parseAll({ text: action.props.name, ...ctx });
79136
+ const redirectToPrepared = action.props.redirectTo ? parseAll({ text: action.props.redirectTo, ...ctx }) : void 0;
79137
+ setDeleteModalData({
79138
+ name: namePrepared,
79139
+ endpoint: endpointPrepared,
79140
+ redirectTo: redirectToPrepared
79141
+ });
79142
+ };
79143
+ const handlePatchActions = (action, ctx, onSuccess, onError) => {
79144
+ const actionLabel = action.props.text || action.type;
79145
+ const endpointPrepared = parseAll({ text: action.props.endpoint, ...ctx });
79146
+ const pathToValuePrepared = parseAll({ text: action.props.pathToValue, ...ctx });
79147
+ const valuePrepared = parseValueIfString(action.props.value, ctx);
79148
+ patchEntryWithReplaceOp({
79149
+ endpoint: endpointPrepared,
79150
+ pathToValue: pathToValuePrepared,
79151
+ body: valuePrepared
79152
+ }).then(() => onSuccess(actionLabel)).catch((error) => {
79153
+ onError(actionLabel, error);
79154
+ });
79155
+ };
79156
+ const handleRolloutRestartAction = (action, ctx, onSuccess, onError) => {
79157
+ const actionLabel = action.props.text || "Rollout restart";
79158
+ const endpointPrepared = parseAll({ text: action.props.endpoint, ...ctx });
79159
+ const annotationKeyPrepared = action.props.annotationKey ? parseAll({ text: action.props.annotationKey, ...ctx }) : "kubectl.kubernetes.io/restartedAt";
79160
+ const timestampPrepared = action.props.timestamp ? parseAll({ text: action.props.timestamp, ...ctx }) : (/* @__PURE__ */ new Date()).toISOString();
79161
+ patchEntryWithMergePatch({
79162
+ endpoint: endpointPrepared,
79163
+ body: {
79164
+ spec: {
79165
+ template: {
79166
+ metadata: {
79167
+ annotations: {
79168
+ [annotationKeyPrepared]: timestampPrepared
79169
+ }
79170
+ }
79171
+ }
79172
+ }
79173
+ }
79174
+ }).then(() => onSuccess(actionLabel)).catch((error) => {
79175
+ onError(actionLabel, error);
79176
+ console.error(error);
79177
+ });
79178
+ };
79179
+ const handleOpenKubeletConfigAction = (action, ctx, setActiveAction, setModalOpen) => {
79180
+ const urlPrepared = parseAll({ text: action.props.url, ...ctx });
79181
+ const modalTitlePrepared = action.props.modalTitle ? parseAll({ text: action.props.modalTitle, ...ctx }) : void 0;
79182
+ const modalDescriptionTextPrepared = action.props.modalDescriptionText ? parseAll({ text: action.props.modalDescriptionText, ...ctx }) : void 0;
79183
+ setActiveAction({
79184
+ ...action,
79185
+ props: {
79186
+ ...action.props,
79187
+ url: urlPrepared,
79188
+ modalTitle: modalTitlePrepared,
79189
+ modalDescriptionText: modalDescriptionTextPrepared
79190
+ }
79191
+ });
79192
+ setModalOpen(true);
79193
+ };
79103
79194
  const useActionsDropdownHandlers = ({ replaceValues, multiQueryData }) => {
79104
79195
  const navigate = useNavigate();
79105
79196
  const location = useLocation();
@@ -79116,100 +79207,44 @@ const useActionsDropdownHandlers = ({ replaceValues, multiQueryData }) => {
79116
79207
  queryClient.invalidateQueries({ queryKey: ["multi"] });
79117
79208
  };
79118
79209
  const showSuccess = (actionLabel) => {
79210
+ invalidateMultiQuery();
79119
79211
  notificationApi.success({
79120
79212
  message: `${actionLabel} successful`,
79121
79213
  placement: "bottomRight"
79122
79214
  });
79123
79215
  };
79216
+ const getErrorDescription = (error) => {
79217
+ if (error instanceof AxiosError) {
79218
+ return error.response?.data?.message || error.message;
79219
+ }
79220
+ if (error instanceof Error) {
79221
+ return error.message;
79222
+ }
79223
+ return "Unknown error";
79224
+ };
79124
79225
  const showError = (actionLabel, error) => {
79125
- const description = error instanceof AxiosError ? error.response?.data?.message || error.message : error instanceof Error ? error.message : "Unknown error";
79126
79226
  notificationApi.error({
79127
79227
  message: `${actionLabel} failed`,
79128
- description,
79228
+ description: getErrorDescription(error),
79129
79229
  placement: "bottomRight"
79130
79230
  });
79131
79231
  };
79132
79232
  const ctx = { replaceValues, multiQueryData };
79133
79233
  const handleActionClick = (action) => {
79134
79234
  if (action.type === "edit") {
79135
- const clusterPrepared = parseAll({ text: action.props.cluster, replaceValues, multiQueryData });
79136
- const namespacePrepared = action.props.namespace ? parseAll({ text: action.props.namespace, replaceValues, multiQueryData }) : void 0;
79137
- const syntheticProjectPrepared = action.props.syntheticProject ? parseAll({ text: action.props.syntheticProject, replaceValues, multiQueryData }) : void 0;
79138
- const apiGroupPrepared = action.props.apiGroup ? parseAll({ text: action.props.apiGroup, replaceValues, multiQueryData }) : void 0;
79139
- const apiVersionPrepared = parseAll({ text: action.props.apiVersion, replaceValues, multiQueryData });
79140
- const pluralPrepared = parseAll({ text: action.props.plural, replaceValues, multiQueryData });
79141
- const namePrepared = parseAll({ text: action.props.name, replaceValues, multiQueryData });
79142
- const baseprefixPrepared = action.props.baseprefix ? parseAll({ text: action.props.baseprefix, replaceValues, multiQueryData }) : void 0;
79143
- const url = buildEditUrl(
79144
- {
79145
- ...action.props,
79146
- cluster: clusterPrepared,
79147
- namespace: namespacePrepared,
79148
- syntheticProject: syntheticProjectPrepared,
79149
- apiGroup: apiGroupPrepared,
79150
- apiVersion: apiVersionPrepared,
79151
- plural: pluralPrepared,
79152
- name: namePrepared,
79153
- baseprefix: baseprefixPrepared
79154
- },
79155
- fullPath
79156
- );
79157
- navigate(url);
79235
+ handleEditAction(action, ctx, fullPath, navigate);
79158
79236
  return;
79159
79237
  }
79160
79238
  if (action.type === "delete") {
79161
- const endpointPrepared = parseAll({ text: action.props.endpoint, replaceValues, multiQueryData });
79162
- const namePrepared = parseAll({ text: action.props.name, replaceValues, multiQueryData });
79163
- const redirectToPrepared = action.props.redirectTo ? parseAll({ text: action.props.redirectTo, replaceValues, multiQueryData }) : void 0;
79164
- setDeleteModalData({
79165
- name: namePrepared,
79166
- endpoint: endpointPrepared,
79167
- redirectTo: redirectToPrepared
79168
- });
79239
+ handleDeleteAction(action, ctx, setDeleteModalData);
79169
79240
  return;
79170
79241
  }
79171
79242
  if (action.type === "cordon" || action.type === "uncordon" || action.type === "suspend" || action.type === "resume") {
79172
- const actionLabel = action.props.text || action.type;
79173
- const endpointPrepared = parseAll({ text: action.props.endpoint, replaceValues, multiQueryData });
79174
- const pathToValuePrepared = parseAll({ text: action.props.pathToValue, replaceValues, multiQueryData });
79175
- const valuePrepared = parseValueIfString(action.props.value, ctx);
79176
- patchEntryWithReplaceOp({
79177
- endpoint: endpointPrepared,
79178
- pathToValue: pathToValuePrepared,
79179
- body: valuePrepared
79180
- }).then(() => {
79181
- invalidateMultiQuery();
79182
- showSuccess(actionLabel);
79183
- }).catch((error) => {
79184
- showError(actionLabel, error);
79185
- });
79243
+ handlePatchActions(action, ctx, showSuccess, showError);
79186
79244
  return;
79187
79245
  }
79188
79246
  if (action.type === "rolloutRestart") {
79189
- const actionLabel = action.props.text || "Rollout restart";
79190
- const endpointPrepared = parseAll({ text: action.props.endpoint, replaceValues, multiQueryData });
79191
- const annotationKeyPrepared = action.props.annotationKey ? parseAll({ text: action.props.annotationKey, replaceValues, multiQueryData }) : "kubectl.kubernetes.io/restartedAt";
79192
- const timestampPrepared = action.props.timestamp ? parseAll({ text: action.props.timestamp, replaceValues, multiQueryData }) : (/* @__PURE__ */ new Date()).toISOString();
79193
- patchEntryWithMergePatch({
79194
- endpoint: endpointPrepared,
79195
- body: {
79196
- spec: {
79197
- template: {
79198
- metadata: {
79199
- annotations: {
79200
- [annotationKeyPrepared]: timestampPrepared
79201
- }
79202
- }
79203
- }
79204
- }
79205
- }
79206
- }).then(() => {
79207
- invalidateMultiQuery();
79208
- showSuccess(actionLabel);
79209
- }).catch((error) => {
79210
- showError(actionLabel, error);
79211
- console.error(error);
79212
- });
79247
+ handleRolloutRestartAction(action, ctx, showSuccess, showError);
79213
79248
  return;
79214
79249
  }
79215
79250
  if (action.type === "evict") {
@@ -79218,9 +79253,7 @@ const useActionsDropdownHandlers = ({ replaceValues, multiQueryData }) => {
79218
79253
  return;
79219
79254
  }
79220
79255
  if (action.type === "openKubeletConfig") {
79221
- const urlPrepared = parseAll({ text: action.props.url, replaceValues, multiQueryData });
79222
- const target = action.props.target ?? "_blank";
79223
- window.open(urlPrepared, target);
79256
+ handleOpenKubeletConfigAction(action, ctx, setActiveAction, setModalOpen);
79224
79257
  return;
79225
79258
  }
79226
79259
  setActiveAction(action);
@@ -79230,11 +79263,9 @@ const useActionsDropdownHandlers = ({ replaceValues, multiQueryData }) => {
79230
79263
  if (!evictModalData) return;
79231
79264
  setIsEvictLoading(true);
79232
79265
  const body = buildEvictBody(evictModalData);
79233
- createNewEntry({ endpoint: evictModalData.endpoint, body }).then(() => {
79234
- invalidateMultiQuery();
79235
- showSuccess(`Evict ${evictModalData.name}`);
79236
- }).catch((error) => {
79237
- showError(`Evict ${evictModalData.name}`, error);
79266
+ const evictLabel = `Evict ${evictModalData.name}`;
79267
+ createNewEntry({ endpoint: evictModalData.endpoint, body }).then(() => showSuccess(evictLabel)).catch((error) => {
79268
+ showError(evictLabel, error);
79238
79269
  }).finally(() => {
79239
79270
  setIsEvictLoading(false);
79240
79271
  setEvictModalData(null);
@@ -79339,6 +79370,96 @@ const useActionsDropdownPermissions = ({
79339
79370
  return permissions ?? computedPermissions;
79340
79371
  };
79341
79372
 
79373
+ const toYamlString = (value) => {
79374
+ if (value === void 0) return "";
79375
+ if (typeof value === "string") {
79376
+ try {
79377
+ return stringify(JSON.parse(value));
79378
+ } catch {
79379
+ return value;
79380
+ }
79381
+ }
79382
+ return stringify(value);
79383
+ };
79384
+ const OpenKubeletConfigModal = ({ open, onClose, props }) => {
79385
+ const theme = useTheme();
79386
+ const { data, isLoading, isError, error } = useDirectUnknownResource({
79387
+ uri: props.url,
79388
+ queryKey: ["open-kubelet-config", props.url],
79389
+ refetchInterval: false,
79390
+ isEnabled: open && !!props.url && props.url !== "-"
79391
+ });
79392
+ const yamlData = useMemo(() => toYamlString(data), [data]);
79393
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(
79394
+ ReadOnlyModal,
79395
+ {
79396
+ open,
79397
+ close: onClose,
79398
+ modalTitle: props.modalTitle || props.text,
79399
+ modalDescriptionText: props.modalDescriptionText,
79400
+ editModalWidth: props.editModalWidth || 920,
79401
+ children: [
79402
+ isLoading && /* @__PURE__ */ jsxRuntimeExports.jsx(Spin, {}),
79403
+ isError && /* @__PURE__ */ jsxRuntimeExports.jsx(
79404
+ Alert,
79405
+ {
79406
+ type: "error",
79407
+ showIcon: true,
79408
+ message: "Failed to load kubelet config",
79409
+ description: error instanceof Error ? error.message : "Unknown error"
79410
+ }
79411
+ ),
79412
+ !isLoading && !isError && /* @__PURE__ */ jsxRuntimeExports.jsx(
79413
+ Ft$1,
79414
+ {
79415
+ defaultLanguage: "yaml",
79416
+ width: "100%",
79417
+ height: "60vh",
79418
+ value: yamlData,
79419
+ theme: theme === "dark" ? "vs-dark" : "vs",
79420
+ options: {
79421
+ readOnly: true,
79422
+ minimap: { enabled: false },
79423
+ wordWrap: "on",
79424
+ lineNumbers: "on"
79425
+ }
79426
+ }
79427
+ )
79428
+ ]
79429
+ }
79430
+ );
79431
+ };
79432
+
79433
+ const renderActionModal = (action, extraProps) => {
79434
+ switch (action.type) {
79435
+ case "edit":
79436
+ return null;
79437
+ case "editLabels":
79438
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(LabelsModal, { ...action.props, ...extraProps });
79439
+ case "editAnnotations":
79440
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(AnnotationsModal, { ...action.props, ...extraProps });
79441
+ case "editTaints":
79442
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(TaintsModal, { ...action.props, ...extraProps });
79443
+ case "editTolerations":
79444
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(TolerationsModal, { ...action.props, ...extraProps });
79445
+ case "delete":
79446
+ return null;
79447
+ case "cordon":
79448
+ case "uncordon":
79449
+ case "suspend":
79450
+ case "resume":
79451
+ case "rolloutRestart":
79452
+ case "evict":
79453
+ return null;
79454
+ case "openKubeletConfig":
79455
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(OpenKubeletConfigModal, { ...extraProps, props: action.props });
79456
+ default: {
79457
+ const _exhaustive = action;
79458
+ return _exhaustive;
79459
+ }
79460
+ }
79461
+ };
79462
+
79342
79463
  const ActionsDropdown = ({ data, children }) => {
79343
79464
  const {
79344
79465
  buttonText = "Actions",
@@ -88802,5 +88923,5 @@ const usePluginManifest = ({
88802
88923
  });
88803
88924
  };
88804
88925
 
88805
- export { useInfiniteSentinel as $, getBuiltinResourceTypes as A, getCrdData as B, getDirectUnknownResource as C, DeleteIcon as D, EnrichedTableProvider as E, checkPermission as F, getSwagger as G, filterIfApiInstanceNamespaceScoped as H, filterIfBuiltInInstanceNamespaceScoped as I, checkIfApiInstanceNamespaceScoped as J, checkIfBuiltInInstanceNamespaceScoped as K, getKinds as L, useClusterList as M, useApiResources as N, useApiResourceSingle as O, PaddingContainer as P, useBuiltinResources as Q, useBuiltinResourceSingle as R, Spacer$1 as S, useCrdResources as T, useCrdResourceSingle as U, useApisResourceTypes as V, useApiResourceTypesByGroup as W, useBuiltinResourceTypes as X, useCrdData as Y, useListWatch as Z, _$1 as _, useTheme as a, normalizeValuesForQuotasToNumber as a$, useK8sVerbs as a0, useManyK8sSmartResource as a1, useSmartResourceParams as a2, useResourceScope as a3, useKinds as a4, usePluginManifest as a5, TreeWithSearch as a6, ConfirmModal as a7, UpIcon as a8, DownIcon as a9, getEnrichedColumns as aA, getEnrichedColumnsWithControls as aB, YamlEditorSingleton$1 as aC, BlackholeFormProvider as aD, BlackholeForm as aE, getObjectFormItemsDraft as aF, MarketPlace as aG, MarketplaceCard as aH, ProjectInfoCard as aI, PodTerminal as aJ, NodeTerminal as aK, PodLogs as aL, PodLogsMonaco as aM, VMVNC as aN, Search as aO, Events as aP, DynamicRenderer as aQ, DynamicComponents as aR, DynamicRendererWithProviders as aS, prepareTemplate as aT, isFlatObject as aU, filterSelectOptions as aV, getStringByName as aW, floorToDecimal as aX, parseQuotaValue as aY, parseQuotaValueCpu as aZ, parseQuotaValueMemoryAndStorage as a_, BackToDefaultIcon as aa, SuccessIcon as ab, feedbackIcons as ac, PlusIcon as ad, MinusIcon as ae, LockedIcon as af, UnlockedIcon as ag, PauseCircleIcon as ah, ResumeCircleIcon as ai, LookingGlassIcon as aj, EarthIcon as ak, ContentCard$1 as al, FlexGrow as am, UncontrolledSelect as an, CustomSelect$4 as ao, CursorPointerTag as ap, CursorPointerTagMinContent as aq, CursorDefaultDiv as ar, ResourceLink as as, ManageableBreadcrumbsProvider as at, prepareDataForManageableBreadcrumbs as au, ManageableBreadcrumbs as av, ManageableSidebarProvider as aw, prepareDataForManageableSidebar as ax, ManageableSidebar as ay, EnrichedTable as az, usePartsOfUrl as b, getAllPathsFromObj as b0, getPrefixSubarrays as b1, groupsToTreeData as b2, getBuiltinTreeData as b3, getGroupsByCategory as b4, createContextFactory as b5, prepareUrlsToFetchForDynamicRenderer as b6, deepMerge as b7, getSortedKinds as b8, getSortedKindsAll as b9, hslFromString as ba, getUppercase as bb, kindByGvr as bc, pluralByKind as bd, namespacedByGvr as be, getLinkToBuiltinForm as bf, getLinkToApiForm as bg, isMultilineString as bh, isMultilineFromYaml as bi, includesArray as bj, getResourceLink as bk, getNamespaceLink as bl, convertBytes as bm, formatBytesAuto as bn, toBytes as bo, convertStorage as bp, parseValueWithUnit as bq, convertCores as br, formatCoresAuto as bs, toCores as bt, convertCompute as bu, parseCoresWithUnit as bv, formatDateAuto as bw, isValidRFC3339 as bx, usePermissions as c, jp as d, useDirectUnknownResource as e, useK8sSmartResource as f, EditIcon as g, getLinkToForm as h, DeleteModal as i, jsxRuntimeExports as j, DeleteModalMany as k, getClusterList as l, createNewEntry as m, updateEntry as n, deleteEntry as o, parseAll as p, getApiResources as q, getApiResourceSingle as r, serializeLabelsWithNoEncoding$1 as s, getBuiltinResources as t, useMultiQuery as u, getBuiltinResourceSingle as v, getCrdResources as w, getCrdResourceSingle as x, getApiResourceTypes as y, getApiResourceTypesByApiGroup as z };
88806
- //# sourceMappingURL=index-b0CnxhD6.mjs.map
88926
+ export { useInfiniteSentinel as $, getBuiltinResourceTypes as A, getCrdData as B, getDirectUnknownResource as C, DeleteIcon as D, EnrichedTableProvider as E, checkPermission as F, getSwagger as G, filterIfApiInstanceNamespaceScoped as H, filterIfBuiltInInstanceNamespaceScoped as I, checkIfApiInstanceNamespaceScoped as J, checkIfBuiltInInstanceNamespaceScoped as K, getKinds as L, useClusterList as M, useApiResources as N, useApiResourceSingle as O, PaddingContainer as P, useBuiltinResources as Q, ReadOnlyModal as R, useBuiltinResourceSingle as S, useCrdResources as T, useCrdResourceSingle as U, useApisResourceTypes as V, useApiResourceTypesByGroup as W, useBuiltinResourceTypes as X, useCrdData as Y, useListWatch as Z, _$1 as _, useTheme as a, parseQuotaValueMemoryAndStorage as a$, useK8sVerbs as a0, useManyK8sSmartResource as a1, useSmartResourceParams as a2, useResourceScope as a3, useKinds as a4, usePluginManifest as a5, Spacer$1 as a6, TreeWithSearch as a7, ConfirmModal as a8, UpIcon as a9, EnrichedTable as aA, getEnrichedColumns as aB, getEnrichedColumnsWithControls as aC, YamlEditorSingleton$1 as aD, BlackholeFormProvider as aE, BlackholeForm as aF, getObjectFormItemsDraft as aG, MarketPlace as aH, MarketplaceCard as aI, ProjectInfoCard as aJ, PodTerminal as aK, NodeTerminal as aL, PodLogs as aM, PodLogsMonaco as aN, VMVNC as aO, Search as aP, Events as aQ, DynamicRenderer as aR, DynamicComponents as aS, DynamicRendererWithProviders as aT, prepareTemplate as aU, isFlatObject as aV, filterSelectOptions as aW, getStringByName as aX, floorToDecimal as aY, parseQuotaValue as aZ, parseQuotaValueCpu as a_, DownIcon as aa, BackToDefaultIcon as ab, SuccessIcon as ac, feedbackIcons as ad, PlusIcon as ae, MinusIcon as af, LockedIcon as ag, UnlockedIcon as ah, PauseCircleIcon as ai, ResumeCircleIcon as aj, LookingGlassIcon as ak, EarthIcon as al, ContentCard$1 as am, FlexGrow as an, UncontrolledSelect as ao, CustomSelect$4 as ap, CursorPointerTag as aq, CursorPointerTagMinContent as ar, CursorDefaultDiv as as, ResourceLink as at, ManageableBreadcrumbsProvider as au, prepareDataForManageableBreadcrumbs as av, ManageableBreadcrumbs as aw, ManageableSidebarProvider as ax, prepareDataForManageableSidebar as ay, ManageableSidebar as az, usePartsOfUrl as b, normalizeValuesForQuotasToNumber as b0, getAllPathsFromObj as b1, getPrefixSubarrays as b2, groupsToTreeData as b3, getBuiltinTreeData as b4, getGroupsByCategory as b5, createContextFactory as b6, prepareUrlsToFetchForDynamicRenderer as b7, deepMerge as b8, getSortedKinds as b9, getSortedKindsAll as ba, hslFromString as bb, getUppercase as bc, kindByGvr as bd, pluralByKind as be, namespacedByGvr as bf, getLinkToBuiltinForm as bg, getLinkToApiForm as bh, isMultilineString as bi, isMultilineFromYaml as bj, includesArray as bk, getResourceLink as bl, getNamespaceLink as bm, convertBytes as bn, formatBytesAuto as bo, toBytes as bp, convertStorage as bq, parseValueWithUnit as br, convertCores as bs, formatCoresAuto as bt, toCores as bu, convertCompute as bv, parseCoresWithUnit as bw, formatDateAuto as bx, isValidRFC3339 as by, usePermissions as c, useDirectUnknownResource as d, useK8sSmartResource as e, jsxRuntimeExports as f, EditIcon as g, getLinkToForm as h, DeleteModal as i, jp as j, DeleteModalMany as k, getClusterList as l, createNewEntry as m, updateEntry as n, deleteEntry as o, parseAll as p, getApiResources as q, getApiResourceSingle as r, serializeLabelsWithNoEncoding$1 as s, getBuiltinResources as t, useMultiQuery as u, getBuiltinResourceSingle as v, getCrdResources as w, getCrdResourceSingle as x, getApiResourceTypes as y, getApiResourceTypesByApiGroup as z };
88927
+ //# sourceMappingURL=index-CLIs5B-m.mjs.map