Skip to content

Commit

Permalink
Right type annotations
Browse files Browse the repository at this point in the history
  • Loading branch information
ir4y committed Jan 31, 2020
1 parent 86d8ecd commit 0edeec5
Showing 1 changed file with 32 additions and 14 deletions.
46 changes: 32 additions & 14 deletions services/service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ import { AxiosRequestConfig } from 'axios';
import _ from 'lodash';
import { failure, isFailure, isSuccess, isSuccessAll, RemoteDataResult, success } from '../libs/remoteData';
import { axiosInstance } from './instance';
import { getFHIRResource } from './fhir';
import { User, Bundle } from 'src/contrib/aidbox';

export async function service<S = any, F = any>(config: AxiosRequestConfig): Promise<RemoteDataResult<S, F>> {
try {
Expand Down Expand Up @@ -76,13 +78,6 @@ export function sequenceArray<T, F>(remoteDataArray: Array<RemoteDataResult<T, F
);
}

export function sequenceMap<I, F>(remoteDataMap: RemoteDataResultMap<I, F>): RemoteDataResult<I, F[]> {
const keys = Object.keys(remoteDataMap);
const remoteDataArray = Object.values(remoteDataMap) as Array<RemoteDataResult<any>>;

return mapSuccess(sequenceArray(remoteDataArray), createKeysMapTransformer(keys));
}

export async function resolveArray<T, F>(
promiseArray: Array<Promise<RemoteDataResult<T, F>>>
): Promise<RemoteDataResult<T[], F[]>> {
Expand All @@ -91,14 +86,37 @@ export async function resolveArray<T, F>(
return sequenceArray(remoteDataResults);
}

export async function resolveMap<I, F>(
promiseMap: PromiseRemoteDataResultMap<I, F>
): Promise<RemoteDataResult<I, F[]>> {
const keys = Object.keys(promiseMap);
const remoteDataResults = (await Promise.all(Object.values(promiseMap))) as Array<RemoteDataResult<any>>;
const result = mapSuccess(sequenceArray(remoteDataResults), createKeysMapTransformer(keys));
export function sequenceMap<T, F>(
remoteDataMap: { [P in keyof T]: RemoteDataResult<T[P], F> }
): RemoteDataResult<{ [P in keyof T]: T[P] }, F[]> {
let result = <RemoteDataResult<{ [P in keyof T]: T[P] }, F[]>>{};
// ???
return result;
}

const m = { hello: success('hello'), world: success(1) };
const sm = sequenceMap(m);
if (isSuccess(sm)) {
sm.data.hello;
sm.data.world;
}

export async function resolveMap<T, F>(
remotePromiseMap: { [P in keyof T]: Promise<RemoteDataResult<T[P], F>> }
): Promise<RemoteDataResult<{ [P in keyof T]: T[P] }, F[]>> {
let result = <RemoteDataResult<{ [P in keyof T]: T[P] }, F[]>>{};
// ???
return result;
}

return Promise.resolve(result);
const pm = {
user: getFHIRResource<User>({ resourceType: 'User', id: '1' }),
bundle: getFHIRResource<Bundle<User>>({ resourceType: 'Bundle', id: '2' }),
};
const spm = await resolveMap(pm);
if (isSuccess(spm)) {
spm.data.user;
spm.data.bundle;
}

export async function resolveServiceMap<I, F>(
Expand Down

0 comments on commit 0edeec5

Please sign in to comment.