<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Karamoulas Eleftherios</title>
    <description>The latest articles on DEV Community by Karamoulas Eleftherios (@karlef).</description>
    <link>https://dev.to/karlef</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F982394%2F0b104376-282a-48f7-ab96-49f8423ecd32.png</url>
      <title>DEV Community: Karamoulas Eleftherios</title>
      <link>https://dev.to/karlef</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/karlef"/>
    <language>en</language>
    <item>
      <title>Content SaaS | How to configure and use Resource Bundles</title>
      <dc:creator>Karamoulas Eleftherios</dc:creator>
      <pubDate>Mon, 22 May 2023 14:40:45 +0000</pubDate>
      <link>https://dev.to/bloomreach/content-saas-how-to-configure-and-use-resource-bundles-2c07</link>
      <guid>https://dev.to/bloomreach/content-saas-how-to-configure-and-use-resource-bundles-2c07</guid>
      <description>&lt;p&gt;Bloomreach Content is a powerful Software-as-a-Service (SaaS) solution that allows businesses to create, manage, and deliver digital content across multiple channels. Resource bundles are an important aspect of Bloomreach Content that enable users to easily manage localised content and translations for different regions and languages.&lt;/p&gt;

&lt;p&gt;The use case of resource bundles is the localisation of labels that are reused frequently across your site. For example, unique texts in the header and footer, button labels, common component texts etc. The question at hand is how to make the resource bundles available to the frontend application in a headless implementation.&lt;/p&gt;

&lt;p&gt;In this blog, we will showcase two solutions with their respective configurations, coding examples, and pros and cons.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solution 1: Developer configurable Channel property in combination with an SPA provider component
&lt;/h2&gt;

&lt;p&gt;In this approach, we define a new channel property (eg. rbPath) that will contain the absolute content path to the resource bundle (it can also be a comma-separated list if multiple is necessary). The frontend will utilise the document delivery API to retrieve and store the resource bundles. Below we provide implementation examples in React and Vue of such services.&lt;/p&gt;

&lt;p&gt;Note: the implementation examples assume a single resource bundle is configured.&lt;/p&gt;

&lt;p&gt;Adding the channel property can be achieved either via the site development tool (see screenshots below) or via the site management API as described &lt;a href="https://documentation.bloomreach.com/content/reference/putchannelparameterinfo"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zJvtbO_V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ktmrtr758lovlw46lopb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zJvtbO_V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ktmrtr758lovlw46lopb.png" alt="Channel tabs" width="800" height="797"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WnL0T_aS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v51bs4el8s6x7nc5ossw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WnL0T_aS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v51bs4el8s6x7nc5ossw.png" alt="Channel properties" width="800" height="411"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KiNBz_ST--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xcgk96ygc3cfadkuard7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KiNBz_ST--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xcgk96ygc3cfadkuard7.png" alt="Add new property" width="800" height="775"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9a9p5YTu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4ts6vpkz7s2vtuzkassc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9a9p5YTu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4ts6vpkz7s2vtuzkassc.png" alt="Channel property values" width="800" height="197"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is an example response of the content delivery API for a resource bundle&lt;br&gt;
eg.https://{client}.bloomreach.io/delivery/site/v1/channels/{channel}/documents/{path-to-rb-document}&lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;Important:&lt;/strong&gt;&lt;/u&gt; Remember to change the &lt;code&gt;{client}&lt;/code&gt;, &lt;code&gt;{channel}&lt;/code&gt; and &lt;code&gt;{path-to-rb-document}&lt;/code&gt; with the right values for you. The same applies to the provided URLs in the code snippets below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"meta"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="nl"&gt;"product"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"brx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="nl"&gt;"branch"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"master"&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"document"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="nl"&gt;"$ref"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/content/u3e27f53db63b4a76a7912a1896acd157"&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="nl"&gt;"u3e27f53db63b4a76a7912a1896acd157"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"document"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"links"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="nl"&gt;"site"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"unknown"&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"meta"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"site-labels"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="nl"&gt;"displayName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Site labels"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="nl"&gt;"stateSummary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"live"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="nl"&gt;"messages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="s2"&gt;"Test"&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="nl"&gt;"keys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="s2"&gt;"test"&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3e27f53d-b63b-4a76-a791-2a1896acd157"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="nl"&gt;"state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"published"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="nl"&gt;"valueSets"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
           &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"[default]"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
           &lt;/span&gt;&lt;span class="nl"&gt;"messages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
             &lt;/span&gt;&lt;span class="s2"&gt;"Test"&lt;/span&gt;&lt;span class="w"&gt;
           &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
           &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"en"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
           &lt;/span&gt;&lt;span class="nl"&gt;"messages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
             &lt;/span&gt;&lt;span class="s2"&gt;"Test EN"&lt;/span&gt;&lt;span class="w"&gt;
           &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
           &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"nl"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
           &lt;/span&gt;&lt;span class="nl"&gt;"messages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
             &lt;/span&gt;&lt;span class="s2"&gt;"Test NL"&lt;/span&gt;&lt;span class="w"&gt;
           &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="nl"&gt;"localeString"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="nl"&gt;"contentType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"resourcebundle:resourcebundle"&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  React example code - Provider/Consumer
