woocommerce/plugins/woocommerce-blocks/docs/third-party-developers/extensibility/data-store/schema.md

3.5 KiB

Schema Store (wc/store/schema)

Table of contents

Overview

The Schema Store manages the routes associated with WooCommerce Blocks, enabling efficient retrieval and updating of route data for a given namespace. This store streamlines the interaction with resource routes, ensuring that modules can easily access endpoint paths as needed.

Usage

To utilize this store you will import the SCHEMA_STORE_KEY in any module referencing it. Assuming @woocommerce/block-data is registered as an external pointing to wc.wcBlocksData you can import the key via:

const { SCHEMA_STORE_KEY } = window.wc.wcBlocksData;

Actions

⚠️ You should rarely need to use any of these actions directly as they are mostly used internally by the resolvers.

receiveRoutes( routes, namespace)

This returns an action object used to update the store with the provided list of resource routes.

Parameters

  • routes array: An array of routes attached for the given namespace, eg. [ '/wc/blocks/products', '/wc/blocks/products/attributes/(?P<id>[\d]+)' ].
  • namespace string: The namespace the routes belong to, eg. /wc/blocks.

Returns

  • object: An action object used to update the store with the provided list of resource routes with teh following keys:
    • type string: The action type.
    • routes object: An object of routes keyed by the route name.
    • namespace string: The namespace the routes belong to, eg. /wc/blocks.

Selectors

getRoute( state, namespace, resourceName, ids = [] )

This is used for retrieving a route for the given namespace, resource name and (if necessary) ids.

Parameters

  • state object: The original state.
  • namespace string: The namespace for the route, eg. /wc/blocks,
  • resourceName string: The resource being requested, eg. products/attributes/terms.
  • ids array: Only needed if the route has placeholders for ids.

Returns

  • string: The route if it is available.

Examples

If you are looking for a route for a single product on the wc/blocks namespace, then you'd have [ 20 ] as the ids:

// '/wc/blocks/products/20'
wp.data.select( SCHEMA_STORE_KEY ).getRoute( '/wc/blocks', 'products', [ 20 ] );

getRoutes( state, namespace )

This will return all the registered routes for the given namespace as a flat array.

Parameters

  • state object: The current state.
  • namespace string: The namespace to return routes for.

Returns

  • array: An array of all routes for the given namespace.

We're hiring! Come work with us!

🐞 Found a mistake, or have a suggestion? Leave feedback about this document here.