0
0
Fork 1
Spiegel von https://github.com/paviliondev/discourse-custom-wizard.git synchronisiert 2024-11-22 01:10:28 +01:00

Admin custom fields subscription differentiation

Dieser Commit ist enthalten in:
merefield 2021-10-23 13:06:12 +01:00
Ursprung 5334d12f10
Commit a806e14c64
7 geänderte Dateien mit 132 neuen und 51 gelöschten Zeilen

Datei anzeigen

@ -4,27 +4,12 @@ import { alias, equal, or } from "@ember/object/computed";
import { computed } from "@ember/object";
import I18n from "I18n";
const klasses = ["topic", "post", "group", "category"];
const types = ["string", "boolean", "integer", "json"];
const subscriptionTypes = {
klass: ["group", "category"],
type: ["json"],
};
const generateContent = function (array, type, subscribed = false) {
return array.reduce((result, key) => {
let subArr = subscriptionTypes[type];
let subscription = subArr && subArr.includes(key);
if (!subscription || subscribed) {
result.push({
id: key,
name: I18n.t(`admin.wizard.custom_field.${type}.${key}`),
subscription,
});
}
return result;
}, []);
};
import wizardSchema, {
customFieldsKlassesRequiringAdditionalSubscription,
customFieldsKlassSubscriptionLevel,
customFieldsTypesRequiringAdditionalSubscription,
customFieldsTypeSubscriptionLevel,
} from "discourse/plugins/discourse-custom-wizard/discourse/lib/wizard-schema";
export default Component.extend({
tagName: "tr",
@ -32,12 +17,6 @@ export default Component.extend({
postSerializers: ["post"],
groupSerializers: ["basic_group"],
categorySerializers: ["basic_category"],
klassContent: computed("subscribed", function () {
return generateContent(klasses, "klass", this.subscribed);
}),
typeContent: computed("subscribed", function () {
return generateContent(types, "type", this.subscribed);
}),
showInputs: or("field.new", "field.edit"),
classNames: ["custom-field-input"],
loading: or("saving", "destroying"),
@ -49,15 +28,49 @@ export default Component.extend({
this.set("originalField", JSON.parse(JSON.stringify(this.field)));
},
@discourseComputed("field.klass")
serializerContent(klass) {
const serializers = this.get(`${klass}Serializers`);
// @discourseComputed("field.klass")
// serializerContent(klass) {
// const serializers = this.get(`${klass}Serializers`);
if (serializers) {
return generateContent(serializers, "serializers", this.subscribed);
} else {
return [];
}
// if (serializers) {
// return generateContent(serializers, "serializers", this.subscribed);
// } else {
// return [];
// }
// },
@discourseComputed("subscription")
customFieldTypes(subscription) {
let unsubscribedCustomFields = customFieldsTypesRequiringAdditionalSubscription(
subscription
);
return wizardSchema.custom_field.types.reduce((result, type) => {
let disabled = unsubscribedCustomFields.includes(type);
result.push({
id: type,
name: I18n.t(`admin.wizard.custom_field.type.${type}`),
subscription: customFieldsTypeSubscriptionLevel(type),
disabled: disabled,
});
return result;
}, []);
},
@discourseComputed("subscription")
customFieldKlasses(subscription) {
let unsubscribedCustomFields = customFieldsKlassesRequiringAdditionalSubscription(
subscription
);
return wizardSchema.custom_field.klasses.reduce((result, klass) => {
let disabled = unsubscribedCustomFields.includes(klass);
result.push({
id: klass,
name: I18n.t(`admin.wizard.custom_field.klass.${klass}`),
subscription: customFieldsKlassSubscriptionLevel(klass),
disabled: disabled,
});
return result;
}, []);
},
@observes("field.klass")

Datei anzeigen

@ -208,10 +208,24 @@ const action = {
objectArrays: {},
};
const custom_field = {
klasses: ["topic", "post", "group", "category"],
types: ["string", "boolean", "integer", "json"],
customFieldKlassWithSubscription: {
standard: [],
business: ["group", "category"],
},
customFieldTypeWithSubscription: {
standard: ["json"],
business: [],
},
}
const wizardSchema = {
wizard,
step,
field,
custom_field,
action,
};
@ -242,6 +256,58 @@ export function actionSubscriptionLevel(type) {
}
}
export function customFieldsKlassesRequiringAdditionalSubscription(
currentSubscription
) {
switch (currentSubscription) {
case "business":
return [];
case "standard":
return custom_field.customFieldKlassWithSubscription["business"];
default:
return custom_field.customFieldKlassWithSubscription["business"].concat(custom_field.customFieldKlassWithSubscription["standard"]);
}
}
export function customFieldsKlassSubscriptionLevel(type) {
if (custom_field.customFieldKlassWithSubscription["business"].includes(type)) {
return "business"
} else {
if (custom_field.customFieldKlassWithSubscription["standard"].includes(type)) {
return "standard"
} else {
return ""
}
}
}
export function customFieldsTypesRequiringAdditionalSubscription(
currentSubscription
) {
switch (currentSubscription) {
case "business":
return [];
case "standard":
return custom_field.customFieldTypeWithSubscription["business"];
default:
return custom_field.customFieldTypeWithSubscription["business"].concat(custom_field.customFieldTypeWithSubscription["standard"]);
}
}
export function customFieldsTypeSubscriptionLevel(type) {
if (custom_field.customFieldTypeWithSubscription["business"].includes(type)) {
return "business"
} else {
if (custom_field.customFieldTypeWithSubscription["standard"].includes(type)) {
return "standard"
} else {
return ""
}
}
}
export function buildFieldTypes(types) {
wizardSchema.field.types = types;
}

Datei anzeigen

@ -10,10 +10,12 @@ export default DiscourseRoute.extend({
setupController(controller, model) {
const customFields = A(model.custom_fields || []);
const subscribed = model.subscribed;
const subscription = model.subscription;
controller.setProperties({
customFields,
subscribed,
subscription,
});
},
});

Datei anzeigen

@ -33,7 +33,8 @@
field=field
removeField=(action "removeField")
saveField=(action "saveField")
subscribed=subscribed}}
subscribed=subscribed
subscription=subscription}}
{{/each}}
</tbody>
</table>

Datei anzeigen

@ -2,14 +2,14 @@
<td>
{{wizard-subscription-selector
value=field.klass
content=klassContent
content=customFieldKlasses
none="admin.wizard.custom_field.klass.select"
onChange=(action (mut field.klass))}}
</td>
<td>
{{wizard-subscription-selector
value=field.type
content=typeContent
content=customFieldTypes
none="admin.wizard.custom_field.type.select"
onChange=(action (mut field.type))}}
</td>

Datei anzeigen

@ -427,10 +427,6 @@
margin-bottom: 0;
}
.wizard-custom-action .select-kit-row.disabled {
background: var(--primary-low);
}
.select-box-kit-header {
height: initial;
}
@ -792,11 +788,6 @@
vertical-align: middle;
}
.subscription-label {
color: var(--tertiary);
font-size: 0.75em;
}
.admin-wizards-subscription {
.admin-wizard-controls {
h3,
@ -857,14 +848,21 @@
}
.wizard-subscription-selector.select-kit.single-select {
.select-kit-row .texts {
display: flex;
align-items: center;
.select-kit-row {
.texts {
display: flex;
align-items: center;
}
&.disabled {
background: var(--primary-low);
}
}
.subscription-label {
margin-left: 0.75em;
padding-top: 0.25em;
color: var(--tertiary);
font-size: 0.75em;
}
}

Datei anzeigen

@ -3,7 +3,8 @@ class CustomWizard::AdminCustomFieldsController < CustomWizard::AdminController
def index
render_json_dump(
custom_fields: custom_field_list,
subscribed: CustomWizard::Subscription.subscribed?
subscribed: CustomWizard::Subscription.subscribed?,
subscription: CustomWizard::Subscription.type
)
end