diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js b/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js index a47cb0b09..487e5027b 100644 --- a/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js @@ -731,6 +731,7 @@ function newSuperalgosDocSpace() { generateChildrenNodesProperties() generateAttachingRules() generateReferencingRules() + generateConfiguration() function generateMenuItems() { /* @@ -942,6 +943,113 @@ function newSuperalgosDocSpace() { } } } + + function generateConfiguration() { + /* + Configuration + */ + let paragraph + let key = 'auto-generated-paragraph-' + paragraphIndex + if (nodeAppDefinition === undefined || nodeAppDefinition.editors === undefined) { return } + paragraph = { + style: "Title", + text: "" + nodeAppDefinition.type + " Configuration" + } + renderParagraph(paragraph, key) + paragraphIndex++ + paragraph = { + style: "Text", + text: "Each type of node, might have a configuration. The configuration can be accesed by users and changed at anytime. Whatever is at the configuration of a node is used by the processes in which the node is involved." + } + + if (nodeAppDefinition.initialValues === undefined || nodeAppDefinition.initialValues.config === undefined) { return } + renderParagraph(paragraph, key) + paragraphIndex++ + paragraph = { + style: "Subtitle", + text: "Initial Values:" + } + renderParagraph(paragraph, key) + paragraphIndex++ + paragraph = { + style: "Text", + text: "Each type of node, might have a definition with the initial values for it's configuration. The Initial Values are set one the node is first created. The Initial Values for " + nodeAppDefinition.type + " are:" + } + renderParagraph(paragraph, key) + paragraphIndex++ + let initialValues = JSON.parse(nodeAppDefinition.initialValues.config) + paragraph = { + style: "Json", + text: JSON.stringify(initialValues, undefined, 4) + } + renderParagraph(paragraph, key) + paragraphIndex++ + + paragraph = { + style: "Subtitle", + text: "Examples:" + } + renderParagraph(paragraph, key) + paragraphIndex++ + paragraph = { + style: "Text", + text: "This is a list of properties used at the " + nodeAppDefinition.type + " configuration. Expanding a property shows you sample values for that property." + } + renderParagraph(paragraph, key) + paragraphIndex++ + /* + Here we will scan the whole workspace, first looking for nodes of the same type, + and after that, analysing their configuration in order to extract all the properties + they are using and sample values for each one. + */ + /* First Step: get an array of all the nodes in the workspace of this type */ + let rootNodes = UI.projects.superalgos.spaces.designSpace.workspace.workspaceNode.rootNodes + let allNodesFound = [] + for (let i = 0; i < rootNodes.length; i++) { + let rootNode = rootNodes[i] + if (rootNode !== null) { + let nodeArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(rootNode, nodeAppDefinition.type) + allNodesFound = allNodesFound.concat(nodeArray) + } + } + /* Second Step: create a map with all the properties used in configurations of this node type */ + let propertyMap = new Map() + for (let i = 0; i < allNodesFound.length; i++) { + let node = allNodesFound[i] + let config = JSON.parse(node.config) + for (const property in config) { + let value = JSON.stringify(config[property]) + let valueArray = propertyMap.get(property) + if (valueArray === undefined) { + propertyMap.set(property, [value]) + } else { + valueArray.push(value) + } + } + } + /* Third Step: we will display the list of properties and the sample values */ + propertyMap.forEach(displayProperty) + function displayProperty(valueArray, key, map) { + + let name = UI.projects.superalgos.utilities.strings.fromCamelCaseToUpperWithSpaces(key) + + HTML = HTML + '' + HTML = HTML + '