allow customer to check on self installed field

This commit is contained in:
Chloe
2024-06-27 15:05:59 +07:00
parent 7f4fa09027
commit 6c01d8825d
16 changed files with 288 additions and 96 deletions

View File

@@ -33,12 +33,50 @@ export const orderMetafields = /* GraphQL */ `
id
warrantyStatus: metafield(namespace: "custom", key: "warranty_status") {
value
id
key
}
warrantyActivationDeadline: metafield(
namespace: "custom"
key: "warranty_activation_deadline"
) {
value
id
key
}
warrantyActivationOdometer: metafield(
namespace: "custom"
key: "warranty_activation_odometer"
) {
value
id
key
}
warrantyActivationInstallation: metafield(
namespace: "custom"
key: "warranty_activation_installation"
) {
value
id
key
}
warrantyActivationSelfInstall: metafield(
namespace: "custom"
key: "warranty_activation_self_install"
) {
value
id
key
}
warrantyActivationVIN: metafield(namespace: "custom", key: "warranty_activation_vin") {
value
id
key
}
warrantyActivationMileage: metafield(namespace: "custom", key: "warranty_activation_mileage") {
value
id
key
}
}
`;

View File

@@ -37,7 +37,7 @@ import {
import { getCustomerQuery } from './queries/customer';
import { getMenuQuery } from './queries/menu';
import { getMetaobjectQuery, getMetaobjectsQuery } from './queries/metaobject';
import { getImageQuery, getMetaobjectsByIdsQuery } from './queries/node';
import { getFileQuery, getImageQuery, getMetaobjectsByIdsQuery } from './queries/node';
import { getCustomerOrderQuery, getOrderMetafieldsQuery } from './queries/order';
import { getCustomerOrderMetafieldsQuery, getCustomerOrdersQuery } from './queries/orders';
import { getPageQuery, getPagesQuery } from './queries/page';
@@ -53,6 +53,7 @@ import {
Collection,
Connection,
Customer,
File,
FileCreateInput,
Filter,
Fulfillment,
@@ -63,7 +64,6 @@ import {
Metaobject,
Money,
Order,
OrderMetafield,
Page,
PageInfo,
Product,
@@ -105,6 +105,7 @@ import {
ShopifyUpdateOrderMetafieldsOperation,
Transaction,
TransmissionType,
UpdateOrderMetafieldInput,
UploadInput,
WarrantyStatus
} from './types';
@@ -1092,17 +1093,14 @@ export const updateOrderMetafields = async ({
metafields
}: {
orderId: string;
metafields: { key: string; value: string | undefined | null; type: string }[];
metafields: Array<UpdateOrderMetafieldInput>;
}) => {
const validMetafields = (
metafields.filter((field) => Boolean(field)) as Array<Omit<Metafield, 'namespace'>>
).map((field) => ({
...field,
namespace: 'custom'
}));
const validMetafields = metafields.filter((field) => Boolean(field.value)) as Array<Metafield>;
if (validMetafields.length === 0) return null;
const shouldSetWarrantyStatusToActivated = WARRANTY_FIELDS.every((field) =>
validMetafields.find(({ key }) => key === field)
validMetafields.find(({ key }) => (Array.isArray(field) ? field.includes(key) : key === field))
);
const response = await adminFetch<ShopifyUpdateOrderMetafieldsOperation>({
@@ -1127,7 +1125,7 @@ export const updateOrderMetafields = async ({
return response.body.data.orderUpdate.order.id;
};
export const getOrdersMetafields = async (): Promise<{ [key: string]: OrderMetafield }> => {
export const getOrdersMetafields = async (): Promise<{ [key: string]: ShopifyOrderMetafield }> => {
const customer = await getCustomer();
const res = await adminFetch<{
data: {
@@ -1153,16 +1151,13 @@ export const getOrdersMetafields = async (): Promise<{ [key: string]: OrderMetaf
return res.body.data.customer.orders.nodes.reduce(
(acc, order) => ({
...acc,
[order.id]: {
warrantyStatus: order.warrantyStatus?.value ?? null,
warrantyActivationDeadline: order.warrantyActivationDeadline?.value ?? null
}
[order.id]: order
}),
{} as { [key: string]: OrderMetafield }
{} as { [key: string]: ShopifyOrderMetafield }
);
};
export const getOrderMetafields = async (orderId: string): Promise<OrderMetafield> => {
export const getOrderMetafields = async (orderId: string): Promise<ShopifyOrderMetafield> => {
const res = await adminFetch<{
data: {
order: {
@@ -1175,13 +1170,26 @@ export const getOrderMetafields = async (orderId: string): Promise<OrderMetafiel
}>({
query: getOrderMetafieldsQuery,
variables: { id: `gid://shopify/Order/${orderId}` },
tags: [`${TAGS.orderMetafields}/${orderId}`]
tags: [TAGS.orderMetafields]
});
const order = res.body.data.order;
return {
warrantyStatus: order.warrantyStatus?.value ?? null,
warrantyActivationDeadline: order.warrantyActivationDeadline?.value ?? null
};
return order;
};
export const getFile = async (id: string) => {
const res = await shopifyFetch<{
data: {
node: File;
};
variables: {
id: string;
};
}>({
query: getFileQuery,
variables: { id }
});
return res.body.data.node;
};

View File

@@ -32,3 +32,15 @@ export const getMetaobjectsByIdsQuery = /* GraphQL */ `
}
}
`;
export const getFileQuery = /* GraphQL */ `
query getFile($id: ID!) {
node(id: $id) {
... on GenericFile {
id
url
alt
}
}
}
`;

View File

@@ -858,12 +858,28 @@ export enum WarrantyStatus {
LimitedActivated = 'Limited Activation'
}
export type ShopifyOrderMetafield = {
warrantyStatus: { value: WarrantyStatus } | null;
warrantyActivationDeadline: { value: string } | null;
export type OrderMetafieldValue<T = string> = {
value: T;
id: string;
key: string;
};
export type OrderMetafield = {
warrantyStatus: WarrantyStatus | null;
warrantyActivationDeadline: string | null;
export type ShopifyOrderMetafield = {
warrantyStatus: OrderMetafieldValue | null;
warrantyActivationDeadline: OrderMetafieldValue | null;
warrantyActivationOdometer: OrderMetafieldValue | null;
warrantyActivationInstallation: OrderMetafieldValue | null;
warrantyActivationSelfInstall: OrderMetafieldValue | null;
warrantyActivationVIN: OrderMetafieldValue | null;
warrantyActivationMileage: OrderMetafieldValue | null;
};
export type File = {
id: string;
url: string;
alt: string;
};
export type UpdateOrderMetafieldInput =
| { key: string; value?: string | null; type: string; namespace: string }
| { id: string; value?: string | null; key: string };