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.
Here
endDate
depends on the value of a field called
duration
...
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";
},
},
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
condition
:
// 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 (
row.id !== item.id && // Not current row
item.primary // Primary is checked
) {
show = false
return true
}
})
return show
},
}
}
Hey @BrianJM I've just seen this. Great that you solved your particular use case. Thanks for sharing the answer.
Star
Discord
online
Get help straight from the Payload team with an Enterprise License.