&lt;/h2&gt;

&lt;p&gt;In React, we can have an implementation leveraging the &lt;a href="https://react.dev/learn/passing-data-deeply-with-context"&gt;Context provider/consumer&lt;/a&gt; functionality.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;RBContext.tsx&lt;/code&gt; is our frontend component responsible for fetching and providing the resource bundle document&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;RBContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;rbMap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;locale&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;en&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//'this should be dynamic based on how your SPA handles the locale'&lt;/span&gt;
 &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rbpath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rbPath&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

 &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;
   &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`https://{client}.bloomreach.io/delivery/site/v1/channels/{channel}/documents&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;rbpath&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

 &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$ref&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;?.[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;
 &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;keys&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;valueSets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;valueSets&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

 &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;valueSet&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;valueSets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;some&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kd"&gt;set&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;set&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="nx"&gt;valueSet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;valueSets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;find&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kd"&gt;set&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;set&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="nx"&gt;valueSet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;valueSets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;find&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="na"&gt;set&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;set&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;[default]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;

 &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rbMap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
 &lt;span class="nx"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;rbMap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;valueSet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
 &lt;span class="p"&gt;});&lt;/span&gt;

 &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;rbMap&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;RBProvider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setData&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

 &lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;rbMap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
     &lt;span class="nx"&gt;setData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="p"&gt;})()&lt;/span&gt;
 &lt;span class="p"&gt;},[])&lt;/span&gt;


 &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
   &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;RBContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Provider&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
     &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/RBContext.Provider&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In &lt;code&gt;App.tsx&lt;/code&gt; we should wrap our application with the &lt;code&gt;RBProvider&lt;/code&gt; component and pass to it the page context.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;BrPage&lt;/span&gt; &lt;span class="nx"&gt;configuration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;configuration&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;httpClient&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt; &lt;span class="nx"&gt;mapping&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;mapping&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;BrPageContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Consumer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="p"&gt;{(&lt;/span&gt;&lt;span class="nx"&gt;contextPage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
     &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;RBProvider&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;contextPage&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;//Rest of App&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/RBProvider&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;   &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="err"&gt;}
&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/BrPageContext.Consumer&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/BrPage&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In any of your components where you want to retrieve and use a label&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;valueSet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;useContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;RBContext&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;valueSet&lt;/span&gt;&lt;span class="p"&gt;?.[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;test&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;&lt;span class="c1"&gt;//where test is the key&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Vue example code - Provide/Inject
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;RBContext.vue&lt;/code&gt; is our frontend component responsible for fetching and providing the resource bundle document&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;template&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;slot&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
 &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/template&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt; &lt;span class="nx"&gt;lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Page&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@bloomreach/spa-sdk&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Prop&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Vue&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;nuxt-property-decorator&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
 &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;RBContext&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="nx"&gt;provide&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="na"&gt;rbMap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rbMap&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
 &lt;span class="p"&gt;},&lt;/span&gt;
 &lt;span class="na"&gt;computed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nx"&gt;rbMap&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;locale&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;en&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//'this should be dynamic based on how your SPA handles the locale'&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rbpath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rbPath&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;
       &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`https://{client}.bloomreach.io/delivery/site/v1/channels/{channel}/documents&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;rbpath&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
       &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
       &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$ref&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;?.[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;keys&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;valueSets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;valueSets&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

     &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;valueSet&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;valueSets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;set&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;set&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="nx"&gt;valueSet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;valueSets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;set&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;set&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
     &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="nx"&gt;valueSet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;valueSets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;set&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;set&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;[default]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
     &lt;span class="p"&gt;}&lt;/span&gt;

     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rbMap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
     &lt;span class="nx"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;rbMap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;valueSet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
     &lt;span class="p"&gt;});&lt;/span&gt;

     &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;rbMap&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
 &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;RBContext&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Vue&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Prop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Page&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nl"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In your &lt;code&gt;_.vue&lt;/code&gt; file the template should look something like the following example.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Important:&lt;/u&gt;&lt;/strong&gt; the component &lt;code&gt;r-b-context&lt;/code&gt; should be within the &lt;code&gt;br-page&lt;/code&gt; component and include the rest application structure so that we can use the &lt;a href="https://vuejs.org/guide/components/provide-inject.html"&gt;provide/inject&lt;/a&gt; functionality of Vue.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;template&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;br&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;configuration &amp;amp;&amp;amp; page&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;configuration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;configuration&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;mapping&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mapping&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;page&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;template&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;props&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
     &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;template&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;props.page&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
       &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;page&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
         &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;br&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;component&lt;/span&gt; &lt;span class="nx"&gt;component&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;header&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
         &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;br&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;component&lt;/span&gt; &lt;span class="nx"&gt;component&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;main&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
           &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;template&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;slot&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{ component, page }&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
         &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/br-component&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;         &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;br&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;component&lt;/span&gt; &lt;span class="nx"&gt;component&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;footer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
       &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/r-b-context&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;     &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/template&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;   &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/template&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/br-page&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/template&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In your template use the valueSet map like below&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{{&lt;/span&gt;&lt;span class="nx"&gt;valueSet&lt;/span&gt;&lt;span class="p"&gt;?.[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;test&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]}}&lt;/span&gt; &lt;span class="c1"&gt;//where 'test' is the key&lt;/span&gt;
