import React from 'react'; import Stack from 'ui/components/Stack'; import connect from 'ui/connect'; import Fa from 'ui/components/Fa'; import ImgIcon from 'ui/components/ImgIcon'; import ls from './OperationHistory.less'; import cx from 'classnames'; import ButtonGroup from 'ui/components/controls/ButtonGroup'; import Button from 'ui/components/controls/Button'; import {finishHistoryEditing, removeAndDropDependants} from '../craftHistoryUtils'; import mapContext from 'ui/mapContext'; import decoratorChain from 'ui/decoratorChain'; import {EMPTY_OBJECT} from 'gems/objects'; function OperationHistory({history, pointer, setHistoryPointer, remove, getOperation}) { const lastMod = history.length - 1; return {history.map(({type, params}, index) => { const {appearance, label, paramsInfo, paramsInfoComponent: PIComp} = getOperation(type)||EMPTY_OBJECT; return
setHistoryPointer(index - 1)} className={cx(ls.item, pointer + 1 === index && ls.selected)}> {appearance && } {label} {PIComp ? : (paramsInfo && paramsInfo(params))} remove(index)}/>
; })} {pointer !== lastMod && }
; } export default decoratorChain( connect(streams => streams.craft.modifications), mapContext(({streams, services}) => ({ remove: atIndex => streams.craft.modifications.update(modifications => removeAndDropDependants(modifications, atIndex)), cancel: () => streams.craft.modifications.update(modifications => finishHistoryEditing(modifications)), getOperation: services.operation.get, setHistoryPointer: pointer => streams.craft.modifications.update(({history}) => ({history, pointer})) })) )(OperationHistory);