diff --git a/src/js/components/DataTypes/Object.js b/src/js/components/DataTypes/Object.js
index 4c7cb93f..06cc3c17 100644
--- a/src/js/components/DataTypes/Object.js
+++ b/src/js/components/DataTypes/Object.js
@@ -8,6 +8,7 @@ import { JsonObject } from './DataTypes';
import VariableEditor from './../VariableEditor';
import VariableMeta from './../VariableMeta';
import ArrayGroup from './../ArrayGroup';
+import OptimizedArrayGroup from './../OptimizedArrayGroup';
import ObjectName from './../ObjectName';
//attribute store
@@ -280,7 +281,8 @@ class RjvObject extends React.PureComponent {
groupArraysAfterLength &&
variable.value.length > groupArraysAfterLength
) {
- ObjectComponent = ArrayGroup;
+ if(props.useOptimizedArray) ObjectComponent = OptimizedArrayGroup;
+ else ObjectComponent = ArrayGroup;
}
elements.push(
diff --git a/src/js/components/JsonViewer.js b/src/js/components/JsonViewer.js
index 5c0278f8..d49570e9 100644
--- a/src/js/components/JsonViewer.js
+++ b/src/js/components/JsonViewer.js
@@ -1,6 +1,7 @@
import React from 'react';
import JsonObject from './DataTypes/Object';
import ArrayGroup from './ArrayGroup';
+import OptimizedArrayGroup from './OptimizedArrayGroup';
export default class extends React.PureComponent {
render = () => {
@@ -13,7 +14,8 @@ export default class extends React.PureComponent {
props.groupArraysAfterLength &&
props.src.length > props.groupArraysAfterLength
) {
- ObjectComponent = ArrayGroup;
+ if(props.useOptimizedArray) ObjectComponent = OptimizedArrayGroup;
+ else ObjectComponent = ArrayGroup;
}
return (
diff --git a/src/js/components/OptimizedArrayGroup/ArraySubGroup.js b/src/js/components/OptimizedArrayGroup/ArraySubGroup.js
new file mode 100644
index 00000000..76947e61
--- /dev/null
+++ b/src/js/components/OptimizedArrayGroup/ArraySubGroup.js
@@ -0,0 +1,127 @@
+import React from 'react';
+
+import { CollapsedArray } from './CollapsedArray';
+import { getArrayGroupState } from './utils';
+import ObjectComponent from '../DataTypes/Object';
+import Theme from '../../themes/getStyle';
+
+export class ArraySubGroup extends React.Component {
+
+ constructor(props) {
+ super(props);
+ const { height, src, start, expandFirstGroup } = props;
+
+ this.size = Math.pow(10, height);
+ const groups = Math.ceil(src.length/this.size);
+
+ this.state = {
+ expanded: [...getArrayGroupState(
+ start,
+ expandFirstGroup,
+ groups,
+ )]
+ };
+ }
+
+ shouldComponentUpdate(nextProps, nextState) {
+ if(nextProps.expanded || this.props.expanded)
+ return true;
+
+ if(
+ nextProps.start !== this.props.start ||
+ nextProps.src?.length !== this.props.src?.length
+ )
+ return true;
+
+ return false;
+ }
+
+ render() {
+ const {
+ theme,
+ expanded: parentExpanded,
+ getExpandedIcon,
+ toggleCollapsed: toggleParentCollapsed,
+ src,
+ height,
+ namespace,
+ name,
+ start,
+ expandFirstGroup,
+ rest,
+ } = this.props
+
+ const toggleCollapsed = i => {
+ this.setState(prevState => {
+ const newExpanded = [...prevState.expanded]
+ newExpanded[i] = !newExpanded[i]
+
+ return {
+ expanded: newExpanded
+ };
+ })
+ }
+
+ return