Skip to main content

Schema Store (wc/store/schema)

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 the 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.

getRouteFromResourceEntries​

This will returns the route from the given slice of the route state.

Parameters​

  • stateSlice object: Slice of the route state from a given namespace and resource name.
  • ids array (default: []): An array of id references that are to be replaced in route placeholders.

Returns​

  • string: The route for the given resource entries, or an empty string if no route is found.

Example​

const store = select( SCHEMA_STORE_KEY );
const route = store.getRouteFromResourceEntries( stateSlice, ids );

assembleRouteWithPlaceholders​

This will return the assembled route with placeholders.

Parameters​

  • route string: The route to assemble.
  • routePlaceholders array: An array of route placeholders.
  • ids array: An array of id references that are to be replaced in route placeholders.

Returns​

  • string: The assembled route with placeholders replaced by actual values.

Example​

const store = select( SCHEMA_STORE_KEY );
const route = store.assembleRouteWithPlaceholders( route, routePlaceholders, ids );