-
Notifications
You must be signed in to change notification settings - Fork 263
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Mina Smart
committed
Nov 30, 2017
1 parent
14871c5
commit f1c892b
Showing
3 changed files
with
153 additions
and
145 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,139 @@ | ||
import Resource from './resource'; | ||
import defaultResolver from './default-resolver'; | ||
import handleCheckoutMutation from './handle-checkout-mutation'; | ||
|
||
// GraphQL | ||
import checkoutNodeQuery from './graphql/checkoutNodeQuery.graphql'; | ||
import checkoutCreateMutation from './graphql/checkoutCreateMutation.graphql'; | ||
import checkoutLineItemsAddMutation from './graphql/checkoutLineItemsAddMutation.graphql'; | ||
import checkoutLineItemsRemoveMutation from './graphql/checkoutLineItemsRemoveMutation.graphql'; | ||
import checkoutLineItemsUpdateMutation from './graphql/checkoutLineItemsUpdateMutation.graphql'; | ||
|
||
export default class CheckoutResource extends Resource { | ||
|
||
/** | ||
* Fetches a checkout by ID. | ||
* | ||
* @example | ||
* client.fetchCheckout('FlZj9rZXlN5MDY4ZDFiZTUyZTUwNTE2MDNhZjg=').then((checkout) => { | ||
* // Do something with the checkout | ||
* }); | ||
* | ||
* @param {String} id The id of the checkout to fetch. | ||
* @param {Client.Queries.checkoutNodeQuery} [query] Callback function to specify fields to query on the checkout. | ||
* @return {Promise|GraphModel} A promise resolving with a `GraphModel` of the checkout. | ||
*/ | ||
fetch(id) { | ||
return this.graphQLClient | ||
.send(checkoutNodeQuery, {id}) | ||
.then(defaultResolver('node')) | ||
.then((checkout) => { | ||
return this.graphQLClient.fetchAllPages(checkout.lineItems, {pageSize: 250}).then((lineItems) => { | ||
checkout.attrs.lineItems = lineItems; | ||
|
||
return checkout; | ||
}); | ||
}); | ||
} | ||
|
||
/** | ||
* Creates a checkout. | ||
* | ||
* @example | ||
* const input = { | ||
* lineItems: [ | ||
* {variantId: 'Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC8yOTEwNjAyMjc5Mg==', quantity: 5} | ||
* ] | ||
* }; | ||
* | ||
* client.createCheckout(input).then((checkout) => { | ||
* // Do something with the newly created checkout | ||
* }); | ||
* | ||
* @param {Object} [input] An input object containing zero or more of: | ||
* @param {String} [input.email] An email connected to the checkout. | ||
* @param {Object[]} [input.lineItems] A list of line items in the checkout. See the {@link https://help.shopify.com/api/storefront-api/reference/input_object/checkoutlineiteminput|Storefront API reference} for valid input fields for each line item. | ||
* @param {Object} [input.shippingAddress] A shipping address. See the {@link https://help.shopify.com/api/storefront-api/reference/input_object/mailingaddressinput|Storefront API reference} for valid input fields. | ||
* @param {String} [input.note] A note for the checkout. | ||
* @param {Object[]} [input.customAttributes] A list of custom attributes for the checkout. See the {@link https://help.shopify.com/api/storefront-api/reference/input_object/attributeinput|Storefront API reference} for valid input fields. | ||
* @param {Client.Queries.checkoutQuery} [query] Callback function to specify fields to query on the checkout returned. | ||
* @return {Promise|GraphModel} A promise resolving with the created checkout. | ||
*/ | ||
create(input = {}) { | ||
return this.graphQLClient | ||
.send(checkoutCreateMutation, {input}) | ||
.then(handleCheckoutMutation('checkoutCreate', this.graphQLClient)); | ||
} | ||
|
||
/** | ||
* Adds line items to an existing checkout. | ||
* | ||
* @example | ||
* const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N='; | ||
* const lineItems = [{variantId: 'Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC8yOTEwNjAyMjc5Mg==', quantity: 5}]; | ||
* | ||
* client.addLineItems(checkoutId, lineItems).then((checkout) => { | ||
* // Do something with the updated checkout | ||
* }); | ||
* | ||
* @param {String} checkoutId The ID of the checkout to add line items to. | ||
* @param {Object[]} lineItems A list of line items to add to the checkout. See the {@link https://help.shopify.com/api/storefront-api/reference/input_object/checkoutlineiteminput|Storefront API reference} for valid input fields for each line item. | ||
* @param {Client.Queries.checkoutQuery} [query] Callback function to specify fields to query on the checkout returned. | ||
* @return {Promise|GraphModel} A promise resolving with the updated checkout. | ||
*/ | ||
addLineItems(checkoutId, lineItems) { | ||
return this.graphQLClient | ||
.send(checkoutLineItemsAddMutation, {checkoutId, lineItems}) | ||
.then(handleCheckoutMutation('checkoutLineItemsAdd', this.graphQLClient)); | ||
} | ||
|
||
/** | ||
* Removes line items from an existing checkout. | ||
* | ||
* @example | ||
* const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N='; | ||
* const lineItemIds = ['TViZGE5Y2U1ZDFhY2FiMmM2YT9rZXk9NTc2YjBhODcwNWIxYzg0YjE5ZjRmZGQ5NjczNGVkZGU=']; | ||
* | ||
* client.removeLineItems(checkoutId, lineItemIds).then((checkout) => { | ||
* // Do something with the updated checkout | ||
* }); | ||
* | ||
* @param {String} checkoutId The ID of the checkout to remove line items from. | ||
* @param {String[]} lineItemIds A list of the ids of line items to remove from the checkout. | ||
* @param {Client.Queries.checkoutQuery} [query] Callback function to specify fields to query on the checkout returned. | ||
* @return {Promise|GraphModel} A promise resolving with the updated checkout. | ||
*/ | ||
removeLineItems(checkoutId, lineItemIds) { | ||
return this.graphQLClient | ||
.send(checkoutLineItemsRemoveMutation, {checkoutId, lineItemIds}) | ||
.then(handleCheckoutMutation('checkoutLineItemsRemove', this.graphQLClient)); | ||
} | ||
|
||
/** | ||
* Updates line items on an existing checkout. | ||
* | ||
* @example | ||
* const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N='; | ||
* const lineItems = [ | ||
* { | ||
* id: 'TViZGE5Y2U1ZDFhY2FiMmM2YT9rZXk9NTc2YjBhODcwNWIxYzg0YjE5ZjRmZGQ5NjczNGVkZGU=', | ||
* quantity: 5, | ||
* variantId: 'Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC8yOTEwNjAyMjc5Mg==' | ||
* } | ||
* ]; | ||
* | ||
* client.updateLineItems(checkoutId, lineItems).then(checkout => { | ||
* // Do something with the updated checkout | ||
* }); | ||
* | ||
* @param {String} checkoutId The ID of the checkout to update a line item on. | ||
* @param {Object[]} lineItems A list of line item information to update. See the {@link https://help.shopify.com/api/storefront-api/reference/input_object/checkoutlineitemupdateinput|Storefront API reference} for valid input fields for each line item. | ||
* @param {Client.Queries.checkoutQuery} [query] Callback function to specify fields to query on the checkout returned. | ||
* @return {Promise|GraphModel} A promise resolving with the updated checkout. | ||
*/ | ||
updateLineItems(checkoutId, lineItems) { | ||
return this.graphQLClient | ||
.send(checkoutLineItemsUpdateMutation, {checkoutId, lineItems}) | ||
.then(handleCheckoutMutation('checkoutLineItemsUpdate', this.graphQLClient)); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters