Unlock seamless workflows and faster delivery with our latest releases - Join the deep dive

Issue with filtering out a document by ID in Sanity Studio using desk structure.

8 replies
Last updated: Apr 20, 2021
I’m trying to figure out how to filter out a document by an ID in sanity studio using desk structure
S.listItem()
        .title("Audit template")
        .icon(FaBible)
        .child(
          S.document()
            .schemaType("revisionTemplate")
            .documentId("sourceDocument")
        ),
      S.listItem()
        .title("Audits")
        .child(
          S.document()
            .filter((item) => item.getId() !== "sourceDocument")
            .schemaType("revisionTemplate")
        ),
Here I’m trying to keep the version of revisionTemplate with a set documentId seperated from all the instances of the document
Apr 20, 2021, 2:31 PM
Could you try:

.filter(item => !['sourceDocument'].includes(item.getId()))
Apr 20, 2021, 2:32 PM
I should have included the error
TypeError: _structureBuilder.default.document(...)
  .filter is not a function
It seems like I can’t call filter where I am trying to call it
Apr 20, 2021, 2:34 PM
And
...S.documentTypeListItems()
instead of
S.document()
.
Apr 20, 2021, 2:35 PM
You may also need the top-level to be
S.list()
containing
.items([...])
. In
.items([])
are
S.listItem()
(Audit template) and
…S.documentTypeListItems()
. If you scroll up a few threads you’ll see Giacomo’s example—I think that structure would work.
Apr 20, 2021, 2:38 PM
Hmm adding it to documentTypeListItems seems to produce the same error
Will check out the example
🙂
Apr 20, 2021, 2:50 PM
I think I already have that, I tried the filter to S.documentTypeListItems but I still see the document under my audits tab
S.listItem()
        .title("Audit template")
        .icon(FaBible)
        .child(
          S.document()
            .schemaType("revisionTemplate")
            .documentId("sourceDocument")
        ),
      S.listItem()
        .title("Audits")
        .child(S.documentTypeList("revisionTemplate").title("Audits")),

      ...S.documentTypeListItems().filter(
        hiddenDocTypes,
        (item) => !["sourceDocument"].includes(item.getId())
      ),

https://pastebin.com/TW0bPQ20
Apr 20, 2021, 2:54 PM
Hmm I added the document to my hiddenDocTypes but I setill se the document when I query for the documentTypeList

S.listItem()
        .title("Audits")
        .child(S.documentTypeList("revisionTemplate").title("Audits")),

      S.listItem()
        .title("Audit template")
        .icon(FaBible)
        .child(
          S.document()
            .schemaType("revisionTemplate")
            .documentId("sourceDocument")
        ),

https://pastebin.com/Z9QV91D9
Apr 20, 2021, 3:00 PM
Turns out sanity has something nifty called filterThis worked:

S.listItem()
        .title("Audits")
        .child(
          S.documentTypeList("revisionTemplate")
            .title("Audits")
            .filter('_type == "revisionTemplate" && _id!="sourceDocument"')
        ),

Apr 20, 2021, 3:03 PM

Sanity– build remarkable experiences at scale

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

Was this answer helpful?