import axios from 'axios'; import { ref } from 'vue'; import { defineStore } from 'pinia'; import { BranchContact, BranchContactCreate } from './types'; import { Pagination } from '../types'; import { api } from 'src/boot/axios'; const useBranchContactStore = defineStore('api-branch-contact', () => { const data = ref>(); async function fetchList( branchId: string, opts?: { page?: number; pageSize?: number; }, flow?: { sessionId: string; refTransactionId: string; transactionId: string; }, ) { const params = new URLSearchParams(); if (opts?.pageSize && opts?.pageSize > 0) { params.append('pageSize', `${opts.pageSize}`); } if (opts?.page && opts.page > 0) params.append('page', `${opts.page}`); const query = params.toString(); const res = await api.get>( `/branch/${branchId}/contact${(params && '?'.concat(query)) || ''}`, { headers: { 'X-Session-Id': flow?.sessionId, 'X-Rtid': flow?.refTransactionId, 'X-Tid': flow?.transactionId, }, }, ); if (res && res.status === 200) { data.value = res.data; return data.value; } return false; } async function create( branchId: string, data: BranchContactCreate, flow?: { sessionId: string; refTransactionId: string; transactionId: string; }, ) { const { qrCodeImage, ...payload } = data; const res = await api.post< BranchContact & { qrCodeImageUploadUrl: string } >(`/branch/${branchId}/contact`, payload, { headers: { 'X-Session-Id': flow?.sessionId, 'X-Rtid': flow?.refTransactionId, 'X-Tid': flow?.transactionId, }, }); await axios .put(res.data.qrCodeImageUploadUrl, qrCodeImage, { headers: { 'Content-Type': qrCodeImage.type }, onUploadProgress: (e) => console.log(e), }) .catch((e) => console.error(e)); if (!res) return false; return res.data; } async function editById( branchId: string, contactId: string, data: Partial, flow?: { sessionId: string; refTransactionId: string; transactionId: string; }, ) { const { qrCodeImage, ...payload } = data; const res = await api.put( `/branch/${branchId}/contact/${contactId}`, payload, { headers: { 'X-Session-Id': flow?.sessionId, 'X-Rtid': flow?.refTransactionId, 'X-Tid': flow?.transactionId, }, }, ); if (qrCodeImage) { await axios .put(res.data.qrCodeImageUploadUrl, qrCodeImage, { headers: { 'Content-Type': qrCodeImage.type }, onUploadProgress: (e) => console.log(e), }) .catch((e) => console.error(e)); } if (!res) return false; return res.data; } async function deleteById( branchId: string, contactId: string, flow?: { sessionId: string; refTransactionId: string; transactionId: string; }, ) { const res = await api.delete< BranchContact & { qrCodeImageUploadUrl: string } >(`/branch/${branchId}/contact/${contactId}`, { headers: { 'X-Session-Id': flow?.sessionId, 'X-Rtid': flow?.refTransactionId, 'X-Tid': flow?.transactionId, }, }); if (!res) return false; return res.data; } return { fetchList, create, editById, deleteById, }; }); export default useBranchContactStore;