UNPKG

fox-block-builder

Version:

Maintainable code for loop slack-block-kit-like modal builder

135 lines (134 loc) 5.46 kB
import type { ButtonBuilder, ChannelMultiSelectBuilder, ChannelSelectBuilder, CheckboxesBuilder, DatePickerBuilder, DateTimePickerBuilder, ExternalMultiSelectBuilder, ExternalSelectBuilder, FileInputBuilder, RadioButtonsBuilder, StaticMultiSelectBuilder, StaticSelectBuilder, TextInputBuilder, TimePickerBuilder, UserMultiSelectBuilder, UserSelectBuilder } from '../../elements'; import type { DividerBuilder, HeaderBuilder, InputBuilder, SectionBuilder } from '../../blocks'; import { EmailInputBuilder, NumberInputBuilder, URLInputBuilder } from '../../elements'; import { DirectorySelectBuilder } from '../../elements/directory-select'; import { OneSSelectBuilder } from '../../elements/one-s-select'; import { IPluginModalMeta } from '../../plugin/modal/plugin-modal-meta.builder'; import { ImageSelectBuilder } from '../../elements/image-select'; import { DateRangePickerBuilder } from '../../elements/date-range-picker'; import { DirectoryName } from '../../directory'; import { AddableInputBuilder } from '../../elements/addable-input'; import { Prop } from '../constants'; export * from './modal.types'; export * from './plugin.types'; export type SectionElementBuilder = ButtonBuilder; export type InputElementBuilder = ChannelMultiSelectBuilder | ChannelSelectBuilder | CheckboxesBuilder | DatePickerBuilder | DateTimePickerBuilder | EmailInputBuilder | ExternalMultiSelectBuilder | ExternalSelectBuilder | NumberInputBuilder | RadioButtonsBuilder | StaticMultiSelectBuilder | StaticSelectBuilder | TextInputBuilder | TimePickerBuilder | URLInputBuilder | UserMultiSelectBuilder | UserSelectBuilder | FileInputBuilder /** Новые виды */ | DirectorySelectBuilder | OneSSelectBuilder | ImageSelectBuilder | DateRangePickerBuilder | AddableInputBuilder; export type BlockBuilder = DividerBuilder | HeaderBuilder | InputBuilder | SectionBuilder; export type ViewBlockBuilder = BlockBuilder; export type FilterString = 'im' | 'mpim' | 'private' | 'public'; export type OneSSelectType = 'position' | 'depts'; export type YearSinceType = 'single' | 'double'; export interface ObjectLiteral { [key: string]: any; } export type Ctor<T = Record<string, unknown>> = new (...args: any[]) => T; export type AbstractCtor<T> = { prototype: T; }; export type Undefinable<T> = T | undefined; export type Nullable<T> = T | null; export type Settable<T> = Undefinable<T>; export type UndefinableArray<T> = Undefinable<T>[]; export type Appendable<T> = UndefinableArray<T | UndefinableArray<T>>; export type Fn<T, R> = (arg: T) => R; export type BlockBuilderReturnableFn<T> = Fn<T, Appendable<BlockBuilder>>; export type StringReturnableFn<T> = Fn<T, string>; export type YearSinceParams = { /** Год, с которого начать */ since: number; /** флажок заполнения одним числом (2020) или двумя (2020-2021) */ type?: 'single' | 'double'; }; export type DirectoryParams = { type: 'name'; name: DirectoryName; [Prop.HintField]?: number; } | { type: 'api'; key: number; parentKeys?: number[] | 'all'; [Prop.HintField]?: number; }; export type OffsetParams = { /** Оффсет относительно сегодня */ offset: number; /** Учитывать только рабочие дни */ business?: boolean; }; export type AnalyticsParams = { /** ID аналитики */ analyticId: number; /** ID поля аналитики */ fieldId: number; /** ID лейбла аналитики */ labelId?: number; /** Значения по значениям другого блока */ refs?: { blockId: string; value: string; field?: number; }[]; }; export type OnChangeNavigate = { type: 'url'; url: string; } | { type: 'modal'; name: string; }; export type OnChangeModal = { /** Заголовок */ title?: string; /** markdown */ text?: string; okText?: string; closeText?: string; /** Отправка при сабмите */ submit: boolean; /** Отправка на произвольный эндпоинт */ external?: { data?: any; url: string; }; }; export type OnChangeSubmitParams = { type: 'submit'; submit: boolean; navigate?: OnChangeNavigate; clearHistory?: boolean; metadata?: IPluginModalMeta; }; export type OnChangeModalParams = { type: 'modal'; navigate?: OnChangeNavigate; clearHistory?: boolean; url?: string; metadata?: IPluginModalMeta; modal: OnChangeModal; }; export type OnChangeParams = OnChangeSubmitParams | OnChangeModalParams; export type OnSelectParams = OnChangeParams; export type TImageSelectVariant = 'select' | 'popover'; export type TRegExpParams = { regExp: RegExp; message?: string; }; export type OffsetRangeParams = { /** Оффсет относительно сегодня */ offsetMin: number; /** Оффсет относительно сегодня */ offsetMax: number; /** Учитывать только рабочие дни */ business?: boolean; }; export type MultiBlockParams = { blocks: BlockBuilder[]; /** Оффсет относительно сегодня */ offsetMin: number; /** Оффсет относительно сегодня */ offsetMax: number; /** Учитывать только рабочие дни */ business?: boolean; };