datocms-plugin-sdk
Version:
95 lines (94 loc) • 3.54 kB
TypeScript
import type { SchemaTypes } from '@datocms/cma-client';
import { Ctx } from '../ctx/base';
import { ItemFormSidebarPanelPlacement } from '../shared';
type Field = SchemaTypes.Field;
type ItemType = SchemaTypes.ItemType;
export type OverrideFieldExtensionsHook = {
/**
* Use this function to automatically force one or more field extensions to a
* particular field
*
* @tag forcedFieldExtensions
*/
overrideFieldExtensions: (field: Field, ctx: OverrideFieldExtensionsCtx) => FieldExtensionOverride | undefined;
};
export type OverrideFieldExtensionsCtx = Ctx<{
itemType: ItemType;
}>;
/**
* An object expressing some field extensions you want to force on a particular
* field
*
* @see {isFieldExtensionOverride}
*/
export type FieldExtensionOverride = {
/** Force a field editor/sidebar extension on a field */
editor?: EditorOverride;
/** One or more field sidebar extensions to forcefully add to a field */
addons?: AddonOverride[];
};
/** A field editor/sidebar forced on a field */
export type EditorOverride = {
/**
* ID of field extension. Will be the first argument for the
* `renderFieldExtension` function
*/
id: string;
/**
* Moves the field to the sidebar of the record editing page, mimicking a
* sidebar panel
*/
asSidebarPanel?: boolean | {
startOpen?: boolean;
placement?: ItemFormSidebarPanelPlacement;
};
/**
* An arbitrary configuration object that will be passed as the `parameters`
* property of the second argument of the `renderFieldExtension` function
*/
parameters?: Record<string, unknown>;
/**
* If multiple plugins override a field, the one with the lowest `rank` will
* win. If you want to specify an explicit value for `rank`, make sure to
* offer a way for final users to customize it inside the plugin's settings
* form, otherwise the hardcoded value you choose might clash with the one of
* another plugin!
*/
rank?: number;
/**
* The initial height to set for the iframe that will render the field
* extension
*/
initialHeight?: number;
};
/** A field addon extension forced on a field */
export type AddonOverride = {
/**
* ID of field extension. Will be the first argument for the
* `renderFieldExtension` function
*/
id: string;
/**
* An arbitrary configuration object that will be passed as the `parameters`
* property of the second argument of the `renderFieldExtension` function
*/
parameters?: Record<string, unknown>;
/**
* If multiple addons are present for a field, they will be sorted by
* ascending `rank`. If you want to specify an explicit value for `rank`, make
* sure to offer a way for final users to customize it inside the plugin's
* settings form, otherwise the hardcoded value you choose might clash with
* the one of another plugin!
*/
rank?: number;
/**
* The initial height to set for the iframe that will render the field
* extension
*/
initialHeight?: number;
};
export declare function isFieldExtensionOverride(value: unknown): value is FieldExtensionOverride;
export declare function isEditorOverride(value: unknown): value is EditorOverride;
export declare function isAddonOverride(value: unknown): value is AddonOverride;
export declare function isReturnTypeOfOverrideFieldExtensionsHook(value: unknown): value is FieldExtensionOverride | undefined;
export {};