Savvy Docs
  • Welcome
  • Guides
    • Intro to the builder
    • Designer Card
    • Options Card
    • Working with Logic
  • How-To's
    • General How-To's
      • ✔️How to select a container when I can’t click over it on the screen
      • 👁️How to hide a global component on a specific page
      • 📊How to calculate statistical significance from split test
      • 🅰️How to install a Google font.
      • 🗒️How to use "Logs" for debugging
      • ↩️How to change pages order
      • 🌒How to select components that are behind the Embeddables card
      • 📄How to clone a page
      • ➕How to add new components to a page
      • 📄How to select the whole page
      • 💻How to view your flow on different screen sizes
      • ⛵How to move between pages while editing your flow
    • Design How-To's
      • 🖋️How to style a specific component element (E.g. buttons image)
      • ⭕How to style individual buttons (by button key) in Options Selectors
      • 🧿How to style a rounded bullet-like checkbox for options buttons
      • 🔲How to get rid of the default input outline
      • 🖼️How to style a background image
      • 🦚How to style components (basics)
      • ↪️How to change a component's location
      • ⬆️How to upload and apply images to your design
      • 🔘How to style hover, selected, disabled button states
      • 🪶How to style CSS properties that are not there in the designer card (custom properties)
      • 📱How to make my flow responsive
    • Logic How-To's
      • 👁️How to set show/hide conditions
      • 📺How to display a value previously entered by the user
      • ✖️How to add a “Deselect All” button in a Multi-Select
      • 🔨How to use a computed field in a condition
      • 👁️How to hide a global component on a specific page
  • Other useful docs
    • Useful Docs
      • 🚦Conditions
      • 👩‍💻Computed Fields
      • 🔖Tags
    • WORK IN PROGRESS
      • ◻️Pending
        • Work in Progress: How the New Rendering Engine Works
        • Work in Progress: How to create a new Split test
        • Work in Progress: Preloading images
        • Work in Progress: How to show “loading…” while fetching or processing data
        • Work in Progress: How to send data to Tiktok
        • Work in Progress: How to send data to Postcript
        • Work in Progress: How to send data to Klaviyo
        • Work in Progress: How to send data to Google Tag
        • Work in Progress: How to send data to Google Analytics
        • Work in Progress: How to Fetch User Location Data to use in your Flow
        • Work in Progress: How to fetch job offers from Lever’s API
        • Work in Progress: How to fetch data and display the results as options in a dropdown
        • Work in Progress: How to create a new split test with 3 variants
        • Work in Progress: How to Duplicate a Container with All its Content
        • Work in Progress: How to add Chart.js to your flow
        • Work in Progress: How to Create Repeatable Button Components, Fetching from a Database
        • Work in Progress: How to Create a Global Column
        • Work in Progress: How to Clone a Flow
        • Work in Progress: How to Create and Style a Carousel
        • Work in Progress: How to Add Default User Data
        • Work in Progress: How to Show Validation Messages on Required Fields
        • Work in Progress: How to create an Option Selector Results Page
        • Work in Progress: How to create a combined Option Selector + Input component
        • Work in Progress: How to Add an Info Box Popup
        • Work in Progress: How to set up a Micro-Product as a Popup on your Site
        • Work in Progress: How to make a Full-Page Flow
        • Work in Progress: How to Use Custom Selectors
        • Work in Progress: How to Add a Video/GIF Placeholder to a Video Component
        • Work in Progress: How to Style Buttons
        • Work in Progress: How to Center Components
        • Work in Progress: How to Bring Data from Airtable
        • Work in Progress: How to add a custom font from a website:
        • Work in Progress: How to Create Computed Fields
        • Work in Progress: How to Ping an API
        • Work in Progress: How to Store a Password
        • Work in Progress: How to Bring Data from Google Sheet
        • Work in Progress: How to Fetch Safely from Savvy
        • Work in Progress: How To Fetch Data from a specific row in Airtable in a Computed Field
Powered by GitBook
On this page
  • Step 1: Create and Prepare your Button
  • Step 2: Transform the Data
  • Step 3: Style it
  • What if there's more data that I want to show when a user selects one of the options?
  1. Other useful docs
  2. WORK IN PROGRESS
  3. Pending

Work in Progress: How to Create Repeatable Button Components, Fetching from a Database

Note: This page only applies to the Old Rendering Engine - for the New Rendering engine ask a Savvy Expert for help

Repeatable components take data from an array of objects and turn it into the same amount of components.

Step 1: Create and Prepare your Button

  • Create a button where you want the list of buttons to appear.

  • Select the component and scroll to the bottom of the Options tab, open the Advanced dropdown.

  • Select the REPEATER KEY. This will be the key of the Computed field that is fetching the data and returning the array of objects. Here are some docs for reference:

You can also do this on an Option Selector, but you should select from the BUTTON REPEATER KEY dropdown instead of the REPEATER KEY dropdown.

Step 2: Transform the Data

You can do this in the same Computed Field as the fetch, but it's a good practice to do it on a different one.

  • Map it into an object with a 'key' key, and a 'text' key. Something like this:

function result( {
  full_list_key
} ) {
    return full_list_key.map(data =>{
        key: data.id,
        text: data.text
        })
}
  • Try giving it an HTML structure. For example:

function result( {
  full_list_key
} ) {
    return full_list_key.map(data =>{
        key: data.id,
        text: `<div>
            <h1>Name: ${data.name}</h1>
            <h3>Email: ${data.email}</h3>
            <img src=${data.img}>
            </div>`data.text
        })
}

Step 3: Style it

  • Add some classes so you can style it with custom selectors

function result( {
  full_list_key
} ) {
    return full_list_key.map(data =>{
        key: data.id,
        text: `<div class="repeated_container">
            <h1 class="repeated_name">Name: ${data.name}</h1>
            <h3 class="repeated_email">Email: ${data.email}</h3>
            <img class="repeated_img" src="${data.img}">
            </div>`
        })
}

Here's how to style components with custom selectors:

What if there's more data that I want to show when a user selects one of the options?

Another computed field can easily solve that. The code would look something like this:

function result( {
  full_list_key,
  options_key
} ) {
  return (full_list_key || []).find(option => option.id === options_key)
}

This would return the full selected object!

PreviousWork in Progress: How to add Chart.js to your flowNextWork in Progress: How to Create a Global Column

Last updated 1 year ago

◻️