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

Former-commit-id: 4f329a6961
pull/2/head
jensp 2018-08-09 17:31:36 +00:00
parent 7fe5930e7e
commit 9848878d94
1 changed files with 354 additions and 0 deletions

View File

@ -32,6 +32,9 @@ class CategoryTreeComponentPropertiesList
component={this.props.component}> component={this.props.component}>
<dt>showFullTree</dt> <dt>showFullTree</dt>
<dd>{this.props.component.showFullTree}</dd> <dd>{this.props.component.showFullTree}</dd>
{this.props.children}
</BasicComponentModelPropertiesList>; </BasicComponentModelPropertiesList>;
} }
} }
@ -78,6 +81,9 @@ class CategoryTreeComponentEditorDialog
id={`${idPrefix}showFullTree`} id={`${idPrefix}showFullTree`}
onChange={this.handleChange} onChange={this.handleChange}
type="checkbox" /> type="checkbox" />
{this.props.children}
</BasicComponentModelEditorDialog>; </BasicComponentModelEditorDialog>;
} }
@ -106,6 +112,319 @@ class CategoryTreeComponentEditorDialog
} }
} }
class ContentItemComponentPropertiesList extends React.Component<
BasicComponentModelPropertiesListProps<ContentItemComponent>, {}> {
constructor(
props: BasicComponentModelPropertiesListProps<ContentItemComponent>) {
super(props);
}
public render(): React.ReactNode {
return <BasicComponentModelPropertiesList
component={this.props.component}>
<dt>Mode</dt>
<dd>{this.props.component.mode}</dd>
{this.props.children}
</BasicComponentModelPropertiesList>;
}
}
interface ContentItemComponentEditorDialogState
extends BasicComponentModelEditorDialogState {
mode: string;
}
class ContentItemComponentEditorDialog extends React.Component<
BasicComponentModelEditorDialogProps<ContentItemComponent>,
ContentItemComponentEditorDialogState> {
constructor(
props: BasicComponentModelEditorDialogProps<ContentItemComponent>) {
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 <BasicComponentModelEditorDialog
ccmApplication={this.props.ccmApplication}
component={this.props.component}
containerKey={this.props.containerKey}
dispatcherPrefix={this.props.dispatcherPrefix}
pageModelName={this.props.pageModelName}
getComponentModelProperties={this.getComponentModelProperties}>
<label htmlFor={`${idPrefix}mode`}>
Mode
</label>
<input id={`${idPrefix}mode`}
maxLength={256}
onChange={this.handleChange}
size={64}
type="text"
value={this.state.mode} />
{this.props.children}
</BasicComponentModelEditorDialog>;
}
private getComponentModelProperties(): {[name: string]: any} {
return {
mode: this.state.mode,
};
}
private handleChange(event: React.ChangeEvent<HTMLInputElement>): 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<ContentItemComponent>, {}> {
constructor(
props: BasicComponentModelPropertiesListProps<ContentItemComponent>) {
super(props);
}
public render(): React.ReactNode {
return <ContentItemComponentPropertiesList
component={this.props.component}>
{this.props.children}
</ContentItemComponentPropertiesList>
}
}
class CategorizedItemComponentEditorDialog extends React.Component<
BasicComponentModelEditorDialogProps<ContentItemComponent>,
ContentItemComponentEditorDialogState> {
constructor(
props: BasicComponentModelEditorDialogProps<ContentItemComponent>) {
super(props);
this.getComponentModelProperties
= this.getComponentModelProperties.bind(this);
}
public render(): React.ReactNode {
return <ContentItemComponentEditorDialog
ccmApplication={this.props.ccmApplication}
component={this.props.component}
containerKey={this.props.containerKey}
dispatcherPrefix={this.props.dispatcherPrefix}
pageModelName={this.props.pageModelName}
getComponentModelProperties={this.getComponentModelProperties}>
{this.props.children}
</ContentItemComponentEditorDialog>
}
private getComponentModelProperties(): {[name: string]: any} {
return {};
}
}
class FixedContentItemComponentPropertiesList extends React.Component<
BasicComponentModelPropertiesListProps<FixedContentItemComponent>, {}> {
constructor(
props: BasicComponentModelPropertiesListProps<FixedContentItemComponent>
) {
super(props);
}
public render(): React.ReactNode {
return <ContentItemComponentPropertiesList
component={this.props.component}>
<dt>Content Item UUID</dt>
<dd>{this.props.component.contentItem}</dd>
{this.props.children}
</ContentItemComponentPropertiesList>
}
}
interface FixedContentItemComponentEditorDialogState
extends ContentItemComponentEditorDialogState {
contentItem: string;
}
class FixedContentItemComponentEditorDialog extends React.Component<
BasicComponentModelEditorDialogProps<FixedContentItemComponent>,
FixedContentItemComponentEditorDialogState> {
constructor(
props: BasicComponentModelEditorDialogProps<FixedContentItemComponent>
) {
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 <ContentItemComponentEditorDialog
ccmApplication={this.props.ccmApplication}
component={this.props.component}
containerKey={this.props.containerKey}
dispatcherPrefix={this.props.dispatcherPrefix}
pageModelName={this.props.pageModelName}
getComponentModelProperties={this.getComponentModelProperties}>
<label htmlFor={`${idPrefix}contentItemUuid`}>
ContentItem UUID
</label>
<input id={`${idPrefix}contentItemUuid`}
maxLength={36}
onChange={this.handleChange}
size={36}
type="text"
value={this.state.contentItem} />
{this.props.children}
</ContentItemComponentEditorDialog>;
}
private getComponentModelProperties(): {[name: string]: any} {
return {
contentItem: this.state.contentItem,
};
}
private handleChange(event: React.ChangeEvent<HTMLInputElement>): 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<ContentItemComponent>, {}> {
constructor(
props: BasicComponentModelPropertiesListProps<ContentItemComponent>) {
super(props);
}
public render(): React.ReactNode {
return <ContentItemComponentPropertiesList
component={this.props.component}>
{this.props.children}
</ContentItemComponentPropertiesList>
}
}
class GreetingItemComponentEditorDialog extends React.Component<
BasicComponentModelEditorDialogProps<ContentItemComponent>,
ContentItemComponentEditorDialogState> {
constructor(
props: BasicComponentModelEditorDialogProps<ContentItemComponent>) {
super(props);
this.getComponentModelProperties
= this.getComponentModelProperties.bind(this);
}
public render(): React.ReactNode {
return <ContentItemComponentEditorDialog
ccmApplication={this.props.ccmApplication}
component={this.props.component}
containerKey={this.props.containerKey}
dispatcherPrefix={this.props.dispatcherPrefix}
pageModelName={this.props.pageModelName}
getComponentModelProperties={this.getComponentModelProperties}>
{this.props.children}
</ContentItemComponentEditorDialog>
}
private getComponentModelProperties(): {[name: string]: any} {
return {};
}
}
class ItemListComponentPropertiesList extends React.Component< class ItemListComponentPropertiesList extends React.Component<
BasicComponentModelPropertiesListProps<ItemListComponent>, {}> { BasicComponentModelPropertiesListProps<ItemListComponent>, {}> {
@ -137,6 +456,9 @@ class ItemListComponentPropertiesList extends React.Component<
) : ("No order set") ) : ("No order set")
} }
</dd> </dd>
{this.props.children}
</BasicComponentModelPropertiesList>; </BasicComponentModelPropertiesList>;
} }
} }
@ -223,6 +545,8 @@ class ItemListComponentEditorDialog extends React.Component<
)}> )}>
</textarea> </textarea>
{this.props.children}
</BasicComponentModelEditorDialog>; </BasicComponentModelEditorDialog>;
} }
@ -294,6 +618,16 @@ interface CategoryTreeComponent extends ComponentModel {
showFullTree: boolean; showFullTree: boolean;
} }
interface ContentItemComponent extends ComponentModel {
mode: string;
}
interface FixedContentItemComponent extends ContentItemComponent {
contentItem: string;
}
interface ItemListComponent extends ComponentModel { interface ItemListComponent extends ComponentModel {
descending: boolean; descending: boolean;
@ -321,3 +655,23 @@ ComponentModelEditor.registerEditorComponents(
ItemListComponentPropertiesList as typeof React.Component, 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
},
);