From 1db7d23232d04d0ef6f9b6e5a3ed4d77aad0c3e0 Mon Sep 17 00:00:00 2001 From: jensp Date: Thu, 9 Aug 2018 17:31:36 +0000 Subject: [PATCH] CcmNG: UI for editing the properties of PageModel components from ccm-cms git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5665 8810af33-2d31-482b-a856-94f89814c4df --- .../ccm-cms/ccm-cms-pagemodelseditor.tsx | 354 ++++++++++++++++++ 1 file changed, 354 insertions(+) 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 8f5e106de..88ae12a90 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 @@ -32,6 +32,9 @@ class CategoryTreeComponentPropertiesList component={this.props.component}>
showFullTree
{this.props.component.showFullTree}
+ + {this.props.children} + ; } } @@ -78,6 +81,9 @@ class CategoryTreeComponentEditorDialog id={`${idPrefix}showFullTree`} onChange={this.handleChange} type="checkbox" /> + + {this.props.children} + ; } @@ -106,6 +112,319 @@ class CategoryTreeComponentEditorDialog } } +class ContentItemComponentPropertiesList extends React.Component< + BasicComponentModelPropertiesListProps, {}> { + + constructor( + props: BasicComponentModelPropertiesListProps) { + + super(props); + } + + public render(): React.ReactNode { + + return + +
Mode
+
{this.props.component.mode}
+ {this.props.children} + +
; + } +} + +interface ContentItemComponentEditorDialogState + extends BasicComponentModelEditorDialogState { + + mode: string; +} + +class ContentItemComponentEditorDialog extends React.Component< + BasicComponentModelEditorDialogProps, + ContentItemComponentEditorDialogState> { + + constructor( + props: BasicComponentModelEditorDialogProps) { + + super(props); + + this.state = { + ...this.state, + mode: this.props.component.mode, + }; + + this.handleChange = this.handleChange.bind(this); + + this.getComponentModelProperties + = this.getComponentModelProperties.bind(this); + } + + public render(): React.ReactNode { + + const idPrefix: string + = `${this.props.containerKey}_${this.props.component.key}_`; + + return + + + + + {this.props.children} + + ; + } + + private getComponentModelProperties(): {[name: string]: any} { + + return { + mode: this.state.mode, + }; + } + + 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}mode`: { + this.setState({ + ...this.state, + mode: target.value, + }); + break; + } + } + } +} + +class CategorizedItemComponentPropertiesList extends React.Component< + BasicComponentModelPropertiesListProps, {}> { + + constructor( + props: BasicComponentModelPropertiesListProps) { + + super(props); + } + + public render(): React.ReactNode { + + return + + {this.props.children} + + + } +} + +class CategorizedItemComponentEditorDialog extends React.Component< + BasicComponentModelEditorDialogProps, + ContentItemComponentEditorDialogState> { + + constructor( + props: BasicComponentModelEditorDialogProps) { + + super(props); + + this.getComponentModelProperties + = this.getComponentModelProperties.bind(this); + } + + public render(): React.ReactNode { + + return + + {this.props.children} + + + } + + private getComponentModelProperties(): {[name: string]: any} { + + return {}; + } +} + +class FixedContentItemComponentPropertiesList extends React.Component< + BasicComponentModelPropertiesListProps, {}> { + + constructor( + props: BasicComponentModelPropertiesListProps + ) { + + super(props); + } + + public render(): React.ReactNode { + + return + +
Content Item UUID
+
{this.props.component.contentItem}
+ {this.props.children} + +
+ } +} + +interface FixedContentItemComponentEditorDialogState + extends ContentItemComponentEditorDialogState { + + contentItem: string; +} + +class FixedContentItemComponentEditorDialog extends React.Component< + BasicComponentModelEditorDialogProps, + FixedContentItemComponentEditorDialogState> { + + constructor( + props: BasicComponentModelEditorDialogProps + ) { + super(props); + + this.state = { + ...this.state, + contentItem: this.props.component.contentItem, + }; + + this.handleChange = this.handleChange.bind(this); + + this.getComponentModelProperties + = this.getComponentModelProperties.bind(this); + } + + public render(): React.ReactNode { + + const idPrefix: string + = `${this.props.containerKey}_${this.props.component.key}_`; + + return + + + + + {this.props.children} + + ; + } + + private getComponentModelProperties(): {[name: string]: any} { + + return { + contentItem: this.state.contentItem, + }; + + } + + 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}contentItemUuid`: { + this.setState({ + ...this.state, + contentItem: target.value, + }); + break; + } + } + } +} + +class GreetingItemComponentPropertiesList extends React.Component< + BasicComponentModelPropertiesListProps, {}> { + + constructor( + props: BasicComponentModelPropertiesListProps) { + + super(props); + } + + public render(): React.ReactNode { + + return + + {this.props.children} + + + } +} + +class GreetingItemComponentEditorDialog extends React.Component< + BasicComponentModelEditorDialogProps, + ContentItemComponentEditorDialogState> { + + constructor( + props: BasicComponentModelEditorDialogProps) { + + super(props); + + this.getComponentModelProperties + = this.getComponentModelProperties.bind(this); + } + + public render(): React.ReactNode { + + return + + {this.props.children} + + + } + + private getComponentModelProperties(): {[name: string]: any} { + + return {}; + } +} + + class ItemListComponentPropertiesList extends React.Component< BasicComponentModelPropertiesListProps, {}> { @@ -137,6 +456,9 @@ class ItemListComponentPropertiesList extends React.Component< ) : ("No order set") } + + {this.props.children} + ; } } @@ -223,6 +545,8 @@ class ItemListComponentEditorDialog extends React.Component< )}> + {this.props.children} + ; } @@ -294,6 +618,16 @@ interface CategoryTreeComponent extends ComponentModel { showFullTree: boolean; } +interface ContentItemComponent extends ComponentModel { + + mode: string; +} + +interface FixedContentItemComponent extends ContentItemComponent { + + contentItem: string; +} + interface ItemListComponent extends ComponentModel { descending: boolean; @@ -321,3 +655,23 @@ ComponentModelEditor.registerEditorComponents( ItemListComponentPropertiesList as typeof React.Component, }, ); + +ComponentModelEditor.registerEditorComponents( + "org.librecms.pagemodel.FixedContentItemComponent", + { + editorDialog: + FixedContentItemComponentEditorDialog as typeof React.Component, + propertiesList: + FixedContentItemComponentPropertiesList as typeof React.Component, + }, +); + +ComponentModelEditor.registerEditorComponents( + "org.librecms.pagemodel.GreetingItemComponent", + { + editorDialog: + GreetingItemComponentEditorDialog as typeof React.Component, + propertiesList: + GreetingItemComponentPropertiesList as typeof React.Component + }, +);