0
0
Fork 1
Spiegel von https://github.com/paviliondev/discourse-custom-wizard.git synchronisiert 2024-09-20 07:41:11 +02:00
discourse-custom-wizard/assets/javascripts/discourse/components/wizard-subscription-selector.js.es6

114 Zeilen
3,4 KiB
Text

2021-09-03 10:46:32 +02:00
import SingleSelectComponent from "select-kit/components/single-select";
import Subscription from "../mixins/subscription";
import wizardSchema from "discourse/plugins/discourse-custom-wizard/discourse/lib/wizard-schema";
import discourseComputed from "discourse-common/utils/decorators";
2022-03-25 12:22:27 +01:00
import I18n from "I18n";
2021-09-03 10:46:32 +02:00
2022-03-25 12:22:27 +01:00
const nameKey = function (feature, attribute, value) {
if (feature === "action") {
return `admin.wizard.action.${value}.label`;
} else {
return `admin.wizard.${feature}.${attribute}.${value}`;
}
2022-03-25 12:22:27 +01:00
};
export default SingleSelectComponent.extend(Subscription, {
2021-09-24 11:58:42 +02:00
classNames: ["combo-box", "wizard-subscription-selector"],
2021-09-03 10:46:32 +02:00
selectKitOptions: {
autoFilterable: false,
filterable: false,
showFullTitle: true,
2021-10-19 14:49:06 +02:00
headerComponent:
"wizard-subscription-selector/wizard-subscription-selector-header",
2021-09-03 10:46:32 +02:00
caretUpIcon: "caret-up",
2021-09-07 14:13:01 +02:00
caretDownIcon: "caret-down",
2021-09-03 10:46:32 +02:00
},
allowedSubscriptionTypes(feature, attribute, value) {
let attributes = this.subscriptionAttributes[feature];
2022-03-25 12:22:27 +01:00
if (!attributes || !attributes[attribute]) {
2022-09-23 15:54:43 +02:00
return ["none"];
2022-03-25 12:22:27 +01:00
}
let allowedTypes = [];
Object.keys(attributes[attribute]).forEach((subscriptionType) => {
let values = attributes[attribute][subscriptionType];
if (values[0] === "*" || values.includes(value)) {
allowedTypes.push(subscriptionType);
}
});
return allowedTypes;
},
2022-12-24 09:42:09 +01:00
contentList(feature, attribute, allowGuests) {
let attributes = wizardSchema[feature][attribute];
if (allowGuests) {
const filteredFeature = wizardSchema.filters.allow_guests[feature];
if (filteredFeature) {
const filteredAttribute = filteredFeature[attribute];
if (filteredAttribute) {
attributes = attributes.filter(a => filteredAttribute.includes(a))
}
}
}
return attributes;
},
@discourseComputed("feature", "attribute", "wizard.allow_guests")
content(feature, attribute, allowGuests) {
return this.contentList(feature, attribute, allowGuests)
2022-05-13 12:06:38 +02:00
.map((value) => {
let allowedSubscriptionTypes = this.allowedSubscriptionTypes(
2022-05-13 12:06:38 +02:00
feature,
attribute,
value
);
2022-09-23 15:54:43 +02:00
let subscriptionRequired =
allowedSubscriptionTypes.length &&
!allowedSubscriptionTypes.includes("none");
let attrs = {
2022-05-13 12:06:38 +02:00
id: value,
name: I18n.t(nameKey(feature, attribute, value)),
2022-09-23 15:54:43 +02:00
subscriptionRequired,
2022-05-13 12:06:38 +02:00
};
if (subscriptionRequired) {
2022-09-23 15:54:43 +02:00
let subscribed = allowedSubscriptionTypes.includes(
this.subscriptionType
);
let selectorKey = subscribed ? "subscribed" : "not_subscribed";
let selectorLabel = `admin.wizard.subscription.${selectorKey}.selector`;
attrs.disabled = !subscribed;
attrs.selectorLabel = selectorLabel;
}
return attrs;
2022-05-13 12:06:38 +02:00
})
.sort(function (a, b) {
if (a.subscriptionType && !b.subscriptionType) {
return 1;
}
if (!a.subscriptionType && b.subscriptionType) {
return -1;
}
if (a.subscriptionType === b.subscriptionType) {
return a.subscriptionType
? a.subscriptionType.localeCompare(b.subscriptionType)
: 0;
} else {
return a.subscriptionType === "standard" ? -1 : 0;
}
});
},
2021-09-03 10:46:32 +02:00
modifyComponentForRow() {
2021-09-24 11:58:42 +02:00
return "wizard-subscription-selector/wizard-subscription-selector-row";
2021-09-07 14:13:01 +02:00
},
});