private dialogValues()

in gui/frontend/src/modules/mrs/dialogs/MrsContentSetDialog.tsx [152:416]


    private dialogValues(request: IDialogRequest, services: IMrsServiceData[]): IDialogValues {
        let selectedService = services.find((service) => {
            return request.values?.serviceId === service.id;
        });

        if (services.length > 0 && !selectedService) {
            selectedService = services[0];
        }

        // Check if options.containsMrsScripts === true
        let newOptions = "";
        let containsMrsScripts = this.#mrsScriptLanguage !== undefined;
        let buildFolder = "build";
        let scriptingLanguage = "";
        let staticContentFolder = "";
        if (request.values && request.values.options) {
            const options = JSON.parse(request.values.options as string) as IMrsContentSetOptions;
            if (options[KnownMrsContentSetFieldNames.ContainsMrsScripts] === true) {
                containsMrsScripts = true;
                options.containsMrsScripts = undefined;
            }

            const scriptDefinitions = options[KnownMrsContentSetFieldNames.ScriptDefinitions];
            if (scriptDefinitions) {
                if (scriptDefinitions[KnownMrsContentSetFieldNames.BuildFolder]) {
                    buildFolder = scriptDefinitions[KnownMrsContentSetFieldNames.BuildFolder];
                }

                if (scriptDefinitions[KnownMrsContentSetFieldNames.Language]) {
                    scriptingLanguage = scriptDefinitions[KnownMrsContentSetFieldNames.Language];
                }

                if (scriptDefinitions[KnownMrsContentSetFieldNames.StaticContentFolder]) {
                    staticContentFolder = scriptDefinitions[KnownMrsContentSetFieldNames.StaticContentFolder];
                }

                this.#mrsScriptDefinitions = scriptDefinitions;
                options[KnownMrsContentSetFieldNames.ScriptDefinitions] = undefined;
            }

            if (options[KnownMrsContentSetFieldNames.ScriptModuleFiles]) {
                this.#mrsScriptModuleFiles = options[KnownMrsContentSetFieldNames.ScriptModuleFiles];
                options.scriptModuleFiles = undefined;
            }

            newOptions = JSON.stringify(options, undefined, 4);
            if (newOptions === "{}") {
                newOptions = "";
            }
        }

        const mainSection: IDialogSection = {
            caption: request.title,
            values: {
                requestPath: {
                    type: "text",
                    caption: "Request Path",
                    value: request.values?.requestPath as string,
                    horizontalSpan: 3,
                    options: [
                        CommonDialogValueOption.AutoFocus,
                    ],
                    description: "The request path to access the content, has to start with /",
                },
                service: {
                    type: "choice",
                    caption: "REST Service Path",
                    value: selectedService?.fullServicePath ?? "",
                    choices: services.map((service) => {
                        return service.fullServicePath ?? "";
                    }),
                    horizontalSpan: 3,
                    description: "The MRS Service to hold the content",
                },
                flags: {
                    type: "description",
                    caption: "Access Control",
                    horizontalSpan: 2,
                    options: [
                        CommonDialogValueOption.Grouped,
                        CommonDialogValueOption.NewGroup,
                    ],
                },
                enabled: {
                    type: "choice",
                    caption: "Access",
                    choices: ["Access DISABLED", "Access ENABLED", "PRIVATE Access Only"],
                    horizontalSpan: 2,
                    value: request.values?.enabled === EnabledState.PrivateOnly ? "PRIVATE Access Only" :
                        request.values?.enabled === EnabledState.Enabled ? "Access ENABLED" : "Access DISABLED",
                    options: [
                        CommonDialogValueOption.Grouped,
                    ],
                },
                requiresAuth: {
                    type: "boolean",
                    caption: "Auth. Required",
                    horizontalSpan: 2,
                    value: (request.values?.requiresAuth ?? true) as boolean,
                    options: [
                        CommonDialogValueOption.Grouped,
                    ],
                },
                directory: {
                    type: "resource",
                    caption: "Folder to upload",
                    value: request.values?.directory as string,
                    horizontalSpan: 5,
                    canSelectFolders: true,
                    canSelectFiles: false,
                    description: "The folder that should be uploaded, including all its files and sub-folders",
                    onChange: this.onDirectoryChange,
                },
                ignoreList: {
                    type: "text",
                    caption: "Files to ignore",
                    value: "*node_modules/*, */.*",
                    horizontalSpan: 3,
                    description: "A list of files to ignore, use * and ? as wildcards",
                },
            },
        };

        const settingsSection: IDialogSection = {
            caption: "Settings",
            groupName: "group1",
            values: {
                comments: {
                    type: "text",
                    caption: "Comments",
                    value: request.values?.comments as string,
                    horizontalSpan: 8,
                    multiLine: true,
                    multiLineCount: 3,
                },
                containsMrsScripts: {
                    type: "boolean",
                    caption: "MRS Scripts",
                    label: "Enable MRS Scripts",
                    horizontalSpan: 4,
                    value: containsMrsScripts,
                    description: "Load and enabled the MRS scripts and triggers from this content set "
                        + "and create the corresponding endpoints",
                    options: this.#mrsScriptLanguage === undefined ? [CommonDialogValueOption.Hidden] : [],
                    onChange: (value, dialog) => {
                        if (value) {
                            dialog.updateActiveContexts({
                                add: ["MrsScripts"],
                            });
                        } else {
                            dialog.updateActiveContexts({
                                remove: ["MrsScripts"],
                            });
                        }
                    },
                },
            },
        };

        const scriptSection: IDialogSection = {
            caption: "MRS Scripts",
            groupName: "group1",
            contexts: ["MrsScripts"],
            values: {
                mrsScriptLanguage: {
                    type: "text",
                    caption: "Language",
                    value: scriptingLanguage,
                    horizontalSpan: 2,
                    description: "MRS Script language",
                    options: [CommonDialogValueOption.ReadOnly],
                },
                buildFolder: {
                    type: "text",
                    caption: "Build Folder",
                    value: buildFolder,
                    horizontalSpan: 3,
                    description: "Path of the build folder, for compiled languages",
                    options: [CommonDialogValueOption.ReadOnly],
                },
                staticContentFolder: {
                    type: "text",
                    caption: "Static Content Folder",
                    value: staticContentFolder,
                    horizontalSpan: 3,
                    description: "The path of the static files that should be served",
                    options: [CommonDialogValueOption.ReadOnly],
                },
                scriptModuleDefinitions: {
                    type: "text",
                    caption: "Module Definitions",
                    value: "",
                    horizontalSpan: 8,
                    multiLine: true,
                    multiLineCount: 10,
                    description: "A listing of the module and script definitions",
                    options: [CommonDialogValueOption.ReadOnly],
                },
            },
        };

        const scriptInterfacesSection: IDialogSection = {
            caption: "MRS Script Interfaces",
            groupName: "group1",
            contexts: ["MrsScripts"],
            values: {
                scriptInterfaceDefinitions: {
                    type: "text",
                    caption: "Interface Definitions",
                    value: "",
                    horizontalSpan: 8,
                    multiLine: true,
                    multiLineCount: 12,
                    options: [CommonDialogValueOption.ReadOnly],
                    description: "A listing of the interface definitions",
                },
            },
        };

        const scriptErrorsSection: IDialogSection = {
            caption: "MRS Scripts Errors",
            groupName: "group1",
            contexts: ["MrsScripts", "MrsScriptErrors"],
            values: {
                errors: {
                    type: "text",
                    caption: "MRS Script Errors",
                    value: "",
                    horizontalSpan: 8,
                    multiLine: true,
                    multiLineCount: 12,
                    options: [CommonDialogValueOption.ReadOnly],
                    description: "Errors that occurred while parsing the MRS Scripts",
                },
            },
        };

        const optionsSection: IDialogSection = {
            caption: "Options",
            groupName: "group1",
            values: {
                options: {
                    type: "text",
                    caption: "Options",
                    value: newOptions,
                    horizontalSpan: 8,
                    multiLine: true,
                    multiLineCount: 10,
                    description: "Additional options in JSON format",
                },
            },
        };

        return {
            id: "mainSection",
            sections: new Map<string, IDialogSection>([
                ["mainSection", mainSection],
                ["settingsSection", settingsSection],
                ["scriptSection", scriptSection],
                ["scriptInterfacesSection", scriptInterfacesSection],
                ["scriptErrorsSection", scriptErrorsSection],
                ["optionsSection", optionsSection],
            ]),
        };
    }