From 434940881d465e8e60a9ec8698cc5091ed31a584 Mon Sep 17 00:00:00 2001 From: lazerg Date: Thu, 6 Aug 2026 17:39:36 +0500 Subject: [PATCH] Omit hidden fieldtype values when their conditions fail --- resources/js/components/ui/Publish/Field.vue | 11 ++- resources/js/components/ui/Publish/Fields.vue | 11 +-- resources/js/tests/components/Fields.test.js | 85 +++++++++++++++++++ 3 files changed, 97 insertions(+), 10 deletions(-) create mode 100644 resources/js/tests/components/Fields.test.js diff --git a/resources/js/components/ui/Publish/Field.vue b/resources/js/components/ui/Publish/Field.vue index 7e46c3a8657..aa918a8d86b 100644 --- a/resources/js/components/ui/Publish/Field.vue +++ b/resources/js/components/ui/Publish/Field.vue @@ -57,6 +57,7 @@ const { } = injectFieldsContext(); const { direction } = useUiDirection(); +const isFormSubmission = inject('isFormSubmission', false); const asConfig = computed(() => fieldsAsConfig.value ?? containerAsConfig.value ?? false); const fieldPathPrefix = computed(() => props.fieldPathPrefix || injectedFieldPathPrefix.value); @@ -155,6 +156,12 @@ const shouldShowField = computed(() => { ).showField(props.config, fullPath.value); }); +// Hidden fieldtypes are mounted like any other field so they take part in field +// conditions, but they only become visible on a form submission. +const isHiddenFieldtype = computed(() => props.config.type === 'hidden' && !isFormSubmission); + +const shouldRenderField = computed(() => shouldShowField.value && !isHiddenFieldtype.value); + const shouldShowLabelText = computed(() => !props.config.hide_display); // Whether the label renders anything visible. When it doesn't, we avoid rendering @@ -169,6 +176,8 @@ const shouldShowLabel = computed( ); const shouldShowFieldPreviews = computed(() => { + if (isHiddenFieldtype.value) return false; + if (! props.config.replicator_preview) return false; return inject('showReplicatorFieldPreviews', false); @@ -238,7 +247,7 @@ const fieldtypeComponentEvents = computed(() => ({ :shouldShowField="shouldShowField" > fieldsAsConfig.value !== undefined ? fieldsAsConfig.value : containerAsConfig.value); - -const fields = computed(() => { - let fields = injectedFields.value; - if (!isFormSubmission) fields = fields.filter(field => field.type !== 'hidden'); - return fields; -});