@wordpress/components
Version:
UI components for WordPress.
155 lines • 5.07 kB
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;
export {};
//# sourceMappingURL=types.d.ts.map