Spiegel von
https://github.com/paviliondev/discourse-custom-wizard.git
synchronisiert 2024-11-25 10:40:28 +01:00
139 Zeilen
3,6 KiB
JavaScript
139 Zeilen
3,6 KiB
JavaScript
import Component from "@ember/component";
|
|
import { action } from "@ember/object";
|
|
import { equal, notEmpty } from "@ember/object/computed";
|
|
import discourseComputed from "discourse-common/utils/decorators";
|
|
import I18n from "I18n";
|
|
|
|
export default Component.extend({
|
|
classNameBindings: ["value.type"],
|
|
isText: equal("value.type", "text"),
|
|
isComposer: equal("value.type", "composer"),
|
|
isDate: equal("value.type", "date"),
|
|
isTime: equal("value.type", "time"),
|
|
isDateTime: equal("value.type", "date_time"),
|
|
isNumber: equal("value.type", "number"),
|
|
isCheckbox: equal("value.type", "checkbox"),
|
|
isUrl: equal("value.type", "url"),
|
|
isUpload: equal("value.type", "upload"),
|
|
isDropdown: equal("value.type", "dropdown"),
|
|
isTag: equal("value.type", "tag"),
|
|
isCategory: equal("value.type", "category"),
|
|
isTopic: equal("value.type", "topic"),
|
|
isGroup: equal("value.type", "group"),
|
|
isUserSelector: equal("value.type", "user_selector"),
|
|
isSubmittedAt: equal("field", "submitted_at"),
|
|
isComposerPreview: equal("value.type", "composer_preview"),
|
|
textState: "text-collapsed",
|
|
toggleText: I18n.t("admin.wizard.expand_text"),
|
|
|
|
@discourseComputed("value", "isUser", "isSubmittedAt")
|
|
hasValue(value, isUser, isSubmittedAt) {
|
|
if (isUser || isSubmittedAt) {
|
|
return value;
|
|
}
|
|
return value && value.value;
|
|
},
|
|
|
|
@discourseComputed("field", "value.type")
|
|
isUser(field, type) {
|
|
return field === "username" || field === "user" || type === "user";
|
|
},
|
|
|
|
@discourseComputed("value.type")
|
|
isLongtext(type) {
|
|
return type === "textarea" || type === "long_text";
|
|
},
|
|
|
|
@discourseComputed("value")
|
|
checkboxValue(value) {
|
|
const isCheckbox = this.get("isCheckbox");
|
|
if (isCheckbox) {
|
|
return (
|
|
value.value === true ||
|
|
(Array.isArray(value.value) && value.value.includes("true"))
|
|
);
|
|
}
|
|
},
|
|
|
|
@action
|
|
expandText() {
|
|
const state = this.get("textState");
|
|
|
|
if (state === "text-collapsed") {
|
|
this.set("textState", "text-expanded");
|
|
this.set("toggleText", I18n.t("admin.wizard.collapse_text"));
|
|
} else if (state === "text-expanded") {
|
|
this.set("textState", "text-collapsed");
|
|
this.set("toggleText", I18n.t("admin.wizard.expand_text"));
|
|
}
|
|
},
|
|
|
|
@discourseComputed("value")
|
|
file(value) {
|
|
const isUpload = this.get("isUpload");
|
|
if (isUpload) {
|
|
return value.value;
|
|
}
|
|
},
|
|
|
|
@discourseComputed("value")
|
|
submittedUsers(value) {
|
|
const isUserSelector = this.get("isUserSelector");
|
|
const users = [];
|
|
|
|
if (isUserSelector) {
|
|
const userData = value.value;
|
|
const usernames = [];
|
|
|
|
if (userData.indexOf(",")) {
|
|
usernames.push(...userData.split(","));
|
|
|
|
usernames.forEach((u) => {
|
|
const user = {
|
|
username: u,
|
|
url: `/u/${u}`,
|
|
};
|
|
users.push(user);
|
|
});
|
|
}
|
|
}
|
|
return users;
|
|
},
|
|
|
|
@discourseComputed("isUser", "field", "value")
|
|
username(isUser, field, value) {
|
|
if (isUser) {
|
|
return value.username;
|
|
}
|
|
if (field === "username") {
|
|
return value.value;
|
|
}
|
|
return null;
|
|
},
|
|
|
|
showUsername: notEmpty("username"),
|
|
|
|
@discourseComputed("username")
|
|
userProfileUrl(username) {
|
|
if (username) {
|
|
return `/u/${username}`;
|
|
}
|
|
return "/";
|
|
},
|
|
|
|
@discourseComputed("value")
|
|
categoryUrl(value) {
|
|
const isCategory = this.get("isCategory");
|
|
if (isCategory) {
|
|
return `/c/${value.value}`;
|
|
}
|
|
},
|
|
|
|
@discourseComputed("value")
|
|
groupUrl(value) {
|
|
const isGroup = this.get("isGroup");
|
|
if (isGroup) {
|
|
return `/g/${value.value}`;
|
|
}
|
|
},
|
|
});
|