Feat: Allow plugins to register functions to handle GraphQL transformation of catalog product media items #4988
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Resolves #4987
Impact: minor
Type: feature
Issue
Currently, all media is assumed to be hosted within Reaction's database. There is a core transformation function -
xformProductMedia
- that is called from within several GraphQL resolvers -Cart.items
,OrderFulfillmentGroup.items
,CatalogProduct.media
,CatalogProduct.primaryImage
, andCatalogProduct.variants
. Because this function is hard-coded within the resolvers, it makes it difficult to override with a custom media transformation function, which is the case when media is hosted elsewhere (Cloudinary for example).Solution
This PR replaces direct calls to
xformProductMedia
in GraphQL resolvers withgetFunctionsOfType("xformCatalogProductMedia")
. This allows any plugin to register a function that can transform a media object for a catalog product. It also renamesxformProductMedia
toxformFileCollectionsProductMedia
, moves it to the corefiles
plugin, and registers it via a new register.js file in that plugin.Breaking changes
None
Testing
/imports/plugins/custom