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],
]),
};
}