import { createSelector, Selector } from '@reduxjs/toolkit'; import React, { ComponentProps, ReactNode } from 'react'; import { JSONTree } from 'react-json-tree'; import { Base16Theme } from 'react-base16-styling'; import { getJsonTreeTheme, StyleUtilsContext } from '../styles/themes'; import { getItemString, labelRenderer } from '../styles/tree'; import { identity } from '../utils/object'; export interface TreeViewProps extends Partial< Pick< ComponentProps, 'keyPath' | 'shouldExpandNodeInitially' | 'hideRoot' > > { data: unknown; isWideLayout: boolean; before?: ReactNode; after?: ReactNode; children?: ReactNode; rootProps?: Partial< Omit, 'className' | 'style'> >; } export class TreeView extends React.PureComponent { static defaultProps = { hideRoot: true, shouldExpandNodeInitially: ( keyPath: (string | number)[], value: unknown, layer: number, ): boolean => { return layer < 2; }, }; readonly selectTheme: Selector< Base16Theme, ReturnType, never > = createSelector< [(base16Theme: Base16Theme) => Base16Theme], ReturnType >(identity, getJsonTreeTheme); constructor(props: TreeViewProps) { super(props); } render(): ReactNode { const { data, before, after, children, keyPath, shouldExpandNodeInitially, hideRoot, rootProps, } = this.props; return ( {({ invertTheme, base16Theme }) => { return (
{before} {after} {children}
); }}
); } }