UNPKG

@nu-art/db-api-generator

Version:
81 lines (80 loc) 3.19 kB
import { Adapter, ComponentSync, TS_DropDown } from '@nu-art/thunderstorm/frontend'; import { DB_Object, Default_UniqueKey, Filter, PreDB } from '@nu-art/ts-common'; import * as React from 'react'; import { ModuleFE_BaseApi } from '../../modules/ModuleFE_BaseApi'; type OptionalCanUnselect<T> = ({ canUnselect: true; onSelected: (selected?: T) => void; } | { canUnselect?: false; onSelected: (selected: T) => void; }); type OptionalProps_GenericDropDown<T> = { placeholder?: string; mapper?: (item: T) => string[]; renderer?: (item: T) => React.ReactElement; queryFilter?: (item: T) => boolean; ifNoneShowAll?: boolean; sortBy?: (keyof T)[] | ((item: T) => string | number); className?: string; caret?: { open: React.ReactNode; close: React.ReactNode; }; renderSearch?: (dropDown: TS_DropDown<T>) => React.ReactNode; limitItems?: number; noOptionsRenderer?: React.ReactNode | (() => React.ReactNode); disabled?: boolean; }; export type PartialProps_GenericDropDown<T> = OptionalProps_GenericDropDown<T> & { onNoMatchingSelectionForString?: (filterText: string, matchingItems: T[], e: React.KeyboardEvent) => any; boundingParentSelector?: string; inputValue?: string; selected?: T | string | (() => T | undefined); limitItems?: number; itemResolver?: () => T[]; } & OptionalCanUnselect<T>; export type MandatoryProps_GenericDropDown<T extends DB_Object, Ks extends keyof PreDB<T> = Default_UniqueKey> = OptionalProps_GenericDropDown<T> & { placeholder: string; module: ModuleFE_BaseApi<T, Ks>; modules: ModuleFE_BaseApi<DB_Object, any>[]; mapper: (item: T) => string[]; renderer: (item: T) => React.ReactElement; }; type GenericDropDownProps<T, Ks> = { placeholder?: string; mapper: (item: T) => string[]; renderer: (item: T) => React.ReactElement; queryFilter?: (item: T) => boolean; ifNoneShowAll?: boolean; sortBy?: (keyof T)[] | ((item: T) => string | number); className?: string; caret?: { open: React.ReactNode; close: React.ReactNode; }; renderSearch?: (dropDown: TS_DropDown<T>) => React.ReactNode; selected?: T | string | (() => T | undefined); inputValue?: string; onNoMatchingSelectionForString?: (filterText: string, matchingItems: T[], e: React.KeyboardEvent) => any; modules: ModuleFE_BaseApi<DB_Object, any>[]; boundingParentSelector?: string; limitItems?: number; disabled?: boolean; itemResolver?: () => T[]; } & OptionalCanUnselect<T>; export type Props_GenericDropDown<T extends DB_Object, Ks extends keyof PreDB<T> = Default_UniqueKey> = { module: ModuleFE_BaseApi<T, Ks>; } & GenericDropDownProps<T, Ks>; type State<T extends DB_Object> = { items: T[]; selected?: T; filter: Filter<T>; adapter: Adapter<T>; }; export declare class GenericDropDown<T extends DB_Object, Ks extends keyof PreDB<T> = Default_UniqueKey> extends ComponentSync<Props_GenericDropDown<T, Ks>, State<T>> { protected deriveStateFromProps(nextProps: Props_GenericDropDown<T, Ks>): State<T>; private getSelected; render(): JSX.Element; } export {};