UNPKG

fox-block-builder

Version:

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

199 lines (198 loc) 7.14 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'; import { AxiosRequestConfig } from 'axios'; 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 ElementTeamParams = { type: 'current'; } | { type: 'all'; } | { type: 'id'; id: string; }; export type FetchValuesParams = { url: string; config?: AxiosRequestConfig; }; 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 InitialUserEmail = { type: 'email'; email: string; }; export type InitialUserId = { type: 'id'; id: string; }; export type InitialUserUsername = { type: 'username'; username: string; }; export type InitialUserParams = InitialUserEmail | InitialUserId | InitialUserUsername; export type DirectoryNameParams = { type: 'name'; name: DirectoryName; [Prop.HintField]?: number; /** Включить в ответ подразделы с key */ includeKeys?: number[]; /** Не включать в ответ подразделы с key */ removeKeys?: number[]; }; export type DirectoryApiParams = { type: 'api'; id: number; parentKey?: number; /** Включить в ответ подразделы с key */ includeKeys?: number[]; /** Не включать в ответ подразделы с key */ removeKeys?: number[]; onlyEntries?: boolean; /** Взять parentKey из другого блока */ parentKeyBlockId?: string; [Prop.HintField]?: number; }; export type DirectoryParams = DirectoryNameParams | DirectoryApiParams; export type OffsetParams = { /** Оффсет относительно сегодня */ offset: number; /** Учитывать только рабочие дни */ business?: boolean; }; export type DatePickerPickerParams = { type: 'date'; /** DD.MM.YYYY */ start?: string; /** DD.MM.YYYY */ end?: string; multi?: boolean; } | { type: 'year'; /** Показать как {год} - {год + 1} */ double?: boolean; /** YYYY */ start?: string; /** YYYY */ end?: string; /** Флаг, что можно выбирать год в будущем */ allowFuture?: boolean; multi?: boolean; } | { type: 'month'; /** Показать как {месяц} - {след. месяц} */ double?: boolean; /** '0'-'11' */ start?: string; /** '0'-'11' */ end?: string; multi?: 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; }; export type MaxDateRangeParams = { type: 'days' | 'months' | 'years' | 'ms'; length: number; };