diff --git a/src/resources/ConfigMaps/ConfigMapDetails.js b/src/resources/ConfigMaps/ConfigMapDetails.js index 86c0ec896f..77b62307e3 100644 --- a/src/resources/ConfigMaps/ConfigMapDetails.js +++ b/src/resources/ConfigMaps/ConfigMapDetails.js @@ -21,13 +21,25 @@ export function ConfigMapDetails(props) { )); }; + const ConfigMapBinaryDataEditor = resource => { + const { binaryData } = resource; + return Object.keys(binaryData || {}).map(key => ( + + )); + }; + const customColumns = [ { header: t('common.headers.owner'), - value: secret => ( + value: configMap => ( ), }, @@ -35,7 +47,7 @@ export function ConfigMapDetails(props) { return ( import('./ConfigMapCreate')); export const resourceGraphConfig = (): ResourceRelationConfig => ({ depth: 1, networkFlowLevel: 1, + relations: [ + { + resource: { kind: 'Pod' }, + filter: (cm, pod) => + matchByOwnerReference({ + resource: cm, + owner: pod, + }), + }, + ], }); diff --git a/src/resources/Pods/index.tsx b/src/resources/Pods/index.tsx index 64c9e490b3..cea54abbf1 100644 --- a/src/resources/Pods/index.tsx +++ b/src/resources/Pods/index.tsx @@ -49,10 +49,6 @@ export const resourceGraphConfig = (): ResourceRelationConfig => ({ networkFlowKind: true, networkFlowLevel: 0, relations: [ - { - resource: { kind: 'ConfigMap' }, - filter: (pod, cm) => matchByMount('configMap')(pod, cm), - }, { resource: { kind: 'DaemonSet' }, filter: (pod, ds) => diff --git a/src/shared/components/MonacoEditorESM/Editor.js b/src/shared/components/MonacoEditorESM/Editor.js index d27cba8a81..17c578d5fd 100644 --- a/src/shared/components/MonacoEditorESM/Editor.js +++ b/src/shared/components/MonacoEditorESM/Editor.js @@ -74,6 +74,13 @@ export function Editor({ } }, [value, editorInstance, error]); + useEffect(() => { + if (prevValueRef.current !== value && readOnly) { + editorInstance.setValue(value); + prevValueRef.current = value; + } + }, [value, editorInstance, readOnly]); + useUpdateValueOnParentChange({ updateValueOnParentChange, editorInstance, diff --git a/src/shared/components/ReadonlyEditorPanel.js b/src/shared/components/ReadonlyEditorPanel.js index b5eeb50eb6..0f2a60078a 100644 --- a/src/shared/components/ReadonlyEditorPanel.js +++ b/src/shared/components/ReadonlyEditorPanel.js @@ -1,11 +1,31 @@ -import React from 'react'; - import { EditorActions } from 'shared/contexts/YamlEditorContext/EditorActions'; import { Editor } from 'shared/components/MonacoEditorESM/Editor'; import { UI5Panel } from './UI5Panel/UI5Panel'; +import { useTranslation } from 'react-i18next'; +import { useState } from 'react'; +import { Button } from '@ui5/webcomponents-react'; +import { base64Decode } from 'shared/helpers'; -export function ReadonlyEditorPanel({ title, value, editorProps, actions }) { - const [editor, setEditor] = React.useState(null); +export function ReadonlyEditorPanel({ + title, + value, + editorProps, + actions, + isBase64 = false, +}) { + const { t } = useTranslation(); + const [editor, setEditor] = useState(null); + const [isEncoded, setEncoded] = useState(true); + const [valueState, setValueState] = useState(value); + + const decode = () => { + setEncoded(true); + setValueState(value); + }; + const encode = () => { + setEncoded(false); + setValueState(base64Decode(value)); + }; const options = { minimap: { @@ -13,17 +33,39 @@ export function ReadonlyEditorPanel({ title, value, editorProps, actions }) { }, }; + const headerActions = + actions || + (isBase64 && ( + <> + {actions && actions} + {isBase64 && ( + + )} + + )); + return ( - +