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

4.9 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 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 );

We're hiring! Come work with us!

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