Spiegel von
https://github.com/paviliondev/discourse-custom-wizard.git
synchronisiert 2024-11-09 11:52:54 +01:00
convert subscription mixin to service, colocate glimmer files
Dieser Commit ist enthalten in:
Ursprung
4f8ab0b249
Commit
b454340263
14 geänderte Dateien mit 151 neuen und 152 gelöschten Zeilen
|
@ -15,7 +15,7 @@ import {
|
|||
import Component from "@ember/component";
|
||||
import { bind, later } from "@ember/runloop";
|
||||
import I18n from "I18n";
|
||||
import Subscription from "../mixins/subscription";
|
||||
import { inject as service } from "@ember/service";
|
||||
|
||||
const customFieldActionMap = {
|
||||
topic: ["create_topic", "send_message"],
|
||||
|
@ -27,8 +27,9 @@ const customFieldActionMap = {
|
|||
|
||||
const values = ["present", "true", "false"];
|
||||
|
||||
export default Component.extend(Subscription, {
|
||||
export default Component.extend({
|
||||
classNameBindings: [":mapper-selector", "activeType"],
|
||||
subscription: service(),
|
||||
|
||||
showText: computed("activeType", function () {
|
||||
return this.showInput("text");
|
||||
|
@ -130,7 +131,7 @@ export default Component.extend(Subscription, {
|
|||
return this.connector === "is";
|
||||
}),
|
||||
|
||||
@discourseComputed("site.groups", "guestGroup", "subscriptionType")
|
||||
@discourseComputed("site.groups", "guestGroup", "subscription.subscriptionType")
|
||||
groups(groups, guestGroup, subscriptionType) {
|
||||
let result = groups;
|
||||
if (!guestGroup) {
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
<a onclick={{this.click}} class="wizard-subscription-badge {{this.subscription.subscriptionType}}" title="{{this.title}}">
|
||||
<svg
|
||||
width="300px"
|
||||
height="300px"
|
||||
viewBox="0 0 300 300"
|
||||
version="1.1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
>
|
||||
<g
|
||||
id="pavilion-logo"
|
||||
stroke="none"
|
||||
stroke-width="1"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
>
|
||||
<path
|
||||
id="Combined-Shape"
|
||||
stroke="currentColor"
|
||||
stroke-width="35"
|
||||
d="M41.1381822,291.00006 L40.5778853,130.009744 M258.850727,291.638415 L259.290397,130.37133 M36.0002279,140.721678 L139.995368,36.2122772 M263.350577,141.009083 L138.927245,16.2478517"
|
||||
></path>
|
||||
</g>
|
||||
</svg>
|
||||
<span>{{label}}</span>
|
||||
</a>
|
29
assets/javascripts/discourse/components/wizard-subscription-badge.js
Normale Datei
29
assets/javascripts/discourse/components/wizard-subscription-badge.js
Normale Datei
|
@ -0,0 +1,29 @@
|
|||
import { inject as service } from "@ember/service";
|
||||
import { action, computed } from "@ember/object";
|
||||
import Component from '@glimmer/component';
|
||||
import DiscourseURL from "discourse/lib/url";
|
||||
import I18n from "I18n";
|
||||
|
||||
export default class WizardSubscriptionBadge extends Component {
|
||||
@service subscription;
|
||||
|
||||
@computed("subscription.subscriptionType")
|
||||
get i18nKey() {
|
||||
return `admin.wizard.subscription.type.${this.subscription.subscriptionType ? this.subscription.subscriptionType : "none"}`;
|
||||
};
|
||||
|
||||
@computed("i18nKey")
|
||||
get title() {
|
||||
return I18n.t(`${this.i18nKey}.title`);
|
||||
};
|
||||
|
||||
@computed("i18nKey")
|
||||
get label() {
|
||||
return I18n.t(`${this.i18nKey}.label`);
|
||||
};
|
||||
|
||||
@action
|
||||
click() {
|
||||
DiscourseURL.routeTo(this.subscription.subscriptionLink);
|
||||
};
|
||||
};
|
|
@ -1,30 +0,0 @@
|
|||
import Component from "@ember/component";
|
||||
import discourseComputed from "discourse-common/utils/decorators";
|
||||
import Subscription from "../mixins/subscription";
|
||||
import DiscourseURL from "discourse/lib/url";
|
||||
import I18n from "I18n";
|
||||
|
||||
export default Component.extend(Subscription, {
|
||||
tagName: "a",
|
||||
classNameBindings: [":wizard-subscription-badge", "subscriptionType"],
|
||||
attributeBindings: ["title"],
|
||||
|
||||
@discourseComputed("subscriptionType")
|
||||
i18nKey(type) {
|
||||
return `admin.wizard.subscription.type.${type ? type : "none"}`;
|
||||
},
|
||||
|
||||
@discourseComputed("i18nKey")
|
||||
title(i18nKey) {
|
||||
return I18n.t(`${i18nKey}.title`);
|
||||
},
|
||||
|
||||
@discourseComputed("i18nKey")
|
||||
label(i18nKey) {
|
||||
return I18n.t(`${i18nKey}.label`);
|
||||
},
|
||||
|
||||
click() {
|
||||
DiscourseURL.routeTo(this.subscriptionLink);
|
||||
},
|
||||
});
|
|
@ -1,23 +1,24 @@
|
|||
import Component from "@ember/component";
|
||||
import discourseComputed from "discourse-common/utils/decorators";
|
||||
import Subscription from "../mixins/subscription";
|
||||
import { inject as service } from "@ember/service";
|
||||
|
||||
export default Component.extend(Subscription, {
|
||||
export default Component.extend({
|
||||
classNameBindings: [":wizard-subscription-container", "subscribed"],
|
||||
subscription: service(),
|
||||
|
||||
@discourseComputed("subscribed")
|
||||
@discourseComputed("subscription.subscribed")
|
||||
subscribedIcon(subscribed) {
|
||||
return subscribed ? "check" : "times";
|
||||
},
|
||||
|
||||
@discourseComputed("subscribed")
|
||||
@discourseComputed("subscription.subscribed")
|
||||
subscribedLabel(subscribed) {
|
||||
return `admin.wizard.subscription.${
|
||||
subscribed ? "subscribed" : "not_subscribed"
|
||||
}.label`;
|
||||
},
|
||||
|
||||
@discourseComputed("subscribed")
|
||||
@discourseComputed("subscription.subscribed")
|
||||
subscribedTitle(subscribed) {
|
||||
return `admin.wizard.subscription.${
|
||||
subscribed ? "subscribed" : "not_subscribed"
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
<a onclick={{this.click}} class="btn btn-pavilion-support {{this.subscription.subscriptionType}}" title="{{this.title}}">
|
||||
{{d-icon icon}}{{label}}
|
||||
</a>
|
36
assets/javascripts/discourse/components/wizard-subscription-cta.js
Normale Datei
36
assets/javascripts/discourse/components/wizard-subscription-cta.js
Normale Datei
|
@ -0,0 +1,36 @@
|
|||
|
||||
import { inject as service } from "@ember/service";
|
||||
import { action, computed } from "@ember/object";
|
||||
import I18n from "I18n";
|
||||
import Component from '@glimmer/component';
|
||||
|
||||
export default class WizardSubscriptionCta extends Component {
|
||||
@service subscription;
|
||||
|
||||
@computed("subscription.subscribed")
|
||||
get i18nKey() {
|
||||
return `admin.wizard.subscription.cta.${
|
||||
this.subscription.subscribed ? "subscribed" : "none"
|
||||
}`;
|
||||
};
|
||||
|
||||
@computed("subscription.subscribed")
|
||||
get icon() {
|
||||
return this.subscription.subscribed ? "far-life-ring" : "external-link-alt";
|
||||
};
|
||||
|
||||
@computed("i18nKey")
|
||||
get title() {
|
||||
return I18n.t(`${this.i18nKey}.title`);
|
||||
};
|
||||
|
||||
@computed("i18nKey")
|
||||
get label() {
|
||||
return I18n.t(`${this.i18nKey}.label`);
|
||||
};
|
||||
|
||||
@action
|
||||
click() {
|
||||
window.open(this.subscription.subscriptionCtaLink, "_blank").focus();
|
||||
};
|
||||
};
|
|
@ -1,36 +0,0 @@
|
|||
import Component from "@ember/component";
|
||||
import discourseComputed from "discourse-common/utils/decorators";
|
||||
import Subscription from "../mixins/subscription";
|
||||
import I18n from "I18n";
|
||||
|
||||
export default Component.extend(Subscription, {
|
||||
tagName: "a",
|
||||
classNameBindings: [":btn", ":btn-pavilion-support", "subscriptionType"],
|
||||
attributeBindings: ["title"],
|
||||
|
||||
@discourseComputed("subscribed")
|
||||
i18nKey(subscribed) {
|
||||
return `admin.wizard.subscription.cta.${
|
||||
subscribed ? "subscribed" : "none"
|
||||
}`;
|
||||
},
|
||||
|
||||
@discourseComputed("subscribed")
|
||||
icon(subscribed) {
|
||||
return subscribed ? "far-life-ring" : "external-link-alt";
|
||||
},
|
||||
|
||||
@discourseComputed("i18nKey")
|
||||
title(i18nKey) {
|
||||
return I18n.t(`${i18nKey}.title`);
|
||||
},
|
||||
|
||||
@discourseComputed("i18nKey")
|
||||
label(i18nKey) {
|
||||
return I18n.t(`${i18nKey}.label`);
|
||||
},
|
||||
|
||||
click() {
|
||||
window.open(this.subscriptionCtaLink, "_blank").focus();
|
||||
},
|
||||
});
|
|
@ -1,5 +1,5 @@
|
|||
import SingleSelectComponent from "select-kit/components/single-select";
|
||||
import Subscription from "../mixins/subscription";
|
||||
import { inject as service } from "@ember/service";
|
||||
import { filterValues } from "discourse/plugins/discourse-custom-wizard/discourse/lib/wizard-schema";
|
||||
import discourseComputed from "discourse-common/utils/decorators";
|
||||
import I18n from "I18n";
|
||||
|
@ -12,8 +12,9 @@ const nameKey = function (feature, attribute, value) {
|
|||
}
|
||||
};
|
||||
|
||||
export default SingleSelectComponent.extend(Subscription, {
|
||||
export default SingleSelectComponent.extend({
|
||||
classNames: ["combo-box", "wizard-subscription-selector"],
|
||||
subscription: service(),
|
||||
|
||||
selectKitOptions: {
|
||||
autoFilterable: false,
|
||||
|
@ -26,13 +27,13 @@ export default SingleSelectComponent.extend(Subscription, {
|
|||
},
|
||||
|
||||
allowedSubscriptionTypes(feature, attribute, value) {
|
||||
let attributes = this.subscriptionAttributes[feature];
|
||||
let attributes = this.subscription.subscriptionAttributes[feature];
|
||||
if (!attributes || !attributes[attribute]) {
|
||||
return ["none"];
|
||||
}
|
||||
let allowedTypes = [];
|
||||
Object.keys(attributes[attribute]).forEach((subscriptionType) => {
|
||||
let values = attributes[attribute][subscriptionType];
|
||||
let values = attributes[attribute][subscription.subscriptionType];
|
||||
if (values[0] === "*" || values.includes(value)) {
|
||||
allowedTypes.push(subscriptionType);
|
||||
}
|
||||
|
@ -44,7 +45,7 @@ export default SingleSelectComponent.extend(Subscription, {
|
|||
content(feature, attribute) {
|
||||
return filterValues(this.wizard, feature, attribute)
|
||||
.map((value) => {
|
||||
let allowedSubscriptionTypes = this.allowedSubscriptionTypes(
|
||||
let allowedSubscriptionTypes = this.subscription.allowedSubscriptionTypes(
|
||||
feature,
|
||||
attribute,
|
||||
value
|
||||
|
|
|
@ -1,48 +0,0 @@
|
|||
import Mixin from "@ember/object/mixin";
|
||||
import { getOwner } from "discourse-common/lib/get-owner";
|
||||
import { readOnly } from "@ember/object/computed";
|
||||
import discourseComputed from "discourse-common/utils/decorators";
|
||||
|
||||
const PRODUCT_PAGE = "https://custom-wizard.pavilion.tech";
|
||||
const SUPPORT_MESSAGE =
|
||||
"https://coop.pavilion.tech/new-message?username=support&title=Custom%20Wizard%20Support";
|
||||
const MANAGER_CATEGORY =
|
||||
"https://discourse.pluginmanager.org/c/discourse-custom-wizard";
|
||||
|
||||
export default Mixin.create({
|
||||
subscriptionLandingUrl: PRODUCT_PAGE,
|
||||
subscriptionClientUrl: "/admin/plugins/subscription-client",
|
||||
|
||||
@discourseComputed
|
||||
adminWizards() {
|
||||
return getOwner(this).lookup("controller:admin-wizards");
|
||||
},
|
||||
|
||||
subscribed: readOnly("adminWizards.subscribed"),
|
||||
subscriptionType: readOnly("adminWizards.subscriptionType"),
|
||||
businessSubscription: readOnly("adminWizards.businessSubscription"),
|
||||
communitySubscription: readOnly("adminWizards.communitySubscription"),
|
||||
standardSubscription: readOnly("adminWizards.standardSubscription"),
|
||||
subscriptionAttributes: readOnly("adminWizards.subscriptionAttributes"),
|
||||
|
||||
@discourseComputed
|
||||
subscriptionLink() {
|
||||
return this.subscriptionLandingUrl;
|
||||
},
|
||||
|
||||
@discourseComputed("subscriptionType")
|
||||
subscriptionCtaLink(subscriptionType) {
|
||||
switch (subscriptionType) {
|
||||
case "none":
|
||||
return PRODUCT_PAGE;
|
||||
case "standard":
|
||||
return SUPPORT_MESSAGE;
|
||||
case "business":
|
||||
return SUPPORT_MESSAGE;
|
||||
case "community":
|
||||
return MANAGER_CATEGORY;
|
||||
default:
|
||||
return PRODUCT_PAGE;
|
||||
}
|
||||
},
|
||||
});
|
41
assets/javascripts/discourse/services/subscription.js
Normale Datei
41
assets/javascripts/discourse/services/subscription.js
Normale Datei
|
@ -0,0 +1,41 @@
|
|||
import Service from '@ember/service';
|
||||
import { getOwner } from "discourse-common/lib/get-owner";
|
||||
|
||||
const PRODUCT_PAGE = "https://custom-wizard.pavilion.tech";
|
||||
const SUPPORT_MESSAGE =
|
||||
"https://coop.pavilion.tech/new-message?username=support&title=Custom%20Wizard%20Support";
|
||||
const MANAGER_CATEGORY =
|
||||
"https://discourse.pluginmanager.org/c/discourse-custom-wizard";
|
||||
|
||||
export default class Subscription extends Service {
|
||||
subscriptionLandingUrl = PRODUCT_PAGE;
|
||||
subscribed = this.adminWizards.subscribed;
|
||||
subscriptionType = this.adminWizards.subscriptionType;
|
||||
businessSubscription = this.adminWizards.businessSubscription;
|
||||
communitySubscription = this.adminWizards.communitySubscription;
|
||||
standardSubscription = this.adminWizards.standardSubscription;
|
||||
subscriptionAttributes = this.adminWizards.subscriptionAttributes;
|
||||
|
||||
get adminWizards() {
|
||||
return getOwner(this).lookup("controller:admin-wizards");
|
||||
};
|
||||
|
||||
get subscriptionLink() {
|
||||
return this.subscriptionLandingUrl;
|
||||
};
|
||||
|
||||
get subscriptionCtaLink() {
|
||||
switch (this.subscriptionType) {
|
||||
case "none":
|
||||
return PRODUCT_PAGE;
|
||||
case "standard":
|
||||
return SUPPORT_MESSAGE;
|
||||
case "business":
|
||||
return SUPPORT_MESSAGE;
|
||||
case "community":
|
||||
return MANAGER_CATEGORY;
|
||||
default:
|
||||
return PRODUCT_PAGE;
|
||||
}
|
||||
};
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
<svg
|
||||
width="300px"
|
||||
height="300px"
|
||||
viewBox="0 0 300 300"
|
||||
version="1.1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
>
|
||||
<g
|
||||
id="pavilion-logo"
|
||||
stroke="none"
|
||||
stroke-width="1"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
>
|
||||
<path
|
||||
id="Combined-Shape"
|
||||
stroke="currentColor"
|
||||
stroke-width="35"
|
||||
d="M41.1381822,291.00006 L40.5778853,130.009744 M258.850727,291.638415 L259.290397,130.37133 M36.0002279,140.721678 L139.995368,36.2122772 M263.350577,141.009083 L138.927245,16.2478517"
|
||||
></path>
|
||||
</g>
|
||||
</svg>
|
||||
<span>{{label}}</span>
|
Vorher Breite: | Höhe: | Größe: 602 B |
|
@ -1 +0,0 @@
|
|||
{{d-icon icon}}{{label}}
|
Laden …
In neuem Issue referenzieren