app/src/data/apiDefinition.ts (114 lines of code) (raw):
import { getDemoApi } from '@epam/uui-docs';
import type { CommonContexts, UuiContexts, ITablePreset, IProcessRequest } from '@epam/uui-core';
import { TType, TTypeRef } from '@epam/uui-docs';
import { TDocsGenTypeSummary } from '../common/apiReference/types';
import { IUuiTokensCollection } from '../sandbox/tokens/palette/types/sharedTypes';
export const delay = (ms: number = 1): Promise<void> =>
new Promise((resolve) => {
setTimeout(resolve, ms);
});
export interface GetCodeParams {
path: string;
}
export interface GetCodeResponse {
filePath: string;
gitUrl: string;
raw: string;
highlighted: string;
}
interface GetApiParams {
processRequest: IProcessRequest;
origin?: string;
fetchOptions?: RequestInit;
}
export function getApi({
processRequest,
origin = '',
fetchOptions,
} : GetApiParams) {
const processRequestLocal: IProcessRequest = (url, method, data, options) => {
const opts = fetchOptions ? { fetchOptions, ...options } : options;
return processRequest(url, method, data, opts);
};
return {
demo: getDemoApi(processRequestLocal, origin),
form: {
validateForm: <FormState>(formState: FormState) =>
processRequestLocal(
origin.concat('/api/form/validate-form'),
'POST',
formState,
),
},
errors: {
status: (status: number) => processRequestLocal(origin.concat(`/api/error/status/${status}`), 'POST'),
setServerStatus: (status: number) => processRequestLocal(origin.concat(`/api//error/set-server-status/${status}`), "'POST'"),
mock: () => processRequestLocal(origin.concat('/api/error/mock'), 'GET'),
authLost: () => processRequestLocal(origin.concat('/api/error/auth-lost'), 'POST'),
},
getChangelog() {
return processRequestLocal(origin.concat('/api/get-changelog'), 'GET');
},
getCode(rq: GetCodeParams) {
return processRequestLocal<GetCodeResponse>(origin.concat('/api/get-code'), 'POST', rq);
},
getProps() {
return processRequestLocal(origin.concat('/api/get-props/'), 'GET');
},
getDocsGenType(shortRef: TTypeRef) {
const refEncoded = encodeURIComponent(shortRef);
return processRequestLocal<{ content: TType }>(origin.concat(`/api/docs-gen/details/${refEncoded}`), 'GET');
},
getDocsGenSummaries() {
return processRequestLocal<{ content: TDocsGenTypeSummary }>(origin.concat('/api/docs-gen/summaries'), 'GET');
},
getDocsGenExports() {
return processRequestLocal<{ content: Record<string, string[]> }>(origin.concat('/api/docs-gen/exports'), 'GET');
},
getThemeTokens() {
return processRequestLocal<{ content: IUuiTokensCollection['exposedTokens'] }>(origin.concat('/api/theme-tokens'), 'GET');
},
presets: {
async getPresets(): Promise<ITablePreset[]> {
await delay(500);
return Promise.resolve(JSON.parse(localStorage.getItem('presets')) ?? []);
},
async createPreset(preset: ITablePreset): Promise<number> {
await delay(500);
const presets = (JSON.parse(localStorage.getItem('presets')) ?? []) as ITablePreset[];
const newId = presets.length
? Math.max.apply(
null,
presets.map((p) => p.id),
) + 1
: 1;
preset.id = newId;
localStorage.setItem('presets', JSON.stringify([...presets, preset]));
return Promise.resolve(newId);
},
async updatePreset(preset: ITablePreset): Promise<void> {
await delay(500);
const presets = (JSON.parse(localStorage.getItem('presets')) ?? []) as ITablePreset[];
presets.splice(
presets.findIndex((p) => p.id === preset.id),
1,
preset,
);
localStorage.setItem('presets', JSON.stringify(presets));
return Promise.resolve();
},
async deletePreset(preset: ITablePreset): Promise<void> {
await delay(500);
const presets = (JSON.parse(localStorage.getItem('presets')) ?? []) as ITablePreset[];
presets.splice(
presets.findIndex((p) => p.id === preset.id),
1,
);
localStorage.setItem('presets', JSON.stringify(presets));
return Promise.resolve();
},
},
};
}
export type TApi = ReturnType<typeof getApi>;
export const svc: Partial<CommonContexts<TApi, UuiContexts>> = {};