Skip to content

Commit

Permalink
fix action model
Browse files Browse the repository at this point in the history
  • Loading branch information
chgibb committed Sep 8, 2019
1 parent e4f203a commit 69c22da
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 42 deletions.
Expand Up @@ -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";
Expand All @@ -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<string>;

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;
Expand Down Expand Up @@ -87,22 +62,20 @@ export class CircularGenomeBuilderView extends React.Component<CircularGenomeBui
window.addEventListener("resize",this.reposition);
}

public maybePushEdit(figure : CircularFigure) : void
public maybePushEdit(figure : CircularFigure,opts : CircularGenomeEditOpts) : void
{
let cache = this.editCaches[figure.uuid];

if(cache)
cache.pushEdit(figure);
cache.pushEdit(figure,opts);
}

public maybePopEdit(figure : CircularFigure) : CircularFigure | undefined
public maybePopEdit(figure : CircularFigure) : CircularGenomeEditAction | undefined
{
let cache = this.editCaches[figure.uuid];

if(cache)
{
return cache.popEdit();
}
return cache.popEdit(figure);
return undefined;
}

Expand Down Expand Up @@ -186,7 +159,7 @@ export class CircularGenomeBuilderView extends React.Component<CircularGenomeBui
if(figure)
{
if(!this.editCaches[figure.uuid])
this.editCaches[figure.uuid] = new CircularGenomeEditCache(figure);
this.editCaches[figure.uuid] = new CircularGenomeEditCache();
}

return (
Expand Down Expand Up @@ -231,14 +204,11 @@ export class CircularGenomeBuilderView extends React.Component<CircularGenomeBui
onClick={()=>{
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();
}
}
Expand Down Expand Up @@ -299,9 +269,21 @@ export class CircularGenomeBuilderView extends React.Component<CircularGenomeBui
{
if(value && figure)
{
this.maybePushEdit(figure);
figure.name = value;
this.saveFigures();
this.maybePushEdit(
figure,{
description : `Change name from ${figure.name} to ${value}`,
commit : (figure : CircularFigure) => {
figure.name = value;
},
afterCommit : () => {
this.saveFigures();
},
rollback : (newFigure : CircularFigure,oldFigure : CircularFigure) => {
newFigure.name = oldFigure.name;
}
}
);

}
}}
onClose={()=>
Expand Down
@@ -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<CircularGenomeEditAction,"figureStr">;

export class CircularGenomeEditCache
{
private editStack : Array<CircularGenomeEditAction>;

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();
}
}

0 comments on commit 69c22da

Please sign in to comment.