// tslint:disable:no-console import { FORM_ERROR, FormApi } from 'final-form'; import * as _ from 'lodash'; import { showErrorMessage, showMessage } from '../components/Toast'; export function get>( value: T, path: K, defaultValue: NonNullable[K], ): NonNullable[K]; // eslint-disable-next-line @typescript-eslint/no-unused-vars export function get, R extends NonNullable[K] | undefined>( value: T, path: K, defaultValue: NonNullable[K], ): NonNullable[K]; export function get(): T { let value = arguments[0]; for (let i = 0; i < arguments.length - 2; i++) { if (value === undefined || value === null) { return arguments[arguments.length - 1]; } value = value[arguments[i + 1]]; } return value; } export function getN>(value: T, path: K): NonNullable[K] | undefined; export function getN, K1 extends keyof NonNullable[K]>( value: T, path: K, path1: K1, ): NonNullable[K]>[K1] | undefined; export function getN< T, K extends keyof NonNullable, K1 extends keyof NonNullable[K], K2 extends keyof NonNullable[K]>[K1] >(value: T, path: K, path1: K1, path2: K2): NonNullable[K]>[K1]>[K2] | undefined; export function getN(): T { return get.apply(null, [...arguments, undefined] as any) as any; } export type Omit = Pick>; export type OneOrMany = T | T[]; export const asArray = (input: OneOrMany = []): T[] => (Array.isArray(input) ? input : [input]); interface SafeSubmitOptions { successMessage: string; onSuccess: (result: R, formApi: FormApi) => void; } type FormHandler = (data: Partial, formApi: FormApi) => Promise; export function safeSubmit( handler: FormHandler, config: Partial> = {}, ): FormHandler { return async (data, api) => { try { const result = await handler(data, api); if (config.successMessage) { showMessage(config.successMessage); } if (config.onSuccess) { console.log(api); config.onSuccess(result, api); } return result; } catch (ex) { let message: string; console.log(JSON.stringify(ex)); if (ex.graphQLErrors) { message = _.get(ex.graphQLErrors, [0, 'message'], 'Unexpected error submitting form'); } else { message = ex.message || 'Unexpected error submitting form'; } showErrorMessage(message); return { [FORM_ERROR]: message, }; } }; }