Spiegel von
https://github.com/paviliondev/discourse-custom-wizard.git
synchronisiert 2024-11-14 22:02:53 +01:00
193 Zeilen
3,8 KiB
JavaScript
193 Zeilen
3,8 KiB
JavaScript
import EmberObject from "@ember/object";
|
|
import { A } from "@ember/array";
|
|
import I18n from "I18n";
|
|
|
|
// Inputs
|
|
|
|
const selectableInputTypes = [
|
|
"conditional",
|
|
"assignment",
|
|
"association",
|
|
"validation",
|
|
];
|
|
|
|
function defaultInputType(options = {}) {
|
|
return options.inputTypes.split(",")[0];
|
|
}
|
|
|
|
function mapInputTypes(types) {
|
|
return types.map(function (type) {
|
|
return {
|
|
id: type,
|
|
name: I18n.t(`admin.wizard.input.${type}.name`),
|
|
};
|
|
});
|
|
}
|
|
|
|
function inputTypesContent(options = {}) {
|
|
return options.inputTypes
|
|
? mapInputTypes(options.inputTypes.split(","))
|
|
: mapInputTypes(selectableInputTypes);
|
|
}
|
|
|
|
// connectorTypes
|
|
|
|
const connectors = {
|
|
pair: [
|
|
"equal",
|
|
"not_equal",
|
|
"greater",
|
|
"less",
|
|
"greater_or_equal",
|
|
"less_or_equal",
|
|
"regex",
|
|
"is",
|
|
],
|
|
output: ["then", "set"],
|
|
};
|
|
|
|
function defaultConnector(connectorType, inputType, options = {}) {
|
|
if (connectorType === "input") {
|
|
return defaultInputType(options);
|
|
}
|
|
if (connectorType === "pair") {
|
|
if (inputType === "conditional") {
|
|
return "equal";
|
|
}
|
|
if (inputType === "association") {
|
|
return "association";
|
|
}
|
|
if (inputType === "validation") {
|
|
return "equal";
|
|
}
|
|
}
|
|
if (connectorType === "output") {
|
|
if (inputType === "conditional") {
|
|
return "then";
|
|
}
|
|
if (inputType === "assignment") {
|
|
return "set";
|
|
}
|
|
}
|
|
return "equal";
|
|
}
|
|
|
|
function connectorContent(connectorType, inputType, opts) {
|
|
let connector = opts[`${connectorType}Connector`];
|
|
|
|
if (
|
|
(!connector && connectorType === "output") ||
|
|
inputType === "association"
|
|
) {
|
|
connector = defaultConnector(connectorType, inputType);
|
|
}
|
|
|
|
let content = connector ? [connector] : connectors[connectorType];
|
|
|
|
return content.map(function (item) {
|
|
return {
|
|
id: item,
|
|
name: I18n.t(`admin.wizard.connector.${item}`),
|
|
};
|
|
});
|
|
}
|
|
|
|
// Selectors
|
|
|
|
const selectionTypes = [
|
|
"text",
|
|
"list",
|
|
"wizardField",
|
|
"wizardAction",
|
|
"userField",
|
|
"userFieldOptions",
|
|
"group",
|
|
"category",
|
|
"tag",
|
|
"user",
|
|
"customField",
|
|
"value",
|
|
];
|
|
|
|
function defaultSelectionType(inputType, options = {}, connector = null) {
|
|
if (options[`${inputType}DefaultSelection`]) {
|
|
return options[`${inputType}DefaultSelection`];
|
|
}
|
|
|
|
if (connector === "is") {
|
|
return "value";
|
|
}
|
|
|
|
let type = selectionTypes[0];
|
|
|
|
for (let t of selectionTypes) {
|
|
let inputTypes = options[`${t}Selection`];
|
|
|
|
if (
|
|
inputTypes === true ||
|
|
(typeof inputTypes === "string" &&
|
|
inputTypes.split(",").indexOf(inputType) > -1)
|
|
) {
|
|
type = t;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return type;
|
|
}
|
|
|
|
// items
|
|
|
|
function newPair(inputType, options = {}) {
|
|
let params = {
|
|
index: options.index,
|
|
pairCount: options.pairCount,
|
|
key: "",
|
|
key_type: defaultSelectionType("key", options),
|
|
value: "",
|
|
value_type: defaultSelectionType("value", options),
|
|
connector: defaultConnector("pair", inputType, options),
|
|
};
|
|
|
|
return EmberObject.create(params);
|
|
}
|
|
|
|
function newInput(options = {}, count) {
|
|
const inputType = defaultInputType(options);
|
|
|
|
let params = {
|
|
type: inputType,
|
|
pairs: A([
|
|
newPair(
|
|
inputType,
|
|
Object.assign({}, options, { index: 0, pairCount: 1 })
|
|
),
|
|
]),
|
|
};
|
|
|
|
if (count > 0) {
|
|
params.connector = options.inputConnector;
|
|
}
|
|
|
|
if (
|
|
["conditional", "assignment"].indexOf(inputType) > -1 ||
|
|
options.outputDefaultSelection ||
|
|
options.outputConnector
|
|
) {
|
|
params["output_type"] = defaultSelectionType("output", options);
|
|
params["output_connector"] = defaultConnector("output", inputType, options);
|
|
}
|
|
|
|
return EmberObject.create(params);
|
|
}
|
|
|
|
export {
|
|
defaultInputType,
|
|
defaultSelectionType,
|
|
defaultConnector,
|
|
connectorContent,
|
|
inputTypesContent,
|
|
selectionTypes,
|
|
newInput,
|
|
newPair,
|
|
};
|