import { scheduleOnce } from "@ember/runloop"; import Component from "@ember/component"; export default Component.extend({ classNames: ["invite-list"], users: null, inviteEmail: "", inviteRole: "", invalid: false, init() { this._super(...arguments); this.set("users", []); this.set("roles", [ { id: "moderator", label: I18n.t("wizard.invites.roles.moderator") }, { id: "regular", label: I18n.t("wizard.invites.roles.regular") } ]); this.set("inviteRole", this.get("roles.0.id")); this.updateField(); }, keyPress(e) { if (e.keyCode === 13) { e.preventDefault(); e.stopPropagation(); this.send("addUser"); } }, updateField() { const users = this.users; this.set("field.value", JSON.stringify(users)); const staffCount = this.get("step.fieldsById.staff_count.value") || 1; const showWarning = staffCount < 3 && users.length === 0; this.set("field.warning", showWarning ? "invites.none_added" : null); }, actions: { addUser() { const user = { email: this.inviteEmail || "", role: this.inviteRole }; if (!/(.+)@(.+){2,}\.(.+){2,}/.test(user.email)) { return this.set("invalid", true); } const users = this.users; if (users.findBy("email", user.email)) { return this.set("invalid", true); } this.set("invalid", false); users.pushObject(user); this.updateField(); this.set("inviteEmail", ""); scheduleOnce("afterRender", () => this.element.querySelector(".invite-email").focus() ); }, removeUser(user) { this.users.removeObject(user); this.updateField(); } } });