CCM NG: Basic part of PageModelsEditor finished
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5608 8810af33-2d31-482b-a856-94f89814c4dfccm-docs
parent
275ee6ae2d
commit
f5f40a9eee
|
|
@ -9,6 +9,9 @@ import {
|
||||||
} from "./datatypes";
|
} from "./datatypes";
|
||||||
|
|
||||||
export {
|
export {
|
||||||
|
AbstractComponentModelEditor,
|
||||||
|
ComponentModelEditorProps,
|
||||||
|
ComponentInfo,
|
||||||
PageModelEditor,
|
PageModelEditor,
|
||||||
PageModelEditorState,
|
PageModelEditorState,
|
||||||
// PageModelEditorProps,
|
// PageModelEditorProps,
|
||||||
|
|
@ -696,16 +699,8 @@ class ContainerListComponent
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// private deleteContainer(event: React.MouseEvent<HTMLButtonElement>): void {
|
|
||||||
private deleteContainer(containerKey: string): void {
|
private deleteContainer(containerKey: string): void {
|
||||||
|
|
||||||
// event.preventDefault();
|
|
||||||
|
|
||||||
// const deleteButton: HTMLButtonElement
|
|
||||||
// = event.target as HTMLButtonElement;
|
|
||||||
// const containerKey: string = deleteButton
|
|
||||||
// .getAttribute("data-containerKey") as string;
|
|
||||||
|
|
||||||
const init: RequestInit = {
|
const init: RequestInit = {
|
||||||
|
|
||||||
body: JSON.stringify({}),
|
body: JSON.stringify({}),
|
||||||
|
|
@ -807,13 +802,11 @@ class ContainerModelComponent
|
||||||
<div className="components-list">
|
<div className="components-list">
|
||||||
<ul>
|
<ul>
|
||||||
{this.state.components.map((component: ComponentModel) =>
|
{this.state.components.map((component: ComponentModel) =>
|
||||||
<li>
|
this.getComponentModelEditor(component),
|
||||||
{component.key}
|
|
||||||
</li>
|
|
||||||
)}
|
)}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>;
|
||||||
}
|
}
|
||||||
|
|
||||||
private fetchComponents(): void {
|
private fetchComponents(): void {
|
||||||
|
|
@ -845,8 +838,8 @@ class ContainerModelComponent
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
const errorMessages: string[] = this
|
const errorMessages: string[] = this
|
||||||
.state.errorMessages;
|
.state.errorMessages;
|
||||||
errorMessages.push(`Failed to retrieve PageModels ` +
|
errorMessages.push(`Failed to retrieve PageModels `
|
||||||
`from ${componentsUrl}: ${error.message}`);
|
+ `from ${componentsUrl}: ${error.message}`);
|
||||||
|
|
||||||
this.setState({
|
this.setState({
|
||||||
...this.state,
|
...this.state,
|
||||||
|
|
@ -880,6 +873,18 @@ class ContainerModelComponent
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private getComponentModelEditor(
|
||||||
|
component: ComponentModel): React.ReactNode {
|
||||||
|
|
||||||
|
if (PageModelEditor.getAvailableComponents()[component.type] === null) {
|
||||||
|
return PageModelEditor
|
||||||
|
.getAvailableComponents()[component.type](component);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
return <DefaultComponentModelEditor component={component} />;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private deleteContainer(
|
private deleteContainer(
|
||||||
event: React.MouseEvent<HTMLButtonElement>,
|
event: React.MouseEvent<HTMLButtonElement>,
|
||||||
containerKey: string): void {
|
containerKey: string): void {
|
||||||
|
|
@ -890,6 +895,55 @@ class ContainerModelComponent
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface ComponentModelEditorProps {
|
||||||
|
|
||||||
|
component: ComponentModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class AbstractComponentModelEditor
|
||||||
|
extends React.Component<ComponentModelEditorProps, {}> {
|
||||||
|
|
||||||
|
constructor(props: ComponentModelEditorProps) {
|
||||||
|
|
||||||
|
super(props);
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract renderPropertyList(): React.ReactFragment;
|
||||||
|
|
||||||
|
public abstract renderEditorDialog(): React.ReactFragment;
|
||||||
|
|
||||||
|
public render(): React.ReactNode {
|
||||||
|
|
||||||
|
return <li>
|
||||||
|
<dl>
|
||||||
|
<dt>Key</dt>
|
||||||
|
<dd>{this.props.component.key}</dd>
|
||||||
|
<dt>Type</dt>
|
||||||
|
<dd>{this.props.component.type}</dd>
|
||||||
|
{this.renderPropertyList}
|
||||||
|
</dl>
|
||||||
|
</li>;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class DefaultComponentModelEditor extends AbstractComponentModelEditor {
|
||||||
|
|
||||||
|
public renderPropertyList(): React.ReactFragment {
|
||||||
|
|
||||||
|
return <React.Fragment />;
|
||||||
|
}
|
||||||
|
|
||||||
|
public renderEditorDialog(): React.ReactFragment {
|
||||||
|
|
||||||
|
return <React.Fragment />;
|
||||||
|
}
|
||||||
|
|
||||||
|
public render(): React.ReactNode {
|
||||||
|
return super.render();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// interface PageModelEditorProps {
|
// interface PageModelEditorProps {
|
||||||
//
|
//
|
||||||
// }
|
// }
|
||||||
|
|
@ -917,7 +971,27 @@ interface ComponentInfo {
|
||||||
class PageModelEditor
|
class PageModelEditor
|
||||||
extends React.Component<{}, PageModelEditorState> {
|
extends React.Component<{}, PageModelEditorState> {
|
||||||
|
|
||||||
private static components: ComponentInfo[];
|
public static getAvailableComponents(): {
|
||||||
|
[type: string]: (component: ComponentModel) => React.ReactFragment} {
|
||||||
|
|
||||||
|
return {
|
||||||
|
...PageModelEditor.componentModelEditors,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static registerComponentModelEditor(
|
||||||
|
type: string,
|
||||||
|
generator: ((component: ComponentModel) => React.ReactFragment)): void {
|
||||||
|
|
||||||
|
PageModelEditor.componentModelEditors = {
|
||||||
|
...PageModelEditor.componentModelEditors,
|
||||||
|
type: generator,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private static componentModelEditors: {
|
||||||
|
[type: string]: (component: ComponentModel) => React.ReactFragment;
|
||||||
|
};
|
||||||
|
|
||||||
private static getDispatcherPrefix(): string {
|
private static getDispatcherPrefix(): string {
|
||||||
|
|
||||||
|
|
@ -955,25 +1029,6 @@ class PageModelEditor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static registerComponent(component: ComponentInfo): void {
|
|
||||||
|
|
||||||
PageModelEditor.components = [
|
|
||||||
...PageModelEditor.components,
|
|
||||||
component,
|
|
||||||
];
|
|
||||||
|
|
||||||
PageModelEditor.components.sort((component1, component2) => {
|
|
||||||
|
|
||||||
if (component1.label < component2.label) {
|
|
||||||
return -1;
|
|
||||||
} else if (component1.label > component2.label) {
|
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(props: any) {
|
constructor(props: any) {
|
||||||
|
|
||||||
super(props);
|
super(props);
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ export {
|
||||||
ContainerModel,
|
ContainerModel,
|
||||||
PageModel,
|
PageModel,
|
||||||
PageModelVersion,
|
PageModelVersion,
|
||||||
PublicationStatus
|
PublicationStatus,
|
||||||
};
|
};
|
||||||
|
|
||||||
interface ComponentModel {
|
interface ComponentModel {
|
||||||
|
|
@ -14,6 +14,7 @@ interface ComponentModel {
|
||||||
key: string;
|
key: string;
|
||||||
modelUuid: string;
|
modelUuid: string;
|
||||||
styleAttribute: string;
|
styleAttribute: string;
|
||||||
|
type: string;
|
||||||
uuid: string;
|
uuid: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue