@etsoo/materialui
Version:
TypeScript Material-UI Implementation
86 lines (85 loc) • 2.22 kB
TypeScript
import React from "react";
import { DataTypes, IdDefaultType, LabelDefaultType, ListType } from "@etsoo/shared";
import { SelectProps, SelectVariants } from "@mui/material/Select";
export type SelectExMethods = {
/**
* Set open state
* @param isOpen Open state
*/
setOpen: (isOpen: boolean) => void;
};
/**
* Extended select component props
*/
export type SelectExProps<T extends object, D extends DataTypes.Keys<T> = IdDefaultType<T>, L extends DataTypes.Keys<T, string> = LabelDefaultType<T>> = Omit<SelectProps, "labelId" | "input" | "native" | "variant"> & {
/**
* Auto add blank item
*/
autoAddBlankItem?: boolean;
/**
* The helper text content.
*/
helperText?: React.ReactNode;
/**
* Id field
*/
idField?: D;
/**
* Set 'data-reset'
*/
inputReset?: boolean;
/**
* Item icon renderer
*/
itemIconRenderer?: (id: T[D]) => React.ReactNode;
/**
* Item style
*/
itemStyle?: (option: T) => React.CSSProperties;
/**
* Label field
*/
labelField?: L | ((option: T) => string);
/**
* Load data callback
*/
loadData?: () => PromiseLike<T[] | null | undefined>;
/**
* Methods
*/
mRef?: React.Ref<SelectExMethods>;
/**
* Item change callback
*/
onItemChange?: (option: T | undefined, userAction: boolean) => void;
/**
* Item click handler
*/
onItemClick?: (event: React.MouseEvent, option: T) => void;
/**
* On load data handler
*/
onLoadData?: (options: T[]) => void;
/**
* Array of options.
*/
options?: ReadonlyArray<T>;
/**
* Supports refresh label or component
*/
refresh?: string | React.ReactNode;
/**
* Is search case?
*/
search?: boolean;
/**
* Variant
*/
variant?: SelectVariants;
};
/**
* Extended select component
* @param props Props
* @returns Component
*/
export declare function SelectEx<T extends object = ListType, D extends DataTypes.Keys<T> = IdDefaultType<T>, L extends DataTypes.Keys<T, string> = LabelDefaultType<T>>(props: SelectExProps<T, D, L>): import("react/jsx-runtime").JSX.Element;