Condition inside Array type field

default discord avatar
2 weeks ago

I have an array type with some fields, for each array of fields I have a value that depends on another value, a condition. These values are accessible by the index of the array. So for example

if (data?.array?.[0].valueX === Y) return true

but then when I add more arrays how can I control the condition to all the items in the array. I tried with a for loop, array.some, but it doesn't work.



depends on the value of a field called

        name: "endDate",
        type: "date",
        admin: {
            condition: (data) => {
                let result = false;
                for (let i = 0; i < data?.array?.length; i++) {
                    if (data?.array?.[i]?.duration === "limitedTime") {
                        result = true;
                return result;

This has worked for me (easy):

        admin: {
            condition: (data, siblingData) => {
                return siblingData?.duration === "limitedTime";
  • default discord avatar
    2 weeks ago

    I found this seeking an answer to a similar question. In my case, I'm trying to hide a checkbox field in an array where only one row checkbox can be checked/shown. For example:

    I have an array of phone numbers. All have a "primary" checkbox but only one can be checked (in the entire array). If one is checked, I want to hide all "primary" checkboxes that are not checked. If I have 4 phone numbers, only one can be the primary.

    Any ideas? All I can come up so far is using a hook but I'd like to control the display.

    I resolved my question with the following



    // src/fields/checkbox/index.ts
    import { CheckboxField } from 'payload/types'
    export const primaryCheckboxField: CheckboxField = {
      name: 'primary', // required
      type: 'checkbox', // required
      label: 'Primary',
      defaultValue: false,
      admin: {
        condition: (data, siblingData, { user }) => {
          const phones = data?.phones || [],
                row = {
                  id: siblingData?.id,
                  primary: siblingData?.primary,
          let show = true
          // Current row; primary is checked
          if (row.primary) return true
          // Another array item is checked
          phones.some(item => {
            if (
     !== &&   // Not current row
              item.primary            // Primary is checked
            ) {
              show = false
              return true
          return show
  • default discord avatar
    2 weeks ago

    Hey @brianjm I've just seen this. Great that you solved your particular use case. Thanks for sharing the answer.

Open the post
Continue the discussion in Discord
Like what we're doing?
Star us on GitHub!


Connect with the Payload Community on Discord



Can't find what you're looking for?

Get help straight from the Payload team with an Enterprise License.