Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ module.exports = {
rules: {
'prettier/prettier': 'warn',
'max-params': ['error', 10], // Limit the number of parameters in a function to use object instead
'max-lines-per-function': ['error', 1000],
'max-lines-per-function': ['error', 1500],
'react/display-name': 'off',
'react/no-inline-styles': 'off',
'react/destructuring-assignment': 'off', // Vscode doesn't support automatically destructuring, it's a pain to add a new variable
Expand Down
93 changes: 87 additions & 6 deletions src/api/calls/calls.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,14 @@ import { type CallExtraDataResult } from '@/models/v4/calls/callExtraDataResult'
import { type CallResult } from '@/models/v4/calls/callResult';
import { type SaveCallResult } from '@/models/v4/calls/saveCallResult';

import { createCachedApiEndpoint } from '../common/cached-client';
import { createApiEndpoint } from '../common/client';

const callsApi = createCachedApiEndpoint('/Calls/GetActiveCalls', {
ttl: 60 * 1000, // Cache for 60 seconds
enabled: false,
});

const callsApi = createApiEndpoint('/Calls/GetActiveCalls');
const getCallApi = createApiEndpoint('/Calls/GetCall');
const getCallExtraDataApi = createApiEndpoint('/Calls/GetCallExtraData');
const createCallApi = createApiEndpoint('/Calls/SaveCall');
const updateCallApi = createApiEndpoint('/Calls/UpdateCall');
const closeCallApi = createApiEndpoint('/Calls/CloseCall');

export const getCalls = async () => {
const response = await callsApi.get<ActiveCallsResult>();
Expand Down Expand Up @@ -46,13 +43,41 @@ export interface CreateCallRequest {
contactName?: string;
contactInfo?: string;
what3words?: string;
plusCode?: string;
dispatchUsers?: string[];
dispatchGroups?: string[];
dispatchRoles?: string[];
dispatchUnits?: string[];
dispatchEveryone?: boolean;
}

export interface UpdateCallRequest {
callId: string;
name: string;
nature: string;
note?: string;
address?: string;
latitude?: number;
longitude?: number;
priority: number;
type?: string;
contactName?: string;
contactInfo?: string;
what3words?: string;
plusCode?: string;
dispatchUsers?: string[];
dispatchGroups?: string[];
dispatchRoles?: string[];
dispatchUnits?: string[];
dispatchEveryone?: boolean;
}

export interface CloseCallRequest {
callId: string;
type: number;
note?: string;
}

export const createCall = async (callData: CreateCallRequest) => {
let dispatchList = '';

Expand Down Expand Up @@ -88,9 +113,65 @@ export const createCall = async (callData: CreateCallRequest) => {
ContactName: callData.contactName || '',
ContactInfo: callData.contactInfo || '',
What3Words: callData.what3words || '',
PlusCode: callData.plusCode || '',
DispatchList: dispatchList,
};

const response = await createCallApi.post<SaveCallResult>(data);
return response.data;
};

export const updateCall = async (callData: UpdateCallRequest) => {
let dispatchList = '';

if (callData.dispatchEveryone) {
dispatchList = '0';
} else {
const dispatchEntries: string[] = [];

if (callData.dispatchUsers) {
dispatchEntries.push(...callData.dispatchUsers.map((user) => `U:${user}`));
}
if (callData.dispatchGroups) {
dispatchEntries.push(...callData.dispatchGroups.map((group) => `G:${group}`));
}
if (callData.dispatchRoles) {
dispatchEntries.push(...callData.dispatchRoles.map((role) => `R:${role}`));
}
if (callData.dispatchUnits) {
dispatchEntries.push(...callData.dispatchUnits.map((unit) => `U:${unit}`));
}

dispatchList = dispatchEntries.join('|');
}

const data = {
CallId: callData.callId,
Name: callData.name,
Nature: callData.nature,
Note: callData.note || '',
Address: callData.address || '',
Geolocation: `${callData.latitude?.toString() || ''},${callData.longitude?.toString() || ''}`,
Priority: callData.priority,
Type: callData.type || '',
ContactName: callData.contactName || '',
ContactInfo: callData.contactInfo || '',
What3Words: callData.what3words || '',
PlusCode: callData.plusCode || '',
DispatchList: dispatchList,
};

const response = await updateCallApi.post<SaveCallResult>(data);
return response.data;
};

export const closeCall = async (callData: CloseCallRequest) => {
const data = {
Id: callData.callId,
Type: callData.type,
Notes: callData.note || '',
};

const response = await closeCallApi.put<SaveCallResult>(data);
return response.data;
};
12 changes: 12 additions & 0 deletions src/api/contacts/contactNotes.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { type ContactsNotesResult } from '@/models/v4/contacts/contactNotesResult';

import { createApiEndpoint } from '../common/client';

const getContactNotesApi = createApiEndpoint('/Contacts/GetContactNotesByContactId');

export const getContactNotes = async (contactId: string) => {
const response = await getContactNotesApi.get<ContactsNotesResult>({
contactId,
});
return response.data;
};
Loading
Loading