&lt;span class="nx"&gt;In&lt;/span&gt; &lt;span class="nx"&gt;your&lt;/span&gt; &lt;span class="nx"&gt;component&lt;/span&gt; &lt;span class="nx"&gt;configuration&lt;/span&gt; &lt;span class="nx"&gt;have&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;inject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="nx"&gt;and&lt;/span&gt; &lt;span class="nx"&gt;mounted&lt;/span&gt; &lt;span class="nx"&gt;defined&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;follows&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
 &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;HomepageBanner&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="na"&gt;inject&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;rbMap&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
 &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="na"&gt;valueSet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="p"&gt;};&lt;/span&gt;
 &lt;span class="p"&gt;},&lt;/span&gt;
 &lt;span class="na"&gt;computed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{...},&lt;/span&gt;
 &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nx"&gt;mounted&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;valueSet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rbMap&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Solution 2: Page layout root component with a SPA provider component
&lt;/h2&gt;

&lt;p&gt;An alternative solution to the first approach is to make the resource bundle document(s) part of the page model API response directly.&lt;/p&gt;

&lt;p&gt;For the above, all the page layouts will require a root component (via inheritance and explicitly) that contributes the configured resource bundle to the API response. As a static component, the document(s) can only be configured by site developers. The resource bundle component will have to have the rest of the page structure below it. This hierarchy is required so that the frontend functionality can work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5ZdjROi---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0rd2f7m8yzsl8mr5pog8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5ZdjROi---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0rd2f7m8yzsl8mr5pog8.png" alt="Base layout with rbcontext component" width="800" height="411"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OlMbgyNx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9gbacskg1lx105fakc0f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OlMbgyNx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9gbacskg1lx105fakc0f.png" alt="Two-column layout with rbcontext component" width="800" height="411"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TYIIGJJj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nm3u0kukslzeh3xc1mdv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TYIIGJJj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nm3u0kukslzeh3xc1mdv.png" alt="rbcontext component definition" width="800" height="725"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y_C7kNrE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q6el0w1b2kbdajaq4ici.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y_C7kNrE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q6el0w1b2kbdajaq4ici.png" alt="Document parameter configuration" width="800" height="827"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The frontend implementation though similar would have to change slightly. Now the RBContext component won’t read the data from the Content delivery API but instead from the component itself that is part of the page structure. The rest functionality of parsing the retrieved resource bundle document and providing it for consumption (React) or injection (Vue) will remain the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation remarks
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Any type of async functionality has to be done outside the rendering of components to HTML if you want to support SSR. Getting the valueSet on the server side and setting it as a value in the provider/context directly.&lt;/li&gt;
&lt;li&gt;We advise building in some caching mechanism that allows you to only request the translation once per session or something like that. Usually, translations can be requested per page, but once requested they could simply be saved in memory instead of re-requesting it on every page load as a user is navigating through the app.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Solution 1&lt;br&gt;
+ smaller payload of initial page load&lt;br&gt;
+ easier maintainable configuration&lt;br&gt;
- requires extra call(s) to retrieve the configured resource bundles&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Solution 2&lt;br&gt;
+ no extra calls necessary&lt;br&gt;
- due to how translations are usually quite static the request can not be cached this way as it is always part of the page&lt;br&gt;
- the response payload will be bigger as the resource bundle component and the document(s) will always be part of the API response&lt;br&gt;
- it is a more complicated setup&lt;br&gt;
- configuring more than one resource bundles will be an extra configuration overhead&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>bloomreach</category>
      <category>saas</category>
      <category>resourcebundles</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Content-SaaS | DAM Integration with Frontify</title>
      <dc:creator>Karamoulas Eleftherios</dc:creator>
      <pubDate>Mon, 08 May 2023 09:36:44 +0000</pubDate>
      <link>https://dev.to/bloomreach/content-saas-dam-integration-with-frontify-acc</link>
      <guid>https://dev.to/bloomreach/content-saas-dam-integration-with-frontify-acc</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Bloomreach's &lt;a href="https://documentation.bloomreach.com/content/docs/integrations-library"&gt;Integrations Library&lt;/a&gt; is a powerful feature that enables seamless integration of various third-party tools and services with Bloomreach Content. With this feature, businesses can easily extend the capabilities of their Content platform by integrating it with other essential services such as marketing automation tools, customer data platforms (CDP), customer relationship management (CRM) systems, social media platforms, and more.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.frontify.com/en/"&gt;Frontify&lt;/a&gt; is a powerful digital asset management solution that enables organisations to streamline their content creation and management processes. Integrating with Frontify can bring many benefits to businesses, such as centralised access to digital assets, optimised content management processes, and improved overall productivity.&lt;/p&gt;

