Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/plugin-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ jobs:
- uses: actions/checkout@v2
with:
repository: discourse/discourse
ref: "${{ (github.base_ref || github.ref) }}"
ref: "tests-passed"
fetch-depth: 1

- name: Fetch Repo Name
Expand Down
28 changes: 3 additions & 25 deletions assets/javascripts/discourse/components/custom-field-input.js.es6
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,7 @@ import Component from "@ember/component";
import discourseComputed, { observes } from "discourse-common/utils/decorators";
import { alias, equal, or } from "@ember/object/computed";
import I18n from "I18n";

import wizardSchema, {
requiringAdditionalSubscription,
subscriptionLevel,
} from "discourse/plugins/discourse-custom-wizard/discourse/lib/wizard-schema";

const generateContent = function (kategory, subscription) {
let unsubscribedCustomFields = requiringAdditionalSubscription(
subscription,
"custom_fields",
kategory
);
return wizardSchema.custom_field[kategory].reduce((result, item) => {
let disabled = unsubscribedCustomFields.includes(item);
result.push({
id: item,
name: I18n.t(`admin.wizard.custom_field.${kategory}.${item}`),
subscription: subscriptionLevel(item, "custom_fields", kategory),
disabled,
});
return result;
}, []);
};
import { buildSubscriptionContent } from "../lib/wizard";

export default Component.extend({
tagName: "tr",
Expand Down Expand Up @@ -60,12 +38,12 @@ export default Component.extend({

@discourseComputed("subscription")
customFieldTypes(subscription) {
return generateContent("type", subscription);
return buildSubscriptionContent("custom_fields", "types", subscription);
},

@discourseComputed("subscription")
customFieldKlasses(subscription) {
return generateContent("klass", subscription);
return buildSubscriptionContent("custom_fields", "klass", subscription);
},

@observes("field.klass")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { default as discourseComputed } from "discourse-common/utils/decorators";
import wizardSchema, {
requiringAdditionalSubscription,
subscriptionLevel,
} from "discourse/plugins/discourse-custom-wizard/discourse/lib/wizard-schema";
import { empty, equal, or } from "@ember/object/computed";
import { notificationLevels, selectKitContent } from "../lib/wizard";
import {
buildSubscriptionContent,
notificationLevels,
selectKitContent,
} from "../lib/wizard";
import { computed } from "@ember/object";
import UndoChanges from "../mixins/undo-changes";
import Component from "@ember/component";
Expand Down Expand Up @@ -99,20 +99,6 @@ export default Component.extend(UndoChanges, {

@discourseComputed("subscription")
actionTypes(subscription) {
let unsubscribedActions = requiringAdditionalSubscription(
subscription,
"actions",
""
);
return Object.keys(wizardSchema.action.types).reduce((result, type) => {
let disabled = unsubscribedActions.includes(type);
result.push({
id: type,
name: I18n.t(`admin.wizard.action.${type}.label`),
subscription: subscriptionLevel(type, "actions", ""),
disabled,
});
return result;
}, []);
return buildSubscriptionContent("action", "type", subscription);
},
});
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ export default {
this.set("customWizardCriticalNotices", criticalNotices);
}
});
}
},
});

