From b8985344aa406fb0411e872b2f3273e7bb6528fa Mon Sep 17 00:00:00 2001 From: jensp Date: Thu, 26 Jul 2018 18:24:12 +0000 Subject: [PATCH] CCM NG: ccm-cms-js now uses new structure of ccm-pagemodelseditor git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5617 8810af33-2d31-482b-a856-94f89814c4df --- .../ccm-cms/ccm-cms-pagemodelseditor.tsx | 553 ++++++++++++++---- .../ccm-pagemodelseditor/PageModelsEditor.tsx | 57 +- 2 files changed, 458 insertions(+), 152 deletions(-) diff --git a/ccm-cms-js/src/main/typescript/ccm-cms/ccm-cms-pagemodelseditor.tsx b/ccm-cms-js/src/main/typescript/ccm-cms/ccm-cms-pagemodelseditor.tsx index f61eb0853..119942329 100644 --- a/ccm-cms-js/src/main/typescript/ccm-cms/ccm-cms-pagemodelseditor.tsx +++ b/ccm-cms-js/src/main/typescript/ccm-cms/ccm-cms-pagemodelseditor.tsx @@ -1,142 +1,134 @@ import * as React from "react"; import { render } from "react-dom"; -import { AbstractComponentModelEditor, - ComponentModel, - ComponentModelEditorProps, - ComponentModelEditorState, +import { + // AbstractComponentModelEditor, + ComponentModel, + BasicComponentModelEditorDialog, + BasicComponentModelEditorDialogProps, + BasicComponentModelEditorDialogState, + BasicComponentModelPropertiesList, + BasicComponentModelPropertiesListProps, + ComponentModelEditor, + ComponentModelEditorProps, + ComponentModelEditorDialogProps, + ComponentInfo, + EditorComponents, + // ComponentModelEditorProps, + // ComponentModelEditorState, PageModelEditor, } from "ccm-pagemodelseditor"; -PageModelEditor.registerComponentModelEditor( - "org.librecms.pagemodel.CategoryTreeComponent", - (props: ComponentModelEditorProps) => { - return - } -); -PageModelEditor.registerComponentModelEditor( - "org.librecms.pagemodel.ItemListComponent", - (props: ComponentModelEditorProps) => { - return - } -); +class CategoryTreeComponentPropertiesList + extends React.Component< + BasicComponentModelPropertiesListProps, {}> { -render( - , - document.getElementById("cms-content"), -); + constructor( + props: BasicComponentModelPropertiesListProps) { -interface CategoryTreeComponent extends ComponentModel { + super(props); + } + + public render(): React.ReactNode { + + return +
showFullTree
+
{this.props.component.showFullTree}
+
+ } +} + +interface CategoryTreeComponentEditorDialogState + extends BasicComponentModelEditorDialogState { showFullTree: boolean; } -interface CategoryTreeComponentEditorProps - extends ComponentModelEditorProps { +class CategoryTreeComponentEditorDialog + extends React.Component< + BasicComponentModelEditorDialogProps, + CategoryTreeComponentEditorDialogState> { -} - -interface CategoryTreeComponentEditorState - extends ComponentModelEditorState { - - showFullTree: boolean; -} - - -class CategoryTreeComponentEditor - extends AbstractComponentModelEditor { - - public constructor(props: CategoryTreeComponentEditorProps) { + constructor( + props: BasicComponentModelEditorDialogProps) { super(props); - this.setState({ - ...this.state as any, - dialogExpanded: "dialogClosed", - showFullTree: false, - }); - } - - public renderPropertyList(): React.ReactFragment { - - return -
Show full tree
-
{this.props.component.showFullTree}
-
; - } - - public renderEditorDialog(): React.ReactFragment { - - return ; - } -} - -interface ItemListComponent extends ComponentModel { - - descending: boolean; - limitToType: string; - pageSize: number; - listOrder: string[], -} - -interface ItemListComponentEditorProps - extends ComponentModelEditorProps { - -} - -interface ItemListComponentEditorState - extends ComponentModelEditorState { - - descending: boolean; - limitToType: string; - pageSize: number; - listOrder: string[]; -} - -class ItemListComponentEditor - extends AbstractComponentModelEditor { - - public constructor(props: ItemListComponentEditorProps) { - - super(props as any); - - this.setState({ + this.state = { ...this.state, - dialogExpanded: "dialogClosed", - descending: false, - limitToType: "", - pageSize: 30, - listOrder: [], - }); + showFullTree: this.props.component.showFullTree, + }; + + this.handleChange = this.handleChange.bind(this); } - public renderPropertyList(): React.ReactFragment { + public render(): React.ReactNode { - console.log("Rendering properties list for ItemListComponent..."); - console.log(`listOrder = ${this.props.component.listOrder}`); + const idPrefix: string + = `${this.props.containerKey}_${this.props.component.key}_`; - return -
descending
+ return + + + + + } + + private getComponentModelProperties(): {[name: string]: any} { + + return { + showFullTree: this.state.showFullTree, + }; + } + + private handleChange(event: React.ChangeEvent): void { + + const target: HTMLInputElement = event.currentTarget; + const idPrefix: string + = `${this.props.containerKey}_${this.props.component.key}_`; + + switch(target.id) { + case `${idPrefix}showFullTree`: { + this.setState({ + ...this.state, + showFullTree: target.checked, + }); + break; + } + } + } +} + +class ItemListComponentPropertiesList extends React.Component< + BasicComponentModelPropertiesListProps, {}> { + + constructor( + props: BasicComponentModelPropertiesListProps) { + + super(props); + } + + public render(): React.ReactNode { + + return +
Descending?
{this.props.component.descending}
-
limitToType
+
Limit to type
{this.props.component.limitToType}
-
pageSize
+
Page size
{this.props.component.pageSize}
-
listOrder
+
List Order
{Array.isArray(this.props.component.listOrder) ? ( @@ -148,37 +140,342 @@ class ItemListComponentEditor ) : ("No order set") }
-
+ + } +} + +interface ItemListComponentEditorDialogState + extends BasicComponentModelEditorDialogState { + + descending: boolean; + limitToType: string; + pageSize: number; + listOrder: string[]; +} + +class ItemListComponentEditorDialog extends React.Component< + BasicComponentModelEditorDialogProps, + ItemListComponentEditorDialogState> { + + constructor( + props: BasicComponentModelEditorDialogProps) { + + super(props); + + this.state = { + ...this.state, + descending: this.props.component.descending, + limitToType: this.props.component.limitToType, + pageSize: this.props.component.pageSize, + listOrder: this.props.component.listOrder, + }; + + this.handleChange = this.handleChange.bind(this); } - public renderEditorDialog(): React.ReactFragment { + public render(): React.ReactNode { - return - + - - + Page size + + - - - ; + + ; } + + private getComponentModelProperties(): {[name: string]: any} { + + return { + descending: this.state.descending, + limitToType: this.state.limitToType, + pageSize: this.state.pageSize, + listOrder: this.state.listOrder, + }; + } + + private handleChange(event: React.ChangeEvent): void { + + const target: HTMLInputElement = event.currentTarget; + const idPrefix: string + = `${this.props.containerKey}_${this.props.component.key}_`; + + switch(target.id) { + case `${idPrefix}descending`: { + this.setState({ + ...this.state, + descending: target.checked, + }); + break; + } + case `${idPrefix}limitToType`: { + this.setState({ + ...this.state, + limitToType: target.value, + }); + break; + } + case `${idPrefix}pageSize`: { + this.setState({ + ...this.state, + pageSize: target.valueAsNumber, + }); + break; + } + } + } + + private handleListOrderChange( + event: React.ChangeEvent) { + + const target: HTMLTextAreaElement = event.currentTarget; + const componentId: string + = `${this.props.containerKey}_${this.props.component.key}` + + `_listOrder`; + + this.setState({ + ...this.state, + listOrder: target.value.split("\n"), + }); + + } + } + +// PageModelEditor.registerComponentModelEditor( +// "org.librecms.pagemodel.CategoryTreeComponent", +// (props: ComponentModelEditorProps) => { +// return +// } +// ); +// PageModelEditor.registerComponentModelEditor( +// "org.librecms.pagemodel.ItemListComponent", +// (props: ComponentModelEditorProps) => { +// return +// } +// ); + +render( + , + document.getElementById("cms-content"), +); + +interface CategoryTreeComponent extends ComponentModel { + + showFullTree: boolean; +} + +// interface CategoryTreeComponentEditorProps +// extends ComponentModelEditorProps { +// +// } +// +// interface CategoryTreeComponentEditorState +// extends ComponentModelEditorState { +// +// showFullTree: boolean; +// } +// +// +// class CategoryTreeComponentEditor +// extends AbstractComponentModelEditor { +// +// public constructor(props: CategoryTreeComponentEditorProps) { +// +// super(props); +// +// this.setState({ +// ...this.state as any, +// dialogExpanded: "dialogClosed", +// showFullTree: false, +// }); +// } +// +// public renderPropertyList(): React.ReactFragment { +// +// return +//
Show full tree
+//
{this.props.component.showFullTree}
+//
; +// } +// +// public renderEditorDialog(): React.ReactFragment { +// +// return ; +// } +// } + +interface ItemListComponent extends ComponentModel { + + descending: boolean; + limitToType: string; + pageSize: number; + listOrder: string[], +} + +ComponentModelEditor.registerEditorComponents( + "org.librecms.pagemodel.CategoryTreeComponent", + { + editorDialog: + CategoryTreeComponentEditorDialog as typeof React.Component, + propertiesList: + CategoryTreeComponentPropertiesList as typeof React.Component, + } +); + +ComponentModelEditor.registerEditorComponents( + "org.librecms.pagemodel.ItemListComponent", + { + editorDialog: + ItemListComponentEditorDialog as typeof React.Component, + propertiesList: + ItemListComponentPropertiesList as typeof React.Component, + } +); + + +// interface ItemListComponentEditorProps +// extends ComponentModelEditorProps { +// +// } +// +// interface ItemListComponentEditorState +// extends ComponentModelEditorState { +// +// descending: boolean; +// limitToType: string; +// pageSize: number; +// listOrder: string[]; +// } +// +// class ItemListComponentEditor +// extends AbstractComponentModelEditor { +// +// public constructor(props: ItemListComponentEditorProps) { +// +// super(props as any); +// +// this.setState({ +// ...this.state, +// dialogExpanded: "dialogClosed", +// descending: false, +// limitToType: "", +// pageSize: 30, +// listOrder: [], +// }); +// } +// +// public renderPropertyList(): React.ReactFragment { +// +// console.log("Rendering properties list for ItemListComponent..."); +// console.log(`listOrder = ${this.props.component.listOrder}`); +// +// return +//
descending
+//
{this.props.component.descending}
+//
limitToType
+//
{this.props.component.limitToType}
+//
pageSize
+//
{this.props.component.pageSize}
+//
listOrder
+//
+// {Array.isArray(this.props.component.listOrder) ? +// ( +// this.props.component.listOrder.map((order) => { +//
  • +// {order} +//
  • +// }) +// ) : ("No order set") +// } +//
    +//
    +// } +// +// public renderEditorDialog(): React.ReactFragment { +// +// return +// +// +// +// +// +// +// +// +// ; +// } +// } diff --git a/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/PageModelsEditor.tsx b/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/PageModelsEditor.tsx index c86ab5aa4..21e3c62dd 100644 --- a/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/PageModelsEditor.tsx +++ b/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/PageModelsEditor.tsx @@ -10,10 +10,19 @@ import { export { // OldAbstractComponentModelEditor, - ComponentModel, + BasicComponentModelEditorDialog, + BasicComponentModelEditorDialogProps, + BasicComponentModelEditorDialogState, + BasicComponentModelPropertiesList, + BasicComponentModelPropertiesListProps, // OldComponentModelEditorProps, // OldComponentModelEditorState, + ComponentModel, + ComponentModelEditor, + ComponentModelEditorProps, + ComponentModelEditorDialogProps, ComponentInfo, + EditorComponents, PageModelEditor, PageModelEditorState, // PageModelEditorProps, @@ -1128,8 +1137,8 @@ class BasicComponentModelEditorDialog interface EditorComponents { - propertiesList: typeof React.Component; editorDialog: typeof React.Component; + propertiesList: typeof React.Component; } interface ComponentModelEditorProps { @@ -1144,42 +1153,42 @@ interface ComponentModelEditorProps { class ComponentModelEditor extends React.Component { - private editorComponents: {[type: string]: EditorComponents}; - private propertiesListComponents: {[type: string]: typeof React.Component}; - private editorDialogComponents: {[type: string]: typeof React.Component}; + private static editorComponents: {[type: string]: EditorComponents} = {}; + // private propertiesListComponents: {[type: string]: typeof React.Component}; + // private editorDialogComponents: {[type: string]: typeof React.Component}; constructor(props: ComponentModelEditorProps) { super(props); - this.editorComponents = {}; - this.propertiesListComponents = {}; - this.editorDialogComponents = {}; + // this.editorComponents = {}; + // this.propertiesListComponents = {}; + // this.editorDialogComponents = {}; } - public registerEditorComponents(type: string, - components: EditorComponents) { + public static registerEditorComponents(type: string, + components: EditorComponents) { - this.editorComponents = { - ...this.editorComponents, + ComponentModelEditor.editorComponents = { + ...ComponentModelEditor.editorComponents, type: components, }; - this.propertiesListComponents = { - ...this.propertiesListComponents, - type: components.propertiesList, - }; - - this.editorDialogComponents = { - ...this.editorDialogComponents, - type: components.editorDialog, - } + // this.propertiesListComponents = { + // ...this.propertiesListComponents, + // type: components.propertiesList, + // }; + // + // this.editorDialogComponents = { + // ...this.editorDialogComponents, + // type: components.editorDialog, + // } } public render(): React.ReactNode { const components: EditorComponents - = this.editorComponents[this.props.component.type]; + = ComponentModelEditor.editorComponents[this.props.component.type]; const PropertiesList: typeof React.Component = components.propertiesList; const EditorDialog: typeof React.Component @@ -1199,8 +1208,8 @@ class ComponentModelEditor private getEditorComponents(type: string): EditorComponents { - if (this.editorComponents.hasOwnProperty(type)) { - return this.editorComponents[type]; + if (ComponentModelEditor.editorComponents.hasOwnProperty(type)) { + return ComponentModelEditor.editorComponents[type]; } else { const basicComponents: EditorComponents = { propertiesList: