import AJV , { ErrorObject } from 'ajv' ; import { JsonSchema , UISchemaElement } from '../models' ; import { generateDefaultUISchema , generateJsonSchema } from '../generators' ; import { RankedTester } from '../testers' ; import { UISchemaTester , ValidationMode } from '../reducers' ; import { ErrorTranslator , Translator } from '../i18n' ; export const INIT = 'jsonforms/INIT' ; export const UPDATE_CORE = `jsonforms/UPDATE_CORE` ; export const SET_AJV = 'jsonforms/SET_AJV' ; export const UPDATE_DATA = 'jsonforms/UPDATE' ; export const UPDATE_ERRORS = 'jsonforms/UPDATE_ERRORS' ; export const VALIDATE = 'jsonforms/VALIDATE' ; export const ADD_RENDERER = 'jsonforms/ADD_RENDERER' ; export const REMOVE_RENDERER = 'jsonforms/REMOVE_RENDERER' ; export const ADD_CELL = 'jsonforms/ADD_CELL' ; export const REMOVE_CELL = 'jsonforms/REMOVE_CELL' ; export const SET_CONFIG = 'jsonforms/SET_CONFIG' ; export const ADD_UI_SCHEMA = `jsonforms/ADD_UI_SCHEMA` ; export const REMOVE_UI_SCHEMA = `jsonforms/REMOVE_UI_SCHEMA` ; export const SET_SCHEMA = `jsonforms/SET_SCHEMA` ; export const SET_UISCHEMA = `jsonforms/SET_UISCHEMA` ; export const SET_VALIDATION_MODE = 'jsonforms/SET_VALIDATION_MODE' ; export const SET_LOCALE = `jsonforms/SET_LOCALE` ; export const SET_TRANSLATOR = 'jsonforms/SET_TRANSLATOR' ; export const UPDATE_I18N = 'jsonforms/UPDATE_I18N' ; export const ADD_DEFAULT_DATA = `jsonforms/ADD_DEFAULT_DATA` ; export const REMOVE_DEFAULT_DATA = `jsonforms/REMOVE_DEFAULT_DATA` ; export type CoreActions = InitAction | UpdateCoreAction | UpdateAction | UpdateErrorsAction | SetAjvAction | SetSchemaAction | SetUISchemaAction | SetValidationModeAction ; export interface UpdateAction { type : 'jsonforms/UPDATE' ; path : string ; updater ( existingData ? ) : any ; } export interface UpdateErrorsAction { type : 'jsonforms/UPDATE_ERRORS' ; errors : ErrorObject [ ] ; } export interface InitAction { type : 'jsonforms/INIT' ; data : any ; schema : JsonSchema ; uischema : UISchemaElement ; options ? : InitActionOptions | AJV ; } export interface UpdateCoreAction { type : 'jsonforms/UPDATE_CORE' ; data ? : any ; schema ? : JsonSchema ; uischema ? : UISchemaElement ; options ? : InitActionOptions | AJV ; } export interface InitActionOptions { ajv ? : AJV ; validationMode ? : ValidationMode ; } export interface SetValidationModeAction { type : 'jsonforms/SET_VALIDATION_MODE' ; validationMode : ValidationMode ; } export const init = ( data , schema = generateJsonSchema ( data ) , uischema ? , options ? ) => ( { type : INIT , data , schema , uischema : typeof uischema === 'object' ? uischema : generateDefaultUISchema ( schema ) , options } ) ; export const updateCore = ( data , schema , uischema ? , options ? ) : UpdateCoreAction => ( { type : UPDATE_CORE , data , schema , uischema , options } ) ; export interface RegisterDefaultDataAction { type : 'jsonforms/ADD_DEFAULT_DATA' ; schemaPath : string ; data : any ; } export const registerDefaultData = ( schemaPath , data ) => ( { type : ADD_DEFAULT_DATA , schemaPath , data } ) ; export interface UnregisterDefaultDataAction { type : 'jsonforms/REMOVE_DEFAULT_DATA' ; schemaPath : string ; } export const unregisterDefaultData = ( schemaPath ) => ( { type : REMOVE_DEFAULT_DATA , schemaPath } ) ; export interface SetAjvAction { type : 'jsonforms/SET_AJV' ; ajv : AJV ; } export const setAjv = ( ajv ) => ( { type : SET_AJV , ajv } ) ; export const update = ( path , updater ) : UpdateAction => ( { type : UPDATE_DATA , path , updater } ) ; export const updateErrors = ( errors ) : UpdateErrorsAction => ( { type : UPDATE_ERRORS , errors } ) ; export interface AddRendererAction { type : 'jsonforms/ADD_RENDERER' ; tester : RankedTester ; renderer : any ; } export const registerRenderer = ( tester , renderer ) => ( { type : ADD_RENDERER , tester , renderer } ) ; export interface AddCellRendererAction { type : 'jsonforms/ADD_CELL' ; tester : RankedTester ; cell : any ; } export const registerCell = ( tester , cell ) => ( { type : ADD_CELL , tester , cell } ) ; export interface RemoveCellRendererAction { type : 'jsonforms/REMOVE_CELL' ; tester : RankedTester ; cell : any ; } export const unregisterCell = ( tester , cell ) => ( { type : REMOVE_CELL , tester , cell } ) ; export interface RemoveRendererAction { type : 'jsonforms/REMOVE_RENDERER' ; tester : RankedTester ; renderer : any ; } export const unregisterRenderer = ( tester , renderer ) => ( { type : REMOVE_RENDERER , tester , renderer } ) ; export interface SetConfigAction { type : 'jsonforms/SET_CONFIG' ; config : any ; } export const setConfig = ( config ) : SetConfigAction => ( { type : SET_CONFIG , config } ) ; export const setValidationMode = ( validationMode ) : SetValidationModeAction => ( { type : SET_VALIDATION_MODE , validationMode } ) ; export type UISchemaActions = AddUISchemaAction | RemoveUISchemaAction ; export interface AddUISchemaAction { type : 'jsonforms/ADD_UI_SCHEMA' ; tester : UISchemaTester ; uischema : UISchemaElement ; } export const registerUISchema = ( tester , uischema ) : AddUISchemaAction => { return { type : ADD_UI_SCHEMA , tester , uischema } ; } ; export interface RemoveUISchemaAction { type : 'jsonforms/REMOVE_UI_SCHEMA' ; tester : UISchemaTester ; } export const unregisterUISchema = ( tester ) : RemoveUISchemaAction => { return { type : REMOVE_UI_SCHEMA , tester } ; } ; export type I18nActions = SetLocaleAction | SetTranslatorAction | UpdateI18nAction ; export interface SetLocaleAction { type : 'jsonforms/SET_LOCALE' ; locale : string | undefined ; } export const setLocale = ( locale ) : SetLocaleAction => ( { type : SET_LOCALE , locale } ) ; export interface SetSchemaAction { type : 'jsonforms/SET_SCHEMA' ; schema : JsonSchema ; } export const setSchema = ( schema ) : SetSchemaAction => ( { type : SET_SCHEMA , schema } ) ; export interface SetTranslatorAction { type : 'jsonforms/SET_TRANSLATOR' ; translator ? : Translator ; errorTranslator ? : ErrorTranslator ; } export const setTranslator = ( translator ? , errorTranslator ? ) : SetTranslatorAction => ( { type : SET_TRANSLATOR , translator , errorTranslator } ) ; export interface UpdateI18nAction { type : 'jsonforms/UPDATE_I18N' ; locale : string | undefined ; translator : Translator | undefined ; errorTranslator : ErrorTranslator | undefined ; } export const updateI18n = ( locale , translator , errorTranslator ) : UpdateI18nAction => ( { type : UPDATE_I18N , locale , translator , errorTranslator } ) ; export interface SetUISchemaAction { type : 'jsonforms/SET_UISCHEMA' ; uischema : UISchemaElement ; } export const setUISchema = ( uischema ) : SetUISchemaAction => ( { type : SET_UISCHEMA , uischema } ) ;