&lt;p&gt;In the following example, we will show you how the Frontify integration works from a functional point of view and how to install this as a developer in your instance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;Installing the Frontify integration can be achieved in two ways.&lt;/p&gt;

&lt;p&gt;The first option is to visit the &lt;a href="https://marketplace.bloomreach.works/integration/frontify"&gt;Content integrations marketplace&lt;/a&gt; and click the “Install” button in the top right corner. You will have to follow the instructions and provide some necessary information like your domain, a valid API key, and the necessary integration configuration.&lt;/p&gt;

&lt;p&gt;The second option is a manual installation that can be achieved either via the UI as shown in the image below. Navigate to Setup &amp;gt; Integrations. Select Add Custom Integration and fill in the necessary data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Cij0S122--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g4u5sdr8a3qsdkyy9fvz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Cij0S122--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g4u5sdr8a3qsdkyy9fvz.png" alt="Configuration integration" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Name:&lt;/code&gt; Frontify&lt;br&gt;
&lt;code&gt;Description (optional):&lt;/code&gt; Frontify is a cloud-based brand management platform that enables organisations to manage their brand assets, guidelines, and content in a centralised location.&lt;br&gt;
&lt;code&gt;Logo (optional):&lt;/code&gt; click and copy from the expandable&lt;br&gt;

  base64 image
  &lt;code&gt;data:image/png;base64,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&lt;/code&gt;

