From 354581218952bca6711e2a4781486353f342c41d Mon Sep 17 00:00:00 2001 From: Duncan McClean Date: Tue, 21 Jul 2026 11:03:40 +0100 Subject: [PATCH] Pass field prefix to custom conditions Co-Authored-By: Claude Fable 5 --- .../js/components/field-conditions/Validator.js | 1 + .../js/tests/FieldConditionsValidator.test.js | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/resources/js/components/field-conditions/Validator.js b/resources/js/components/field-conditions/Validator.js index 123a60d1648..7d08b41c001 100644 --- a/resources/js/components/field-conditions/Validator.js +++ b/resources/js/components/field-conditions/Validator.js @@ -264,6 +264,7 @@ export default class { values: this.values, root: this.rootValues, fieldPath: this.currentFieldPath, + prefix: this.field.prefix, ...this.extraPayload, }); diff --git a/resources/js/tests/FieldConditionsValidator.test.js b/resources/js/tests/FieldConditionsValidator.test.js index d3db54895a0..742c84dca0c 100644 --- a/resources/js/tests/FieldConditionsValidator.test.js +++ b/resources/js/tests/FieldConditionsValidator.test.js @@ -480,6 +480,20 @@ test('it can call a custom function', () => { expect(Fields.showField({ unless: 'custom reallyLovesAnimals' })).toBe(true); }); +test('it can call a custom function that uses `prefix` param to evaluate prefixed fields', () => { + setValues({ + first_favorite_animals: ['cats', 'dogs', 'giraffes', 'lions'], + second_favorite_animals: ['cats', 'dogs'], + }); + + Statamic.$conditions.add('reallyLovesAnimals', function ({ prefix, values }) { + return values[`${prefix}favorite_animals`].length > 3; + }); + + expect(Fields.showField({ prefix: 'first_', if: 'custom reallyLovesAnimals' })).toBe(true); + expect(Fields.showField({ prefix: 'second_', if: 'custom reallyLovesAnimals' })).toBe(false); +}); + test('it can call a custom function that uses `fieldPath` param to evaluate nested fields', () => { setValues({ nested: [{ favorite_animals: ['cats', 'dogs'] }, { favorite_animals: ['cats', 'dogs', 'giraffes', 'lions'] }],