@nu-art/db-api-generator
Version:
db-api-generator
81 lines (80 loc) • 3.19 kB
TypeScript
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 {};