&lt;br&gt;
&lt;code&gt;Application URL: https://content-frontify-ui-extension.vercel.app&lt;/code&gt;&lt;br&gt;
In the configuration you must specify if the select mode is single or multiple and provide your client id.&lt;br&gt;
&lt;code&gt;Configuration:{"allowMultiSelect":false,"clientId":"your-client-id"}&lt;/code&gt;&lt;br&gt;
&lt;code&gt;Height (in pixels, optional): 200&lt;/code&gt;&lt;br&gt;
Don’t forget to add the CSP property and refresh the window before it takes effect.&lt;br&gt;
&lt;code&gt;frame-src: https://content-frontify-ui-extension.vercel.app&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Alternatively, you can add this integration to your instance by utilising the &lt;a href="https://documentation.bloomreach.com/content/reference/content-integrations-management-api"&gt;Content Integrations Management API&lt;/a&gt;.&lt;br&gt;
Below is a JSON snippet you can use to add the integration.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;u&gt;Note: Don’t forget to update the configuration object according to your requirements and the client id.&lt;/u&gt;&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"frontify"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"displayName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Frontify"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://content-frontify-ui-extension.vercel.app"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"config"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;allowMultiSelect&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:false,&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;clientId&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;client-id&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"extensionPoint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"document.field"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"height"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Frontify is a cloud-based brand management platform that enables organizations to manage their brand assets, guidelines, and content in a centralized location."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"logo"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"package"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"connect-src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"frame-ancestors"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"frame-src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"https://content-frontify-ui-extension.vercel.app"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"img-src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"script-src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"style-src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"font-src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"media-src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Open UI String Field
&lt;/h2&gt;

&lt;p&gt;An Open UI String field uses the document field extension point to display a custom field type. When the Frontify integration is available, document editors can add an Open UI String field to the desired document type and link it to the integration, using the UI extension drop-down. Details on how to configure the field are documented &lt;a href="https://documentation.bloomreach.com/content/reference/content-type-fields#openuiextension"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The String field stores the assets object as received from the Frontify finder. The specifications of those structures are documented &lt;a href="https://developer.frontify.com/d/XFPCrGNrXQQM/finder#/details-and-concepts/asset"&gt;here&lt;/a&gt;. All the fields can be retrieved and mapped in your frontend application wherever a document or component is integrated with Frontify.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Check out the demo video and the screenshots below to see the Frontify integration in action.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/sjY2VF3Vhvg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Screenshots
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_EDkGHH_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xkxk7de6hf7xc06si1gy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_EDkGHH_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xkxk7de6hf7xc06si1gy.png" alt="Document editor with frontify selector field" width="800" height="343"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--K-Mu9jiS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kx290qiw13jg6xy0yibq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--K-Mu9jiS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kx290qiw13jg6xy0yibq.png" alt="Frontify finder" width="800" height="412"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RMEotj4q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/34u33637ndlvl0fau9fv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RMEotj4q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/34u33637ndlvl0fau9fv.png" alt="Document editor with selected image" width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>bloomreach</category>
      <category>saas</category>
      <category>integratio</category>
      <category>frontify</category>
    </item>
  </channel>
</rss>
