mirror of
https://github.com/vercel/commerce.git
synced 2025-07-22 20:26:49 +00:00
finish activate warranty step
This commit is contained in:
@@ -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);
|
||||
}
|
||||
};
|
||||
|
@@ -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
|
||||
});
|
||||
}
|
||||
};
|
Reference in New Issue
Block a user