Fix form keyboard issues and sticky footers in agent screens
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
import type { AxiosError } from 'axios';
|
||||
|
||||
import { appConfig } from '../../config/appConfig';
|
||||
import type { ApiError } from '../../types/api';
|
||||
import { sleep } from '../../utils/async';
|
||||
|
||||
const isApiError = (value: unknown): value is ApiError =>
|
||||
typeof value === 'object' &&
|
||||
value !== null &&
|
||||
'status' in value &&
|
||||
'message' in value;
|
||||
|
||||
export const toApiError = (error: unknown): ApiError => {
|
||||
if (isApiError(error)) {
|
||||
return error;
|
||||
}
|
||||
|
||||
const axiosError = error as AxiosError;
|
||||
|
||||
return {
|
||||
status: Number(axiosError.response?.status ?? 500),
|
||||
message: axiosError.message || 'Unexpected service error',
|
||||
data: axiosError.response?.data,
|
||||
};
|
||||
};
|
||||
|
||||
export const resolveWithMock = async <T>({
|
||||
mockData,
|
||||
request,
|
||||
delayMs = 320,
|
||||
}: {
|
||||
mockData: T | (() => T);
|
||||
request: () => Promise<T>;
|
||||
delayMs?: number;
|
||||
}): Promise<{ data: T } | { error: ApiError }> => {
|
||||
if (appConfig.features.useMockServer) {
|
||||
await sleep(delayMs);
|
||||
return {
|
||||
data: typeof mockData === 'function' ? (mockData as () => T)() : mockData,
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
return {
|
||||
data: await request(),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
error: toApiError(error),
|
||||
};
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user