Commit 84c0012d authored by Rais Aryaguna's avatar Rais Aryaguna

fix: Correct endpoint paths for faktur_keterangan and faktur_idtambahan

parent cf7f44f4
import type { SWRConfiguration } from 'swr';
import useSWR from 'swr';
import { useMemo } from 'react';
import { useQuery, type UseQueryOptions } from '@tanstack/react-query';
import type { AxiosError } from 'axios';
import { fetcher, endpoints } from 'src/lib/axios-ctas-box';
// ----------------------------------------------------------------------
const swrOptions: SWRConfiguration = {
revalidateIfStale: false,
revalidateOnFocus: false,
revalidateOnReconnect: false,
interface ApiResponse<T> {
status: string;
message?: string;
data: T;
}
interface KodeNegara {
kode: string;
nama: string;
}
interface KodeNegaraResponse {
data: KodeNegara[];
}
interface UseKodeNegaraReturn {
kodeNegara: KodeNegara[];
kodeNegaraLoading: boolean;
kodeNegaraError: AxiosError | null;
}
interface QueryParams {
[key: string]: any;
}
const queryOptions = {
refetchOnWindowFocus: false,
refetchOnReconnect: false,
retry: 1,
} satisfies Omit<UseQueryOptions, 'queryKey' | 'queryFn'>;
const validateResponse = <T>(response: ApiResponse<T>): T => {
if (response.status === 'fail' || response.status === 'error' || response.status === '0') {
throw new Error(
response.message || 'System tidak dapat memenuhi permintaan, coba beberapa saat lagi'
);
}
return response.data;
};
const {
kodeNegara,
services,
goods,
kop_all,
kop_bpnr,
kop_bpsp,
kop_bpu,
faktur_keterangan,
faktur_idtambahan,
satuan,
} = endpoints.masterData;
export function useKodeNegara(): UseKodeNegaraReturn {
const { data, isLoading, error } = useQuery<KodeNegaraResponse, AxiosError>({
queryKey: ['kodeNegara'],
queryFn: async () => {
const response = await fetcher<ApiResponse<KodeNegaraResponse>>(kodeNegara);
return validateResponse(response);
},
...queryOptions,
});
return {
kodeNegara: data?.data || [],
kodeNegaraLoading: isLoading,
kodeNegaraError: error,
};
}
// ----------------------------------------------------------------------
export function useServices(params?: QueryParams) {
const { data, isLoading, error } = useQuery<any, AxiosError>({
queryKey: ['services', params],
queryFn: async () => {
const response = await fetcher<ApiResponse<any>>(services);
return validateResponse(response);
},
...queryOptions,
});
return {
services: data,
servicesLoading: isLoading,
servicesError: error,
};
}
// ----------------------------------------------------------------------
export function useGoods(params?: QueryParams) {
const { data, isLoading, error } = useQuery<any, AxiosError>({
queryKey: ['goods', params],
queryFn: async () => {
const response = await fetcher<ApiResponse<any>>(goods);
return validateResponse(response);
},
...queryOptions,
});
return {
goods: data,
goodsLoading: isLoading,
goodsError: error,
};
}
// ----------------------------------------------------------------------
export function useSatuan(params?: QueryParams) {
const { data, isLoading, error } = useQuery<any, AxiosError>({
queryKey: ['satuan', params],
queryFn: async () => {
const response = await fetcher<ApiResponse<any>>(satuan);
return validateResponse(response);
},
...queryOptions,
});
return {
satuan: data,
satuanLoading: isLoading,
satuanError: error,
};
}
// ----------------------------------------------------------------------
interface Penandatangan {
// Define properties based on your API response
[key: string]: any;
}
export function usePenandatangan() {
const { data, isLoading, error } = useQuery<Penandatangan, AxiosError>({
queryKey: ['penandatangan'],
queryFn: async () => {
const response = await fetcher<ApiResponse<Penandatangan>>('/signer');
if (response.status === 'error') {
throw new Error(response.message);
}
return response.data;
},
...queryOptions,
});
return {
penandatangan: data,
penandatanganLoading: isLoading,
penandatanganError: error,
};
}
// ----------------------------------------------------------------------
export function useKodeNegara() {
const url = endpoints.masterData.kodeNegara;
type KodeObjekPajakType = 'bpnr' | 'bpu' | 'bpsp' | 'all';
const KODE_OBJEK_PAJAK_ENDPOINTS: Record<KodeObjekPajakType, string> = {
bpnr: kop_bpnr,
bpu: kop_bpu,
bpsp: kop_bpsp,
all: kop_all,
} as const;
export function useKodeObjekPajak(type: KodeObjekPajakType, params?: QueryParams) {
const { data, isLoading, error } = useQuery<any, AxiosError>({
queryKey: ['kodeObjekPajak', type, params],
queryFn: async () => {
const endpoint = KODE_OBJEK_PAJAK_ENDPOINTS[type];
const response = await fetcher<ApiResponse<any>>(endpoint);
// Endpoint 'all' mengembalikan response utuh, bukan hanya data
return type === 'all' ? response : validateResponse(response);
},
...queryOptions,
});
return {
kodeObjekPajak: data,
kodeObjekPajakLoading: isLoading,
kodeObjekPajakError: error,
};
}
// ----------------------------------------------------------------------
const { data, isLoading, error, isValidating } = useSWR<{
data: { kode: string; nama: string }[];
}>(url, fetcher, {
...swrOptions,
export function useKeteranganTambahan(params?: QueryParams) {
const { data, isLoading, error } = useQuery<any, AxiosError>({
queryKey: ['keteranganTambahan', params],
queryFn: async () => {
const response = await fetcher<ApiResponse<any>>(faktur_keterangan);
return validateResponse(response);
},
...queryOptions,
});
const memoizedValue = useMemo(
() => ({
kodeNegara: data?.data || [],
kodeNegaraLoading: isLoading,
kodeNegaraError: error,
kodeNegaraValidating: isValidating,
kodeNegaraEmpty: !isLoading && !data?.data.length,
}),
[data, error, isLoading, isValidating]
);
return memoizedValue;
return {
keteranganTambahan: data,
keteranganTambahanLoading: isLoading,
keteranganTambahanError: error,
};
}
// const getServices = async (params) => {
// const response = await axiosBupot.get('/mst_services', {
// params,
// });
// const body = response.data;
// if (
// body.status === 'fail' ||
// body.status === 'error' ||
// body.status === '0' ||
// response.status !== 200
// ) {
// throw new Error(body.message || 'System tidak dapat memenuhi permintaan, coba beberapa saat lagi');
// }
// return body.data;
// };
// const getGoods = async (params) => {
// const response = await axiosBupot.get('/mst_goods', {
// params,
// });
// const body = response.data;
// if (
// body.status === 'fail' ||
// body.status === 'error' ||
// body.status === '0' ||
// response.status !== 200
// ) {
// throw new Error(body.message || 'System tidak dapat memenuhi permintaan, coba beberapa saat lagi');
// }
// return body.data;
// };
// const getSatuan = async (params) => {
// const response = await axiosBupot.get('/mst_satuan', {
// params,
// });
// const body = response.data;
// if (
// body.status === 'fail' ||
// body.status === 'error' ||
// body.status === '0' ||
// response.status !== 200
// ) {
// throw new Error(body.message || 'System tidak dapat memenuhi permintaan, coba beberapa saat lagi');
// }
// return body.data;
// };
// const getPenandatangan = async () => {
// const {
// data: { status: statusRes, message, data },
// } = await axiosBupot.get('/signer');
// if (statusRes === 'error') {
// throw new Error(message);
// }
// return data;
// };
// const getKodeObjekPajakBpnr = async (params) => {
// const response = await axiosBupot.get('/mst_kop_bpnr', {
// params,
// });
// const body = response.data;
// if (
// body.status === 'fail' ||
// body.status === 'error' ||
// body.status === '0' ||
// response.status !== 200
// ) {
// throw new Error(body.message || 'System tidak dapat memenuhi permintaan, coba beberapa saat lagi');
// }
// return body.data;
// };
// const getKodeObjekPajakBpu = async (params) => {
// const response = await axiosBupot.get('/mst_kop_bpu', {
// params,
// });
// const body = response.data;
// if (
// body.status === 'fail' ||
// body.status === 'error' ||
// body.status === '0' ||
// response.status !== 200
// ) {
// throw new Error(body.message || 'System tidak dapat memenuhi permintaan, coba beberapa saat lagi');
// }
// return body.data;
// };
// const getKodeObjekPajakBpsp = async (params) => {
// const response = await axiosBupot.get('/mst_kop_bpsp', {
// params,
// });
// const body = response.data;
// if (
// body.status === 'fail' ||
// body.status === 'error' ||
// body.status === '0' ||
// response.status !== 200
// ) {
// throw new Error(body.message || 'System tidak dapat memenuhi permintaan, coba beberapa saat lagi');
// }
// return body.data;
// };
// const getAllKodeObjekPajak = async (params) => {
// const response = await axiosBupot.get('/mst_kop_all', {
// params,
// });
// const body = response.data;
// if (
// body.status === 'fail' ||
// body.status === 'error' ||
// body.status === '0' ||
// response.status !== 200
// ) {
// throw new Error(body.message || 'System tidak dapat memenuhi permintaan, coba beberapa saat lagi');
// }
// return body;
// };
// const getKeteranganTambahan = async (params) => {
// const response = await axiosBupot.get('/mst_faktur_keterangan', {
// params,
// });
// const body = response.data;
// if (
// body.status === 'fail' ||
// body.status === 'error' ||
// body.status === '0' ||
// response.status !== 200
// ) {
// throw new Error(body.message || 'System tidak dapat memenuhi permintaan, coba beberapa saat lagi');
// }
// return body.data;
// };
// const getIdKeteranganTambahan = async (params) => {
// const response = await axiosBupot.get('/mst_faktur_idtambahan', {
// params,
// });
// const body = response.data;
// if (
// body.status === 'fail' ||
// body.status === 'error' ||
// body.status === '0' ||
// response.status !== 200
// ) {
// throw new Error(body.message || 'System tidak dapat memenuhi permintaan, coba beberapa saat lagi');
// }
// return body.data;
// };
// ----------------------------------------------------------------------
export function useIdKeteranganTambahan(params?: QueryParams) {
const { data, isLoading, error } = useQuery<any, AxiosError>({
queryKey: ['idKeteranganTambahan', params],
queryFn: async () => {
const response = await fetcher<ApiResponse<any>>(faktur_idtambahan);
return validateResponse(response);
},
...queryOptions,
});
return {
idKeteranganTambahan: data,
idKeteranganTambahanLoading: isLoading,
idKeteranganTambahanError: error,
};
}
......@@ -89,7 +89,7 @@ export const endpoints = {
kop_bpu: '/sandbox/mst_kop_bpu',
kop_bpsp: '/sandbox/mst_kop_bpsp',
kop_all: '/sandbox/mst_kop_all',
faktur_keterangan: '/sandbox/mst_faktur_kode',
faktur_idtambahan: '/sandbox/mst_faktur_keterangan',
faktur_keterangan: '/sandbox/mst_faktur_keterangan',
faktur_idtambahan: '/sandbox/mst_faktur_idtambahan',
},
} as const;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment