<?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: ksalic</title>
    <description>The latest articles on DEV Community by ksalic (@ksalic).</description>
    <link>https://dev.to/ksalic</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%2F946531%2Fa18cda88-8202-4885-a448-ab3e786630e0.png</url>
      <title>DEV Community: ksalic</title>
      <link>https://dev.to/ksalic</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ksalic"/>
    <language>en</language>
    <item>
      <title>Content SaaS | Integration with Youtube</title>
      <dc:creator>ksalic</dc:creator>
      <pubDate>Mon, 14 Nov 2022 09:08:55 +0000</pubDate>
      <link>https://dev.to/bloomreach/content-saas-integration-with-youtube-2onh</link>
      <guid>https://dev.to/bloomreach/content-saas-integration-with-youtube-2onh</guid>
      <description>&lt;p&gt;Recently Bloomreach Content (SaaS) released a feature, &lt;a href="https://documentation.bloomreach.com/content/docs/integrations-library"&gt;Integrations Library - UI Extensions&lt;/a&gt;. By using this feature, you can add your document field extensions as a custom integration. This opens up new possibilities to create content-type fields of your own.&lt;/p&gt;

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

&lt;p&gt;When the Youtube integration is enabled in your Bloomreach Content SaaS channel you can add a component and browse through the youtube video catalog. Free text search is available to filter the results and with the returned results, whenever you hover over the thumbnail you will see a video preview. Click on the video element to add the youtube video link to your page.&lt;/p&gt;

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

&lt;p&gt;The integration can also be configured to &lt;strong&gt;only&lt;/strong&gt; show videos from a particular youtube channel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing the Youtube integration as a Developer
&lt;/h2&gt;

&lt;p&gt;When adding the custom integration through the "integrations" dashboard make sure to add the following parameters:&lt;/p&gt;

