import * as React from "react"; import { Observable } from 'babylonjs/Misc/observable'; import { PropertyChangedEvent } from '../../../../propertyChangedEvent'; import { GlobalState } from '../../../../globalState'; import { FactorGradient } from 'babylonjs/Misc/gradients'; import { LockObject } from '../lockObject'; import { ButtonLineComponent } from '../../../lines/buttonLineComponent'; import { FactorGradientStepGridComponent } from './factorGradientStepGridComponent'; import { Nullable } from 'babylonjs/types'; import { TextLineComponent } from '../../../lines/textLineComponent'; interface IFactorGradientGridComponent { globalState: GlobalState; label: string; gradients: Nullable>, lockObject: LockObject, docLink?: string, replaySourceReplacement?: string, onCreateRequired: () => void, onPropertyChangedObservable?: Observable } export class FactorGradientGridComponent extends React.Component { constructor(props: IFactorGradientGridComponent) { super(props) } deleteStep(step: FactorGradient) { let gradients = this.props.gradients as Array; let index = gradients.indexOf(step); if (index > -1) { gradients.splice(index, 1); this.forceUpdate(); } } addNewStep() { let gradients = this.props.gradients as Array; let newStep = new FactorGradient(); newStep.gradient = 1.0; newStep.factor1 = 1.0; newStep.factor2 = 1.0; gradients.push(newStep); this.forceUpdate(); } checkForReOrder() { let gradients = this.props.gradients as Array; gradients.sort((a, b) => { if (a.gradient === b.gradient) { return 0; } if (a.gradient > b.gradient) { return 1; } return -1; }); this.forceUpdate(); } render() { let gradients = this.props.gradients as Nullable>; return (
{ gradients &&
this.addNewStep()} /> { gradients.map((g, i) => { return ( this.checkForReOrder()} onUpdateGradient={() => this.forceUpdate()} key={"step-" + i} lineIndex={i} gradient={g} onDelete={() => this.deleteStep(g)}/> ) }) }
} { !gradients && { this.props.onCreateRequired(); this.forceUpdate(); }} /> }
); } }