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 6098ebfde..5d52fd1df 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 @@ -146,6 +146,32 @@ class ItemListComponentEditor public renderEditorDialog(): React.ReactFragment { - return ; + return + + + + + + + + + ; } } diff --git a/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/PageModelsEditor.tsx b/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/PageModelsEditor.tsx index 635b80f47..bc1293403 100644 --- a/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/PageModelsEditor.tsx +++ b/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/PageModelsEditor.tsx @@ -914,6 +914,8 @@ interface ComponentModelEditorProps { interface ComponentModelEditorState { dialogExpanded: string; + dialogOpened: boolean | undefined; + componentKey: string; } abstract class AbstractComponentModelEditor< @@ -927,10 +929,33 @@ abstract class AbstractComponentModelEditor< super(props as any); - this.setState({ + this.state = { ...this.state as any, dialogExpanded: "dialogClosed", - }); + dialogOpened: false, + }; + + this.handleChange = this.handleChange.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + } + + public handleChange(event: React.ChangeEvent): void { + + if (event.currentTarget.id === this.props.component.key + "_componentKey") { + + const target: HTMLInputElement + = event.currentTarget as HTMLInputElement; + + this.setState({ + ...this.state as any, + componentKey: target.value, + }); + } + + } + + public handleSubmit(event: React.FormEvent): void { + } public abstract renderPropertyList(): React.ReactFragment; @@ -947,27 +972,65 @@ abstract class AbstractComponentModelEditor<
{this.props.component.type}
{this.renderPropertyList()} - - - {this.renderEditorDialog()} + this.closeOnEsc} + open={this.state.dialogOpened}> + +

+ Edit component {this.props.component.key} +

+
+ + + {this.renderEditorDialog()} +
+
; } - private toggleEditorDialog( - event: React.MouseEvent): void { + private closeOnButton(event: React.MouseEvent): void { + + event.preventDefault(); + + this.toggleEditorDialog(); + } + + private closeOnEsc(event: React.KeyboardEvent): void { + + if (event.keyCode === 27) { + this.toggleEditorDialog(); + } + } + + private toggleEditorDialog(): void { if (this.state.dialogExpanded === "dialogExpanded") { this.setState({ ...this.state as any, dialogExpanded: "dialogClosed", + dialogOpened: false, }); } else { this.setState({ ...this.state as any, dialogExpanded: "dialogExpanded", + dialogOpened: true, }); } } diff --git a/ccm-theme-foundry/src/main/resources/themes/foundry/foundry/styles/admin.css b/ccm-theme-foundry/src/main/resources/themes/foundry/foundry/styles/admin.css index da7e1f1c6..e3235dcd2 100644 --- a/ccm-theme-foundry/src/main/resources/themes/foundry/foundry/styles/admin.css +++ b/ccm-theme-foundry/src/main/resources/themes/foundry/foundry/styles/admin.css @@ -2065,23 +2065,81 @@ div.errorPanel { left: 5em; } */ -li.componentModelEditor dialog.closed { +li.componentModelEditor dialog.dialogClosed { display: none; } -li.componentModelEditor dialog.closed { +li.componentModelEditor dialog.dialogExpanded { border: 2px solid #ccc; - border-radius: 3em; + border-radius: 3rem; display: block; + padding: 2em; + position: fixed; top: 10vh; right: 10vw; - bottom: 10vh; - left: 10vw; + bottom: 20vh; + left: 20vw; - width: 80vw; + width: 60vw; height: 80vh; + z-index: 1000; +} + +li.componentModelEditor dialog.dialogExpanded button.closeButton { + + background-color: none; + + border: none; + + color: #fff; + + font-size: 2em; + + position: absolute; + top: 1.5em; + right: 1.5em; + z-index: 1200; +} + +li.componentModelEditor dialog.dialogExpanded h1 { + + background-color: #0776a0; + + border-top-left-radius: 3rem; + border-top-right-radius: 3rem; + + box-sizing: border-box; + + color: #fff; + + font-size: 2em; + font-weight: bold; + + padding: 1em 3em; + + position: absolute; + top: 0; + left: 0; + + width: 100%; + height: 3em; + + z-index: 1100; +} + +li.componentModelEditor dialog.dialogExpanded input, +li.componentModelEditor dialog.dialogExpanded label, +li.componentModelEditor dialog.dialogExpanded textarea { + + display: block; +} + +li.componentModelEditor dialog.dialogExpanded input, +li.componentModelEditor dialog.dialogExpanded textarea { + + margin-bottom: 1em; }