import { useCallback, useContext, useState } from 'react' import { JsonViewContext } from './json-view' import { customCopy, objectSize, ifDisplay } from '../utils' import { ReactComponent as AngleDownSVG } from '../svgs/angle-down.svg' import CopyButton from './copy-button' import NameValue from './name-value' import type { CustomizeOptions } from '../types' interface Props { originNode: Array node: Array depth: number index: number deleteHandle?: (_: string | number) => void customOptions?: CustomizeOptions startIndex: number } export default function LargeArrayNode({ originNode, node, depth, index, deleteHandle: _deleteSelf, customOptions, startIndex }: Props) { const { enableClipboard, src, onEdit, onChange, forceUpdate, displaySize } = useContext(JsonViewContext) const [fold, setFold] = useState(true) // Edit property const editHandle = useCallback( (indexOrName: number | string, newValue: any, oldValue: any) => { originNode[indexOrName as number] = newValue if (onEdit) onEdit({ newValue, oldValue, depth, src, indexOrName, parentType: 'array' }) if (onChange) onChange({ type: 'edit', depth, src, indexOrName, parentType: 'array' }) forceUpdate() }, [node, onEdit, onChange, forceUpdate] ) // Delete property const deleteHandle = (index: number | string) => { originNode.splice(index as number, 1) forceUpdate() } const Icons = ( <> {!fold && ( setFold(true)} className='jv-size-chevron'> {ifDisplay(displaySize, depth, fold) && {objectSize(node)} Items} )} {!fold && enableClipboard && customCopy(customOptions) && } ) return (
{'['} {Icons} {!fold ? (
{node.map((n, i) => ( ))}
) : ( )} {']'} {/* {fold && ifDisplay(displaySize, depth, fold) && ( setFold(false)} className='jv-size'> {objectSize(node)} Items )} */}
) }