import type * as t from './types'; import { getUrls } from '@/config/urls'; import { createUrl, type PageUrlParams } from '@/utils/url'; import type { WretchError } from 'wretch'; import wretch from 'wretch'; const urls = getUrls(); const api = wretch(urls.URL_IUS).options({ cache: 'no-store' }).errorType('json'); type Input = { cookie?: string; pageUrlParams: PageUrlParams; payload?: unknown }; export async function getData({ pageUrlParams, cookie = '' }: Input) { const url = createUrl({ ...pageUrlParams, route: '', }); return api .headers({ cookie }) .get(url) .res((cb) => cb.json()) .then((res) => res); } export async function getMetaData({ pageUrlParams, cookie = '' }: Input) { const url = createUrl({ ...pageUrlParams, route: '/meta' }); return api .headers({ cookie }) .get(url) .res((res) => res.json()) .then((res) => res); } export async function getConfig({ pageUrlParams, cookie = '' }: Input) { const url = createUrl({ ...pageUrlParams, route: '/config' }); return api .headers({ cookie }) .get(url) .res((res) => res.json()) .then((res) => res); } export async function getConditions({ pageUrlParams, cookie = '' }: Input) { const url = createUrl({ ...pageUrlParams, route: '/conditions' }); return api .headers({ cookie }) .get(url) .res((res) => res.text()) .then((res) => res); } export async function save({ pageUrlParams, payload }: Input) { const url = createUrl({ ...pageUrlParams, route: '/transfer' }); return api .post(payload, url) .res((res) => res.ok) .then((res) => res) .catch((error: WretchError) => error.json as t.HttpValidationError | t.HttpError); } export async function retract({ pageUrlParams, payload }: Input) { const url = createUrl({ ...pageUrlParams, route: '/return' }); return api .post(payload, url) .res((res) => res.ok) .then((res) => res) .catch((error: WretchError) => error.json as t.HttpValidationError | t.HttpError); } export async function getDocumentTypes({ pageUrlParams, cookie = '' }: Input) { const url = createUrl({ ...pageUrlParams, route: '/documenttypes' }); return api .headers({ cookie }) .get(url) .res((res) => res.json()) .then((res) => res); } export async function getDocuments({ pageUrlParams, cookie = '' }: Input) { const url = createUrl({ ...pageUrlParams, route: '/documents' }); return api .headers({ cookie }) .get(url) .res((res) => res.json()) .then((res) => res); } export function uploadDocument({ pageUrlParams, document, formData, }: Input & { document: Pick; formData: FormData }) { const url = createUrl({ ...pageUrlParams, route: '/document', urlSearchParams: { ...pageUrlParams.urlSearchParams, ...document }, }); return fetch(urls.URL_IUS + url, { body: formData, method: 'POST', }) .then((res) => { if (res.ok) { return true; } return res.json(); }) .catch((error) => { throw error as t.HttpError; }); }