UNPKG

@blinkk/selective-edit

Version:
188 lines (187 loc) 7.43 kB
import { DeepObject } from '../../utility/deepObject'; import { Field, FieldComponent, FieldConfig } from '../field'; import { GlobalConfig, SelectiveEditor } from '../editor'; import { SortableFieldComponent } from '../../mixins/sortable'; import { TemplateResult } from 'lit-html'; import { Actions } from '../../utility/actions'; import { Base } from '../../mixins'; import { FieldsComponent } from '../fields'; import { PreviewTypes } from '../../utility/preview'; import { Types } from '../types'; export interface ListFieldConfig extends FieldConfig { /** * Label for adding more list items. */ addLabel?: string; /** * Label for when the list is empty. */ emptyLabel?: string; /** * Are the fields complex? * * When set to true, the list will not use the 'Simple' mode * for showing list items when there is only one field configured * in the fields config. */ isComplex?: boolean; /** * Field definitions for each item in the list. */ fields?: Array<FieldConfig>; /** * Preview field key. * * When showing a preview of the list items, use this key to determine * the value to show for the preview. */ previewField?: string; /** * Preview field keys. * * When showing a preview of the list items, use these keys to determine * the value to show for the preview. */ previewFields?: Array<string>; /** * Control how the editor displays the preview for the list items. */ previewType?: PreviewTypes; } export interface ListFieldComponent extends FieldComponent { /** * Allow simple display for fields in the list. * * For complex fields it is better to not allow the simple view * since it makes the list crowded and hard to read. (ex: media field) */ allowSimple: boolean; /** * Can the list add more items? */ allowAdd?: boolean; /** * Can the list remove items? */ allowRemove?: boolean; /** * Handle adding a new item to the list. * @param evt Event triggering the add. * @param editor Editor instance. * @param data Data object. */ handleAddItem(evt: Event, editor: SelectiveEditor, data: DeepObject): void; /** * Event handler for deleting items. * * @param evt Click event from delete action. * @param index Item index being deleted. */ handleDeleteItem(evt: Event, index: number): void; /** * Number of items in the list. */ length: number; } export interface ListItemComponent { listField: ListFieldComponent & SortableFieldComponent; fields: FieldsComponent; /** * Event handler for hovering off an item. * * @param evt Event from mouse action. * @param index Item index. */ handleHoverOffItem(evt: MouseEvent, index: number): void; /** * Event handler for hovering over an item. * * @param evt Event from mouse action. * @param index Item index. */ handleHoverOnItem(evt: MouseEvent, index: number): void; isExpanded: boolean; template: (editor: SelectiveEditor, data: DeepObject, index: number) => TemplateResult; uid: string; } export interface ListItemConstructor { new (listField: ListFieldComponent & SortableFieldComponent, fields: FieldsComponent): ListItemComponent; } declare const ListField_base: { new (...args: any[]): { _sortableUi?: import("../../mixins/sortable").SortableUiComponent | undefined; sortableUi: import("../../mixins/sortable").SortableUiComponent; }; } & typeof Field; export declare class ListField extends ListField_base implements ListFieldComponent { config: ListFieldConfig; protected items: Array<ListItemComponent> | null; protected ListItemCls: ListItemConstructor; usingAutoFields: boolean; constructor(types: Types, config: ListFieldConfig, globalConfig: GlobalConfig, fieldType?: string); get allowAdd(): boolean; get allowRemove(): boolean; /** * Does the list allow for showing simple fields? */ get allowSimple(): boolean; protected createFields(fieldConfigs: Array<any>): FieldsComponent; protected ensureItems(editor: SelectiveEditor): Array<ListItemComponent>; handleAddItem(evt: Event, editor: SelectiveEditor, data: DeepObject): void; handleDeleteItem(evt: Event, index: number): void; handleSort(startIndex: number, endIndex: number): void; get isClean(): boolean; /** * Check if the data format is invalid for what the field expects to edit. */ get isDataFormatValid(): boolean; get isValid(): boolean; /** * Length of the list. */ get length(): number; templateEmpty(editor: SelectiveEditor, data: DeepObject, index: number): TemplateResult; templateFooter(editor: SelectiveEditor, data: DeepObject): TemplateResult; templateHeader(editor: SelectiveEditor, data: DeepObject): TemplateResult; templateInput(editor: SelectiveEditor, data: DeepObject): TemplateResult; get value(): any; } declare const ListFieldItem_base: { new (...args: any[]): { _uuid?: string | undefined; readonly uuid: string; readonly uid: string; }; } & typeof Base; export declare class ListFieldItem extends ListFieldItem_base implements ListItemComponent { listField: ListFieldComponent & SortableFieldComponent; fields: FieldsComponent; isExpanded: boolean; constructor(listField: ListFieldComponent & SortableFieldComponent, fields: FieldsComponent); actionsCollapsedPre(editor: SelectiveEditor, data: DeepObject, index: number): Actions; actionsCollapsedPost(editor: SelectiveEditor, data: DeepObject, index: number): Actions; actionsExpandedPre(editor: SelectiveEditor, data: DeepObject, index: number): Actions; actionsExpandedPost(editor: SelectiveEditor, data: DeepObject, index: number): Actions; actionsSimplePre(editor: SelectiveEditor, data: DeepObject, index: number): Actions; actionsSimplePost(editor: SelectiveEditor, data: DeepObject, index: number): Actions; classesCollpased(editor: SelectiveEditor, data: DeepObject, index: number): Record<string, boolean>; classesExpanded(editor: SelectiveEditor, data: DeepObject, index: number): Record<string, boolean>; classesSimple(editor: SelectiveEditor, data: DeepObject, index: number): Record<string, boolean>; handleCollapseItem(): void; handleExpandItem(): void; handleHoverOffItem(evt: MouseEvent, index: number): void; handleHoverOnItem(evt: MouseEvent, index: number): void; template(editor: SelectiveEditor, data: DeepObject, index: number): TemplateResult; templateCollapsed(editor: SelectiveEditor, data: DeepObject, index: number): TemplateResult; templateExpanded(editor: SelectiveEditor, data: DeepObject, index: number): TemplateResult; /** * Template for how to render a preview. * * @param editor Selective editor used to render the template. * @param data Data provided to render the template. */ templatePreviewValue(editor: SelectiveEditor, data: DeepObject, index?: number): TemplateResult; templateRemove(editor: SelectiveEditor, data: DeepObject, index: number): TemplateResult; templateSimple(editor: SelectiveEditor, data: DeepObject, index: number): TemplateResult; } export {};