Almost EVERYONE who tried headless systems said they saw benefits. Download the state of CMS now!

Storyblok now on AWS Marketplace: Read more

O’Reilly Report: Decoupled Applications and Composable Web Architectures - Download Now

Empower your teams & get a 582% ROI: See Storyblok's CMS in action

Skip to main content

Integration Field-Type

In many cases, you will want to have more space for selecting content from a different API similar to how you can select different products in the image below. For this use case, we created an integration field-type starter kit: github.com/storyblok/storyblok-integration-field-starter

Integration Selection

Section titled Getting Started Getting Started

Start by cloning the repository and installing the dependencies.

        
      $ git clone https://github.com/storyblok/storyblok-integration-field-starter.git
$ cd storyblok-integration-field-starter
$ npm i
    

Next, we need to create a new custom field-type in the Partner Portal. Click on Field-types {1} and the New button {2} and enter the name for your integration field-type {3}.

Create new field-type

Next, we need to add the name of our new plugin to the src/Plugin.vue file.

src/Plugin.vue

        
      initWith() {
  return {
    // needs to be equal to your storyblok plugin name
    plugin: 'my-integration',
    item: null
  }
},
    

Then start the development server.

        
      npm run dev
    

To preview the field-type open the field-type in Storyblok, change the URL from https to http {1} and click the Enable local dev mode {2}. If your localhost is running, you should see the Open Selection Button {3}.

Integration Starter in Storyblok

Now if you click Open Selection {3}, you should get a full window with a spinning loader, where you will be able to load your integration logic.

Section titled Integration Logic Integration Logic

The integration field-type makes use of field-type API events to open and close a modal within Storyblok. These events can be used in any field-type.

src/Plugin.vue

        
      openSelection() {
  this.modalIsOpen = true
  this.$emit('toggle-modal', true)
},

closeSelection() {
  this.modalIsOpen = false
  this.$emit('toggle-modal', false)
},