datocms-plugin-sdk
Version:
42 lines (41 loc) • 1.69 kB
TypeScript
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<boolean>;
};
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<void>;
}>;
export {};