2023-02-06 21:28:11 -06:00
|
|
|
import { type AxiosResponse } from 'axios';
|
2023-02-13 17:05:50 -06:00
|
|
|
import { DelegateType } from '../enums/DelegateType';
|
2023-02-09 22:21:20 -06:00
|
|
|
import { FieldStatus } from '../enums/FieldStatus';
|
2023-02-04 22:00:19 -06:00
|
|
|
import { FieldType } from '../enums/FieldType';
|
2023-02-13 17:05:50 -06:00
|
|
|
import { FileStorageSite } from '../enums/FileStorageSite';
|
2023-02-09 22:21:20 -06:00
|
|
|
import { FormulaOutputType } from '../enums/FormulaOutputType';
|
|
|
|
|
import { Multiplicity } from '../enums/Multiplicity';
|
2023-02-13 17:05:50 -06:00
|
|
|
import { RecordValueType } from '../enums/RecordValueType';
|
|
|
|
|
import { TimeSpanIncrement } from '../enums/TimeSpanIncrement';
|
|
|
|
|
import { TimeSpanRecurrenceType } from '../enums/TimeSpanRecurrenceType';
|
2023-02-01 22:44:30 -06:00
|
|
|
import { App } from './App';
|
2023-02-13 17:05:50 -06:00
|
|
|
import { Attachment } from './Attachment';
|
|
|
|
|
import { AttachmentListRecordValue } from './AttachmentListRecordValue';
|
2023-02-02 20:24:20 -06:00
|
|
|
import { CollectionResponse } from './CollectionResponse';
|
2023-02-03 16:01:20 -06:00
|
|
|
import { CreatedWithIdResponse } from './CreatedWithIdResponse';
|
2023-02-13 17:05:50 -06:00
|
|
|
import { DateRecordValue } from './DateRecordValue';
|
|
|
|
|
import { DecimalRecordValue } from './DecimalRecordValue';
|
|
|
|
|
import { Delegate } from './Delegate';
|
|
|
|
|
import { DelegateListRecordValue } from './DelegateListRecordValue';
|
2023-02-02 21:37:40 -06:00
|
|
|
import { Field } from './Field';
|
2023-02-06 21:28:11 -06:00
|
|
|
import { File } from './File';
|
2023-02-04 15:09:13 -06:00
|
|
|
import { FileInfo } from './FileInfo';
|
2023-02-13 17:05:50 -06:00
|
|
|
import { FileListRecordValue } from './FileListRecordValue';
|
2023-02-04 22:00:19 -06:00
|
|
|
import { FormulaField } from './FormulaField';
|
2023-02-01 22:44:30 -06:00
|
|
|
import { GetPagedAppsResponse } from './GetPagedAppsResponse';
|
2023-02-03 11:45:15 -06:00
|
|
|
import { GetPagedFieldsResponse } from './GetPagedFieldsResponse';
|
2023-02-11 00:16:33 -06:00
|
|
|
import { GetPagedRecordsResponse } from './GetPagedRecordsResponse';
|
2023-02-08 16:38:36 +00:00
|
|
|
import { GetPagedReportsResponse } from './GetPagedReportsResponse';
|
2023-02-13 17:05:50 -06:00
|
|
|
import { GuidListRecordValue } from './GuidListRecordValue';
|
|
|
|
|
import { GuidRecordValue } from './GuidRecordValue';
|
|
|
|
|
import { IntegerListRecordValue } from './IntegerListRecordValue';
|
|
|
|
|
import { IntegerRecordValue } from './IntegerRecordValue';
|
2023-02-04 22:00:19 -06:00
|
|
|
import { ListField } from './ListField';
|
2023-02-07 11:52:46 -06:00
|
|
|
import { ListItemResponse } from './ListItemResponse';
|
2023-02-04 22:00:19 -06:00
|
|
|
import { ListValue } from './ListValue';
|
2023-02-10 00:49:50 -06:00
|
|
|
import { Record } from './Record';
|
2023-02-04 22:00:19 -06:00
|
|
|
import { ReferenceField } from './ReferenceField';
|
2023-02-08 16:38:36 +00:00
|
|
|
import { Report } from './Report';
|
2023-02-09 18:23:49 -06:00
|
|
|
import { ReportData } from './ReportData';
|
|
|
|
|
import { Row } from './Row';
|
2023-02-13 17:05:50 -06:00
|
|
|
import { ScoringGroup } from './ScoringGroup';
|
|
|
|
|
import { ScoringGroupListRecordValue } from './ScoringGroupListRecordValue';
|
|
|
|
|
import { StringListRecordValue } from './StringListRecordValue';
|
|
|
|
|
import { StringRecordValue } from './StringRecordValue';
|
|
|
|
|
import { TimeSpanData } from './TimeSpanData';
|
|
|
|
|
import { TimeSpanRecordValue } from './TimeSpanRecordValue';
|
|
|
|
|
import { type RecordValue } from './RecordValue';
|
2023-02-13 20:21:28 -06:00
|
|
|
import { SaveRecordResponse } from './SaveRecordResponse';
|
2023-02-01 21:21:39 -06:00
|
|
|
|
2023-01-26 13:58:25 -06:00
|
|
|
/**
|
|
|
|
|
* @class ApiResponse - A generic response object for API requests.
|
|
|
|
|
*/
|
2023-01-25 22:28:45 -06:00
|
|
|
export class ApiResponse<T> {
|
2023-01-26 13:58:25 -06:00
|
|
|
/**
|
|
|
|
|
* @property {number} statusCode - The status code of the response.
|
|
|
|
|
*/
|
2023-02-01 21:21:39 -06:00
|
|
|
public statusCode: number;
|
2023-01-26 13:58:25 -06:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @property {boolean} isSuccessful - True if the status code is less than 400; otherwise, false.
|
|
|
|
|
*/
|
2023-02-01 21:21:39 -06:00
|
|
|
public isSuccessful: boolean;
|
2023-01-26 13:58:25 -06:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @property {string} message - The message of the response.
|
|
|
|
|
*/
|
2023-02-01 21:21:39 -06:00
|
|
|
public message: string;
|
2023-01-26 13:58:25 -06:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @property {T} data - The data of the response.
|
|
|
|
|
*/
|
2023-02-02 13:53:02 -06:00
|
|
|
public data: T | null;
|
2023-01-25 22:28:45 -06:00
|
|
|
|
2023-01-26 13:58:25 -06:00
|
|
|
/**
|
|
|
|
|
* @constructor - Creates a new instance of the ApiResponse class.
|
|
|
|
|
* @param {number} statusCode - The status code of the response.
|
|
|
|
|
* @param {string} message - The message of the response.
|
2023-02-02 13:53:02 -06:00
|
|
|
* @param {T | null} data - The data of the response.
|
2023-01-26 13:58:25 -06:00
|
|
|
* @returns {ApiResponse<T>} - A new instance of the ApiResponse class.
|
|
|
|
|
*/
|
2023-02-02 13:53:02 -06:00
|
|
|
constructor(statusCode: number, message: string, data: T | null) {
|
2023-01-25 22:28:45 -06:00
|
|
|
this.statusCode = statusCode;
|
|
|
|
|
this.isSuccessful = statusCode < 400;
|
|
|
|
|
this.message = message;
|
|
|
|
|
this.data = data;
|
|
|
|
|
}
|
2023-02-01 21:21:39 -06:00
|
|
|
|
2023-02-01 21:35:30 -06:00
|
|
|
/**
|
2023-02-03 22:32:57 -06:00
|
|
|
* @method asGetPagedAppsResponseType - Converts the ApiResponse to an ApiResponse<GetPagedAppsResponse>.
|
2023-02-01 21:35:30 -06:00
|
|
|
* @returns {ApiResponse<GetPagedAppsResponse>} - An ApiResponse<GetPagedAppsResponse>.
|
2023-02-01 22:44:30 -06:00
|
|
|
*/
|
2023-02-03 22:32:57 -06:00
|
|
|
public asGetPagedAppsResponseType(): ApiResponse<GetPagedAppsResponse> {
|
2023-02-02 20:24:20 -06:00
|
|
|
const apiResponse = this as ApiResponse<any>;
|
2023-02-01 22:44:30 -06:00
|
|
|
|
2023-02-02 20:24:20 -06:00
|
|
|
const apps = apiResponse.data.items.map((item: any) => {
|
2023-02-01 21:21:39 -06:00
|
|
|
return new App(item.href, item.id, item.name);
|
|
|
|
|
});
|
|
|
|
|
|
2023-02-02 20:24:20 -06:00
|
|
|
const getAppsPagedResponse = new GetPagedAppsResponse(
|
2023-02-01 21:21:39 -06:00
|
|
|
apps,
|
|
|
|
|
apiResponse.data.pageNumber,
|
|
|
|
|
apiResponse.data.pageSize,
|
|
|
|
|
apiResponse.data.totalPages,
|
|
|
|
|
apiResponse.data.totalRecords
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return new ApiResponse<GetPagedAppsResponse>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
getAppsPagedResponse
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-01 22:44:30 -06:00
|
|
|
|
2023-02-02 20:24:20 -06:00
|
|
|
/**
|
2023-02-03 22:32:57 -06:00
|
|
|
* @method asAppType - Converts the ApiResponse to an ApiResponse<App>.
|
2023-02-02 20:24:20 -06:00
|
|
|
* @returns {ApiResponse<App>} - An ApiResponse<App>.
|
|
|
|
|
*/
|
2023-02-03 22:32:57 -06:00
|
|
|
public asAppType(): ApiResponse<App> {
|
2023-02-02 20:24:20 -06:00
|
|
|
const apiResponse = this as ApiResponse<any>;
|
2023-02-01 22:44:30 -06:00
|
|
|
|
2023-02-02 20:24:20 -06:00
|
|
|
const app = new App(
|
2023-02-01 22:44:30 -06:00
|
|
|
apiResponse.data.href,
|
|
|
|
|
apiResponse.data.id,
|
|
|
|
|
apiResponse.data.name
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return new ApiResponse<App>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
app
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-02 20:24:20 -06:00
|
|
|
|
|
|
|
|
/**
|
2023-02-03 22:32:57 -06:00
|
|
|
* @method asAppCollectionType - Converts the ApiResponse to an ApiResponse<CollectionResponse<App>>.
|
2023-02-02 20:24:20 -06:00
|
|
|
* @returns {ApiResponse<CollectionResponse<App>>} - An ApiResponse<CollectionResponse<App>>.
|
|
|
|
|
*/
|
2023-02-03 22:32:57 -06:00
|
|
|
public asAppCollectionType(): ApiResponse<CollectionResponse<App>> {
|
2023-02-02 20:24:20 -06:00
|
|
|
const apiResponse = this as ApiResponse<any>;
|
|
|
|
|
|
|
|
|
|
const apps = apiResponse.data.items.map((item: any) => {
|
|
|
|
|
return new App(item.href, item.id, item.name);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const collectionResponse = new CollectionResponse<App>(
|
|
|
|
|
apiResponse.data.count,
|
|
|
|
|
apps
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return new ApiResponse<CollectionResponse<App>>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
collectionResponse
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-02 21:37:40 -06:00
|
|
|
|
2023-02-02 22:59:07 -06:00
|
|
|
/**
|
2023-02-03 22:32:57 -06:00
|
|
|
* @method asFieldType - Converts the ApiResponse to an ApiResponse<Field>.
|
2023-02-02 22:59:07 -06:00
|
|
|
* @returns {ApiResponse<Field>} - An ApiResponse<Field>.
|
|
|
|
|
*/
|
2023-02-03 22:32:57 -06:00
|
|
|
public asFieldType(): ApiResponse<Field> {
|
2023-02-02 21:37:40 -06:00
|
|
|
const apiResponse = this as ApiResponse<any>;
|
2023-02-04 22:00:19 -06:00
|
|
|
const field = ApiResponse.getFieldByType(apiResponse.data);
|
2023-02-02 21:37:40 -06:00
|
|
|
|
|
|
|
|
return new ApiResponse<Field>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
field
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-03 00:16:38 -06:00
|
|
|
|
2023-02-03 11:25:33 -06:00
|
|
|
/**
|
2023-02-03 22:32:57 -06:00
|
|
|
* @method asFieldCollectionType - Converts the ApiResponse to an ApiResponse<CollectionResponse<Field>>.
|
2023-02-03 11:25:33 -06:00
|
|
|
* @returns {ApiResponse<CollectionResponse<Field>>} - An ApiResponse<CollectionResponse<Field>>.
|
|
|
|
|
*/
|
2023-02-03 22:32:57 -06:00
|
|
|
public asFieldCollectionType(): ApiResponse<CollectionResponse<Field>> {
|
2023-02-03 11:17:53 -06:00
|
|
|
const apiResponse = this as ApiResponse<any>;
|
|
|
|
|
|
2023-02-04 22:00:19 -06:00
|
|
|
const fields = apiResponse.data.items.map((item: any) =>
|
|
|
|
|
ApiResponse.getFieldByType(item)
|
|
|
|
|
);
|
2023-02-03 11:17:53 -06:00
|
|
|
|
|
|
|
|
const collectionResponse = new CollectionResponse<Field>(
|
|
|
|
|
apiResponse.data.count,
|
|
|
|
|
fields
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return new ApiResponse<CollectionResponse<Field>>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
collectionResponse
|
|
|
|
|
);
|
2023-02-03 00:16:38 -06:00
|
|
|
}
|
2023-02-03 11:45:15 -06:00
|
|
|
|
2023-02-03 13:00:09 -06:00
|
|
|
/**
|
2023-02-03 22:32:57 -06:00
|
|
|
* @method asGetPagedFieldsResponseType - Converts the ApiResponse to an ApiResponse<GetPagedFieldsResponse>.
|
2023-02-03 13:00:09 -06:00
|
|
|
* @returns {ApiResponse<GetPagedFieldsResponse>} - An ApiResponse<GetPagedFieldsResponse>.
|
|
|
|
|
*/
|
2023-02-03 22:32:57 -06:00
|
|
|
public asGetPagedFieldsResponseType(): ApiResponse<GetPagedFieldsResponse> {
|
2023-02-03 11:45:15 -06:00
|
|
|
const apiResponse = this as ApiResponse<any>;
|
|
|
|
|
|
2023-02-04 22:00:19 -06:00
|
|
|
const fields = apiResponse.data.items.map((item: any) =>
|
|
|
|
|
ApiResponse.getFieldByType(item)
|
|
|
|
|
);
|
2023-02-03 11:45:15 -06:00
|
|
|
|
|
|
|
|
const getPagedFieldsResponse = new GetPagedFieldsResponse(
|
|
|
|
|
fields,
|
|
|
|
|
apiResponse.data.pageNumber,
|
|
|
|
|
apiResponse.data.pageSize,
|
|
|
|
|
apiResponse.data.totalPages,
|
|
|
|
|
apiResponse.data.totalRecords
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return new ApiResponse<GetPagedFieldsResponse>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
getPagedFieldsResponse
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-03 16:01:20 -06:00
|
|
|
|
2023-02-03 22:51:02 -06:00
|
|
|
/**
|
|
|
|
|
* @method asCreatedWithIdResponseType - Converts the ApiResponse to an ApiResponse<CreatedWithIdResponse>.
|
|
|
|
|
* @returns {ApiResponse<CreatedWithIdResponse>} - An ApiResponse<CreatedWithIdResponse>.
|
|
|
|
|
*/
|
2023-02-03 22:32:57 -06:00
|
|
|
public asCreatedWithIdResponseType(): ApiResponse<CreatedWithIdResponse> {
|
2023-02-03 16:01:20 -06:00
|
|
|
const apiResponse = this as ApiResponse<any>;
|
|
|
|
|
|
|
|
|
|
const createdWithIdResponse = new CreatedWithIdResponse(
|
|
|
|
|
apiResponse.data.id
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return new ApiResponse<CreatedWithIdResponse>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
createdWithIdResponse
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-04 15:09:13 -06:00
|
|
|
|
2023-02-04 22:00:19 -06:00
|
|
|
public asFileInfoType(): ApiResponse<FileInfo> {
|
2023-02-04 15:09:13 -06:00
|
|
|
const apiResponse = this as ApiResponse<any>;
|
|
|
|
|
|
|
|
|
|
const fileInfo = new FileInfo(
|
|
|
|
|
apiResponse.data.type,
|
|
|
|
|
apiResponse.data.contentType,
|
|
|
|
|
apiResponse.data.name,
|
|
|
|
|
apiResponse.data.createdDate,
|
|
|
|
|
apiResponse.data.modifiedDate,
|
|
|
|
|
apiResponse.data.owner,
|
|
|
|
|
apiResponse.data.notes,
|
|
|
|
|
apiResponse.data.fileHref
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return new ApiResponse<FileInfo>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
fileInfo
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-04 22:00:19 -06:00
|
|
|
|
2023-02-06 21:28:11 -06:00
|
|
|
public asFileType(response: AxiosResponse): ApiResponse<File> {
|
|
|
|
|
const apiResponse = this as ApiResponse<any>;
|
|
|
|
|
|
|
|
|
|
let fileName = response.headers['content-disposition']
|
|
|
|
|
.split(';')[1]
|
|
|
|
|
.split('=')[1];
|
|
|
|
|
|
|
|
|
|
fileName = fileName.substring(1, fileName.length - 1);
|
|
|
|
|
|
|
|
|
|
const contentType =
|
|
|
|
|
response.headers['content-type'] ??
|
|
|
|
|
response.headers['Content-Type'] ??
|
|
|
|
|
null;
|
|
|
|
|
|
|
|
|
|
let contentLength =
|
|
|
|
|
response.headers['content-length'] ??
|
|
|
|
|
response.headers['Content-Length'] ??
|
|
|
|
|
0;
|
|
|
|
|
|
|
|
|
|
contentLength = parseInt(contentLength);
|
|
|
|
|
|
|
|
|
|
const file = new File(
|
|
|
|
|
apiResponse.data,
|
|
|
|
|
fileName,
|
|
|
|
|
contentType,
|
|
|
|
|
contentLength
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return new ApiResponse<File>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
file
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-07 22:43:06 -06:00
|
|
|
/**
|
|
|
|
|
* @method asListItemResponseType - Converts the ApiResponse to an ApiResponse<ListItemResponse>.
|
|
|
|
|
* @returns {ApiResponse<ListItemResponse>} - An ApiResponse<ListItemResponse>.
|
|
|
|
|
*/
|
2023-02-07 11:52:46 -06:00
|
|
|
public asListItemResponseType(): ApiResponse<ListItemResponse> {
|
|
|
|
|
const apiResponse = this as ApiResponse<any>;
|
|
|
|
|
|
|
|
|
|
const listItemResponse = new ListItemResponse(apiResponse.data.id);
|
|
|
|
|
|
|
|
|
|
return new ApiResponse<ListItemResponse>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
listItemResponse
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-08 23:42:19 -06:00
|
|
|
/**
|
|
|
|
|
* @method asGetPagedReportsResponseType - Converts the ApiResponse to an ApiResponse<GetPagedReportsResponse>.
|
|
|
|
|
* @returns {ApiResponse<GetPagedReportsResponse>} - An ApiResponse<GetPagedReportsResponse>.
|
|
|
|
|
*/
|
2023-02-08 16:38:36 +00:00
|
|
|
public asGetPagedReportsResponseType(): ApiResponse<GetPagedReportsResponse> {
|
|
|
|
|
const apiResponse = this as ApiResponse<any>;
|
|
|
|
|
|
|
|
|
|
const reports = apiResponse.data.items.map((item: any) => {
|
|
|
|
|
return new Report(item.id, item.appId, item.name, item.description);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const getPagedReportsResponse = new GetPagedReportsResponse(
|
|
|
|
|
reports,
|
|
|
|
|
apiResponse.data.pageNumber,
|
|
|
|
|
apiResponse.data.pageSize,
|
|
|
|
|
apiResponse.data.totalPages,
|
|
|
|
|
apiResponse.data.totalRecords
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return new ApiResponse<GetPagedReportsResponse>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
getPagedReportsResponse
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-10 00:49:50 -06:00
|
|
|
/**
|
|
|
|
|
* @method asReportDataType - Converts the ApiResponse to an ApiResponse<ReportData>.
|
|
|
|
|
* @returns {ApiResponse<ReportData>} - An ApiResponse<ReportData>.
|
|
|
|
|
*/
|
2023-02-09 18:23:49 -06:00
|
|
|
asReportDataType(): ApiResponse<ReportData> {
|
|
|
|
|
const apiResponse = this as ApiResponse<any>;
|
|
|
|
|
|
|
|
|
|
const rows = apiResponse.data.rows.map((row) => {
|
|
|
|
|
return new Row(row.recordId, row.cells);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const reportData = new ReportData(apiResponse.data.columns, rows);
|
|
|
|
|
|
|
|
|
|
return new ApiResponse<ReportData>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
reportData
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-11 00:16:33 -06:00
|
|
|
/**
|
|
|
|
|
* @method asGetPagedRecordsResponseType - Converts the ApiResponse to an ApiResponse<GetPagedRecordsResponse>.
|
|
|
|
|
* @returns {ApiResponse<GetPagedRecordsResponse>} - An ApiResponse<GetPagedRecordsResponse>.
|
|
|
|
|
*/
|
|
|
|
|
public asGetPagedRecordsResponseType(): ApiResponse<GetPagedRecordsResponse> {
|
|
|
|
|
const apiResponse = this as ApiResponse<any>;
|
|
|
|
|
|
|
|
|
|
const records = apiResponse.data.items.map((item: any) => {
|
2023-02-13 17:05:50 -06:00
|
|
|
const recordValues = item.fieldData.map((recordValueItem: any) =>
|
|
|
|
|
ApiResponse.getRecordValueByType(recordValueItem)
|
|
|
|
|
);
|
|
|
|
|
|
2023-02-11 00:16:33 -06:00
|
|
|
return new Record(item.appId, item.recordId, recordValues);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const getPagedRecordsResponse = new GetPagedRecordsResponse(
|
|
|
|
|
records,
|
|
|
|
|
apiResponse.data.pageNumber,
|
|
|
|
|
apiResponse.data.pageSize,
|
|
|
|
|
apiResponse.data.totalPages,
|
|
|
|
|
apiResponse.data.totalRecords
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return new ApiResponse<GetPagedRecordsResponse>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
getPagedRecordsResponse
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-10 00:49:50 -06:00
|
|
|
/**
|
|
|
|
|
* @method asRecordType - Converts the ApiResponse to an ApiResponse<Record>.
|
|
|
|
|
* @returns {ApiResponse<Record>} - An ApiResponse<Record>.
|
|
|
|
|
*/
|
|
|
|
|
public asRecordType(): ApiResponse<Record> {
|
|
|
|
|
const apiResponse = this as ApiResponse<any>;
|
|
|
|
|
|
2023-02-13 17:05:50 -06:00
|
|
|
const recordValues = apiResponse.data.fieldData.map(
|
|
|
|
|
(recordValueItem: any) =>
|
|
|
|
|
ApiResponse.getRecordValueByType(recordValueItem)
|
|
|
|
|
);
|
2023-02-10 23:22:41 -06:00
|
|
|
|
2023-02-10 00:49:50 -06:00
|
|
|
const record = new Record(
|
|
|
|
|
apiResponse.data.appId,
|
|
|
|
|
apiResponse.data.recordId,
|
2023-02-10 23:22:41 -06:00
|
|
|
recordValues
|
2023-02-10 00:49:50 -06:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return new ApiResponse<Record>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
record
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-12 15:04:08 -06:00
|
|
|
public asRecordCollectionType(): ApiResponse<CollectionResponse<Record>> {
|
|
|
|
|
const apiResponse = this as ApiResponse<any>;
|
|
|
|
|
|
|
|
|
|
const records = apiResponse.data.items.map((item: any) => {
|
2023-02-13 17:05:50 -06:00
|
|
|
const recordValues = item.fieldData.map((recordValueItem: any) =>
|
|
|
|
|
ApiResponse.getRecordValueByType(recordValueItem)
|
|
|
|
|
);
|
|
|
|
|
|
2023-02-12 15:04:08 -06:00
|
|
|
return new Record(item.appId, item.recordId, recordValues);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const collectionResponse = new CollectionResponse<Record>(
|
|
|
|
|
apiResponse.data.count,
|
|
|
|
|
records
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return new ApiResponse<CollectionResponse<Record>>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
collectionResponse
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-13 20:21:28 -06:00
|
|
|
public asSaveRecordResponseType(): ApiResponse<SaveRecordResponse> {
|
|
|
|
|
const apiResponse = this as ApiResponse<any>;
|
|
|
|
|
const response = new SaveRecordResponse(
|
|
|
|
|
apiResponse.data.id,
|
|
|
|
|
apiResponse.data.warnings
|
|
|
|
|
);
|
|
|
|
|
return new ApiResponse<SaveRecordResponse>(
|
|
|
|
|
apiResponse.statusCode,
|
|
|
|
|
apiResponse.message,
|
|
|
|
|
response
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-13 17:05:50 -06:00
|
|
|
private static getRecordValueByType(recordValueItem: any): RecordValue<any> {
|
|
|
|
|
const type = RecordValueType[recordValueItem.type];
|
|
|
|
|
|
|
|
|
|
switch (type) {
|
|
|
|
|
case RecordValueType.String: {
|
|
|
|
|
return new StringRecordValue(
|
|
|
|
|
recordValueItem.fieldId,
|
|
|
|
|
recordValueItem.value
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
case RecordValueType.Integer: {
|
|
|
|
|
return new IntegerRecordValue(
|
|
|
|
|
recordValueItem.fieldId,
|
|
|
|
|
recordValueItem.value
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
case RecordValueType.Decimal: {
|
|
|
|
|
return new DecimalRecordValue(
|
|
|
|
|
recordValueItem.fieldId,
|
|
|
|
|
recordValueItem.value
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
case RecordValueType.Date: {
|
|
|
|
|
const date = new Date(recordValueItem.value);
|
|
|
|
|
return new DateRecordValue(recordValueItem.fieldId, date);
|
|
|
|
|
}
|
|
|
|
|
case RecordValueType.TimeSpan: {
|
|
|
|
|
const timeSpan = ApiResponse.convertToTimeSpanData(
|
|
|
|
|
recordValueItem.value
|
|
|
|
|
);
|
|
|
|
|
return new TimeSpanRecordValue(recordValueItem.fieldId, timeSpan);
|
|
|
|
|
}
|
|
|
|
|
case RecordValueType.Guid: {
|
|
|
|
|
return new GuidRecordValue(
|
|
|
|
|
recordValueItem.fieldId,
|
|
|
|
|
recordValueItem.value
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
case RecordValueType.StringList: {
|
|
|
|
|
return new StringListRecordValue(
|
|
|
|
|
recordValueItem.fieldId,
|
|
|
|
|
recordValueItem.value
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
case RecordValueType.IntegerList: {
|
|
|
|
|
return new IntegerListRecordValue(
|
|
|
|
|
recordValueItem.fieldId,
|
|
|
|
|
recordValueItem.value
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
case RecordValueType.GuidList: {
|
|
|
|
|
return new GuidListRecordValue(
|
|
|
|
|
recordValueItem.fieldId,
|
|
|
|
|
recordValueItem.value
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
case RecordValueType.AttachmentList: {
|
|
|
|
|
const attachments = recordValueItem.value.map((attachmentItem: any) =>
|
|
|
|
|
ApiResponse.convertToAttachment(attachmentItem)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return new AttachmentListRecordValue(
|
|
|
|
|
recordValueItem.fieldId,
|
|
|
|
|
attachments
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
case RecordValueType.ScoringGroupList: {
|
|
|
|
|
const array = recordValueItem.value as any[];
|
|
|
|
|
const isDelegateList = array[0].delegateType !== undefined;
|
|
|
|
|
|
|
|
|
|
if (isDelegateList) {
|
|
|
|
|
const delegates = recordValueItem.value.map((delegateItem: any) =>
|
|
|
|
|
ApiResponse.convertToDelegate(delegateItem)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return new DelegateListRecordValue(
|
|
|
|
|
recordValueItem.fieldId,
|
|
|
|
|
delegates
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const scoringGroups = recordValueItem.value.map(
|
|
|
|
|
(scoringGroupItem: any) =>
|
|
|
|
|
ApiResponse.convertToScoringGroup(scoringGroupItem)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return new ScoringGroupListRecordValue(
|
|
|
|
|
recordValueItem.fieldId,
|
|
|
|
|
scoringGroups
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
case RecordValueType.FileList: {
|
|
|
|
|
return new FileListRecordValue(
|
|
|
|
|
recordValueItem.fieldId,
|
|
|
|
|
recordValueItem.value
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
default: {
|
|
|
|
|
throw new Error(
|
|
|
|
|
`Unknown record value type: ${recordValueItem.type as string}`
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-04 22:00:19 -06:00
|
|
|
/**
|
2023-02-13 17:05:50 -06:00
|
|
|
* @method getFieldByType - Converts the field item to the appropriate field object based upon the field item's type.
|
2023-02-08 23:44:18 -06:00
|
|
|
* @param {any} fieldItem - The field item to convert.
|
2023-02-04 22:00:19 -06:00
|
|
|
* @returns {Field} - The converted field object.
|
2023-02-10 00:49:50 -06:00
|
|
|
* @throws {Error} - If the field item's type is unknown.
|
2023-02-04 22:00:19 -06:00
|
|
|
*/
|
|
|
|
|
private static getFieldByType(fieldItem: any): Field {
|
2023-02-09 22:21:20 -06:00
|
|
|
const type = FieldType[fieldItem.type];
|
|
|
|
|
const status = FieldStatus[fieldItem.status];
|
|
|
|
|
|
2023-02-10 00:49:50 -06:00
|
|
|
if (type === undefined) {
|
|
|
|
|
throw new Error(`Unknown field type: ${fieldItem.type as string}`);
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-09 22:21:20 -06:00
|
|
|
switch (type) {
|
2023-02-04 22:00:19 -06:00
|
|
|
case FieldType.Reference: {
|
2023-02-09 22:21:20 -06:00
|
|
|
const multiplicity = Multiplicity[fieldItem.multiplicity];
|
|
|
|
|
|
2023-02-04 22:00:19 -06:00
|
|
|
return new ReferenceField(
|
|
|
|
|
fieldItem.id,
|
|
|
|
|
fieldItem.appId,
|
|
|
|
|
fieldItem.name,
|
2023-02-09 22:21:20 -06:00
|
|
|
type,
|
|
|
|
|
status,
|
2023-02-04 22:00:19 -06:00
|
|
|
fieldItem.isRequired,
|
|
|
|
|
fieldItem.isUnique,
|
2023-02-09 22:21:20 -06:00
|
|
|
multiplicity,
|
2023-02-04 22:00:19 -06:00
|
|
|
fieldItem.referencedAppId
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
case FieldType.List: {
|
|
|
|
|
const values = ApiResponse.getListValues(fieldItem);
|
2023-02-09 22:21:20 -06:00
|
|
|
const multiplicity = Multiplicity[fieldItem.multiplicity];
|
2023-02-04 22:00:19 -06:00
|
|
|
|
|
|
|
|
return new ListField(
|
|
|
|
|
fieldItem.id,
|
|
|
|
|
fieldItem.appId,
|
|
|
|
|
fieldItem.name,
|
2023-02-09 22:21:20 -06:00
|
|
|
type,
|
|
|
|
|
status,
|
2023-02-04 22:00:19 -06:00
|
|
|
fieldItem.isRequired,
|
|
|
|
|
fieldItem.isUnique,
|
2023-02-09 22:21:20 -06:00
|
|
|
multiplicity,
|
2023-02-04 22:00:19 -06:00
|
|
|
fieldItem.listId,
|
|
|
|
|
values
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
case FieldType.Formula: {
|
|
|
|
|
const values = ApiResponse.getListValues(fieldItem);
|
2023-02-09 22:21:20 -06:00
|
|
|
const outputType = FormulaOutputType[fieldItem.outputType];
|
2023-02-04 22:00:19 -06:00
|
|
|
|
|
|
|
|
return new FormulaField(
|
|
|
|
|
fieldItem.id,
|
|
|
|
|
fieldItem.appId,
|
|
|
|
|
fieldItem.name,
|
2023-02-09 22:21:20 -06:00
|
|
|
type,
|
|
|
|
|
status,
|
2023-02-04 22:00:19 -06:00
|
|
|
fieldItem.isRequired,
|
|
|
|
|
fieldItem.isUnique,
|
2023-02-09 22:21:20 -06:00
|
|
|
outputType,
|
2023-02-04 22:00:19 -06:00
|
|
|
values
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
default: {
|
|
|
|
|
return new Field(
|
|
|
|
|
fieldItem.id,
|
|
|
|
|
fieldItem.appId,
|
|
|
|
|
fieldItem.name,
|
2023-02-09 22:21:20 -06:00
|
|
|
type,
|
|
|
|
|
status,
|
2023-02-04 22:00:19 -06:00
|
|
|
fieldItem.isRequired,
|
|
|
|
|
fieldItem.isUnique
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-13 17:05:50 -06:00
|
|
|
private static convertToDelegate(delegateItem: any): Delegate {
|
|
|
|
|
const delegateType = DelegateType[delegateItem.delegateType];
|
|
|
|
|
|
|
|
|
|
if (delegateType === undefined) {
|
|
|
|
|
throw new Error(
|
|
|
|
|
`${delegateItem.delegateType as string} is not a valid DelegateType.`
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const delegationDateTime = new Date(delegateItem.delegationDateTime);
|
|
|
|
|
|
|
|
|
|
const hasName =
|
|
|
|
|
delegateItem.name !== null && delegateItem.name !== undefined;
|
|
|
|
|
const name = hasName ? delegateItem.name : null;
|
|
|
|
|
|
|
|
|
|
const hasCompletionDate =
|
|
|
|
|
delegateItem.delegationCompletedDateTime !== null &&
|
|
|
|
|
delegateItem.delegationCompletedDateTime !== undefined;
|
|
|
|
|
|
|
|
|
|
const delegationCompletedDateTime = hasCompletionDate
|
|
|
|
|
? new Date(delegateItem.delegationCompletedDateTime)
|
|
|
|
|
: null;
|
|
|
|
|
|
|
|
|
|
return new Delegate(
|
|
|
|
|
delegateItem.delegateType,
|
|
|
|
|
name,
|
|
|
|
|
delegateItem.emailAddress,
|
|
|
|
|
delegationDateTime,
|
|
|
|
|
delegationCompletedDateTime
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @method convertToScoringGroup - Converts the scoring group item to the appropriate scoring group object.
|
|
|
|
|
* @param {any} scoringGroupItem - The scoring group item to convert.
|
|
|
|
|
* @returns {ScoringGroup} - The converted scoring group object.
|
|
|
|
|
*/
|
|
|
|
|
private static convertToScoringGroup(scoringGroupItem: any): ScoringGroup {
|
|
|
|
|
return new ScoringGroup(
|
|
|
|
|
scoringGroupItem.id,
|
|
|
|
|
scoringGroupItem.name,
|
|
|
|
|
scoringGroupItem.score,
|
|
|
|
|
scoringGroupItem.maximumScore
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @method convertToAttachment - Converts the attachment item to the appropriate attachment object.
|
|
|
|
|
* @param {any} attachmentItem - The attachment item to convert.
|
|
|
|
|
* @returns {Attachment} - The converted attachment object.
|
|
|
|
|
*/
|
|
|
|
|
private static convertToAttachment(attachmentItem: any): Attachment {
|
|
|
|
|
const storageLocation = FileStorageSite[attachmentItem.storageLocation];
|
|
|
|
|
|
|
|
|
|
if (storageLocation === undefined) {
|
|
|
|
|
throw new Error(
|
|
|
|
|
`${
|
|
|
|
|
attachmentItem.storageLocation as string
|
|
|
|
|
} is not a valid FileStorageSite.`
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const hasNotes =
|
|
|
|
|
attachmentItem.notes !== null && attachmentItem.notes !== undefined;
|
|
|
|
|
|
|
|
|
|
const notes = hasNotes ? attachmentItem.notes : null;
|
|
|
|
|
|
|
|
|
|
return new Attachment(
|
|
|
|
|
attachmentItem.fileId,
|
|
|
|
|
attachmentItem.fileName,
|
|
|
|
|
notes,
|
|
|
|
|
storageLocation
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @method convertToTimeSpanData - Converts the time span item to the appropriate time span data object.
|
|
|
|
|
* @param {any} timeSpanItem - The time span item to convert.
|
|
|
|
|
* @returns {TimeSpanData} - The converted time span data object.
|
|
|
|
|
*/
|
|
|
|
|
private static convertToTimeSpanData(timeSpanItem: any): TimeSpanData {
|
|
|
|
|
const increment = TimeSpanIncrement[timeSpanItem.increment];
|
|
|
|
|
|
|
|
|
|
const hasRecurrence =
|
|
|
|
|
timeSpanItem.recurrence !== null && timeSpanItem.recurrence !== undefined;
|
|
|
|
|
|
|
|
|
|
const recurrene = hasRecurrence
|
|
|
|
|
? TimeSpanRecurrenceType[timeSpanItem.recurrence]
|
|
|
|
|
: null;
|
|
|
|
|
|
|
|
|
|
const hasEndAfterOccurrences =
|
|
|
|
|
timeSpanItem.endAfterOccurrences !== null &&
|
|
|
|
|
timeSpanItem.endAfterOccurrences !== undefined;
|
|
|
|
|
|
|
|
|
|
const endAfterOccurrences = hasEndAfterOccurrences
|
|
|
|
|
? timeSpanItem.endAfterOccurrences
|
|
|
|
|
: null;
|
|
|
|
|
|
|
|
|
|
const hasEndByDate =
|
|
|
|
|
timeSpanItem.endByDate !== null && timeSpanItem.endByDate !== undefined;
|
|
|
|
|
|
|
|
|
|
const endByDate = hasEndByDate ? new Date(timeSpanItem.endByDate) : null;
|
|
|
|
|
|
|
|
|
|
if (increment === undefined) {
|
|
|
|
|
throw new Error(
|
|
|
|
|
`${timeSpanItem.increment as string} is not a valid TimeSpanIncrement.`
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (recurrene === undefined) {
|
|
|
|
|
throw new Error(
|
|
|
|
|
`${
|
|
|
|
|
timeSpanItem.recurrence as string
|
|
|
|
|
} is not a valid TimeSpanRecurrenceType.`
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return new TimeSpanData(
|
|
|
|
|
timeSpanItem.quantity,
|
|
|
|
|
increment,
|
|
|
|
|
recurrene,
|
|
|
|
|
endAfterOccurrences,
|
|
|
|
|
endByDate
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-04 22:00:19 -06:00
|
|
|
/**
|
|
|
|
|
* @method getListValues - Converts the field items list values to a ListValue[].
|
|
|
|
|
* @param fieldItem - The field item whose values should be converted.
|
|
|
|
|
* @returns {ListValue[]} - The converted list values.
|
|
|
|
|
*/
|
|
|
|
|
private static getListValues(fieldItem: any): ListValue[] {
|
|
|
|
|
return fieldItem.values.map((listValue: any) => {
|
|
|
|
|
return new ListValue(
|
|
|
|
|
listValue.id,
|
|
|
|
|
listValue.name,
|
|
|
|
|
listValue.sortOrder,
|
|
|
|
|
listValue.numericValue,
|
|
|
|
|
listValue.color
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
}
|
2023-01-26 13:58:25 -06:00
|
|
|
}
|