From 98c7c5170112ed579f7e95485ffe072c3639a5c7 Mon Sep 17 00:00:00 2001 From: Erik Kieckhafer Date: Fri, 13 Sep 2019 12:47:53 -0700 Subject: [PATCH] refactor: remove all code releated to inviting a shop owner, as this isn't allowed at this time Signed-off-by: Erik Kieckhafer --- .../core/accounts/server/methods/index.js | 2 - .../server/methods/inviteShopOwner.js | 80 ------------ .../client/components/inviteOwner.js | 122 ------------------ .../included/marketplace/client/index.js | 2 - .../client/templates/dashboard/settings.html | 4 - .../client/templates/dashboard/settings.js | 4 - 6 files changed, 214 deletions(-) delete mode 100644 imports/plugins/core/accounts/server/methods/inviteShopOwner.js delete mode 100644 imports/plugins/included/marketplace/client/components/inviteOwner.js diff --git a/imports/plugins/core/accounts/server/methods/index.js b/imports/plugins/core/accounts/server/methods/index.js index 2ce18b509a1..52e7b5226f7 100644 --- a/imports/plugins/core/accounts/server/methods/index.js +++ b/imports/plugins/core/accounts/server/methods/index.js @@ -2,7 +2,6 @@ import addUserPermissions from "./addUserPermissions"; import createFallbackLoginToken from "./createFallbackLoginToken"; import getUserId from "./getUserId"; import groupMethods from "./group"; -import inviteShopOwner from "./inviteShopOwner"; import removeEmailAddress from "./removeEmailAddress"; import removeUserPermissions from "./removeUserPermissions"; import sendResetPasswordEmail from "./sendResetPasswordEmail"; @@ -29,7 +28,6 @@ import verifyAccount from "./verifyAccount"; export default { "accounts/addUserPermissions": addUserPermissions, "accounts/createFallbackLoginToken": createFallbackLoginToken, - "accounts/inviteShopOwner": inviteShopOwner, "accounts/removeEmailAddress": removeEmailAddress, "accounts/removeUserPermissions": removeUserPermissions, "accounts/sendResetPasswordEmail": sendResetPasswordEmail, diff --git a/imports/plugins/core/accounts/server/methods/inviteShopOwner.js b/imports/plugins/core/accounts/server/methods/inviteShopOwner.js deleted file mode 100644 index 51427efdead..00000000000 --- a/imports/plugins/core/accounts/server/methods/inviteShopOwner.js +++ /dev/null @@ -1,80 +0,0 @@ -import Random from "@reactioncommerce/random"; -import { Meteor } from "meteor/meteor"; -import { Accounts as MeteorAccounts } from "meteor/accounts-base"; -import { check, Match } from "meteor/check"; -import Reaction from "/imports/plugins/core/core/server/Reaction"; -import getGraphQLContextInMeteorMethod from "/imports/plugins/core/graphql/server/getGraphQLContextInMeteorMethod"; -import ReactionError from "@reactioncommerce/reaction-error"; -import getCurrentUserName from "../no-meteor/util/getCurrentUserName"; -import getDataForEmail from "../no-meteor/util/getDataForEmail"; - -/** - * @name accounts/inviteShopOwner - * @summary Invite a new user as owner of a new shop - * @memberof Accounts/Methods - * @method - * @param {Object} options - - * @param {String} options.email - email of invitee - * @param {String} options.name - name of invitee - * @param {Object} shopData - (optional) data used to create the new shop - * @returns {Boolean} returns true - */ -export default function inviteShopOwner(options, shopData) { - check(options, Object); - check(options.email, String); - check(options.name, String); - check(shopData, Match.Maybe(Object)); - const { name, email } = options; - - // given that we `export` this function, there is an expectation that it can - // be imported and used elsewhere in the code. the use of `this` in this - // method requires that the context be Meteor. Consider using a small - // function in the Meteor.method section below to pass any Meteor-defined - // data (e.g., userId) as a parameter to allow for this method to be reused. - if (!Reaction.hasPermission("admin", this.userId, Reaction.getPrimaryShopId())) { - throw new ReactionError("access-denied", "Access denied"); - } - const user = Meteor.users.findOne({ "emails.address": email }); - let userId; - if (user) { - // TODO: Verify email address - userId = user._id; - } else { - userId = MeteorAccounts.createUser({ - email, - name, - profile: { invited: true } - }); - } - - Meteor.call("shop/createShop", userId, shopData); - const primaryShop = Reaction.getPrimaryShop(); - - // Compile Email with SSR - const templateName = "accounts/inviteShopOwner"; - - const token = Random.id(); - const currentUser = Meteor.user(); - const currentUserName = getCurrentUserName(currentUser); - // uses primaryShop's data (name, address etc) in email copy sent to new merchant - const context = Promise.await(getGraphQLContextInMeteorMethod(Reaction.getUserId())); - const dataForEmail = Promise.await(getDataForEmail(context, { shop: primaryShop, currentUserName, name, token })); - - // 1) this should only be for new users, right? - // 2) this doesn't happen automatically on new user creation? - Meteor.users.update(userId, { - $set: { - "services.password.reset": { token, email, when: new Date() }, - name - } - }); - - Promise.await(context.mutations.sendEmail(context, { - data: dataForEmail, - fromShop: primaryShop, - templateName, - to: email - })); - - return true; -} diff --git a/imports/plugins/included/marketplace/client/components/inviteOwner.js b/imports/plugins/included/marketplace/client/components/inviteOwner.js deleted file mode 100644 index fbf05ec3bc2..00000000000 --- a/imports/plugins/included/marketplace/client/components/inviteOwner.js +++ /dev/null @@ -1,122 +0,0 @@ -import { Meteor } from "meteor/meteor"; -import React, { Component } from "react"; -import { registerComponent, Components } from "@reactioncommerce/reaction-components"; -import { i18next } from "/client/api"; -import ReactionAlerts from "/imports/plugins/core/layout/client/templates/layout/alerts/inlineAlerts"; - -class InviteOwner extends Component { - constructor() { - super(); - this.state = { - alertId: "admin-invite-form", - name: "", - email: "", - group: "", - isLoading: false - }; - } - - onChange = (event) => { - this.setState({ [event.target.name]: event.target.value }); - } - - removeAlert = (oldAlert) => this.setState({ - alertArray: this.state.alertArray.filter((alert) => JSON.stringify(alert) === JSON.stringify(oldAlert)) - }); - - handleSubmit = (event) => { - event.preventDefault(); - this.setState({ isLoading: true }); - const { name, email, alertId } = this.state; - const alertOptions = { placement: alertId, id: alertId, autoHide: 4000 }; - const shopData = {}; // TODO: add optional shop data to the form (maybe just name?) - - Meteor.call("accounts/inviteShopOwner", { name, email }, shopData, (error, result) => { - let message = ""; - if (error) { - let messageKey; - if (error.reason === "Unable to send invitation email.") { - messageKey = "accountsUI.error.unableToSendInvitationEmail"; - } else if (error.reason !== "") { - message = error.reason; - } else { - messageKey = "accountsUI.error.errorSendingEmail"; - } - ReactionAlerts.add(message, "danger", Object.assign({}, alertOptions, { i18nKey: messageKey })); - } - - this.setState({ isLoading: false }); - - if (result) { - this.setState({ name: "", email: "" }); - Alerts.toast(i18next.t("accountsUI.info.invitationSent"), "success"); - } - }); - } - - renderSpinnerButton() { - if (this.state.isLoading) { - return ( -
- -
- ); - } - return ( - - ); - } - - render() { - return ( -
-

Invite Owner Form

- -
-
-
- -
-
- -
-
-
- {this.renderSpinnerButton()} -
-
-
-
-
- ); - } -} - -registerComponent("InviteOwner", InviteOwner); - -export default InviteOwner; diff --git a/imports/plugins/included/marketplace/client/index.js b/imports/plugins/included/marketplace/client/index.js index 21f616f85d0..78678d99225 100644 --- a/imports/plugins/included/marketplace/client/index.js +++ b/imports/plugins/included/marketplace/client/index.js @@ -22,7 +22,5 @@ import "./templates/settings/merchant-settings.js"; import "./templates/settings/stripe.html"; import "./templates/settings/stripe.js"; -export { default as InviteOwner } from "./components/inviteOwner"; - export * from "./components"; export * from "./containers"; diff --git a/imports/plugins/included/marketplace/client/templates/dashboard/settings.html b/imports/plugins/included/marketplace/client/templates/dashboard/settings.html index d53ef17a706..b14a2af141b 100644 --- a/imports/plugins/included/marketplace/client/templates/dashboard/settings.html +++ b/imports/plugins/included/marketplace/client/templates/dashboard/settings.html @@ -6,8 +6,4 @@ {{/autoForm}} {{schema}} - -
- {{> React component=inviteOwner }} -
diff --git a/imports/plugins/included/marketplace/client/templates/dashboard/settings.js b/imports/plugins/included/marketplace/client/templates/dashboard/settings.js index a730e3d87fe..7bf25cf4898 100644 --- a/imports/plugins/included/marketplace/client/templates/dashboard/settings.js +++ b/imports/plugins/included/marketplace/client/templates/dashboard/settings.js @@ -1,6 +1,5 @@ import { Template } from "meteor/templating"; import { AutoForm } from "meteor/aldeed:autoform"; -import { Components } from "@reactioncommerce/reaction-components"; import { Reaction, i18next } from "/client/api"; import { Packages } from "/lib/collections"; import { MarketplacePackageConfig } from "../../../lib/collections/schemas"; @@ -19,9 +18,6 @@ Template.marketplaceShopSettings.helpers({ name: "reaction-marketplace", shopId: Reaction.getPrimaryShopId() }); - }, - inviteOwner() { - return Components.InviteOwner; } });