finish activate warranty step

This commit is contained in:
Chloe
2024-06-25 21:57:57 +07:00
parent 5385b5ed67
commit 2477fdf84e
13 changed files with 255 additions and 82 deletions

View File

@@ -35,7 +35,7 @@ export const TAGS = {
export const HIDDEN_PRODUCT_TAG = 'nextjs-frontend-hidden';
export const DEFAULT_OPTION = 'Default Title';
export const SHOPIFY_GRAPHQL_API_ENDPOINT = '/api/2024-04/graphql.json';
export const SHOPIFY_GRAPHQL_CUSTOMER_API_ENDPOINT = '/account/customer/api/2024-07/graphql';
export const SHOPIFY_GRAPHQL_CUSTOMER_API_ENDPOINT = '/account/customer/api/2024-04/graphql';
export const SHOPIFY_GRAPHQL_ADMIN_ADMIN_API_ENDPOINT = '/admin/api/2024-04/graphql.json';
export const CORE_WAIVER = 'core-waiver';
@@ -60,3 +60,10 @@ export const ADD_ON_PRODUCT_TYPES = {
addOn: 'Add On',
coreCharge: 'Core Charge'
};
export const WARRANTY_FIELDS = [
'warranty_activation_odometer',
'warranty_activation_installation',
'warranty_activation_vin',
'warranty_activation_mileage'
];

View File

@@ -11,6 +11,7 @@ import {
SHOPIFY_GRAPHQL_CUSTOMER_API_ENDPOINT,
TAGS,
VARIANT_METAFIELD_PREFIX,
WARRANTY_FIELDS,
YEAR_FILTER_ID
} from 'lib/constants';
import { isShopifyError } from 'lib/type-guards';
@@ -26,6 +27,7 @@ import {
setCartAttributesMutation
} from './mutations/cart';
import { createFileMutation, createStageUploads } from './mutations/file';
import { updateOrderMetafieldsMutation } from './mutations/order';
import { getCartQuery } from './queries/cart';
import {
getCollectionProductsQuery,
@@ -57,6 +59,7 @@ import {
Image,
LineItem,
Menu,
Metafield,
Metaobject,
Money,
Order,
@@ -97,9 +100,11 @@ import {
ShopifySetCartAttributesOperation,
ShopifyStagedUploadOperation,
ShopifyUpdateCartOperation,
ShopifyUpdateOrderMetafieldsOperation,
Transaction,
TransmissionType,
UploadInput
UploadInput,
WarrantyStatus
} from './types';
const domain = process.env.SHOPIFY_STORE_DOMAIN
@@ -592,6 +597,7 @@ function reshapeOrder(shopifyOrder: ShopifyOrder): Order {
totalPrice: reshapeMoney(item.totalPrice)
})) || [];
console.log(shopifyOrder);
const order: Order = {
id: shopifyOrder.id,
normalizedId: shopifyOrder.id.replace('gid://shopify/Order/', ''),
@@ -1072,5 +1078,45 @@ export const createFile = async (params: FileCreateInput) => {
variables: { files: [params] }
});
return res.body.data;
return res.body.data.fileCreate.files;
};
export const updateOrderMetafields = async ({
orderId,
metafields
}: {
orderId: string;
metafields: { key: string; value: string | undefined | null; type: string }[];
}) => {
const validMetafields = (
metafields.filter((field) => Boolean(field)) as Array<Omit<Metafield, 'namespace'>>
).map((field) => ({
...field,
namespace: 'custom'
}));
const shouldSetWarrantyStatusToActivated = WARRANTY_FIELDS.every((field) =>
validMetafields.find(({ key }) => key === field)
);
const response = await adminFetch<ShopifyUpdateOrderMetafieldsOperation>({
query: updateOrderMetafieldsMutation,
variables: {
input: {
metafields: shouldSetWarrantyStatusToActivated
? validMetafields.concat([
{
key: 'warranty_status',
value: WarrantyStatus.Activated,
namespace: 'custom',
type: 'single_line_text_field'
}
])
: validMetafields,
id: orderId
}
}
});
return response.body.data.orderUpdate.order.id;
};

View File

@@ -18,9 +18,7 @@ export const createFileMutation = /* GraphQL */ `
fileCreate(files: $files) {
files {
fileStatus
... on MediaImage {
id
}
id
}
userErrors {
field

View File

@@ -0,0 +1,13 @@
export const updateOrderMetafieldsMutation = /* GraphQL */ `
mutation updateOrderMetafields($input: OrderInput!) {
orderUpdate(input: $input) {
order {
id
}
userErrors {
message
field
}
}
}
`;

View File

@@ -1,3 +1,4 @@
/* eslint-disable no-unused-vars */
export type Maybe<T> = T | null;
export type Connection<T> = {
@@ -825,3 +826,33 @@ export type ShopifyCreateFileOperation = {
};
variables: { files: FileCreateInput[] };
};
export type Metafield = {
namespace: string;
value: string;
key: string;
type: string;
};
export type ShopifyUpdateOrderMetafieldsOperation = {
data: {
orderUpdate: {
order: {
id: string;
};
userErrors: { field: string; message: string }[];
};
};
variables: {
input: {
metafields: Metafield[];
id: string;
};
};
};
export enum WarrantyStatus {
Activated = 'Activated',
NotActivated = 'Not Activated',
LimitedActivated = 'Limited Activation'
}