Path: blob/1.0-develop/resources/scripts/api/definitions/helpers.ts
7461 views
import {1FractalPaginatedResponse,2FractalResponseData,3FractalResponseList,4getPaginationSet,5PaginatedResult,6} from '@/api/http';7import { Model } from '@definitions/index';89type TransformerFunc<T> = (callback: FractalResponseData) => T;1011const isList = (data: FractalResponseList | FractalResponseData): data is FractalResponseList => data.object === 'list';1213function transform<T, M>(data: null | undefined, transformer: TransformerFunc<T>, missing?: M): M;14function transform<T, M>(15data: FractalResponseData | null | undefined,16transformer: TransformerFunc<T>,17missing?: M18): T | M;19function transform<T, M>(20data: FractalResponseList | FractalPaginatedResponse | null | undefined,21transformer: TransformerFunc<T>,22missing?: M23): T[] | M;24function transform<T>(25data: FractalResponseData | FractalResponseList | FractalPaginatedResponse | null | undefined,26transformer: TransformerFunc<T>,27missing = undefined28) {29if (data === undefined || data === null) {30return missing;31}3233if (isList(data)) {34return data.data.map(transformer);35}3637if (!data || !data.attributes || data.object === 'null_resource') {38return missing;39}4041return transformer(data);42}4344function toPaginatedSet<T extends TransformerFunc<Model>>(45response: FractalPaginatedResponse,46transformer: T47): PaginatedResult<ReturnType<T>> {48return {49items: transform(response, transformer) as ReturnType<T>[],50pagination: getPaginationSet(response.meta.pagination),51};52}5354export { transform, toPaginatedSet };555657