From c6ecd219f61811c3af9776ad8c08c2232db20dfd Mon Sep 17 00:00:00 2001 From: Fawn Date: Mon, 15 Apr 2019 20:04:01 -0400 Subject: template menu works when switching between diff docs --- src/client/views/TemplateMenu.tsx | 88 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 src/client/views/TemplateMenu.tsx (limited to 'src/client/views/TemplateMenu.tsx') diff --git a/src/client/views/TemplateMenu.tsx b/src/client/views/TemplateMenu.tsx new file mode 100644 index 000000000..7f670aec0 --- /dev/null +++ b/src/client/views/TemplateMenu.tsx @@ -0,0 +1,88 @@ +import { observable, computed, action } from "mobx"; +import React = require("react"); +import { SelectionManager } from "../util/SelectionManager"; +import { observer } from "mobx-react"; +import './DocumentDecorations.scss'; +import { Templates, Template } from "./Templates"; +import { DocumentView } from "./nodes/DocumentView"; +const higflyout = require("@hig/flyout"); +export const { anchorPoints } = higflyout; +export const Flyout = higflyout.default; + +@observer +class TemplateToggle extends React.Component<{ template: Template, checked: boolean, toggle: (event: React.ChangeEvent, template: Template) => void }> { + render() { + if (this.props.template) { + return ( +
  • + this.props.toggle(event, this.props.template)} /> + {this.props.template.Name} +
  • + ); + } else { + return (null); + } + } +} + +export interface TemplateMenuProps { + doc: DocumentView; + templates: Map; +} + +@observer +export class TemplateMenu extends React.Component { + + @observable private _hidden: boolean = true; + @observable private _showBase: boolean = true; + @observable private _templates: Map = this.props.templates; + + + @action + toggleTemplate = (event: React.ChangeEvent, template: Template): void => { + if (event.target.checked) { + this.props.doc.addTemplate(template); + this._templates.set(template, true); + } else { + this.props.doc.removeTemplate(template); + this._templates.set(template, false); + } + + // const docs = view.props.ContainingCollectionView; + // const docs = view.props.Document.GetList(view.props.fieldKey, []); + + } + + @action + componentWillReceiveProps(nextProps: TemplateMenuProps) { + this._templates = nextProps.templates; + } + + @action + toggleBase = (event: React.ChangeEvent): void => { + this.props.doc.toggleBase(event.target.checked); + this._showBase = !this._showBase; + } + + @action + toggleTemplateActivity = (): void => { + this._hidden = !this._hidden; + } + + render() { + let templateMenu: Array = []; + this._templates.forEach((checked, template) => { + templateMenu.push(); + }); + + return ( +
    +
    this.toggleTemplateActivity()}>T
    +
      +
    • this.toggleBase(event)} defaultChecked={true} />Base layout
    • + {templateMenu} +
    +
    + ); + } +} \ No newline at end of file -- cgit v1.2.3-70-g09d2 From fbf1662304e0b3f744827710d728602af4493f25 Mon Sep 17 00:00:00 2001 From: Fawn Date: Thu, 18 Apr 2019 22:13:08 -0400 Subject: changed menu to work like radio buttons: --- src/client/views/DocumentDecorations.tsx | 2 +- src/client/views/TemplateMenu.tsx | 30 ++++++++++++----------- src/client/views/Templates.tsx | 4 ++-- src/client/views/nodes/DocumentView.tsx | 41 +++++++++++++------------------- 4 files changed, 35 insertions(+), 42 deletions(-) (limited to 'src/client/views/TemplateMenu.tsx') diff --git a/src/client/views/DocumentDecorations.tsx b/src/client/views/DocumentDecorations.tsx index 1e936a881..3dcdc596d 100644 --- a/src/client/views/DocumentDecorations.tsx +++ b/src/client/views/DocumentDecorations.tsx @@ -409,7 +409,7 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> let templates: Map = new Map(); let doc = SelectionManager.SelectedDocuments()[0]; Array.from(Object.values(Templates)).map(template => { - templates.set(template, doc.hasTemplate(template)); + templates.set(template, doc.Template === template); }); return (
    diff --git a/src/client/views/TemplateMenu.tsx b/src/client/views/TemplateMenu.tsx index 7f670aec0..0c8ae7055 100644 --- a/src/client/views/TemplateMenu.tsx +++ b/src/client/views/TemplateMenu.tsx @@ -1,9 +1,8 @@ import { observable, computed, action } from "mobx"; import React = require("react"); -import { SelectionManager } from "../util/SelectionManager"; import { observer } from "mobx-react"; import './DocumentDecorations.scss'; -import { Templates, Template } from "./Templates"; +import { Template } from "./Templates"; import { DocumentView } from "./nodes/DocumentView"; const higflyout = require("@hig/flyout"); export const { anchorPoints } = higflyout; @@ -34,19 +33,19 @@ export interface TemplateMenuProps { export class TemplateMenu extends React.Component { @observable private _hidden: boolean = true; - @observable private _showBase: boolean = true; + @observable private _useBase: boolean = true; @observable private _templates: Map = this.props.templates; @action toggleTemplate = (event: React.ChangeEvent, template: Template): void => { - if (event.target.checked) { - this.props.doc.addTemplate(template); - this._templates.set(template, true); - } else { - this.props.doc.removeTemplate(template); - this._templates.set(template, false); - } + this._useBase = false; + this.props.doc.toggleBase(false); + this.props.doc.changeTemplate(template); + this._templates.forEach((checked, temp) => { + this._templates.set(temp, false); + }); + this._templates.set(template, true); // const docs = view.props.ContainingCollectionView; // const docs = view.props.Document.GetList(view.props.fieldKey, []); @@ -59,9 +58,12 @@ export class TemplateMenu extends React.Component { } @action - toggleBase = (event: React.ChangeEvent): void => { - this.props.doc.toggleBase(event.target.checked); - this._showBase = !this._showBase; + toggleBase = (event: React.MouseEvent): void => { + this._useBase = true; + this.props.doc.toggleBase(true); + this._templates.forEach((checked, temp) => { + this._templates.set(temp, false); + }); } @action @@ -79,7 +81,7 @@ export class TemplateMenu extends React.Component {
    this.toggleTemplateActivity()}>T
      -
    • this.toggleBase(event)} defaultChecked={true} />Base layout
    • +
    • this.toggleBase(event)} checked={this._useBase} />Base layout
    • {templateMenu}
    diff --git a/src/client/views/Templates.tsx b/src/client/views/Templates.tsx index b82b383bb..c22b22286 100644 --- a/src/client/views/Templates.tsx +++ b/src/client/views/Templates.tsx @@ -31,7 +31,7 @@ export namespace Templates { {layout}
    - +
    `); @@ -42,7 +42,7 @@ export namespace Templates { {layout}
    - +
    `); diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx index ef1420027..12332348b 100644 --- a/src/client/views/nodes/DocumentView.tsx +++ b/src/client/views/nodes/DocumentView.tsx @@ -92,9 +92,8 @@ export class DocumentView extends React.Component { } private _downX: number = 0; private _downY: number = 0; - @observable private _templates: Set