From 69c22da92a3ed6272c7d116149b7b58edfc2676b Mon Sep 17 00:00:00 2001 From: chgibb Date: Sun, 8 Sep 2019 16:22:53 -0400 Subject: [PATCH] fix action model --- .../circularGenomeBuilderView.tsx | 66 +++++++------------ .../editCache/cirularGenomeEditCache.ts | 42 ++++++++++++ 2 files changed, 66 insertions(+), 42 deletions(-) create mode 100644 src/req/renderer/views/circularGenomeBuilderView/editCache/cirularGenomeEditCache.ts diff --git a/src/req/renderer/views/circularGenomeBuilderView/circularGenomeBuilderView.tsx b/src/req/renderer/views/circularGenomeBuilderView/circularGenomeBuilderView.tsx index 646861577..ac748a8ad 100644 --- a/src/req/renderer/views/circularGenomeBuilderView/circularGenomeBuilderView.tsx +++ b/src/req/renderer/views/circularGenomeBuilderView/circularGenomeBuilderView.tsx @@ -8,7 +8,7 @@ import {Toolbar} from "../../components/toolBar"; import {IconButton} from "../../components/iconButton"; import {MenuRounded} from "../../components/icons/menuRounded"; import {white} from "../../styles/colours"; -import {CircularFigure, cacheBaseFigureTemplate} from "../../circularFigure/circularFigure"; +import {CircularFigure} from "../../circularFigure/circularFigure"; import {Fasta} from "../../../fasta"; import {SaveKeyEvent} from "../../../ipcEvents"; import {DonutLargeOutlined} from "../../components/icons/donutLargeOutlined"; @@ -21,32 +21,7 @@ import {CircularGenome} from "../../containers/circularGenome"; import {FigureSelectOverlay} from "./containers/overlays/figureSelectOverlay"; import {appBar} from "./containers/styles/appBar"; import {EditFigureNameOverlay} from "./containers/overlays/editFigureName"; - -export class CircularGenomeEditCache -{ - private editStack : Array; - - public pushEdit(figure : CircularFigure) - { - this.editStack.push(JSON.stringify(figure)); - } - - public popEdit() : CircularFigure | undefined - { - let edit = this.editStack.pop(); - - if(edit) - return JSON.parse(edit); - return undefined; - } - - public constructor(figure : CircularFigure) - { - this.editStack = new Array(); - - this.pushEdit(figure); - } -} +import { CircularGenomeEditCache, CircularGenomeEditOpts, CircularGenomeEditAction } from './editCache/cirularGenomeEditCache'; export interface CircularGenomeBuilderViewState { figureSelectOvelayOpen: boolean; @@ -87,22 +62,20 @@ export class CircularGenomeBuilderView extends React.Component{ if(figure) { - let oldEdit = this.maybePopEdit(figure); - - console.log(oldEdit ? oldEdit.name : undefined); + const oldEdit = this.maybePopEdit(figure); if(oldEdit) { - figure = oldEdit; - //console.log(figure); + oldEdit.rollback(figure,JSON.parse(oldEdit.figureStr)); this.saveFigures(); } } @@ -299,9 +269,21 @@ export class CircularGenomeBuilderView extends React.Component { + figure.name = value; + }, + afterCommit : () => { + this.saveFigures(); + }, + rollback : (newFigure : CircularFigure,oldFigure : CircularFigure) => { + newFigure.name = oldFigure.name; + } + } + ); + } }} onClose={()=> diff --git a/src/req/renderer/views/circularGenomeBuilderView/editCache/cirularGenomeEditCache.ts b/src/req/renderer/views/circularGenomeBuilderView/editCache/cirularGenomeEditCache.ts new file mode 100644 index 000000000..977f1afe7 --- /dev/null +++ b/src/req/renderer/views/circularGenomeBuilderView/editCache/cirularGenomeEditCache.ts @@ -0,0 +1,42 @@ +import { CircularFigure } from '../../../circularFigure/circularFigure'; + +export interface CircularGenomeEditAction +{ + figureStr : string; + description : string; + commit : (figure : CircularFigure) => void; + afterCommit : () => void; + rollback : (newFigure : CircularFigure,oldFigure : CircularFigure) => void; +} + +export type CircularGenomeEditOpts = Omit; + +export class CircularGenomeEditCache +{ + private editStack : Array; + + public pushEdit(figure : CircularFigure,opts : CircularGenomeEditOpts) : void + { + this.editStack.push({ + figureStr : JSON.stringify(figure), + description : opts.description, + commit : opts.commit, + afterCommit : opts.afterCommit, + rollback : opts.rollback + }); + + let edit = this.editStack[this.editStack.length - 1]; + edit.commit(figure); + edit.afterCommit(); + } + + public popEdit(figure : CircularFigure) : CircularGenomeEditAction | undefined + { + return this.editStack.pop(); + } + + public constructor() + { + this.editStack = new Array(); + } +} \ No newline at end of file