From c5b07faf065cb2f1a484d7c95dc1d8f942666628 Mon Sep 17 00:00:00 2001 From: jensp Date: Mon, 18 Jun 2018 18:18:54 +0000 Subject: [PATCH] CCM NG: PageModelsEditor First parts for UI for managing the containers in a PageModel git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5536 8810af33-2d31-482b-a856-94f89814c4df --- .../libreccm/pagemodel/ContainerModel.java | 2 +- .../org/libreccm/pagemodel/rs/PageModels.java | 27 +++++++ .../ccm-pagemodelseditor/PageModelsEditor.tsx | 78 +++++++++++++------ .../ccm-pagemodelseditor/datatypes.ts | 10 ++- 4 files changed, 93 insertions(+), 24 deletions(-) diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/ContainerModel.java b/ccm-core/src/main/java/org/libreccm/pagemodel/ContainerModel.java index ca1b15d9c..6784e416c 100644 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/ContainerModel.java +++ b/ccm-core/src/main/java/org/libreccm/pagemodel/ContainerModel.java @@ -72,7 +72,7 @@ public class ContainerModel implements Serializable { */ @Id @Column(name = "CONTAINER_ID") - @XmlElement(name = "ocntainer-model-id") + @XmlElement(name = "container-model-id") private long containerId; /** diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/PageModels.java b/ccm-core/src/main/java/org/libreccm/pagemodel/rs/PageModels.java index 32301d974..f4bbfa471 100644 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/PageModels.java +++ b/ccm-core/src/main/java/org/libreccm/pagemodel/rs/PageModels.java @@ -22,6 +22,7 @@ import com.arsdigita.kernel.KernelConfig; import org.libreccm.configuration.ConfigurationManager; import org.libreccm.core.CoreConstants; import org.libreccm.l10n.GlobalizationHelper; +import org.libreccm.pagemodel.ContainerModel; import org.libreccm.pagemodel.PageModel; import org.libreccm.pagemodel.PageModelManager; import org.libreccm.pagemodel.PageModelRepository; @@ -47,8 +48,10 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import java.util.Date; +import java.util.List; import java.util.Objects; import java.util.Optional; +import java.util.stream.Collectors; /** * Provides RESTful endpoints for retrieving, creating, updating and deleting @@ -293,6 +296,7 @@ public class PageModels { return Json .createObjectBuilder() + .add("containers", mapContainersToJson(pageModel)) .add("description", globalizationHelper .getValueFromLocalizedString(pageModel.getDescription())) @@ -312,6 +316,29 @@ public class PageModels { .build(); } + private JsonArray mapContainersToJson(final PageModel pageModel) { + + final JsonArrayBuilder containers = Json.createArrayBuilder(); + + pageModel + .getContainers() + .stream() + .map(this::mapContainerToJson) + .forEach(container -> containers.add(container)); + + return containers.build(); + } + + private JsonObject mapContainerToJson(final ContainerModel container) { + + return Json + .createObjectBuilder() + .add("containerUuid", container.getContainerUuid()) + .add("key", container.getKey()) + .add("uuid", container.getUuid()) + .build(); + } + /** * Check if the {@link PublicationStatus} of the provided PageModel. * diff --git a/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/PageModelsEditor.tsx b/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/PageModelsEditor.tsx index 35458c425..5a1e20da0 100644 --- a/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/PageModelsEditor.tsx +++ b/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/PageModelsEditor.tsx @@ -1,5 +1,10 @@ import * as React from "react"; -import {PageModel, PageModelVersion, PublicationStatus} from "./datatypes"; +import { + ContainerModel, + PageModel, + PageModelVersion, + PublicationStatus +} from "./datatypes"; export { PageModelEditor, @@ -291,11 +296,15 @@ class PageModelComponent }}>Edit {this.props.pageModel.publicationStatus === PublicationStatus.NOT_PUBLISHED.toString() - && + && } {this.props.pageModel.publicationStatus === PublicationStatus.NEEDS_UPDATE.toString() - && + && } + ; } } @@ -315,7 +324,7 @@ class PageModelComponent }); } - private getLastModifiedDate():string { + private getLastModifiedDate(): string { if (this.props.pageModel.lastPublished === 0) { return ""; @@ -405,11 +414,11 @@ class PageModelComponent credentials: "same-origin", headers, method: "PUT", - } + }; const url: string = `${this.props.dispatcherPrefix}` + `/page-models/${this.props.ccmApplication}/` - + `${this.props.pageModel.name}` + + `${this.props.pageModel.name}`; fetch(url, init) .then((response: Response) => { @@ -455,11 +464,11 @@ class PageModelComponent credentials: "same-origin", headers, method: "POST", - } + }; const url: string = `${this.props.dispatcherPrefix}` + `/page-models/${this.props.ccmApplication}/` - + `${this.props.pageModel.name}` + + `${this.props.pageModel.name}`; fetch(url, init) .then((response: Response) => { @@ -470,21 +479,45 @@ class PageModelComponent this.setState({ ...this.state, errorMsg: `Failed to publish PageModel: ` - + ` ${response.status} ${response.statusText}`, + + ` ${response.status} ${response.statusText}`, }); } }) .catch((error) => { - this.setState({ - ...this.state, - errorMsg: `Failed to publish PageModel: ${error.message}`, - }) + this.setState({ + ...this.state, + errorMsg: `Failed to publish PageModel: ${error.message}`, + }) }); } } +interface ContainerListProps { + + containers: ContainerModel[], +} + +class ContainerListComponent extends React.Component { + + public render(): React.ReactNode { + return
+ +
    + {this.props.containers + && this.props.containers.map((container) => +
  • + {container.key} + + + +
  • )} +
+
+ } +} + // interface PageModelEditorProps { // // } @@ -549,8 +582,8 @@ class PageModelEditor + Create new PageModel { this.setState((state: PageModelEditorState) => { @@ -588,8 +621,8 @@ class PageModelEditor } {this.state.selectedPageModel !== null && { this.reload(); @@ -607,6 +640,7 @@ class PageModelEditor this.setState({ ...this.state, selectedPageModel: { + containers: [], description: "", lastModified: 0, lastPublished: 0, @@ -627,10 +661,10 @@ class PageModelEditor const init: RequestInit = { credentials: "same-origin", method: "GET", - } + }; - const url: string = `${this.getDispatcherPrefix()}` - + `/page-models/${this.getCcmApplication()}`; + const url: string = `${PageModelEditor.getDispatcherPrefix()}` + + `/page-models/${PageModelEditor.getCcmApplication()}`; fetch(url, init) .then((response) => { @@ -682,7 +716,7 @@ class PageModelEditor } - private getDispatcherPrefix(): string { + private static getDispatcherPrefix(): string { const dataElem: HTMLElement | null = document .querySelector("#page-models-editor.react-data"); @@ -700,7 +734,7 @@ class PageModelEditor } } - private getCcmApplication(): string { + private static getCcmApplication(): string { const dataElem: HTMLElement | null = document .querySelector("#page-models-editor.react-data"); diff --git a/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/datatypes.ts b/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/datatypes.ts index e6e582582..48390d0e1 100644 --- a/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/datatypes.ts +++ b/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/datatypes.ts @@ -1,7 +1,15 @@ -export { PageModel, PageModelVersion, PublicationStatus }; +export { ContainerModel, PageModel, PageModelVersion, PublicationStatus }; + +interface ContainerModel { + + containerUuid: string; + key: string; + uuid: string; +} interface PageModel { + containers: ContainerModel[], description: string; modelUuid: string; name: string;