&lt;p&gt;Application URL: &lt;code&gt;https://youtube-integration.bloomreach.works/&lt;/code&gt;&lt;br&gt;
Configuration: &lt;code&gt;{"apiKey":"[youtube-api-key]"}&lt;/code&gt;&lt;br&gt;
Height: &lt;code&gt;170&lt;/code&gt;&lt;br&gt;
CSP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;frame-src:["youtube-integration.bloomreach.works","www.youtube.com"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KuWz_XAC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mw4huwbcm2xybye1i5z3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KuWz_XAC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mw4huwbcm2xybye1i5z3.png" alt="Image description" width="880" height="691"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Configure the integration to allow browsing through a single youtube channel:
&lt;/h4&gt;

&lt;p&gt;Configuration: &lt;code&gt;{"apiKey":"[youtube-api-key]", "channelId" : "[your-channel-id]"}&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  OpenUI String field
&lt;/h4&gt;

&lt;p&gt;An Open UI String field uses the document field extension point to display a custom field type.&lt;br&gt;
When a Youtube 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 like below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gVaS7Ucs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1fbuufskepicyuvtaj27.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gVaS7Ucs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1fbuufskepicyuvtaj27.png" alt="Image description" width="880" height="819"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the Open UI String field is correctly configured, editors are able to include Youtube videos directly within the document or component field group.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Content SaaS | DAM Integration with Brandfolder</title>
      <dc:creator>ksalic</dc:creator>
      <pubDate>Wed, 19 Oct 2022 09:06:05 +0000</pubDate>
      <link>https://dev.to/bloomreach/content-saas-dam-integration-with-brandfolder-2egf</link>
      <guid>https://dev.to/bloomreach/content-saas-dam-integration-with-brandfolder-2egf</guid>
      <description>&lt;p&gt;Recently Bloomreach Content SaaS released the feature: “Integrations Library”, in which integrations with 3rd party vendors such as DAM systems can be achieved using a built-in App framework. With the release of Custom integrations, you will be able to integrate, for example, with Brandfolder DAM in a self-service manner. Look at our Documentation pages dedicated to the &lt;a href="https://documentation.bloomreach.com/content/docs/integrations-library"&gt;Integrations Library&lt;/a&gt; to learn more. &lt;/p&gt;

&lt;p&gt;Brandfolder is one of our preferred DAM systems and a strong technology partner. With the Brandfolder integration, content editors can seamlessly search and select assets from Brandfolder DAM to a website managed by the Bloomreach Experience Manager. This will save you time and demonstrate the flexibility of Bloomreach Content’s out-of-the-box integrations with more integrations to come. &lt;/p&gt;

&lt;p&gt;Check out the demo to see the Brandfolder integration in action:&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Install Brandfolder DAM with the installer (developer):
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://content-tools.bloomreach.works/ui-extension-frame?uiExtension=%7B%22id%22%3A%22brandfolderdam%22%2C%22displayName%22%3A%22Brandfolder%20DAM%22%2C%22url%22%3A%22https%3A%2F%2Fcontent-integrations-brandfolder.bloomreach.works%22%2C%22config%22%3A%22%7B%5Cn%20%5C%22apiKey%5C%22%3A%5C%22eyJhbGciOiJIUzI1NiJ9.eyJvcmdhbml6YXRpb25fa2V5IjoiOTk1d3NwM2ZmajZrZnh0dzlnaDd0bjUiLCJ1c2VyX2tleSI6Ijl6dmZwcjdncHpzZnNnOHE1OHNyMyIsInN1cGVydXNlciI6ZmFsc2V9.2EDkaE3PosxXvtD0y6FtM3G_KjPI3GcO3keRKXG0Iw4%5C%22%2C%5Cn%5C%22dataMode%5C%22%3A%20%5C%22multiple%5C%22%5Cn%7D%22%2C%22extensionPoint%22%3A%22document.field%22%2C%22height%22%3A105%2C%22description%22%3A%22The%20%231%20Digital%20Asset%20Management%20platform%20for%20Tech%20Companies.%20Manage%20and%20distribute%20all%20of%20your%20brand%27s%20assets%20and%20maintain%20brand%20consistency%20as%20your%20products%20rapidly%20evolve.%22%2C%22logo%22%3A%22data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAACAAAAAeCAMAAAB61OwbAAAABGdBTUEAALGPC%2FxhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABdFBMVEUAAABA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fVA0fX%2F%2F%2F%2BJqsMUAAAAenRSTlMAAPz%2B7C%2FuMPvh3d%2F54zYbKdIcBQoMDQkCDsweibjEycrCrH4DEBXX6XkIFNTgs7%2F2VJFEpY6cvZuqBDncX5%2Bw5PSS0U8G8fKKCx8iPPpiAY0tqxM96PiiY8vNGaidOJ6kxyvz3vDrQ8XYWxKEssDIu2kjHTQaGNvONeP%2BcqkAAAABYktHRHtP0rX8AAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH5gcTETckTaX7%2FAAAAV1JREFUKM%2BN0uk3AlEYBvB5FUYpWiYVyVJhKktEQtnKbmQnlLJv2bK8f707M52hztzyfJjlzG%2FuvHPuw9RpqkRbzzAarJKGxlpAXoFt0qlE36wAg7FFJa0mBejNIMVi5WxtdijF4fwF7QwJ1%2BHqdHd19%2FQaPSDeeyuBr680Wf8AD2rAH0AMDg5pEYdHqCBksY4GEcc8NBAmw40jTvDVQARxMkoHlqlpZGeoMwRi8Vmcm7dRgZSFxQQVJIOGJXJcXgEKiKyurcdY3NgUAGQA5WCL%2FIWfPHDxgrwXqQoQJmf7NqJpR9gN7SHuHxyqrHCEeOwV0ifiwG5jOTg1m88yLGI2CuDLavA8V%2FGJvO7ikrx3dQ2MKG5yACrbjbd3YiMA7kmR%2Fhbm4fGp4Cw8Z15eQWqMWCtGBm9yyTw85%2BASoISRIpb2vSgnLaZ0XfxIKIDVf6rkK6UA9eS%2Fa4DkP8EPdQDPKOh4ttgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDctMTlUMTc6NTU6MzUrMDA6MDCZmknIAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTA3LTE5VDE3OjU1OjM1KzAwOjAw6MfxdAAAAABJRU5ErkJggg%3D%3D%22%2C%22package%22%3Anull%2C%22connect-src%22%3A%5B%5D%2C%22frame-ancestors%22%3A%5B%5D%2C%22frame-src%22%3A%5B%22content-integrations-brandfolder.bloomreach.works%22%5D%2C%22img-src%22%3A%5B%5D%2C%22script-src%22%3A%5B%5D%2C%22style-src%22%3A%5B%5D%2C%22font-src%22%3A%5B%5D%7D&amp;amp;configForm=%7B%22type%22%3A%22object%22%2C%22properties%22%3A%7B%22apiKey%22%3A%7B%22type%22%3A%22string%22%2C%22description%22%3A%22insert%20the%20Brandfolder%20API%20key%22%7D%2C%22dataMode%22%3A%7B%22enum%22%3A%5B%22multiple%22%2C%22single%22%5D%2C%22default%22%3A%22multiple%22%2C%22type%22%3A%22string%22%7D%7D%2C%22required%22%3A%5B%22apiKey%22%2C%22dataMode%22%5D%7D"&gt;Click here for the installer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;See the following video on how to easily install the Brandfolder DAM:&lt;/p&gt;

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

&lt;p&gt;Integration checklist: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://documentation.bloomreach.com/content/reference/api-authorization"&gt;Make sure to have an API token&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://documentation.bloomreach.com/content/docs/development-environment#developer-workspace"&gt;Make sure a Developer Project with Content Type changes is open&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Content SaaS | Form Integrations</title>
      <dc:creator>ksalic</dc:creator>
      <pubDate>Mon, 17 Oct 2022 09:25:48 +0000</pubDate>
      <link>https://dev.to/bloomreach/content-saas-form-integrations-38cg</link>
      <guid>https://dev.to/bloomreach/content-saas-form-integrations-38cg</guid>
      <description>&lt;p&gt;Recently Bloomreach Content SaaS released the feature: &lt;a href="https://documentation.bloomreach.com/content/docs/integrations-library" rel="noopener noreferrer"&gt;“Integrations Library”&lt;/a&gt;, in which innovative content type fields can be built using a built-in App framework. With the release of Custom integrations, we will be able to integrate with (external) form solutions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google forms&lt;/li&gt;
&lt;li&gt;Jotform&lt;/li&gt;
&lt;li&gt;Forms.app&lt;/li&gt;
&lt;li&gt;Typeform&lt;/li&gt;
&lt;li&gt;&lt;a href="//#integrate-content-saas-with-Form.io"&gt;Form.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;How to get your frontend to render the Form&lt;/li&gt;
&lt;li&gt;Custom Frontend Forms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the upcoming sections you will learn how to integrate with each of the solutions mentioned above individually.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integrate Content SaaS with Google Forms
&lt;/h2&gt;

&lt;p&gt;To integrate with &lt;a href="https://www.google.nl/intl/en/forms/about/" rel="noopener noreferrer"&gt;Google Forms&lt;/a&gt; you will need to add the following &lt;strong&gt;UI extension&lt;/strong&gt; to a &lt;a href="https://documentation.bloomreach.com/content/docs/configure-a-custom-integration" rel="noopener noreferrer"&gt;Custom Integration&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "id": "googleforms",
  "displayName": "Google Forms",
  "url": "https://form-integration-googleforms.bloomreach.works",
  "config": "{\"apiKey\":\"123\", \"clientId\":\"456\"}",
  "extensionPoint": "document.field",
  "height": 80,
  "description": "Google Forms Integration",
  "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAdVBMVEUAAABqQL9ySbt0SLdqP61ySbpySLlqRKtVN4pySLhoQahWNopxR7hnQadyR7hxSLlpQqhxR7hrQ6xqQqpnQqhoQqdoQ6mTc8nc0e3VyOqKaMW0ndrKuuXn3/P////t6Pbe1O+egc/Br+BySbl0RrlySbl1SrWG8Ys8AAAAJ3RSTlMADDhANZP/22+f9v8k/1Nf9OLV6Pn97f///////////////1cssxgd1lquAAAAuklEQVR4Ae3SNQLDMBBEUbPDMTPT/W8YboyzYdI3qNKrhvuweEEcTqJdl5Wx1BkFmCujLZYEYaWMt14ShM00gIUtAICAACBgAAgYAAIGgIABIGAACBgAAgK0JRAQoC6BgADdMK31JdsxJADARAZ8AeB6fnA4wqgTGYiTxD8cXtKJDKRJkt0F5GnsHo7C68R2wHbAdsB2wHbAAAZcBZR0QBgEKjrAc4PVCjGZG64hCnOeG6sqt7DNivus9tWqVjv7KE1rAAAAAElFTkSuQmCC",
  "package": null,
  "connect-src": [],
  "frame-ancestors": [],
  "frame-src": [
    "form-integration-googleforms.bloomreach.works"
  ],
  "img-src": [],
  "script-src": [],
  "style-src": [],
  "font-src": [],
  "media-src": []
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Be aware that you will need to go to your Google Cloud Console to enable the Google Drive Picker in the API &amp;amp; Services and generate a Google Cloud apiKey and OAuth Client ID. When created add this to configuration of the UI extension (config element above). &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2cgq1dnbb0c8hhgvrngy.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2cgq1dnbb0c8hhgvrngy.JPG" alt="Google Picker API"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggnlauv2vr837vy0i4rq.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggnlauv2vr837vy0i4rq.JPG" alt="Google Cloud"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the UI extension is registered, make sure to add the UI extension to a content type and component.&lt;/p&gt;

&lt;p&gt;See the following demo how this can work in the Experience Manager:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/zFNwJeo-Eko"&gt;
&lt;/iframe&gt;
 &lt;/p&gt;
&lt;h2&gt;
  
  
  Integrate Content SaaS with Jotform
&lt;/h2&gt;

&lt;p&gt;To integrate with &lt;a href="https://www.jotform.com/nl/" rel="noopener noreferrer"&gt;Jotform&lt;/a&gt; you will need to add the following UI extension to a &lt;a href="https://documentation.bloomreach.com/content/docs/configure-a-custom-integration" rel="noopener noreferrer"&gt;Custom Integration&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "id": "jotform",
  "displayName": "Jotform",
  "url": "https://form-integration-jotform.bloomreach.works",
  "config": "{\"apiKey\": \"123\"}",
  "extensionPoint": "document.field",
  "height": 80,
  "description": "Jotform Integration",
  "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAMAAADQmBKKAAAA4VBMVEUAAAAAmf8Al/8JFVD/YgD/YAD/tyn/tSj/YQD/YgAAmf//YAD/YQD/YAD/YQAAlv//ryH/YAD/YAAAn/8KFVH/tikIEVD/sygAmv//tikAmf//tSn/YQD/YAD/YQD/tSr/tSgGFFAKFFEAmv8Amv//YAAAmP8Al/8KFVH/tioAmf//YAD/tSn/YAALFVL/tin/tykAmP//uCkAmP//YAD/syj/tSoAl/8LE1D/tigAmf//tSX/sDAQEFAJFVH/YQAKFVL/tioJFlD/tSkKFVAKFlD/uiX/YQAAmf//tikKFVERZpE6AAAAR3RSTlMA3yDfXxCfYM9/76DfgO8wEDAgEH/fICDPv4DPv0CvgIA3z7+fkHBA7++vn5BwX96wkG9fUEAwoJBfTzAREL+gn49vT6BQMKG90BwAAAOxSURBVHja7dmLUtpQFIXhFZoApWmlQUQoUBSBcvOu9W7VtiG8/wPVcWxTu8GTZBnZM+V/gm/2Ocw+GbBs2bKn9WoDazKZWO29Myy+Uq0wCbO2Mlhs3UdOWA0LrDSYyKzFDSljTWZVWAER6dEkCj1SRJ0a75G1wcR7ZF0Q8R5ZoYS0kx5FI/rt0XKL7j3mqDPjPTJy0fKeGDvNO7Rt+7DhpOmRbWF2jY7rP5Yfeyl7zKBG3X/S0OM9BMhp+qK3rIcAea4/o6ZDexJe6o8f/Jm5XgoeWc/kCcs7vMdcyegJ67yCpy09z9RgPeYO4nh8N3WPJTzPZ6fnkQOSHlk9Zc+W8JjyUvVYGeExNVbm8YfKPH5emcd3lXl8V5knMmilwHgakT1+/TU8th+9pjKPP1bm8T1lnrwyj28r87jKPL6tzNNR5skr87je0iOK9ZWYsXR5oM1TU+bJWLo8OFDmgaXMs6LMg25iz9tUPBgo86CtzIN1ZR5YyjxoK/PgqzIPuso86CnzAAVlHuyl66nH9SBj8KyXGM87xG9PmQclS5cH6CnzAF1lHqCmzAOcWRPZHumhyoidZvWwOI8krddKtIcnHQzWH2YzqPWAxXv+TrnHVubxXNJzvj/KVqvZ1lERL9I15Tke9YM/7Z6Cz2M8lWzwtB2edE149vuBKMsenJvc0wpmtVMBUyO5JxvIeNGY9sjKzKk1o3veGzxhNwSoTnjmd8SAeI+sTIAITyojaqbiCapIWofyzK/IrHreI7tDwpx0PEGLudW8R5Zlnme8R7ZLbFfGw//MZIeUh5+QrMl7ZCMC5Li0R3bKPfNZj+wnOJHZU4zlKYPLeSc5HxpPPJ+COH3G3DZuVzdgznb/4bx3CE9QwbxWp/ddXcLcYTPkuCFHeLgBbU8f2owigtMYd4bDYcf2gGQe86N6c/ooWkOMSE9wjLm9mT72Zu31PPswgEhRXM9nGECk6IbySBAr2uc8EkSKKmXOI0GkKEt6JIgTVeJ5cogICkUbiFWO85hB0y/xRFXWI0GciPZIECU65z0SJEU/ELU7wmMGhW0Td5rz3IMoUY72SBAlynEeMyjslrnU0sODpquIUJH2SBAnqrIeCeJELdYjQZzogvVIECnaJT0SRIoqfc4jQayoxXnkdxktqhIe2cnU1IbxXpcJj2jNCPqW9J3fP0aSTngQLrIv+TfdlSAkWLM5MaRWEbPiZ7QJkZnUH1VAtPZ97m/ty+olonbcqn66x5Sro6Mili37v/sFtkjVNRrxrTkAAAAASUVORK5CYII=",
  "package": null,
  "connect-src": [],
  "frame-ancestors": [],
  "frame-src": [
    "form-integration-jotform.bloomreach.works"
  ],
  "img-src": [],
  "script-src": [],
  "style-src": [],
  "font-src": [],
  "media-src": []
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep in mind that you will need to generate a Jotform apiKey. When created, add this to the configuration of the UI extension (config element above)&lt;/p&gt;

&lt;p&gt;Get a Jotform api key here: &lt;a href="https://www.jotform.com/myaccount/api" rel="noopener noreferrer"&gt;https://www.jotform.com/myaccount/api&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0wmcc649ov5c1e2u05a8.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0wmcc649ov5c1e2u05a8.JPG" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the UI extension is registered, make sure to add the UI extension to a content type and component.&lt;/p&gt;

&lt;p&gt;See the following demo of how this can work in the Experience Manager:&lt;/p&gt;

&lt;p&gt;{ % embed &lt;a href="https://www.youtube.com/watch?v=f0vz7-StAXw&amp;amp;list=PLL4MAGpY4oGKzfZATk173wKhLiFEUjcB-&amp;amp;index=5" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=f0vz7-StAXw&amp;amp;list=PLL4MAGpY4oGKzfZATk173wKhLiFEUjcB-&amp;amp;index=5&lt;/a&gt; %}&lt;/p&gt;

&lt;h2&gt;
  
  
  Integrate Content SaaS with Forms.app
&lt;/h2&gt;

&lt;p&gt;To integrate with Forms.app, you will need to add the following UI extension to a &lt;a href="https://documentation.bloomreach.com/content/docs/configure-a-custom-integration" rel="noopener noreferrer"&gt;Custom Integration&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "id": "formsapp",
  "displayName": "Forms.app",
  "url": "https://form-integration-formsapp.bloomreach.works",
  "config": "{\"token\":\"123\"}",
  "extensionPoint": "document.field",
  "height": 80,
  "description": "Forms.app Integration",
  "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAB0VBMVEUAAABDRl5CSGAIyugOvdoki6ZFQVkembUOvNkNvtsMwd4E0/FDRl5DRl5DRl5DRl5DRl5DRl5DRl5DRl5DRl5DRl5DRl5DRl5DRl5DRl5DRl5DRl5DRl5DRl5DRl4OvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdpERFw+UWkLw+AOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdo8VW4glLANv9wOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoPutcUsMwPvNkOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvtsOvtsOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdsOvdoOvdoOvdpDRl5DRl5DRl5DRl5GP1dSOk0StdIOvNkOvdoOvdpDRl5DRl5DRl5DRl5DRV0udI4QudYOvdoOvdoOvdpDRl5DRl5DRl5DRl5ERFwRt9MOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdoOvdr///803KqTAAAAmnRSTlMAAAAAAAAAAAAAAAABAgVWpKyrUN+ciYpRk6YDmZiaDiQCVVpC1E+YqiBJTQuP3jgDJTYSk/ykBhTOjQVw4ey9LxS52ToX0Ypy5XtMuc2k1ToPmtgyMeQasteOv9Y7mNxDTukzkq1E2ggNl91FVOKEVuOWRou0EAYGBV3lg5U41Mi5ut7rgQdHLm12d1VefwqR30gBXMHHop08rHnSpQAAAAFiS0dEmpjfZxIAAAAHdElNRQfjBBgLExfSQDGIAAABXElEQVQ4y2NgGBSAkZGHFwXwMDKiyPPxCwgKIQFBAX4+RmT9wiKiYuJIQExURALJDEZGSSlpVCOlpSRRFMjIoNnJKCtHQIEMFRQwMbOwyCsosuBUwKqkzKKiqsbCglUBm7qGppY2i46unj5QBUIBi4GhkTFIhN3E1MychYHFwtIKWQGLtY2tnb0DCwuHo5OzC1CGxdXNHUkBi6KHp5e3j68Di4WffwAnUD4wKDgEyQ0soWEeiizhEZFR0TGxIP3ycfEJyI5kSUxKZmFhCU/xTTWCyqexIHuTxTDdKgMoYZBpDpbPys4ByyMUsOTm5WewQHyKJI/wBRd3QSFUBYt8UXYxVB6ooKS0rBwEKiqrqmtAKlgyaxHyQAV19Q2NENDU3NLaxgKU12uHywNV8HR0dkFAd09vWF9/4ISJk5DkUQDL5CmFU6fpeeOSB4Vn+/QZM3HLg3yrOBmP9MAAADyBS45uBi7bAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE5LTA0LTI0VDExOjE5OjIzKzAyOjAwmbHVPwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxOS0wNC0yNFQxMToxOToyMyswMjowMOjsbYMAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAV3pUWHRSYXcgcHJvZmlsZSB0eXBlIGlwdGMAAHic4/IMCHFWKCjKT8vMSeVSAAMjCy5jCxMjE0uTFAMTIESANMNkAyOzVCDL2NTIxMzEHMQHy4BIoEouAOoXEXTyQjWVAAAAAElFTkSuQmCC",
  "package": null,
  "connect-src": [],
  "frame-ancestors": [],
  "frame-src": [
    "form-integration-formsapp.bloomreach.works"
  ],
  "img-src": [],
  "script-src": [],
  "style-src": [],
  "font-src": [],
  "media-src": []
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bear in mind that you will need to generate a Forms.app token. When created add this to the configuration of the UI extension (config element above).&lt;/p&gt;

&lt;p&gt;Once the UI extension is registered, make sure to add the UI extension to a content type and component.&lt;/p&gt;

&lt;p&gt;See the following demo of how this can work in the Experience Manager:&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Integrate Content SaaS with Typeform
&lt;/h2&gt;

&lt;p&gt;To integrate with Typeform, you will need to add the following UI extension to a &lt;a href="https://documentation.bloomreach.com/content/docs/configure-a-custom-integration" rel="noopener noreferrer"&gt;Custom Integration&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "id": "typeform",
  "displayName": "Typeform",
  "url": "https://form-integration-typeform.bloomreach.works",
  "config": "{\"token\":\"123\"}",
  "extensionPoint": "document.field",
  "height": 80,
  "description": "Typeform Integration",
  "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAHdElNRQfkDAoKNhabE1+jAAACb0lEQVRIx52Vy08TURSHf/da+hhaRDHBRYNGI7KgJIpUIxvfYEJkpZHwiK8Yq2XjxpWKUTT+Ay7cEG2Ir4UuGgPRECIbgegCiSYYoyxEsLw6r06nU46LpgShtDPzu4vJTO73nZO5mTPAmhCjPXR1/rU0o0q0lDbk6cUBukKlyBm2Ci7Vw6lwzPPBOewewwwW4UAFAmhSTiD1pKSbTSFfjPOJeK9UR2U5ViU9TEpxo33dDqhIfjbdcMH7NU+BKvQqZf3eFqavERAX+0bqzwka8seDHnX/qK+RLW/kmYt8d+JgW0EcSKBV6A+KUXL81wHtUMdrPbGCeCYOvFBr3/haV3Qgdj9ymMUBA+1CrFkLLXdAvuTfGvecaQEAbMOg4qtj3zIdNI7o1nBgEl0e+SVxgAPy0QGfRR7AU/57O04DHEgGx5h1AeG2V7pPjAMu/6R1HsB7/NmCYxxw+uZtCYCIV2rjgMOp2hR85HSIA0ZKsCn4CXc5B5KL5TYFCfANHNCnKmwKtiIZ54BrZDfZE9RB/8QB77uToj1Bi7wpwgAqSc5Y/RYAIIDoXLGfA0xMRdvT1uvfU5y3mJaZB9XycECQLOGXjJs/imuYzgGAjaefPyg8jlYkiC69+BTTl0faxs6m2WbTZ1GNV1pRB5sAVk7lvcrQcWHCBL4LfZpw2RnJ3PHsY/bZee2tWmWielR1dWbxVTE64srhnL+V7AoZCck4k8dvnE0oN9K5YT/1JJQpChRokarE70Nqwxr84lJMkaO02cRLIpd2XVkYVcO0j3ZSJR2hO+lf4sIXqjd7SgDInQ7NDsoxTdXU+KT0mA6st/MfpVUmc1BpehgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjAtMTItMTBUMTA6NTQ6MjIrMDE6MDASXAx5AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIwLTEyLTEwVDEwOjU0OjIyKzAxOjAwYwG0xQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABXelRYdFJhdyBwcm9maWxlIHR5cGUgaXB0YwAAeJzj8gwIcVYoKMpPy8xJ5VIAAyMLLmMLEyMTS5MUAxMgRIA0w2QDI7NUIMvY1MjEzMQcxAfLgEigSi4A6hcRdPJCNZUAAAAASUVORK5CYII=",
  "package": null,
  "connect-src": [],
  "frame-ancestors": [],
  "frame-src": [
    "form-integration-typeform.bloomreach.works"
  ],
  "img-src": [],
  "script-src": [],
  "style-src": [],
  "font-src": [],
  "media-src": []
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Be aware that you will need to generate a Typeform token. When created add this to the configuration of the UI extension (config element above)&lt;/p&gt;

&lt;p&gt;Get a personal token: &lt;a href="https://admin.typeform.com/user/tokens" rel="noopener noreferrer"&gt;https://admin.typeform.com/user/tokens&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnktc03epi6fljwjpw5qq.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnktc03epi6fljwjpw5qq.JPG" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the UI extension is registered, make sure to add the UI extension to a content type and component&lt;/p&gt;

&lt;p&gt;See the following demo of how this can work in the Experience Manager:&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Integrate Content SaaS with Form.io
&lt;/h2&gt;

&lt;p&gt;To integrate with &lt;a href="https://form.io" rel="noopener noreferrer"&gt;Form.io&lt;/a&gt; you will need to add the following UI extension to a &lt;a href="https://documentation.bloomreach.com/content/docs/configure-a-custom-integration" rel="noopener noreferrer"&gt;Custom Integration&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "id": "formio",
  "displayName": "Form.io",
  "url": "https://form-integration-formio.bloomreach.works",
  "config": "{\"endpoint\":\"https://yourstuff.form.io\"}",
  "extensionPoint": "document.field",
  "height": 80,
  "description": "Form.io Integration",
  "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAC3FBMVEUAAAAQdbwPdbwPdbwPdbxUsUdUskdUskdUskdVskgQdrwPdbwPdbwPdbwPdbwQdbxUskdUskdUskdUskdVskhVskgUdroQdbwPdbwPdbwPdbwPdbxUskdUskdUskcQdrwPdbwPdbwPdbxUskdUskdUskdUskdUskdWs0kQdrwQdbwPdbwPdbwPdbwQdbxWs0lUskdUskdUskdUskdVskgVeL0RdrwPdbwPdbwPdbwPdbwPdbwQdbxUskdUskdUskdUskdUskdVskkRdrwPdbwPdbwPdbwPdbwPdbwQdbxYskxUskdUskdUskdUskdUskdXs0oSdrwPdbwPdbwPdbwPdbwPdbwQdbwbe75VsklUskdUskdUskdUskdVskgRdrwPdbwPdbwPdbwPdbwQdbxUskdUskdUskdVskhWskkRdrwPdbwPdbwPdbwPdbwQdbxWsklUskdUskdUskdUskdUskcPdbwPdbwPdbwPdbwUd71VskhUskdUskdUskdVskgPdbwPdbwPdbwUeL1VskhUskdUskdUskdUskcPdbwPdbwPdbwQdbxVsklUskdUskdUskdUskdUskdVskgPdbwPdbwPdbwPdbwPdbxUskdUskdUskdUskdUskdUskdUskgTd7wQdbwPdbwPdbwPdbwUeL1VskhUskdUskdVskgPdbwPdbwPdbwPdbwQdbxVs0hUskdUskdUskdUskdUskcQdbwPdbwPdbwPdbwRdrxUskhUskdUskdUskdVskgWeb4QdbwPdbwPdbwPdbwPdbxVskhUskdUskdUskdVskgRdrwPdbwPdbwPdbxUskdUskdUskdUskdWskkPdbwPdbwPdbwPdbxUskdUskdUskdUskcSdr0PdbwPdbwPdbwQdbxUskdUskcQdbwPdbwPdbwPdbwPdbwXeL5UskdUskdUskdVskkQdbwPdbwRdrxUskdUskcPdbxUskf///9ORprqAAAA8XRSTlMAGmZpGwE4d0kKCErK/KkQOt3znicBATin8Oou/n8ZE3Lisz7l/b9HBQZBuvalIgFMz++NIgEflO/+wVAMHXjk2WEMEHDV/eF9GwE5pvW2RAQFQbX6+LA1AQlg1uuKIR2M7M9cDiKI01wKA2DS6YQhBUCv+rAwL+S2QwIPbdipCE/jTgIOifvRFBq+kx4CQ7v4+X0CIefOaxUBL5Lo/M0LBDq9uDcDDGLeGhPY5oEXAjT3sj8HKY7JYgsii8xnEAM8t/ekOA1dy+wcEW9hAhOdwUIEMpnz22PbbxgHVsPZH17xFoLe3GUBoMpRBgYdBCEWUIfmiQAAAAFiS0dE86yxvu4AAAAHdElNRQfmCRcHIghgMYf/AAAB60lEQVRIx2NgGAWjgFaAkYmZBcxgZWPn4CSonIubh/cjHz+IKSD4SUhYRBSvcjFxCcmPHz9KSYM47J8+fZIRlJXDo15eQfEjCCiBbVBWAer4pKqmroFDuaaWNi9IuY6uHpivb2CoCtJiZGyCzV2mZuYWIOWWVtY2MDFbO3uQDhkHRycM9c4urm4g9e4enkiiXt4+viAtvn7+ASjKA4OCQ0DKQ8PCI1ANioyKlgFpiYmNQxKNT0gEuyYpOQXTralpMWB3pWdkQkWysnPArsnNy8caGAWFRcVgd5WUQgTKysGuqaiswhXc1TW1YHfV1YO5DWDnNzY1446gltY2kIb2DjCvswscW1LdPTiU9/b1TwCpnzhpMkRgSsJUkA63adNnYFE+c9bsOSDlc+c5zoeJLVi4COws3sVLlqKrX7Z8xSdIfK9EFl7FtBrsrjVr16EoX7+haCNIefGmzVvQTNq6Dewu3u07diIEd+2GpI09e/dhunX/gYNgdx06fAQaXkePHQe75kTsSeyhcep0OcRdZ86CuOfOg8Nm7oWLl3AF99nLV66CdFwDp+/r4LC/cfMWAx5w+85dYJ64dx/EfjD306eH50sZCIBHj588ffYc7KQX9i9fvSaknoHhzdu376Cefv9BlLD6UTAK6AUAHXsSvNupchsAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDktMjNUMDc6MzQ6MDgrMDA6MDDf7pjeAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTA5LTIzVDA3OjM0OjA4KzAwOjAwrrMgYgAAACh0RVh0ZGF0ZTp0aW1lc3RhbXAAMjAyMi0wOS0yM1QwNzozNDowOCswMDowMPmmAb0AAAAASUVORK5CYII=",
  "package": null,
  "connect-src": [],
  "frame-ancestors": [],
  "frame-src": [
    "form-integration-formio.bloomreach.works"
  ],
  "img-src": [],
  "script-src": [],
  "style-src": [],
  "font-src": [],
  "media-src": []
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remember that you will need to copy the form.io endpoint. When acquired add this to the configuration of the UI extension (config element above).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffduh8ih5h4nnv53g58z6.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffduh8ih5h4nnv53g58z6.JPG" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the UI extension is registered, make sure to add the UI extension to a content type and component&lt;/p&gt;

&lt;p&gt;See the following demo of how this can work in the Experience Manager:&lt;/p&gt;

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

&lt;h2&gt;
  
  
  How to get your frontend to render the Form
&lt;/h2&gt;

&lt;p&gt;The above integrations will store 2 attributes to the API: the form object itself and the code required to embed it on your page/component.&lt;/p&gt;

&lt;p&gt;You can use the following react frontend component example to render the forms with the above integration (one size fits all):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export function GenericEmbeddedForm({component, page}: BrProps&amp;lt;ContainerItem&amp;gt;): JSX.Element | null {

   const content: any = component.getContent(page);

   let forms: Array&amp;lt;any&amp;gt;;
   try {
       forms = JSON.parse(content.form);
   } catch (e) {
       forms = []
   }

   return (
       &amp;lt;div&amp;gt;
           {forms.map((form, index) =&amp;gt; {
               return  &amp;lt;div key={index} dangerouslySetInnerHTML={{__html: decodeURIComponent(escape(atob(form.embed)))}}/&amp;gt;
           })}
       &amp;lt;/div&amp;gt;
   );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Custom Frontend Forms
&lt;/h2&gt;

&lt;p&gt;If you are looking for forms that you can control in the frontend, but want to provide editors the ability to create and edit the form structure for example: have editors add/remove or rearrange fields you could also look at Bloomreach native form builder which stores the form model in Bloomreach Content SaaS.&lt;/p&gt;

&lt;p&gt;For more information, &lt;a href="https://dev.to/bloomreach/content-saas-json-schema-form-builder-2kgm"&gt;check out this blog post!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>bloomreach</category>
      <category>saas</category>
      <category>formintegrations</category>
      <category>integration</category>
    </item>
    <item>
      <title>Content SaaS | JSON Schema Form Builder</title>
      <dc:creator>ksalic</dc:creator>
      <pubDate>Mon, 17 Oct 2022 09:23:57 +0000</pubDate>
      <link>https://dev.to/bloomreach/content-saas-json-schema-form-builder-2kgm</link>
      <guid>https://dev.to/bloomreach/content-saas-json-schema-form-builder-2kgm</guid>
      <description>&lt;p&gt;Develop a JSON Form Builder custom integration for Bloomreach Content.&lt;/p&gt;

&lt;p&gt;Recently Bloomreach Content SaaS released the feature: “Integrations Library”, in which innovative content type fields can be built using a built-in App framework. With the release of Custom integrations, you will be able to integrate, for example: 3rd party DAM system, add a markdown editor field or in this specific case: a form builder. Look at our Documentation pages dedicated to the &lt;a href="https://documentation.bloomreach.com/content/docs/integrations-library?_ga=2.225483932.729086942.1664529358-129010115.1663337065"&gt;Integrations Library&lt;/a&gt; to learn more. &lt;/p&gt;

&lt;p&gt;JSON schema forms are a well known concept for quick form model building for the frontend. With the JSON Schema Form Builder integration, content editors can seamlessly create form models and add these to a website managed by the Bloomreach Experience Manager. This will save you time and demonstrate the flexibility of Bloomreach Content’s out-of-the-box integrations with more integrations to come. &lt;/p&gt;

&lt;p&gt;A demo:&lt;/p&gt;

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

&lt;p&gt;The form builder Application URL is located at:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://content-forms.bloomreach.works/"&gt;https://content-forms.bloomreach.works/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We usually work with the following libraries to display the forms in the frontend application:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://react-jsonschema-form.readthedocs.io/en/latest/"&gt;https://react-jsonschema-form.readthedocs.io/en/latest/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsonforms.io/docs/getting-started"&gt;https://jsonforms.io/docs/getting-started&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Example of a React Form Component:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from "react";

import { ContainerItem } from "@bloomreach/spa-sdk";

import { BrProps } from "@bloomreach/react-sdk";

import { withTheme } from "@rjsf/core";

import { Theme as Bootstrap4Theme } from "@rjsf/bootstrap-4";

const Form = withTheme(Bootstrap4Theme);

export function FormComponent({
  component,
  page,
}: BrProps&amp;lt;ContainerItem&amp;gt;): JSX.Element | null {
  const content: any = component.getContent(page);

  let form;

  try {
    form = JSON.parse(content.form);
  } catch (e) {
    form = { jsonSchema: {}, uischema: {} };
  }

  const schema = form.jsonSchema ?? {};

  const uischema = form.uiSchema ?? {};

  return (
    &amp;lt;div
      className={`jumbotron mb-3 ${page.isPreview() ? "has-edit-button" : ""}`}
    &amp;gt;
      &amp;lt;Form
        schema={schema}
        uiSchema={uischema}
        onSubmit={(submissionData) =&amp;gt; {
          console.log(submissionData);
        }}
      /&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do note that JSON Schema Form Builder does not take any form handling into account. The library packages listed above provide a hook (see above #onSubmit whenever the form is submitted by the site visitor).&lt;/p&gt;

&lt;p&gt;This integration is based on the UI provided by:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ginkgobioworks.github.io/react-json-schema-form-builder/"&gt;https://ginkgobioworks.github.io/react-json-schema-form-builder/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install JSON Schema Form Builder with the Custom Integrations dashboard:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5Tt8tWMX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nj2nhges73jzyxqtpot1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5Tt8tWMX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nj2nhges73jzyxqtpot1.png" alt="Form builder in the Integrations Dashboard" width="514" height="707"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or use the installer:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://content-tools.bloomreach.works/ui-extension-frame?uiExtension=%7B%22id%22%3A%22formbuilder%22%2C%22displayName%22%3A%22Form%20Builder%22%2C%22url%22%3A%22https%3A%2F%2Fcontent-forms.bloomreach.works%22%2C%22config%22%3A%22%7B%7D%22%2C%22extensionPoint%22%3A%22document.field%22%2C%22height%22%3A500%2C%22description%22%3A%22JSON%20schema%20form%20builder%22%2C%22logo%22%3A%22data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8%2BDQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGhlaWdodD0iMTQwIiB2aWV3Qm94PSIwIDAgMTQwIDE0MCIgd2lkdGg9IjE0MCI%2BDQogIDxkZWZzPg0KICAgIDxjbGlwUGF0aCBpZD0iYSI%2BDQogICAgICA8cmVjdCBmaWxsPSIjMDAyODQwIiBoZWlnaHQ9Ijc3LjMxMSIgc3Ryb2tlPSIjNzA3MDcwIiBzdHJva2Utd2lkdGg9IjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgMCkiIHdpZHRoPSI3NS4xMDIiLz4NCiAgICA8L2NsaXBQYXRoPg0KICA8L2RlZnM%2BDQogIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgMCkiPg0KICAgIDxwYXRoIGQ9Ik0yMywwaDk0YTIzLDIzLDAsMCwxLDIzLDIzdjk0YTIzLDIzLDAsMCwxLTIzLDIzSDIzQTIzLDIzLDAsMCwxLDAsMTE3VjIzQTIzLDIzLDAsMCwxLDIzLDBaIiBmaWxsPSIjZmZkNTAwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDApIi8%2BDQogICAgPGcgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDYuMTkgMTA4LjExMikgcm90YXRlKDE4MCkiPg0KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTAuNDA1IC0xNTEuNzMpIj4NCiAgICAgICAgPHBhdGggZD0iTTAsMEMxLjAyLjQ5MywxLjk1MSwxLjEwNywyLjk0NCwxLjYzOSwxLjk3MiwxLjA4LDEsLjUyMywwLDBaIiBmaWxsPSIjMDAyODQwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMTYuMjc2IDc1LjUwNSkiLz4NCiAgICAgICAgPHBhdGggZD0iTTM1Ljk0NCw1OS43VjBIMFY5MS4yMzRBOTkuMzM5LDk5LjMzOSwwLDAsMSwzNS45NDQsNTkuN1oiIGZpbGw9IiMwMDI4NDAiLz4NCiAgICAgICAgPHBhdGggZD0iTS4wMzQsMCwwLC4wNUMuMy4yLjYxMi4zMzEuOTA4LjQ4Ni42LjM0LjM0LjE0Mi4wMzQsMFoiIGZpbGw9IiMwMDI4NDAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDExNS4zNjcgNzUuMDE5KSIvPg0KICAgICAgICA8cGF0aCBkPSJNMTIxLjUsMTAuMDQ3Yy0uOTkzLS41MzItMS45MjQtMS4xNDYtMi45NDQtMS42MzktLjMtLjE1NS0uNjA5LS4yODUtLjkwOC0uNDM2TDk4LjcsMzYuNjZjMTcuMDYsNi45NDUsMjguMzE0LDIzLjkyOCwyOC4zMTQsNDMuNjI0LDAsMjUuNzY3LTE5LjE3Myw0Ny4wMzMtNDUuNTM2LDQ3LjAzMy0yNi42NTksMC00NS41MzQtMjEuMjY2LTQ1LjUzNC00Ny4wMzMsMC0yNS4xNjksMTguMDc2LTQ1LjksNDMuNzY1LTQ2Ljg1MUwxMDAuNDE4LDIuMDgxQTg4LjQ0LDg4LjQ0LDAsMCwwLDgxLjQ3NywwLDgzLjYzMiw4My42MzIsMCwwLDAsMzUuOTQ0LDEyLjkzNHYtLjAwOUE4MSw4MSwwLDAsMCwwLDgwLjI4NHY4MC4yODJIMzUuOTQ0VjE0Ny42MzRhODMuNjM3LDgzLjYzNywwLDAsMCw0NS41MzQsMTIuOTMxLDg1Ljk2MSw4NS45NjEsMCwwLDAsMzIuNDgxLTYuMTkyQTgxLDgxLDAsMCwwLDEyMS41LDEwLjA0N1oiIGZpbGw9IiMwMDI4NDAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgNjcuMDk3KSIvPg0KICAgICAgPC9nPg0KICAgIDwvZz4NCiAgPC9nPg0KPC9zdmc%2BDQo%3D%22%2C%22package%22%3Anull%2C%22connect-src%22%3A%5B%5D%2C%22frame-ancestors%22%3A%5B%5D%2C%22frame-src%22%3A%5B%22content-forms.bloomreach.works%22%5D%2C%22img-src%22%3A%5B%5D%2C%22script-src%22%3A%5B%5D%2C%22style-src%22%3A%5B%5D%2C%22font-src%22%3A%5B%5D%2C%22media-src%22%3A%5B%5D%7D&amp;amp;configForm=%7B%7D"&gt;Install!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>bloomreach</category>
      <category>saas</category>
      <category>json</category>
      <category>formbuilder</category>
    </item>
    <item>
      <title>Content SaaS | Integrations Library - Markdown Editor as a UI Extension</title>
      <dc:creator>ksalic</dc:creator>
      <pubDate>Mon, 17 Oct 2022 09:23:05 +0000</pubDate>
      <link>https://dev.to/bloomreach/content-saas-integrations-library-markdown-editor-as-a-ui-extension-1fc6</link>
      <guid>https://dev.to/bloomreach/content-saas-integrations-library-markdown-editor-as-a-ui-extension-1fc6</guid>
      <description>&lt;p&gt;Develop a Markdown editor UI extension and add it as a custom integration to your Bloomreach Content environment.&lt;/p&gt;

&lt;p&gt;Recently Bloomreach Content (SaaS) released a feature, &lt;a href="https://documentation.bloomreach.com/content/docs/integrations-library?_ga=2.2576438.729086942.1664529358-129010115.1663337065" rel="noopener noreferrer"&gt;Integrations Library - UI Extensions&lt;/a&gt;. By using this feature, you can add your document field extensions as a custom integration. This opens up new possibilities to create content-type fields of your own. &lt;/p&gt;

&lt;p&gt;Here is how it works: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A UI Extension (Custom Integration) application is loaded as an iframe inside of a field of a content type in the Experience manager.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The UI Extension application uses the &lt;a href="https://documentation.bloomreach.com/content/docs/ui-extension-client-library?_ga=2.183588000.729086942.1664529358-129010115.1663337065" rel="noopener noreferrer"&gt;UI Extension Client Library&lt;/a&gt; to communicate between the application and the Experience manager - primarily to save and read field values in the CMS.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The UI Extension application can be built in any well-known frontend framework e.g., React, Angular, Vue, or Plain JS, as long as it includes the Client Library.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Additional configuration and context (such as CMS user or locale) can be passed along the UI Extension application.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this blog, I’m going to create a new UI extension that will allow editors to edit in Markdown for markup. Markdown markup is nowadays used frequently with mobile native applications. I recently created an integration with Bloomreach Content and Flutter with the &lt;a href="https://dev.tolink%20flutter%20blogpost%20once%20up"&gt;Flutter SDK&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This markdown editor is complementary to the Flutter SDK. The markdown editor itself is an integration with &lt;a href="https://stackedit.io/" rel="noopener noreferrer"&gt;https://stackedit.io/&lt;/a&gt;, which is, in my opinion, a very well-constructed and easy-to-use markdown editor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frontend Project
&lt;/h2&gt;

&lt;p&gt;Firstly, create the UI Extension Application as a new frontend project. I’m very familiar with React, so I’ll create a simple React project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn create react-app markdown-ui-extension
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install the UI Extension Client Library:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add @bloomreach/ui-extension
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Code the Plugin
&lt;/h2&gt;

&lt;p&gt;Register the UI extension:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const ui = await UiExtension.register();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Get the current field value:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const brDocument = await ui.document.get();
const value = await ui.document.field.getValue();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set a field value:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ui.document.field.setValue(‘new value’);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The source code of the markdown editor can be found at:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ksalic/markdown-field/" rel="noopener noreferrer"&gt;https://github.com/ksalic/markdown-field/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploy the Plugin
&lt;/h2&gt;

&lt;p&gt;The Markdown editor plugin is deployed on:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://markdown-field.bloomreach.works/" rel="noopener noreferrer"&gt;https://markdown-field.bloomreach.works/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Use the Integrations UI to Register the Extension
&lt;/h2&gt;

&lt;p&gt;As a developer, log in to Bloomreach Content and navigate to &lt;em&gt;Setup &amp;gt; Integrations&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fotywfjm4dh9f03tbkmvz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fotywfjm4dh9f03tbkmvz.png" alt="Setup"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add a new “Custom Integration”:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhwceh2fyb0h3bbdqpbk8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhwceh2fyb0h3bbdqpbk8.png" alt="Integrations"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Make sure all of the fields are marked as the following:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbsxymyd7851psugxdk5h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbsxymyd7851psugxdk5h.png" alt="Markdown integration"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you save, the custom integration is now listed and available for use on content types.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl0jwpbh1bn595vlr8bmr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl0jwpbh1bn595vlr8bmr.png" alt="Added Integration"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Add the UI Extension to a Content Type
&lt;/h2&gt;

&lt;p&gt;As a developer make sure you create a new &lt;a href="https://documentation.bloomreach.com/content/docs/development-environment?_ga=2.188316590.729086942.1664529358-129010115.1663337065" rel="noopener noreferrer"&gt;developer project&lt;/a&gt; and make sure &lt;a href="https://documentation.bloomreach.com/content/docs/content-modeling?_ga=2.188316590.729086942.1664529358-129010115.1663337065" rel="noopener noreferrer"&gt;content type changes&lt;/a&gt; are checked!&lt;/p&gt;

&lt;p&gt;Create or edit a new &lt;a href="https://documentation.bloomreach.com/content/docs/document-type-editor?_ga=2.188316590.729086942.1664529358-129010115.1663337065" rel="noopener noreferrer"&gt;content type&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Add a new Open UI String field to the content type:​​​​​&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmzb3a1cd211k6k49ndu6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmzb3a1cd211k6k49ndu6.png" alt="Open UI String"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select the UI Extension from the dropdown:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fje6auphw3z7rf5ia3hyw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fje6auphw3z7rf5ia3hyw.png" alt="Select UI Extension"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations. You have now successfully added a markdown field to a content type!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3otjrxasq01m5v66r7ed.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3otjrxasq01m5v66r7ed.png" alt="Markdown Field"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The source code of the markdown editor can be found at:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ksalic/markdown-field/" rel="noopener noreferrer"&gt;https://github.com/ksalic/markdown-field/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>bloomreach</category>
      <category>saas</category>
      <category>integrations</category>
      <category>markdown</category>
    </item>
    <item>
      <title>Content SaaS | Flutter SDK for Mobile Native Development</title>
      <dc:creator>ksalic</dc:creator>
      <pubDate>Mon, 17 Oct 2022 09:21:34 +0000</pubDate>
      <link>https://dev.to/bloomreach/content-saas-flutter-sdk-for-mobile-native-development-2n0p</link>
      <guid>https://dev.to/bloomreach/content-saas-flutter-sdk-for-mobile-native-development-2n0p</guid>
      <description>&lt;p&gt;Get started with the Bloomreach Content Flutter SDK for native mobile support. Flutter is an open source framework for building beautiful, natively compiled, multi-platform applications from a single codebase.&lt;/p&gt;

&lt;p&gt;Bloomreach Content SaaS is now available on all native mobile platforms.&lt;/p&gt;

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

&lt;p&gt;In the Bloomreach Content Experience Manager you can visually edit content and experiences and have the ability to preview and seamlessly integrate with our Cross-Channel Campaign Management tool: &lt;a href="https://www.bloomreach.com/en/products/engagement?_ga=2.136903413.473602208.1664808390-1323289695.1664808390"&gt;Bloomreach Engagement&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;A bit on our SDKs: the current supported platforms of our Bloomreach Content &lt;a href="https://documentation.bloomreach.com/content/docs/spa-sdks-lifecycle-and-support"&gt;official SDKs&lt;/a&gt; are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://documentation.bloomreach.com/content/docs/bloomreach-react-sdk"&gt;React&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://documentation.bloomreach.com/content/docs/bloomreach-angular-sdk"&gt;Angular&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://documentation.bloomreach.com/content/docs/bloomreach-vuejs-sdk"&gt;Vue.js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recently, we’ve released a &lt;a href="https://pub.dev/packages/brcontent"&gt;Flutter SDK&lt;/a&gt; for native mobile support. Flutter is an open source framework for building beautiful, natively compiled, multi-platform applications from a single codebase. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;“This is an open source community driven project that is not supported and maintained by Bloomreach engineering.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Flutter supports the following platforms (as of July 2022):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Android&lt;/th&gt;
&lt;th&gt;API 16 (Android 4.1) &amp;amp; above&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;iOS&lt;/td&gt;
&lt;td&gt;iOS 9 &amp;amp; above&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux&lt;/td&gt;
&lt;td&gt;Debian, 64-bit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;macOS&lt;/td&gt;
&lt;td&gt;El Capitan (10.11) &amp;amp; above&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web&lt;/td&gt;
&lt;td&gt;Chrome 84 &amp;amp; above&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web&lt;/td&gt;
&lt;td&gt;Firefox 72.0 &amp;amp; above&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web&lt;/td&gt;
&lt;td&gt;Safari on El Capitan &amp;amp; above&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web&lt;/td&gt;
&lt;td&gt;Edge 1.2.0 &amp;amp; above&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows&lt;/td&gt;
&lt;td&gt;Windows 7 &amp;amp; above, 64-bit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  1. Get Started with Flutter
&lt;/h2&gt;

&lt;p&gt;To get started with Flutter follow this trail:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.flutter.dev/get-started/install"&gt;https://docs.flutter.dev/get-started/install&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Install the Bloomreach Content Flutter SDK
&lt;/h2&gt;

&lt;p&gt;Once a flutter project is created, install the Bloomreach Content Flutter SDK as a dependency:&lt;/p&gt;

&lt;p&gt;flutter pub add brcontent&lt;br&gt;
Going forward you can integrate using the &lt;strong&gt;API Client (3a)&lt;/strong&gt; or the &lt;strong&gt;Rendering SDK (3b)&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  3a. Get Started with the API Client
&lt;/h2&gt;

&lt;p&gt;Please follow the installation procedure and then run the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import 'package:brcontent/api.dart';

final instance =
PageApi(ApiClient(basePath: 'https://sandbox-sales02.bloomreach.io'));

final path = path_example; // String | 
final channelId = channelId_example; // String | 

try {
    final Page page = await instance.getPage(channelId, path);
    print(page);

    Container container = page.getComponentByPath('container') ;

    var components = container.getComponents(page);

    components.forEach((containerItem) {
      print(containerItem!.name);
      if (containerItem.hasContent()) {
        print(containerItem.getContent(page)?.data);
        print('-----------');
      }
    });
} catch (Exception e) {
    print('Exception when calling PageApi-&amp;gt;getPage: $e\n');
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more examples on the API client: &lt;a href="https://github.com/bloomreach/content-flutter-sdk/blob/master/test/page_api_test.dart"&gt;https://github.com/bloomreach/content-flutter-sdk/blob/master/test/page_api_test.dart&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3b. Get Started with the Rendering SDK
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Examples
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/bloomreach/content-flutter-demo/blob/master/lib/main.dart"&gt;https://github.com/bloomreach/content-flutter-demo/blob/master/lib/main.dart&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Edit the main.dart
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import 'package:brcontent/api.dart' as br;

void main() {
  runApp(DemoApplication("https://sandbox-sales02.bloomreach.io", 'mobile-native-demo', getComponentMapping()));
}

class DemoApplication extends br.Application {

  DemoApplication(String baseUrl, String channelId,Map&amp;lt;String, Function(br.Page page, br.ContainerItem item, [void Function(String newPath)? setPage])&amp;gt; componentMapping)
      : super(baseUrl, channelId, componentMapping);

  @override
  br.ApplicationState&amp;lt;br.Application&amp;gt; createState() {
    return DemoApplicationState();
  }
}

class DemoApplicationState extends br.ApplicationState {

  @override
  Widget buildPage(BuildContext context, br.Page page) {
    br.Component menuComponent = page.getComponentByPath('menu'); //get the menu
    br.Menu menu = menuComponent.getMenu(page) as br.Menu;

    br.Container container = page.getComponentByPath('container'); //get a container component by path

    return MaterialApp(
      title: page.getDocument()?.getData('title'),
      home: Scaffold(
        drawer: ..,
        appBar: ..),
        body: br.ContainerItemComponentsListView(componentMapping, container, page, setPage), //this will render eacht container item component in a listview
      ),
    );
  }
}

//mapping components to widgets by the container item's ctype
getComponentMapping() {
  Map&amp;lt;String, dynamic Function(br.Page page, br.ContainerItem item, [void Function(String newPath)? setPage])&amp;gt;
  components = HashMap();
  components.putIfAbsent(
      "IntroSlider",
          () =&amp;gt; (br.Page page, br.ContainerItem item, [void Function(String newPath)? setPage]) =&amp;gt;
          CarouselWidget(item: item, page: page));
  components.putIfAbsent(
      "BannerCollection",
          () =&amp;gt; (br.Page page, br.ContainerItem item, [void Function(String newPath)? setPage]) =&amp;gt;
          BannerCollection(item: item, page: page));
  components.putIfAbsent(
      "TitleAndText",
          () =&amp;gt; (br.Page page, br.ContainerItem item, [void Function(String newPath)? setPage]) =&amp;gt;
          TitleAndTextWidget(item: item, page: page));
  components.putIfAbsent(
      "List",
          () =&amp;gt; (br.Page page, br.ContainerItem item, [void Function(String newPath)? setPage]) =&amp;gt;
          ListWidget(item: item, page: page, setPage: setPage));
  return components;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;p&gt;All source code is located in our github repository:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SDK: &lt;a href="https://github.com/bloomreach/content-flutter-sdk"&gt;https://github.com/bloomreach/content-flutter-sdk&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Demo: &lt;a href="https://github.com/bloomreach/content-flutter-demo"&gt;https://github.com/bloomreach/content-flutter-demo&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An online web demo is located at:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://flutter-demo.bloomreach.works/"&gt;https://flutter-demo.bloomreach.works/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An online simulated demo (android) is located at:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appetize.io/app/pivlphpv5zp4qdelef3u4judmq?device=pixel4&amp;amp;osVersion=11.0&amp;amp;scale=75"&gt;https://appetize.io/app/pivlphpv5zp4qdelef3u4judmq?device=pixel4&amp;amp;osVersion=11.0&amp;amp;scale=75&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Android users can download the demo APK here directly:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/bloomreach/content-flutter-demo/blob/master/build/app/outputs/flutter-apk/app-release.apk"&gt;https://github.com/bloomreach/content-flutter-demo/blob/master/build/app/outputs/flutter-apk/app-release.apk&lt;/a&gt;&lt;/p&gt;

</description>
      <category>bloomreach</category>
      <category>saas</category>
      <category>flutter</category>
      <category>sdk</category>
    </item>
  </channel>
</rss>
