UNPKG

dbm

Version:

155 lines (121 loc) 6.23 kB
import React from "react"; import Dbm from "../../index.js"; export default class CreatePage extends Dbm.react.BaseObject { _construct() { super._construct(); this.item.requireProperty("title", ""); this.item.requireProperty("parent", 0); Dbm.flow.addUpdateCommand(this.item.properties.parent, Dbm.commands.callFunction(this._parentSelected.bind(this))); this.item.requireProperty("parentUrl", ""); this.item.requireProperty("url", ""); this.item.requireProperty("freeUrl", ""); this.item.requireProperty("updateSlugFromTitle", true); this._titleFieldId = "dbmField" + Dbm.getInstance().getNextId(); this._urlFieldId = "dbmField" + Dbm.getInstance().getNextId(); Dbm.flow.addUpdateCommand(this.item.properties.title, Dbm.commands.callFunction(this._titleChanged.bind(this))); Dbm.flow.addUpdateCommand(this.item.properties.url, Dbm.commands.callFunction(this._urlChanged.bind(this))); } _titleChanged() { console.log("_titleChanged"); console.log(this.item.updateSlugFromTitle); if(this.item.updateSlugFromTitle) { this.item.url = this.item.parentUrl + Dbm.utils.StringFunctions.createNiceFilePath(this.item.title); } } _urlChanged() { console.log("_urlChanged"); let currentUrl = this.item.url; if(currentUrl !== "") { let request = Dbm.getInstance().repository.getItem("graphApi").controller.requestData("admin/freeUrl", {"url": "/" + currentUrl}); Dbm.flow.addUpdateCommand(request.properties.status, Dbm.commands.callFunction(this._freeUrlStatusChanged.bind(this), [currentUrl, request])); } else { currentUrl = Dbm.utils.StringFunctions.createNiceFilePath(this.item.title); let request = Dbm.getInstance().repository.getItem("graphApi").controller.requestData("admin/freeUrl", {"url": "/" + currentUrl}); Dbm.flow.addUpdateCommand(request.properties.status, Dbm.commands.callFunction(this._freeUrlStatusChanged.bind(this), [currentUrl, request])); this.item.updateSlugFromTitle = true; } } _freeUrlStatusChanged(aUrl, aRequest) { console.log("_freeUrlStatusChanged"); console.log(aUrl, aRequest); if(aRequest.status === 1) { let currentUrl = this.item.url; if(!currentUrl) { currentUrl = this.item.parentUrl + Dbm.utils.StringFunctions.createNiceFilePath(this.item.title); this.item.url = currentUrl; } if(currentUrl === aUrl) { this.item.freeUrl = aRequest.data.url; } } } _callback_urlUpdatedManually(aEvent) { this.item.updateSlugFromTitle = false; } _parentSelected() { console.log("_parentSelected"); let id = this.item.parent; console.log(id); let parentUrl = ""; if(id) { let item = Dbm.getInstance().repository.getItem(id); parentUrl = item.url.substring(1); } this.item.parentUrl = parentUrl; this._titleChanged(); } _create() { console.log("_create"); let fullUrl = this.item.freeUrl + "/"; let currentDate = (new Date()).toISOString().split("T")[0]; let changes = [ {"type": "setField", "data": {"value": this.item.title, "field": "title"}}, {"type": "setField", "data": {"value": currentDate, "field": "publishDate"}}, {"type": "setUrl", "data": {"value": fullUrl}} ] let request = Dbm.getGraphApi().createItem(["page"], "public", changes); Dbm.flow.addUpdateCommand(request.properties.status, Dbm.commands.callFunction(this._pageCreated.bind(this), [fullUrl])); } _pageCreated(aUrl) { Dbm.getRepositoryItem("siteNavigation").controller.navigate(aUrl); } _renderMainElement() { let domain = document.location.protocol + "//" + document.location.host; return React.createElement("div", {}, React.createElement("div", {}, React.createElement("label", {className: "standard-field-label"}, "Page title" ), React.createElement(Dbm.react.form.FormField, {"value": this.item.properties.title, "id": this._titleFieldId, className: "standard-field standard-field-padding full-width"}), ), React.createElement("div", {className: "spacing standard"}), React.createElement("div", {}, React.createElement("label", {className: "standard-field-label"}, "Parent page" ), React.createElement("div", {}, React.createElement(Dbm.react.form.GraphApiObjectSelection, {"value": this.item.properties.parent, objectType: "page", encoding: "urlRequest", nameField: "url", className: "standard-field standard-field-padding full-width"}), ) ), React.createElement("div", {className: "spacing standard"}), React.createElement("div", {}, React.createElement("label", {className: "standard-field-label"}, "Url" ), React.createElement(Dbm.react.form.FormField, {"value": this.item.properties.url, "id": this._urlFieldId, onFocus: this._callback_urlUpdatedManually.bind(this), className: "standard-field standard-field-padding full-width"}), ), React.createElement("div", {className: "spacing micro"}), React.createElement("div", {"className": "small-description"}, Dbm.react.text.text(domain), Dbm.react.text.text(this.item.properties.freeUrl), ), React.createElement("div", {className: "spacing standard"}), React.createElement("div", {className: "flex-row justify-center"}, React.createElement("div", {"className": "standard-button standard-button-padding", "onClick": () => {this._create()}}, "Create" ) ) ); } }