import type { SchemaTypes } from '@datocms/cma-client'; import { Ctx } from '../ctx/base'; import { MaybePromise } from '../utils'; type ItemUpdateSchema = SchemaTypes.ItemUpdateSchema; type ItemCreateSchema = SchemaTypes.ItemCreateSchema; export type OnBeforeItemUpsertHook = { /** * This hook is called when the user attempts to save a record. You can use it to block record saving. * * If you return `false`, the record will NOT be saved. A small on-page error will say "A plugin blocked the action". * However, for better UX, consider also using `ctx.alert()` to better explain to the user why their save was blocked. * * If you return `true`, the save will proceed as normal. * * This hook runs BEFORE serverside validation. You can use it to do your own additional validation before returning. * Clientside validations are not affected by this hook, since those occur on individual fields' `onBlur()` events. * * @tag beforeHooks */ onBeforeItemUpsert: ( createOrUpdateItemPayload: ItemUpdateSchema | ItemCreateSchema, ctx: OnBeforeItemUpsertCtx, ) => MaybePromise; }; export type OnBeforeItemUpsertCtx = Ctx< {}, { /** * Smoothly navigates to a specific field in the form. If the field is * localized it will switch language tab and then navigate to the chosen * field. * * @example * * ```js * const fieldPath = prompt( * 'Please insert the path of a field in the form', * ctx.fieldPath, * ); * * await ctx.scrollToField(fieldPath); * ``` */ scrollToField: (path: string, locale?: string) => Promise; } >;