dbm
Version:
223 lines (176 loc) • 11.5 kB
JavaScript
import React from "react";
import Dbm from "../../../index.js";
export default class EditWebsite extends Dbm.react.BaseObject {
_construct() {
super._construct();
let graphApi = Dbm.getInstance().repository.getItem("graphApi").controller;
let editorGroup = new Dbm.graphapi.webclient.admin.EditorGroup();
this.item.setValue("editorGroup", editorGroup);
this.item.requireProperty("changed", false).connectInput(editorGroup.item.properties.changed);
this.item.requireProperty("websiteEditor", null);
this.item.requireProperty("organizationEditor", null);
this.item.requireProperty("localBusinesses", []);
/*
let itemEditor = editorGroup.getItemEditor(id);
itemEditor.addFieldEditor("title", page.title, "title");
itemEditor.addFieldEditor("navigationName", page.navigationName); //METODO: add update encoding
itemEditor.addFieldEditor("content", page.content, "content");
itemEditor.addEditor("url", page.url, Dbm.graphapi.webclient.admin.SaveFunctions.setUrl, "url");
let descriptionEditor = itemEditor.addFieldEditor("meta/description", page["meta/description"], "meta/description");
let descriptionLength = Dbm.flow.updatefunctions.basic.length(descriptionEditor.item.editValue.value);
this.item.requireProperty("descriptionLength", 0).connectInput(descriptionLength.output.properties.length);
this.item.requireProperty("importText", "");
*/
let allLoaded = Dbm.flow.updatefunctions.logic.allAtValue(Dbm.loading.LoadingStatus.LOADED);
this.item.requireProperty("loaded", false);
Dbm.flow.addUpdateCommandWhenMatched(this.item.properties.loaded, true, Dbm.commands.callFunction(this._allLoaded.bind(this), []));
{
let request = graphApi.requestRange(
[
{"type": "includePrivate"},
{"type": "includeDraft"},
{"type": "globalObjectRelationQuery", "identifer": "website", "path": "(root)"},
],
["admin_fields", "relations"]
);
Dbm.flow.addUpdateCommandWhenMatched(request.properties.status, Dbm.loading.LoadingStatus.LOADED, Dbm.commands.callFunction(this._websiteLoaded.bind(this), [request]));
allLoaded.addCheck(request.properties.status);
}
{
let request = graphApi.requestRange(
[
{"type": "includePrivate"},
{"type": "includeDraft"},
{"type": "globalObjectRelationQuery", "identifer": "website", "path": "out:by:organization"},
],
["admin_fields", "relations"]
);
Dbm.flow.addUpdateCommandWhenMatched(request.properties.status, Dbm.loading.LoadingStatus.LOADED, Dbm.commands.callFunction(this._organizationLoaded.bind(this), [request]));
allLoaded.addCheck(request.properties.status);
}
{
let request = graphApi.requestRange(
[
{"type": "includePrivate"},
{"type": "includeDraft"},
{"type": "globalObjectRelationQuery", "identifer": "website", "path": "out:by:organization,in:in:localBusiness"},
],
["id"]
);
Dbm.flow.addUpdateCommandWhenMatched(request.properties.status, Dbm.loading.LoadingStatus.LOADED, Dbm.commands.callFunction(this._localBusinessesLoaded.bind(this), [request]));
allLoaded.addCheck(request.properties.status);
}
this.item.properties.loaded.connectInput(allLoaded.output.properties.value);
}
_websiteLoaded(aRequest) {
console.log("_websiteLoaded");
console.log(aRequest);
let item = aRequest.items[0];
let id = item.id;
let editorGroup = this.item.editorGroup;
let itemEditor = editorGroup.getItemEditor(id);
itemEditor.addFieldEditor("name", Dbm.objectPath(item, "fields.name"), "admin_fields");
{
let relationType = "by";
let objectType = "organization";
let relations = Dbm.utils.ArrayFunctions.filterByField(Dbm.objectPath(item, "relations/out." + relationType + ".objects"), "objectTypes", objectType, "arrayContains");
let relation = (relations && relations.length) ? relations[0].id : null;
itemEditor.addOutgoingRelationEditor(relationType, objectType, relation, ["relations"]);
}
this.item.setValue("websiteEditor", itemEditor);
}
_organizationLoaded(aRequest) {
console.log("_organizationLoaded");
console.log(aRequest);
let item = aRequest.items[0];
let id = item.id;
let editorGroup = this.item.editorGroup;
let itemEditor = editorGroup.getItemEditor(id);
itemEditor.addFieldEditor("name", Dbm.objectPath(item, "fields.name"), "admin_fields");
{
let logoRelations = Dbm.utils.ArrayFunctions.filterByField(Dbm.objectPath(item, "relations/in.isLogoFor.objects"), "objectTypes", "image", "arrayContains");
let logo = (logoRelations && logoRelations.length) ? logoRelations[0].id : null;
itemEditor.addIncomingRelationEditor("isLogoFor", "image", logo, ["relations"]);
}
{
let relationType = "in";
let objectType = "localBusiness";
let relations = Dbm.utils.ArrayFunctions.filterByField(Dbm.objectPath(item, "relations/in." + relationType + ".objects"), "objectTypes", objectType, "arrayContains");
let editor = itemEditor.addMultipleIncomingRelationsEditor(relationType, objectType, Dbm.utils.ArrayFunctions.mapField(relations, "id"), ["relations"]);
console.log(relations, editor);
}
this.item.setValue("organizationEditor", itemEditor);
}
_localBusinessesLoaded(aRequest) {
console.log("_localBusinessesLoaded");
console.log(aRequest);
this.item.localBusinesses = [].concat(aRequest.items);
}
_allLoaded() {
console.log("_allLoaded");
}
_save() {
console.log("_save");
let editorGroup = this.item.editorGroup;
let saveData = editorGroup.getSaveData();
saveData.save();
}
_addArrayRow(aArrayEditor) {
aArrayEditor.push(null);
}
_removeArrayRow(aArrayEditor, aItem) {
aArrayEditor.removeItem(aItem);
}
_renderMainElement() {
let editorGroup = this.item.editorGroup;
return React.createElement("div", {"className": "content-narrow"},
React.createElement(Dbm.react.area.HasData, {"check": this.item.properties.loaded},
React.createElement(Dbm.react.context.AddContextVariables, {values: {"editorGroup": editorGroup}},
React.createElement(Dbm.react.context.AddContextVariables, {values: {"itemEditor": this.item.properties.websiteEditor}},
React.createElement(Dbm.react.form.LabelledArea, {"label": "Website name"},
React.createElement(Dbm.react.form.FormField, {"value": Dbm.react.source.contextVariable("itemEditor.value.item.editor_name.item.editValue.item.properties.value"), className: "standard-field standard-field-padding full-width"}),
),
React.createElement(Dbm.react.form.LabelledArea, {"label": "Organization"},
React.createElement(Dbm.react.form.GraphApiSelectOrCreateObject, {"value": Dbm.react.source.contextVariable("itemEditor.value.item.editor_relation_out_by_organization.item.editValue.item.properties.value"), objectType: "organization"}),
)
),
React.createElement("div", {className: "spacing standard"}),
React.createElement(Dbm.react.context.AddContextVariables, {values: {"itemEditor": this.item.properties.organizationEditor}},
React.createElement(Dbm.react.form.LabelledArea, {"label": "Organization name"},
React.createElement(Dbm.react.form.FormField, {"value": Dbm.react.source.contextVariable("itemEditor.value.item.editor_name.item.editValue.item.properties.value"), className: "standard-field standard-field-padding full-width"}),
),
React.createElement(Dbm.react.form.LabelledArea, {"label": "Logo"},
React.createElement(Dbm.react.form.GraphApiImage, {"value": Dbm.react.source.contextVariable("itemEditor.value.item.editor_relation_in_isLogoFor_image.item.editValue.item.properties.value")}),
),
React.createElement("h2", {}, "Local businesses"),
React.createElement(Dbm.react.form.EditArray, {"value": Dbm.react.source.contextVariable("itemEditor.value.item.editor_multipleRelations_in_in_localBusiness.item.editValue.item.properties.value")},
React.createElement("div", {},
React.createElement("h3", {}, "Local business"),
React.createElement(Dbm.react.interaction.CommandButton, {command: Dbm.commands.callFunction(this._removeArrayRow, [Dbm.react.source.contextVariable("arrayEditor"), Dbm.react.source.contextVariable("item")])},
React.createElement("div", {}, "Remove"),
),
React.createElement(Dbm.react.form.GraphApiSelectOrCreateObject, {"value": Dbm.react.source.contextVariable("item.properties.value"), objectType: "localBusiness"}),
React.createElement(Dbm.react.area.HasData, {check: Dbm.react.source.contextVariable("item.properties.value")},
React.createElement(Dbm.react.context.AddItemByIdToContext, {id: Dbm.react.source.contextVariable("item.properties.value")},
React.createElement(Dbm.react.admin.website.EditLocalBusiness, {})
),
),
),
React.createElement(Dbm.react.interaction.CommandButton, {"data-slot": "after", command: Dbm.commands.callFunction(this._addArrayRow, [Dbm.react.source.contextVariable("arrayEditor")])},
React.createElement("div", {}, "Add"),
)
),
),
React.createElement("div", {className: "spacing standard"}),
React.createElement("div", {className: "save-all-position"},
React.createElement(Dbm.react.area.OpenCloseExpandableArea, {open: this.item.properties.changed},
React.createElement("div", {"className": "standard-button standard-button-padding", "onClick": () => {this._save()}},
"Save all changes"
)
)
)
)
)
);
}
}