api.modifyClass("component:d-navigation", {
Expand Down
115 changes: 27 additions & 88 deletions assets/javascripts/discourse/lib/wizard-schema.js.es6
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ const field = {
type: null,
condition: null,
},
types: {},
type: {},
mapped: ["prefill", "content", "condition", "index"],
required: ["id", "type"],
dependent: {},
Expand All @@ -84,7 +84,7 @@ const action = {
run_after: "wizard_completion",
type: null,
},
types: {
type: {
create_topic: {
title: null,
post: null,
Expand Down Expand Up @@ -203,107 +203,46 @@ const custom_field = {
type: ["string", "boolean", "integer", "json"],
};

const subscription_levels = {
standard: {
actions: ["send_message", "add_to_group", "watch_categories"],
custom_fields: {
klass: [],
type: ["json"],
},
},

business: {
actions: ["create_category", "create_group", "send_to_api"],
custom_fields: {
klass: ["group", "category"],
type: [],
},
},
};

const wizardSchema = {
wizard,
step,
field,
custom_field,
action,
subscription_levels,
};

export function requiringAdditionalSubscription(
currentSubscription,
category,
subCategory
export function hasRequiredSubscription(
currentSubscriptionType,
featureSubscriptionType
) {
switch (category) {
case "actions":
switch (currentSubscription) {
case "business":
return [];
case "standard":
return subscription_levels["business"][category];
default:
return subscription_levels["standard"][category].concat(
subscription_levels["business"][category]
);
}
case "custom_fields":
switch (currentSubscription) {
case "business":
return [];
case "standard":
return subscription_levels["business"][category][subCategory];
default:
return subscription_levels["standard"][category][subCategory].concat(
subscription_levels["business"][category][subCategory]
);
}
default:
return [];
}
const types = wizardSchema.subscription.types;
return (
types.indexOf(currentSubscriptionType) >=
types.indexOf(featureSubscriptionType)
);
}

export function subscriptionLevel(type, category, subCategory) {
switch (category) {
case "actions":
if (subscription_levels["business"].actions.includes(type)) {
return "business";
} else {
if (subscription_levels["standard"].actions.includes(type)) {
return "standard";
} else {
return "";
}
}
case "custom_fields":
if (
subscription_levels["business"].custom_fields[subCategory].includes(
type
)
) {
return "business";
} else {
if (
subscription_levels["standard"].custom_fields[subCategory].includes(
type
)
) {
return "standard";
} else {
return "";
}
}
default:
return "";
export function subscriptionType(klass, attribute, value) {
let attributes = wizardSchema.subscription.features[klass];

if (!attributes || !attributes[attribute] || !attributes[attribute][value]) {
return wizardSchema.subscription.types[0];
} else {
return attributes[attribute][value];
}
}

export function buildFieldTypes(types) {
wizardSchema.field.types = types;
}
export function buildSchema(model) {
wizardSchema.subscription = {};

let features = model.subscription_features;
features["field"]["types"] = features["field"]["type"];
features["action"]["types"] = features["action"]["type"];

export function buildFieldValidations(validations) {
wizardSchema.field.validations = validations;
wizardSchema.subscription.features = features;
wizardSchema.subscription.types = model.subscription_types;
wizardSchema.field.types = model.field_types;
wizardSchema.field.validations = model.realtime_validations;
}

const siteSettings = getOwner(this).lookup("site-settings:main");
Expand Down
26 changes: 25 additions & 1 deletion assets/javascripts/discourse/lib/wizard.js.es6
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import EmberObject from "@ember/object";
import wizardSchema from "./wizard-schema";
import wizardSchema, {
hasRequiredSubscription,
subscriptionType,
} from "./wizard-schema";
import I18n from "I18n";

function selectKitContent(content) {
return content.map((i) => ({ id: i, name: i }));
Expand Down Expand Up @@ -110,6 +114,25 @@ function wizardFieldList(steps = [], opts = {}) {
}, []);
}

function buildSubscriptionContent(klass, attribute, currentSubscription) {
let attributes = wizardSchema[klass];
let values = attributes[attribute];

if (typeof values === "object") {
values = Object.keys(values);
}

return values.map((value) => {
let type = subscriptionType(klass, attribute, value);
return {
id: value,
name: I18n.t(`admin.wizard.${klass}.${attribute}.${value}.label`),
subscription: type,
disabled: hasRequiredSubscription(currentSubscription, type),
};
});
}

export {
selectKitContent,
generateName,
Expand All @@ -121,4 +144,5 @@ export {
notificationLevels,
wizardFieldList,
sentenceCase,
buildSubscriptionContent,
};
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import DiscourseRoute from "discourse/routes/discourse";
import { buildFieldTypes, buildFieldValidations } from "../lib/wizard-schema";
import { buildSchema } from "../lib/wizard-schema";
import EmberObject, { set } from "@ember/object";
import { A } from "@ember/array";
import { all } from "rsvp";
Expand All @@ -11,8 +11,7 @@ export default DiscourseRoute.extend({
},

afterModel(model) {
buildFieldTypes(model.field_types);
buildFieldValidations(model.realtime_validations);
buildSchema(model);

return all([
this._getThemes(model),
Expand Down
Loading