react-app/src/hooks/api/useAdministrativeAreaApi.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { CommonFiltering } from '@/interfaces/ICommonFiltering';
import { IFetch } from '../useFetch';
import { GetManyResponse } from '@/interfaces/GetManyResponse';

export interface AdministrativeArea {
  Id: number;
  Name: string;
  ProvinceId: string;
  IsDisabled: boolean;
  SortOrder?: number;
  RegionalDistrictId: number;
  RegionalDistrict?: Record<string, any>;
  CreatedOn: string;
}

const useAdministrativeAreaApi = (absoluteFetch: IFetch) => {
  const getAdministrativeAreas = async (
    sort: CommonFiltering,
    signal?: AbortSignal,
  ): Promise<GetManyResponse<AdministrativeArea>> => {
    try {
      const response = await absoluteFetch.get(`/administrativeAreas`, { ...sort }, { signal });
      if (response.ok) {
        return response.parsedBody as GetManyResponse<AdministrativeArea>;
      }
      return {
        data: [],
        totalCount: 0,
      };
    } catch (error) {
      if (error.name === 'AbortError') {
        console.warn('Fetch aborted');
      } else {
        console.error('Error fetching administrative areas:', error);
      }
      return {
        data: [],
        totalCount: 0,
      };
    }
  };

  const addAdministrativeArea = async (adminArea: Omit<AdministrativeArea, 'Id' | 'CreatedOn'>) => {
    const response = await absoluteFetch.post(`/administrativeAreas`, adminArea);
    return response;
  };

  const getAdminAreaById = async (id: number): Promise<AdministrativeArea> => {
    const { parsedBody } = await absoluteFetch.get(`/administrativeAreas/${id}`);
    return parsedBody as AdministrativeArea;
  };

  const updateAdminArea = async (id: number, adminArea: Partial<AdministrativeArea>) => {
    const response = await absoluteFetch.put(`/administrativeAreas/${id}`, adminArea);
    return response;
  };

  return {
    getAdministrativeAreas,
    addAdministrativeArea,
    getAdminAreaById,
    updateAdminArea,
  };
};

export default useAdministrativeAreaApi;