0
0
Fork 1
Spiegel von https://github.com/paviliondev/discourse-custom-wizard.git synchronisiert 2024-09-19 23:31:11 +02:00

convert subscription mixin to service, colocate glimmer files

Dieser Commit ist enthalten in:
merefield 2023-09-23 18:30:11 +01:00
Ursprung 4f8ab0b249
Commit b454340263
14 geänderte Dateien mit 151 neuen und 152 gelöschten Zeilen

Datei anzeigen

@ -15,7 +15,7 @@ import {
import Component from "@ember/component"; import Component from "@ember/component";
import { bind, later } from "@ember/runloop"; import { bind, later } from "@ember/runloop";
import I18n from "I18n"; import I18n from "I18n";
import Subscription from "../mixins/subscription"; import { inject as service } from "@ember/service";
const customFieldActionMap = { const customFieldActionMap = {
topic: ["create_topic", "send_message"], topic: ["create_topic", "send_message"],
@ -27,8 +27,9 @@ const customFieldActionMap = {
const values = ["present", "true", "false"]; const values = ["present", "true", "false"];
export default Component.extend(Subscription, { export default Component.extend({
classNameBindings: [":mapper-selector", "activeType"], classNameBindings: [":mapper-selector", "activeType"],
subscription: service(),
showText: computed("activeType", function () { showText: computed("activeType", function () {
return this.showInput("text"); return this.showInput("text");
@ -130,7 +131,7 @@ export default Component.extend(Subscription, {
return this.connector === "is"; return this.connector === "is";
}), }),
@discourseComputed("site.groups", "guestGroup", "subscriptionType") @discourseComputed("site.groups", "guestGroup", "subscription.subscriptionType")
groups(groups, guestGroup, subscriptionType) { groups(groups, guestGroup, subscriptionType) {
let result = groups; let result = groups;
if (!guestGroup) { if (!guestGroup) {

Datei anzeigen

@ -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>

Datei anzeigen

@ -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);
};
};

Datei anzeigen

@ -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);
},
});

Datei anzeigen

@ -1,23 +1,24 @@
import Component from "@ember/component"; import Component from "@ember/component";
import discourseComputed from "discourse-common/utils/decorators"; 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"], classNameBindings: [":wizard-subscription-container", "subscribed"],
subscription: service(),
@discourseComputed("subscribed") @discourseComputed("subscription.subscribed")
subscribedIcon(subscribed) { subscribedIcon(subscribed) {
return subscribed ? "check" : "times"; return subscribed ? "check" : "times";
}, },
@discourseComputed("subscribed") @discourseComputed("subscription.subscribed")
subscribedLabel(subscribed) { subscribedLabel(subscribed) {
return `admin.wizard.subscription.${ return `admin.wizard.subscription.${
subscribed ? "subscribed" : "not_subscribed" subscribed ? "subscribed" : "not_subscribed"
}.label`; }.label`;
}, },
@discourseComputed("subscribed") @discourseComputed("subscription.subscribed")
subscribedTitle(subscribed) { subscribedTitle(subscribed) {
return `admin.wizard.subscription.${ return `admin.wizard.subscription.${
subscribed ? "subscribed" : "not_subscribed" subscribed ? "subscribed" : "not_subscribed"

Datei anzeigen

@ -0,0 +1,3 @@
<a onclick={{this.click}} class="btn btn-pavilion-support {{this.subscription.subscriptionType}}" title="{{this.title}}">
{{d-icon icon}}{{label}}
</a>

Datei anzeigen

@ -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();
};
};

Datei anzeigen

@ -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();
},
});

Datei anzeigen

@ -1,5 +1,5 @@
import SingleSelectComponent from "select-kit/components/single-select"; 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 { filterValues } from "discourse/plugins/discourse-custom-wizard/discourse/lib/wizard-schema";
import discourseComputed from "discourse-common/utils/decorators"; import discourseComputed from "discourse-common/utils/decorators";
import I18n from "I18n"; 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"], classNames: ["combo-box", "wizard-subscription-selector"],
subscription: service(),
selectKitOptions: { selectKitOptions: {
autoFilterable: false, autoFilterable: false,
@ -26,13 +27,13 @@ export default SingleSelectComponent.extend(Subscription, {
}, },
allowedSubscriptionTypes(feature, attribute, value) { allowedSubscriptionTypes(feature, attribute, value) {
let attributes = this.subscriptionAttributes[feature]; let attributes = this.subscription.subscriptionAttributes[feature];
if (!attributes || !attributes[attribute]) { if (!attributes || !attributes[attribute]) {
return ["none"]; return ["none"];
} }
let allowedTypes = []; let allowedTypes = [];
Object.keys(attributes[attribute]).forEach((subscriptionType) => { Object.keys(attributes[attribute]).forEach((subscriptionType) => {
let values = attributes[attribute][subscriptionType]; let values = attributes[attribute][subscription.subscriptionType];
if (values[0] === "*" || values.includes(value)) { if (values[0] === "*" || values.includes(value)) {
allowedTypes.push(subscriptionType); allowedTypes.push(subscriptionType);
} }
@ -44,7 +45,7 @@ export default SingleSelectComponent.extend(Subscription, {
content(feature, attribute) { content(feature, attribute) {
return filterValues(this.wizard, feature, attribute) return filterValues(this.wizard, feature, attribute)
.map((value) => { .map((value) => {
let allowedSubscriptionTypes = this.allowedSubscriptionTypes( let allowedSubscriptionTypes = this.subscription.allowedSubscriptionTypes(
feature, feature,
attribute, attribute,
value value

Datei anzeigen

@ -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;
}
},
});

Datei anzeigen

@ -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;
}
};
}

Datei anzeigen

@ -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

Datei anzeigen

@ -1 +0,0 @@
{{d-icon icon}}{{label}}