Line data Source code
1 : import * as React from 'react';
2 : import * as styles from './json_view.module.css';
3 :
4 : import { JsonNestedClose } from './json_nested_close.js';
5 : import { JsonNestedOpen } from './json_nested_open.js';
6 : import { JsonKeyValues } from './json_key_values.js';
7 : import { useUniqueKey } from './unique_key.js';
8 : import { useToolVisibilityDispatch } from './json_tool_state.js';
9 :
10 : export interface JsonValueProps {
11 : level: number;
12 : keyName?: (string | number);
13 : keyPath: (string | number)[];
14 : value: object;
15 : initialValue: object;
16 : parentValue?: object;
17 : }
18 1 : export const JsonValue = React.forwardRef((props: JsonValueProps, ref: React.Ref<HTMLDivElement>) => {
19 1 : const dispatch = useToolVisibilityDispatch();
20 1 : const subkeyid = useUniqueKey();
21 : const reset: React.HTMLAttributes<HTMLDivElement> = {
22 1 : onMouseEnter: () => dispatch({ [subkeyid]: true }),
23 1 : onMouseLeave: () => dispatch({ [subkeyid]: false }),
24 : };
25 1 : return (
26 1 : <div className={styles.value_container} ref={ref} {...reset}>
27 1 : <JsonNestedOpen
28 1 : expandKey={subkeyid}
29 1 : level={props.level}
30 1 : keyPath={props.keyPath}
31 1 : keyName={props.keyName}
32 1 : value={props.value}
33 1 : initialValue={props.initialValue}
34 1 : parentValue={props.parentValue}
35 1 : />
36 1 : <JsonKeyValues
37 1 : expandKey={subkeyid}
38 1 : level={props.level}
39 1 : keyPath={props.keyPath}
40 1 : keyName={props.keyName}
41 1 : value={props.value}
42 1 : parentValue={props.parentValue}
43 1 : />
44 1 : <JsonNestedClose
45 1 : expandKey={subkeyid}
46 1 : level={props.level}
47 1 : keyPath={props.keyPath}
48 1 : keyName={props.keyName}
49 1 : value={props.value}
50 1 : parentValue={props.parentValue}
51 1 : />
52 1 : </div>
53 : );
54 1 : });
|