UNPKG

@3wks/generator-gae-node-nestjs

Version:

A generator for building nestjs apps on app engine node

88 lines (76 loc) 2.55 kB
// tslint:disable:no-console import { FORM_ERROR, FormApi } from 'final-form'; import * as _ from 'lodash'; import { showMessage } from '../components/Toast'; export function get<T, K extends keyof NonNullable<T>>( value: T, path: K, defaultValue: NonNullable<T>[K], ): NonNullable<T>[K]; export function get<T, K extends keyof NonNullable<T>, R extends NonNullable<T>[K] | undefined>( value: T, path: K, defaultValue: NonNullable<T>[K], ): NonNullable<T>[K]; export function get<T>(): 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<T, K extends keyof NonNullable<T>>(value: T, path: K): NonNullable<T>[K] | undefined; export function getN<T, K extends keyof NonNullable<T>, K1 extends keyof NonNullable<T>[K]>( value: T, path: K, path1: K1, ): NonNullable<NonNullable<T>[K]>[K1] | undefined; export function getN< T, K extends keyof NonNullable<T>, K1 extends keyof NonNullable<T>[K], K2 extends keyof NonNullable<NonNullable<T>[K]>[K1] >(value: T, path: K, path1: K1, path2: K2): NonNullable<NonNullable<NonNullable<T>[K]>[K1]>[K2] | undefined; export function getN<T>(): T { return get.apply(null, [...arguments, undefined] as any) as any; } export type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>; export type OneOrMany<T> = T | ReadonlyArray<T>; interface SafeSubmitOptions<R> { successMessage: string; onSuccess: (result: R, formApi: FormApi) => void; } type FormHandler<T> = (data: Partial<T>, formApi: FormApi) => Promise<any>; export function safeSubmit<T, R = {}>( handler: FormHandler<T>, config: Partial<SafeSubmitOptions<R>> = {}, ): FormHandler<T> { return async (data, api) => { try { const result = await handler(data, api); if (config.successMessage) { showMessage(config.successMessage, false); } 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'; } showMessage(message, true); return { [FORM_ERROR]: message, }; } }; }