Add lodash.clonedeep and content copying feature

The package 'lodash.clonedeep' has been added to dependencies list. Also, a new copy to clipboard feature has been introduced in the ActionPreview.tsx file. This feature deep clones the nextState object and copies the resulting JSON string to the system clipboard.
This commit is contained in:
Iliya Brook 2024-03-06 15:10:20 +02:00
parent 3b7bca2dbb
commit 4ceae08fc5
3 changed files with 38 additions and 3 deletions

View File

@ -47,6 +47,7 @@
"immutable": "^4.3.5", "immutable": "^4.3.5",
"javascript-stringify": "^2.1.0", "javascript-stringify": "^2.1.0",
"jsondiffpatch": "^0.6.0", "jsondiffpatch": "^0.6.0",
"lodash.clonedeep": "^4.5.0",
"lodash.debounce": "^4.0.8", "lodash.debounce": "^4.0.8",
"react-base16-styling": "^0.9.1", "react-base16-styling": "^0.9.1",
"react-json-tree": "^0.18.0", "react-json-tree": "^0.18.0",
@ -66,6 +67,7 @@
"@types/dateformat": "^5.0.2", "@types/dateformat": "^5.0.2",
"@types/hex-rgba": "^1.0.3", "@types/hex-rgba": "^1.0.3",
"@types/history": "^4.7.11", "@types/history": "^4.7.11",
"@types/lodash.clonedeep": "^4.5.9",
"@types/lodash.debounce": "^4.0.9", "@types/lodash.debounce": "^4.0.9",
"@types/react": "^18.2.58", "@types/react": "^18.2.58",
"@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/eslint-plugin": "^6.21.0",

View File

@ -10,6 +10,7 @@ import ActionPreviewHeader from './ActionPreviewHeader';
import DiffTab from './tabs/DiffTab'; import DiffTab from './tabs/DiffTab';
import StateTab from './tabs/StateTab'; import StateTab from './tabs/StateTab';
import ActionTab from './tabs/ActionTab'; import ActionTab from './tabs/ActionTab';
import cloneDeep from 'lodash.clonedeep';
export interface TabComponentProps<S, A extends Action<string>> { export interface TabComponentProps<S, A extends Action<string>> {
labelRenderer: LabelRenderer; labelRenderer: LabelRenderer;
@ -80,6 +81,15 @@ class ActionPreview<S, A extends Action<string>> extends Component<
static defaultProps = { static defaultProps = {
tabName: DEFAULT_STATE.tabName, tabName: DEFAULT_STATE.tabName,
}; };
copyToClipboard = () => {
try {
const deepCopiedObject = cloneDeep(this.props.nextState);
const jsonString = JSON.stringify(deepCopiedObject, null, 2);
void navigator.clipboard.writeText(jsonString);
} catch (err) {
console.error('Failed to copy: ', err);
}
};
render(): JSX.Element { render(): JSX.Element {
const { const {
@ -207,6 +217,23 @@ class ActionPreview<S, A extends Action<string>> extends Component<
} }
> >
{'(pin)'} {'(pin)'}
</span>
<span
css={(theme) => ({
fontSize: '0.7em',
paddingLeft: '5px',
cursor: 'pointer',
'&:hover': {
textDecoration: 'underline',
},
color: theme.PIN_COLOR,
})}
onClick={event => {
event.stopPropagation();
this.copyToClipboard();
}}
>
{'(copy)'}
</span> </span>
{!expanded && ': '} {!expanded && ': '}
</span> </span>

View File

@ -1614,6 +1614,9 @@ importers:
jsondiffpatch: jsondiffpatch:
specifier: ^0.6.0 specifier: ^0.6.0
version: 0.6.0 version: 0.6.0
lodash.clonedeep:
specifier: ^4.5.0
version: 4.5.0
lodash.debounce: lodash.debounce:
specifier: ^4.0.8 specifier: ^4.0.8
version: 4.0.8 version: 4.0.8
@ -1669,6 +1672,9 @@ importers:
'@types/history': '@types/history':
specifier: ^4.7.11 specifier: ^4.7.11
version: 4.7.11 version: 4.7.11
'@types/lodash.clonedeep':
specifier: ^4.5.9
version: 4.5.9
'@types/lodash.debounce': '@types/lodash.debounce':
specifier: ^4.0.9 specifier: ^4.0.9
version: 4.0.9 version: 4.0.9