diff --git a/types/wordpress__blocks/index.d.ts b/types/wordpress__blocks/index.d.ts index 51601c1e9c26b8..81f08d541a174d 100644 --- a/types/wordpress__blocks/index.d.ts +++ b/types/wordpress__blocks/index.d.ts @@ -1,5 +1,5 @@ import { IconType } from "@wordpress/components"; -import { StoreDescriptor } from "@wordpress/data"; +import { ReduxStoreConfig, StoreDescriptor } from "@wordpress/data"; import { ShortcodeMatch } from "@wordpress/shortcode"; import { ComponentType, ReactElement } from "react"; @@ -7,11 +7,24 @@ export * from "./api"; export { withBlockContentContext } from "./block-content-provider"; declare module "@wordpress/data" { + /** + * @deprecated Use the version that takes a store descriptor object instead + */ function dispatch(key: "core/blocks"): typeof import("./store/actions"); + /** + * @deprecated Use the version that takes a store descriptor object instead + */ function select(key: "core/blocks"): typeof import("./store/selectors"); } -export interface BlocksStoreDescriptor extends StoreDescriptor { +type Decurry any }> = { + [key in keyof S]: (state: any, ...args: Parameters) => ReturnType; +}; +export interface BlocksStoreDescriptor extends + StoreDescriptor< + ReduxStoreConfig> + > +{ name: "core/blocks"; } diff --git a/types/wordpress__blocks/wordpress__blocks-tests.tsx b/types/wordpress__blocks/wordpress__blocks-tests.tsx index b9863663530dba..2d1ce9a7291c60 100644 --- a/types/wordpress__blocks/wordpress__blocks-tests.tsx +++ b/types/wordpress__blocks/wordpress__blocks-tests.tsx @@ -721,3 +721,28 @@ dispatch("core/blocks").addBlockStyles("my/foo", { name: "foo__bar", label: "Foo // $ExpectType void dispatch("core/blocks").setDefaultBlockName("my/foo"); + +// +// store objects +// ---------------------------------------------------------------------------- + +// $ExpectType readonly BlockStyle[] | undefined +select(blocks.store).getBlockStyles("my/foo"); + +// $ExpectType string | undefined +select(blocks.store).getFreeformFallbackBlockName(); + +// $ExpectType string | undefined +select(blocks.store).getUnregisteredFallbackBlockName(); + +// $ExpectType boolean +select(blocks.store).isMatchingSearchTerm("my/foo", "foo"); + +// $ExpectType boolean +select(blocks.store).isMatchingSearchTerm(BLOCK, "foo"); + +// $ExpectType Promise +dispatch(blocks.store).addBlockStyles("my/foo", { name: "foo__bar", label: "Foobar" }); + +// $ExpectType Promise +dispatch(blocks.store).setDefaultBlockName("my/foo");