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

@@ -1,9 +1,28 @@
'use server';
import { createFile, stageUploadFile, uploadFile } from 'lib/shopify';
import { UploadInput } from 'lib/shopify/types';
import { StagedUploadsCreatePayload, UploadInput } from 'lib/shopify/types';
export const createStagedUploadFiles = async (params: UploadInput) => {
const prepareFilePayload = ({
stagedFileUpload,
file
}: {
stagedFileUpload: StagedUploadsCreatePayload;
file: File;
}) => {
const formData = new FormData();
const url = stagedFileUpload.url;
stagedFileUpload.parameters.forEach(({ name, value }) => {
formData.append(name, value);
});
formData.append('file', file);
return { url, formData };
};
const createStagedUploadFiles = async (params: UploadInput) => {
try {
const stagedTargets = await stageUploadFile(params);
if (!stagedTargets || stageUploadFile.length === 0) return null;
@@ -14,25 +33,54 @@ export const createStagedUploadFiles = async (params: UploadInput) => {
}
};
export const onUploadFile = async ({
const onUploadFile = async ({
url,
formData,
fileName,
resourceUrl
resourceUrl,
contentType = 'FILE'
}: {
url: string;
formData: FormData;
fileName: string;
resourceUrl: string;
contentType?: 'FILE' | 'IMAGE';
}) => {
try {
await uploadFile({ url, formData });
await createFile({
return await createFile({
alt: fileName,
contentType: 'FILE',
contentType,
originalSource: resourceUrl
});
} catch (error) {
console.log(error);
}
};
export const handleUploadFile = async ({ file }: { file: File }) => {
if (!file) return;
try {
const stagedTarget = await createStagedUploadFiles({
filename: file.name,
fileSize: String(file.size),
httpMethod: 'POST',
resource: 'FILE',
mimeType: file.type
});
if (stagedTarget) {
const data = prepareFilePayload({ file, stagedFileUpload: stagedTarget });
const result = await onUploadFile({
...data,
fileName: file.name,
resourceUrl: stagedTarget.resourceUrl
});
return result?.[0]?.id;
}
} catch (error) {
console.log(error);
}
};

View File

@@ -1,42 +0,0 @@
import { StagedUploadsCreatePayload } from 'lib/shopify/types';
import { createStagedUploadFiles, onUploadFile } from './actions';
export const prepareFilePayload = ({
stagedFileUpload,
file
}: {
stagedFileUpload: StagedUploadsCreatePayload;
file: File;
}) => {
const formData = new FormData();
const url = stagedFileUpload.url;
stagedFileUpload.parameters.forEach(({ name, value }) => {
formData.append(name, value);
});
formData.append('file', file);
return { url, formData };
};
export const handleUploadFile = async ({ file }: { file: File }) => {
if (!file) return;
const stagedTarget = await createStagedUploadFiles({
filename: file.name,
fileSize: String(file.size),
httpMethod: 'POST',
resource: 'FILE',
mimeType: file.type
});
if (stagedTarget) {
const data = prepareFilePayload({ file, stagedFileUpload: stagedTarget });
await onUploadFile({
...data,
fileName: file.name,
resourceUrl: stagedTarget.resourceUrl
});
}
};