반응형
// useMutation
const uploadImageMutate = useMutation({
mutationFn: uploadMenuItemImage,
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: [QUERY_KEY.MENU_CATEGORY_WITH_ITEM] });
},
});
return uploadImageMutate
//mutationFn
export const uploadMenuItemImage = async (uploadMenuItem: UploadMenuItemType) => {
// 기존 storage 이미지 삭제
const { data: list } = await supabase.storage
.from('images')
.list(`menu/${uploadMenuItem.menuItem.category_id}/${uploadMenuItehttp://m.menuItem.id}`);
const filesToRemove = list?.map(
x => `menu/${uploadMenuItem.menuItem.category_id}/${uploadMenuItehttp://m.menuItem.id}/${x.name}`,
);
await supabase.storage.from('images').remove(filesToRemove!);
//stoage upload
const { error } = await supabase.storage
.from('images')
.upload(
`menu/${uploadMenuItem.menuItem.category_id}/${uploadMenuItehttp://m.menuItem.id}/${uploadMenuItem.createAt}`,
uploadMenuItem.selectedFile!,
{},
);
// 올라간 image get url
const { data } = supabase.storage
.from('images')
.getPublicUrl(
`menu/${uploadMenuItem.menuItem.category_id}/${uploadMenuItehttp://m.menuItem.id}/${uploadMenuItem.createAt}`,
);
console.log(data, 'supabase');
if (error) throw error;
return data.publicUrl; // 내가 원하는 값
};
uploadImageMutate라는 useMutation을 필요한 컴포넌트에서 호출하는데
mutationFn인 uploadImageMutate 의 return 값인 data.publicUrl을 받아오고 싶은 상황이다.
return 되는 값을 받아오기 위해서는 mutateAsync 를 사용하면 된다.
const uploadedMenuImage = await uploadImageMutate.mutateAsync(uploadImageGroup);
// uploadedMenuImage = data.publicUrl
반응형
'TIL' 카테고리의 다른 글
[TIL][24.01.23] project - magic pos QA (1) | 2024.01.23 |
---|---|
[TIL][24.01.22] Project - 배열끼리 비교 후 없는 값 도출 (0) | 2024.01.22 |
[TIL][24.01.18] zustand 작업, query hooks로 빼기 (1) | 2024.01.19 |
[TIL] [24.01.17] zustand에서 state와 action을 분리하기 (0) | 2024.01.18 |
[TIL][24.1.16] 기존데이터, 더미데이터, 바뀐 데이터 (0) | 2024.01.17 |