Watch a live product demo 👀 See how Sanity powers richer commerce experiences

How to Concatenate String Fields in a Schema

9 replies
Last updated: Mar 19, 2021
Is it possible to define a string field in a schema that is automatically filled with other strings in the same schema concatenated together? E.g. if I have fields for firstName, middleName and lastName, and I want the field fullName to be automatically set to a concatenated version of the three other strings.
Mar 19, 2021, 12:15 PM
Hi!I think it doesn't make a lot sense to have an editable field for "Full Name"
You can show the full name in the list preview.
Or a bit harder: you can code a custom input component that displays the full name direclty in the editor.

And don't worry about querying the data, you can easily form the full name directly inside the GROQ query, no need to build that value on the front-end.
Mar 19, 2021, 12:26 PM
No, I didn't mean that the Full Name field should be editable. Actually I wanted it to be read only. I just wanted the full name available in the dataset when reading it in my application, so I don't have to concatenate it every time I want to use it. But can it be formed in the GROQ fetch query you say?
Mar 19, 2021, 12:30 PM
Here's my current GROQ query:
  useEffect(() => {
    sanityClient
      .fetch(`*[_type == "employee"]{
        name,
        slug,
        jobTitle,
        emailAddress,
        mobilePhoneNumber,
        photo{
          asset->{
            _id,
            url
          }, 
          alt,
          hotspot
        }
      }`)
      .then((data) => {
        const sortedData = data.sort((a,b) => {
          return a.name.firstName.localeCompare(b.name.firstName, 'nb');
        });
        setEmployeeList(sortedData);
      }, [])
      .catch(console.error);
  }, []);
Mar 19, 2021, 12:31 PM
You can do a document action if you need. But I don't think that would be available on a draft.
Mar 19, 2021, 12:47 PM
*[_type == "employee"]{
        "name": firstname + ' ' + middlename + ' ' + lastname,
        slug,
        jobTitle,
        emailAddress,
        mobilePhoneNumber,
        photo{
          asset->{
            _id,
            url
          }, 
          alt,
          hotspot
        }
      }
But it's true that middle name can be empty. in that case I'm not 100% how the string would look
Mar 19, 2021, 1:06 PM
I agree, it would be nice to do it in the GROQ to avoid duplicated data. I'm looking into middleName not being defined right now.
Mar 19, 2021, 1:07 PM
there's a
coalesce
function, but then the query gets complicated
Mar 19, 2021, 1:08 PM
Ah, good catch on
coalesce
. Made it easy to check on a null value (i.e. middleName not being added). This GROQ works well:
    sanityClient
      .fetch(`*[_type == "employee"] | order(name.firstName){
        name{
          firstName,
          middleName,
          lastName,
          "fullName": firstName + " " + coalesce(middleName + " ", "") + lastName
        },
        slug,
        jobTitle,
        emailAddress,
        mobilePhoneNumber,
        photo{
          asset->{
            _id,
            url
          }, 
          alt,
          hotspot
        },
      }`)

Mar 19, 2021, 1:13 PM

Sanity.io – build remarkable experiences at scale

Sanity is a customizable solution that treats content as data to power your digital business. Free to get started, and pay-as-you-go on all plans.

Related answers

Get more help in the community Slack

TopicCategoriesFeaturedRepliesLast Updated
After adding the subtitle and running this code npm run graphql-deploy It does nothingSep 15, 2020
how to limit a reference to just one entry in Studio reference input side versus the default as-many-entries-as-you-fill-in-an-array...Sep 18, 2020
Is it possible to fetch more than one "_type" using GROQ?Nov 2, 2020
I want to add a view with the Structure builder (S.view.component) where I list similar documents based on the title. What...Sep 23, 2020
Is there a structure builder example where the format of each preview for the document list is modified?Feb 3, 2021
I have an array of references to a country schema type but it always just returns NULL values for meJan 30, 2021
Hi, I need help with a query for getting the url of an image asset. Here is what I've been trying, but I only get the _ref...Dec 1, 2020
Sanity UI looks brilliant :smiley: Is something like the current date picker possible at the moment? I’m not sure if anicon...Dec 21, 2020
Hey everyone. I have been coding and may have potentially accidentally deleted something. Does anyone know how to resolve...Dec 26, 2020
Hello everyone and happy new year :raised_hands::skin-tone-2:, I have a problem with outputting Portable Text :disappointed:...Jan 1, 2021

Related contributions

Clean Next.js + Sanity app
- Template

Official(made by Sanity team)

A clean example of Next.js with embedded Sanity ready for recomposition.

Cody Olsen
Go to Clean Next.js + Sanity app

Blog with Built-in Content Editing
- Template

Official(made by Sanity team)

A Sanity-powered blog with built-in content editing and instant previews.

Go to Blog with Built-in Content Editing