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

Summary

Maintainability
A
0 mins
Test Coverage
import { ProjectRisk, TierLevel } from '@/hooks/api/useProjectsApi';
import { IFetch } from '../useFetch';
import { BuildingConstructionType, BuildingPredominateUse } from '@/hooks/api/useBuildingsApi';
import { PropertyClassification } from '@/interfaces/IProperty';
import { Agency } from '@/hooks/api/useAgencyApi';
import { AdministrativeArea } from '@/hooks/api/useAdministrativeAreaApi';
import { Role } from '@/constants/roles';

export interface LookupObject {
  Name: string;
  Id: number;
  SortOrder: number;
}

export interface Classification extends LookupObject {
  IsVisible: boolean;
}

export interface Task {
  Name: string;
  Id: number;
  Description: string;
  IsOptional: boolean;
  StatusId: number;
}

export interface MetadataType {
  Name: string;
  Id: number;
  Description: string;
  IsOptional: boolean;
  StatusId: number;
}

export type RegionalDistrict = Omit<LookupObject, 'SortOrder'>;
export type ProjectStatus = Omit<LookupObject, 'SortOrder'>;

export interface PropertyType {
  Name: string;
  Id: number;
  IsDisabled: boolean;
  SortOrder: number;
}

export interface LookupAll {
  Risks: Partial<ProjectRisk>[];
  TimestampTypes: Partial<MetadataType>[];
  MonetaryTypes: Partial<MetadataType>[];
  NoteTypes: Partial<MetadataType>[];
  PropertyTypes: Partial<MetadataType>[];
  Tasks: Partial<Task>[];
  ProjectStatuses: Partial<ProjectStatus>[];
  ProjectTiers: Partial<TierLevel>[];
  ConstructionTypes: Partial<BuildingConstructionType>[];
  PredominateUses: Partial<BuildingPredominateUse>[];
  Classifications: Partial<PropertyClassification>[];
  Roles: Partial<Role>[];
  Agencies: Partial<Agency>[];
  AdministrativeAreas: Partial<AdministrativeArea>[];
  RegionalDistricts: Partial<RegionalDistrict>[];
  Config: {
    contactEmail: string;
    bcscIdentifier?: string;
  };
}

const useLookupApi = (absoluteFetch: IFetch) => {
  const getClassifications = async () => {
    const { parsedBody } = await absoluteFetch.get('/lookup/property/classifications');
    return parsedBody as Classification[];
  };

  const getConstructionTypes = async () => {
    const { parsedBody } = await absoluteFetch.get('/lookup/property/constructionTypes');
    return parsedBody as LookupObject[];
  };

  const getPredominateUses = async () => {
    const { parsedBody } = await absoluteFetch.get('/lookup/property/predominateUses');
    return parsedBody as LookupObject[];
  };

  const getRegionalDistricts = async () => {
    const { parsedBody } = await absoluteFetch.get('/lookup/regionalDistricts');
    return parsedBody as RegionalDistrict[];
  };

  const getTierLevels = async () => {
    const { parsedBody } = await absoluteFetch.get('/lookup/project/tierLevels');
    return parsedBody as LookupObject[];
  };

  const getProjectStatuses = async () => {
    const { parsedBody } = await absoluteFetch.get('/lookup/project/status');
    return parsedBody as ProjectStatus[];
  };

  const getTasks = async (statusId?: number) => {
    const { parsedBody } = await absoluteFetch.get('/lookup/tasks', { statusId: statusId });
    return parsedBody as Task[];
  };

  const getPropertyTypes = async () => {
    const { parsedBody } = await absoluteFetch.get('/lookup/propertyTypes');
    return parsedBody as PropertyType[];
  };

  const getProjectNoteTypes = async (statusId?: number) => {
    const { parsedBody } = await absoluteFetch.get('/lookup/noteTypes', { statusId: statusId });
    return parsedBody as MetadataType[];
  };

  const getProjectMonetaryTypes = async (statusId?: number) => {
    const { parsedBody } = await absoluteFetch.get('/lookup/monetaryTypes', { statusId: statusId });
    return parsedBody as MetadataType[];
  };

  const getProjectTimestampTypes = async (statusId?: number) => {
    const { parsedBody } = await absoluteFetch.get('/lookup/timestampTypes', {
      statusId: statusId,
    });
    return parsedBody as MetadataType[];
  };

  const getAll = async () => {
    const { parsedBody } = await absoluteFetch.get('/lookup/all');
    return parsedBody as LookupAll;
  };

  return {
    getClassifications,
    getConstructionTypes,
    getPredominateUses,
    getRegionalDistricts,
    getProjectStatuses,
    getTierLevels,
    getTasks,
    getPropertyTypes,
    getProjectNoteTypes,
    getProjectMonetaryTypes,
    getProjectTimestampTypes,
    getAll,
  };
};

export default useLookupApi;