diff --git a/.meteor/packages b/.meteor/packages index 7db5e301e..ff17493bc 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -13,19 +13,4 @@ accounts-password@1.5.0 # accounts-twitter # accounts-facebook -############ Your Packages ############ - -#tutorial-step-1 - You can follow along with the video here: http://docs.vulcanjs.org/example-simple.html -# This is where you enable packages. - -example-simple -# example-movies -# example-instagram -# example-forum -# example-customization -# example-permissions -# example-membership -# example-interfaces -# example-reactions - vulcan:debug diff --git a/packages/vulcan-events/lib/modules/events.js b/packages/vulcan-events/lib/modules/events.js index 499629fb3..1fa71d215 100644 --- a/packages/vulcan-events/lib/modules/events.js +++ b/packages/vulcan-events/lib/modules/events.js @@ -20,7 +20,7 @@ export const track = async (eventName, eventProperties, currentUser) => { await f(eventName, eventProperties, currentUser); } catch (error) { // eslint-disable-next-line no-console - console.log(`// ${f.name} track error`); + console.log(`// ${f.name} track error for event ${eventName}`); // eslint-disable-next-line no-console console.log(error); } diff --git a/packages/vulcan-lib/lib/modules/collections.js b/packages/vulcan-lib/lib/modules/collections.js index fc728b107..d5d77126a 100644 --- a/packages/vulcan-lib/lib/modules/collections.js +++ b/packages/vulcan-lib/lib/modules/collections.js @@ -237,7 +237,7 @@ export const createCollection = options => { collection.getParameters = (terms = {}, apolloClient, context) => { - // debug(terms); + // console.log(terms); let parameters = { selector: {}, @@ -305,7 +305,7 @@ export const createCollection = options => { const maxDocuments = getSetting('maxDocumentsPerRequest', 1000); parameters.options.limit = (!terms.limit || terms.limit < 1 || terms.limit > maxDocuments) ? maxDocuments : terms.limit; - // debug(parameters); + // console.log(parameters); return parameters; } diff --git a/packages/vulcan-payments/lib/components/ChargesDashboard.jsx b/packages/vulcan-payments/lib/components/ChargesDashboard.jsx index 6fb1e2418..4fe6b3fce 100644 --- a/packages/vulcan-payments/lib/components/ChargesDashboard.jsx +++ b/packages/vulcan-payments/lib/components/ChargesDashboard.jsx @@ -23,7 +23,8 @@ const ChargesDashboard = props => name: 'createdAtFormattedShort', label: 'Created At', }, - 'user', + 'user', + 'amount', 'type', 'source', 'productKey', diff --git a/packages/vulcan-payments/lib/components/Checkout.jsx b/packages/vulcan-payments/lib/components/Checkout.jsx index 4c7d04199..95bf09a5a 100644 --- a/packages/vulcan-payments/lib/components/Checkout.jsx +++ b/packages/vulcan-payments/lib/components/Checkout.jsx @@ -113,7 +113,7 @@ Checkout.contextTypes = { Checkout.propTypes = { productKey: PropTypes.string, currentUser: PropTypes.object, - button: PropTypes.func, + button: PropTypes.object, coupon: PropTypes.string, associatedDocument: PropTypes.object, customAmount: PropTypes.number, diff --git a/packages/vulcan-payments/lib/modules/charges/schema.js b/packages/vulcan-payments/lib/modules/charges/schema.js index cb6148e86..1f5e73125 100644 --- a/packages/vulcan-payments/lib/modules/charges/schema.js +++ b/packages/vulcan-payments/lib/modules/charges/schema.js @@ -94,6 +94,16 @@ const schema = { // GraphQL only + amount: { + type: Number, + optional: true, + viewableBy: ['admins'], + resolveAs: { + type: 'Int', + resolver: charge => charge.data.amount, + } + }, + createdAtFormatted: { type: String, optional: true, diff --git a/packages/vulcan-payments/lib/modules/fragments.js b/packages/vulcan-payments/lib/modules/fragments.js index 13f31f7bd..15d602b37 100644 --- a/packages/vulcan-payments/lib/modules/fragments.js +++ b/packages/vulcan-payments/lib/modules/fragments.js @@ -28,6 +28,7 @@ registerFragment(` # pageUrl # } + amount properties stripeId stripeChargeUrl diff --git a/packages/vulcan-payments/lib/modules/products.js b/packages/vulcan-payments/lib/modules/products.js index 29083a39e..6c4ba95c7 100644 --- a/packages/vulcan-payments/lib/modules/products.js +++ b/packages/vulcan-payments/lib/modules/products.js @@ -1,5 +1,25 @@ export const Products = {}; -export const addProduct = (productKey, product) => { - Products[productKey] = product; +export const addProduct = (productKey, product, productType = 'product') => { + + let productWithType; + + // if product is a function, set it to a new function that returns the same thing except + // with `type` set to `productType` + if (typeof product === 'function') { + productWithType = document => { + const returnValue = product(document); + returnValue.type = 'subscription'; + return returnValue; + } + } else { + productWithType = product; + productWithType.type = 'subscription'; + } + + Products[productKey] = productWithType; +}; + +export const addSubscriptionProduct = (productKey, product) => { + addProduct(productKey, product, 'subscription'); }; diff --git a/packages/vulcan-payments/lib/server/integrations/stripe.js b/packages/vulcan-payments/lib/server/integrations/stripe.js index 3b4c7fa06..67f3eafac 100644 --- a/packages/vulcan-payments/lib/server/integrations/stripe.js +++ b/packages/vulcan-payments/lib/server/integrations/stripe.js @@ -74,8 +74,8 @@ export const performAction = async (args) => { metadata = await runCallbacks('stripe.charge.sync', metadata, user, product, collection, document, args); - if (product.plan) { - // if product has a plan, subscribe user to it + if (product.type === 'subscription') { + // if product is a subscription product, subscribe user to its plan returnDocument = await createSubscription({ user, product, collection, document, metadata, args }); } else { // else, perform charge diff --git a/packages/vulcan-payments/lib/stylesheets/style.scss b/packages/vulcan-payments/lib/stylesheets/style.scss index 1a334c6d2..7b4a8821c 100644 --- a/packages/vulcan-payments/lib/stylesheets/style.scss +++ b/packages/vulcan-payments/lib/stylesheets/style.scss @@ -15,7 +15,7 @@ pointer-events: none; } .spinner{ - display: block; + display: flex; } } } \ No newline at end of file