0
0
Fork 1
Spiegel von https://github.com/paviliondev/discourse-custom-wizard.git synchronisiert 2024-11-16 14:50:28 +01:00
discourse-custom-wizard/assets/javascripts/discourse/lib/wizard-schema.js.es6

279 Zeilen
6,1 KiB
Text

2021-04-12 07:10:02 +02:00
import { get, set } from "@ember/object";
import { getOwner } from "discourse-common/lib/get-owner";
const wizard = {
basic: {
id: null,
name: null,
background: null,
save_submissions: true,
multiple_submissions: null,
after_signup: null,
after_time: null,
after_time_scheduled: null,
required: null,
prompt_completion: null,
restart_on_revisit: null,
theme_id: null,
permitted: null,
},
mapped: ["permitted"],
advanced: ["restart_on_revisit"],
required: ["id"],
dependent: {
after_time: "after_time_scheduled",
},
objectArrays: {
step: {
property: "steps",
required: false,
},
action: {
property: "actions",
required: false,
},
},
};
const step = {
basic: {
id: null,
index: null,
title: null,
key: null,
banner: null,
raw_description: null,
required_data: null,
required_data_message: null,
permitted_params: null,
condition: null,
force_final: false,
},
mapped: ["required_data", "permitted_params", "condition", "index"],
advanced: ["required_data", "permitted_params", "condition", "index"],
required: ["id"],
dependent: {},
objectArrays: {
field: {
property: "fields",
required: false,
},
},
};
2021-03-29 08:17:57 +02:00
/*
* unit: custom_wizard:templates_and_builder
* type: step
* number: 2
* title: Add the attribute to the wizard schema
2021-05-10 08:46:55 +02:00
* description: Custom Wizard templates are modeled and serialized in the
* client via the Wizard Schema. In some cases, when adding a new
* attribute, you just need to add it to the schema for the
* attribute to be loaded from, and sent back to, the server.
* However, if you are adding a new type-specific field attribute,
* currently you only need to add it to the field type schema on
* the server. The field schema on the server is loaded into the
* empty ``types`` object below.
* refernces: plugins/discourse-custom-wizard/discourse/lib/wizard-json
* plugins/discourse-custom-wizard/discourse/models/custom-wizard
2021-03-29 08:17:57 +02:00
*/
const field = {
basic: {
id: null,
index: null,
label: null,
image: null,
description: null,
required: null,
key: null,
type: null,
condition: null,
},
types: {},
mapped: ["prefill", "content", "condition", "index"],
advanced: ["property", "key", "condition", "index"],
required: ["id", "type"],
dependent: {},
objectArrays: {},
};
const action = {
basic: {
id: null,
run_after: "wizard_completion",
type: null,
},
types: {
create_topic: {
title: null,
post: null,
post_builder: null,
post_template: null,
category: null,
tags: null,
2020-07-20 06:26:11 +02:00
visible: null,
custom_fields: null,
skip_redirect: null,
suppress_notifications: null,
},
send_message: {
title: null,
post: null,
post_builder: null,
post_template: null,
skip_redirect: null,
custom_fields: null,
required: null,
recipient: null,
suppress_notifications: null,
},
open_composer: {
title: null,
post: null,
post_builder: null,
post_template: null,
category: null,
tags: null,
custom_fields: null,
},
update_profile: {
profile_updates: null,
custom_fields: null,
},
watch_categories: {
2020-05-24 09:56:27 +02:00
categories: null,
notification_level: null,
2020-07-20 05:06:36 +02:00
mute_remainder: null,
wizard_user: true,
usernames: null,
},
2020-05-30 21:26:14 +02:00
send_to_api: {
api: null,
api_endpoint: null,
api_body: null,
2020-05-30 21:26:14 +02:00
},
add_to_group: {
group: null,
},
route_to: {
url: null,
code: null,
},
create_category: {
name: null,
slug: null,
color: null,
text_color: "FFFFFF",
parent_category_id: null,
permissions: null,
custom_fields: null,
2020-07-16 07:25:06 +02:00
},
create_group: {
name: null,
full_name: null,
title: null,
bio_raw: null,
2020-07-16 09:50:09 +02:00
owner_usernames: null,
usernames: null,
2020-07-16 07:25:06 +02:00
grant_trust_level: null,
mentionable_level: null,
messageable_level: null,
visibility_level: null,
members_visibility_level: null,
custom_fields: null,
},
},
mapped: [
"title",
"category",
"tags",
"visible",
"custom_fields",
"required",
"recipient",
"profile_updates",
"group",
"url",
"categories",
"mute_remainder",
"name",
"slug",
"color",
"text_color",
"parent_category_id",
"permissions",
"full_name",
"bio_raw",
"owner_usernames",
"usernames",
"grant_trust_level",
"mentionable_level",
"messageable_level",
"visibility_level",
"members_visibility_level",
],
advanced: [
"code",
"custom_fields",
"skip_redirect",
"suppress_notifications",
"required",
],
required: ["id", "type"],
dependent: {},
objectArrays: {},
};
const wizardSchema = {
wizard,
step,
field,
action,
};
export function buildFieldTypes(types) {
wizardSchema.field.types = types;
}
2021-01-27 06:08:26 +01:00
export function buildFieldValidations(validations) {
wizardSchema.field.validations = validations;
}
const siteSettings = getOwner(this).lookup("site-settings:main");
if (siteSettings.wizard_apis_enabled) {
wizardSchema.action.types.send_to_api = {
api: null,
api_endpoint: null,
api_body: null,
};
}
2021-04-12 07:44:47 +02:00
export function setWizardDefaults(obj, itemType) {
2020-04-20 11:41:13 +02:00
const objSchema = wizardSchema[itemType];
const basicDefaults = objSchema.basic;
Object.keys(basicDefaults).forEach((property) => {
2020-04-20 11:41:13 +02:00
let defaultValue = get(basicDefaults, property);
if (defaultValue) {
set(obj, property, defaultValue);
}
});
if (objSchema.types) {
const typeDefaults = objSchema.types[obj.type];
if (typeDefaults) {
Object.keys(typeDefaults).forEach((property) => {
if (typeDefaults.hasOwnProperty(property)) {
set(obj, property, get(typeDefaults, property));
}
});
}
}
2020-04-20 11:41:13 +02:00
return obj;
}
export default wizardSchema;