@wordpress/components
Version:
UI components for WordPress.
176 lines (163 loc) • 4.75 kB
text/typescript
/**
* Internal dependencies
*/
import type { FormTokenFieldProps } from '../form-token-field/types';
import type { TreeSelectProps } from '../tree-select/types';
export type Author = {
id: number;
name: string;
};
export type Category = {
id: number;
name: string;
parent: number;
};
export type TermWithParentAndChildren = {
id: string;
name: string;
parent: number | null;
children: TermWithParentAndChildren[];
};
export type TermsByParent = Record< string, TermWithParentAndChildren[] >;
export type CategorySelectProps = Pick<
TreeSelectProps,
'label' | 'noOptionLabel'
> & {
categoriesList: Category[];
onChange: ( newCategory: string ) => void;
selectedCategoryId?: Category[ 'id' ];
__next40pxDefaultSize: boolean;
};
export type AuthorSelectProps = Pick<
TreeSelectProps,
'label' | 'noOptionLabel'
> & {
authorList?: Author[];
onChange: ( newAuthor: string ) => void;
selectedAuthorId?: Author[ 'id' ];
__next40pxDefaultSize: boolean;
};
type Order = 'asc' | 'desc';
type OrderBy = 'date' | 'title' | 'menu_order';
export type OrderByOption = {
/**
* The label to be shown to the user.
*/
label: string;
/**
* Option value passed to `onChange` when the option is selected.
*/
value: `${ OrderBy }/${ Order }`;
};
type BaseQueryControlsProps = {
/**
* An array of the authors to select from.
*/
authorList?: AuthorSelectProps[ 'authorList' ];
/**
* The maximum number of items.
*
* @default 100
*/
maxItems?: number;
/**
* The minimum number of items.
*
* @default 1
*/
minItems?: number;
/**
* The selected number of items to retrieve via the query.
*/
numberOfItems?: number;
/**
* A function that receives the new author value.
* If not specified, the author controls are not rendered.
*/
onAuthorChange?: AuthorSelectProps[ 'onChange' ];
/**
* A function that receives the new number of items.
* If not specified, then the number of items
* range control is not rendered.
*/
onNumberOfItemsChange?: ( newNumber?: number ) => void;
/**
* A function that receives the new order value.
* If this prop or the `onOrderByChange` prop are not specified,
* then the order controls are not rendered.
*/
onOrderChange?: ( newOrder: Order ) => void;
/**
* A function that receives the new orderby value.
* If this prop or the `onOrderChange` prop are not specified,
* then the order controls are not rendered.
*/
onOrderByChange?: ( newOrderBy: OrderBy ) => void;
/**
* The order in which to retrieve posts.
*/
order?: Order;
/**
* The meta key by which to order posts.
*/
orderBy?: OrderBy;
/**
* List of available ordering options.
*/
orderByOptions?: OrderByOption[];
/**
* The selected author ID.
*/
selectedAuthorId?: AuthorSelectProps[ 'selectedAuthorId' ];
/**
* Start opting into the larger default height that will become the
* default size in a future version.
*
* @deprecated Default behavior since WP 6.7. Prop can be safely removed.
* @ignore
*/
__next40pxDefaultSize?: boolean;
};
export type QueryControlsWithSingleCategorySelectionProps =
BaseQueryControlsProps & {
/**
* An array of categories. When passed in conjunction with the
* `onCategoryChange` prop, it causes the component to render UI that allows
* selecting one category at a time.
*/
categoriesList?: CategorySelectProps[ 'categoriesList' ];
/**
* The selected category for the `categoriesList` prop.
*/
selectedCategoryId?: CategorySelectProps[ 'selectedCategoryId' ];
/**
* A function that receives the new category value. If not specified, the
* category controls are not rendered.
* The function's signature changes depending on whether multiple category
* selection is enabled or not.
*/
onCategoryChange?: CategorySelectProps[ 'onChange' ];
};
export type QueryControlsWithMultipleCategorySelectionProps =
BaseQueryControlsProps & {
/**
* An object of categories with the category name as the key. When passed in
* conjunction with the `onCategoryChange` prop, it causes the component to
* render UI that enables multiple selection.
*/
categorySuggestions?: Record< Category[ 'name' ], Category >;
/**
* The selected categories for the `categorySuggestions` prop.
*/
selectedCategories?: Category[];
/**
* A function that receives the new category value. If not specified, the
* category controls are not rendered.
* The function's signature changes depending on whether multiple category
* selection is enabled or not.
*/
onCategoryChange?: FormTokenFieldProps[ 'onChange' ];
};
export type QueryControlsProps =
| QueryControlsWithSingleCategorySelectionProps
| QueryControlsWithMultipleCategorySelectionProps;