From f8a6fd66c0a31fbd1b244ea5d4ec1404de04aca8 Mon Sep 17 00:00:00 2001 From: Duncan McClean Date: Fri, 13 Feb 2026 12:07:14 +0000 Subject: [PATCH 1/5] include publish container in field actions payload --- resources/js/components/fieldtypes/Fieldtype.vue | 1 + resources/js/components/fieldtypes/fieldtype.js | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/resources/js/components/fieldtypes/Fieldtype.vue b/resources/js/components/fieldtypes/Fieldtype.vue index e4b824a7678..a1dfdf0dd6e 100644 --- a/resources/js/components/fieldtypes/Fieldtype.vue +++ b/resources/js/components/fieldtypes/Fieldtype.vue @@ -93,6 +93,7 @@ export default { update: this.update, updateMeta: this.updateMeta, isReadOnly: this.isReadOnly, + container: this.injectedPublishContainer, }; }, }, diff --git a/resources/js/components/fieldtypes/fieldtype.js b/resources/js/components/fieldtypes/fieldtype.js index ce3871a709f..df0057884db 100644 --- a/resources/js/components/fieldtypes/fieldtype.js +++ b/resources/js/components/fieldtypes/fieldtype.js @@ -5,8 +5,11 @@ import props from './props.js'; import { computed, ref, watch } from 'vue'; import FieldAction from '@/components/field-actions/FieldAction.js'; import toFieldActions from '@/components/field-actions/toFieldActions.js'; +import { injectPublishContext } from "@ui"; const use = function(emit, props) { + const { container } = injectPublishContext(); + const name = computed(() => { if (props.namePrefix) { return `${props.namePrefix}[${props.handle}]`; @@ -63,7 +66,7 @@ const use = function(emit, props) { }; const fieldActionPayload = computed(() => ({ - // vm: this, + // vm: null, fieldPathPrefix: props.fieldPathPrefix, handle: props.handle, value: props.value, @@ -72,6 +75,7 @@ const use = function(emit, props) { update, updateMeta, isReadOnly: isReadOnly.value, + container, })); const internalFieldActions = ref([]); From 62e92f65d6ad1152c62ffb9ae070eef2e5be8efe Mon Sep 17 00:00:00 2001 From: Duncan McClean Date: Fri, 13 Feb 2026 14:50:37 +0000 Subject: [PATCH 2/5] set payloads --- resources/js/components/fieldtypes/bard/Set.vue | 9 +++++---- resources/js/components/fieldtypes/replicator/Set.vue | 10 +++++++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/resources/js/components/fieldtypes/bard/Set.vue b/resources/js/components/fieldtypes/bard/Set.vue index e7f6824eb75..f7af58700f7 100644 --- a/resources/js/components/fieldtypes/bard/Set.vue +++ b/resources/js/components/fieldtypes/bard/Set.vue @@ -265,18 +265,19 @@ export default { fieldActionPayload() { return { - // vm: this, - // fieldVm: this.fieldVm, - // fieldPathPrefix: this.fieldVm.fieldPathPrefix || this.fieldVm.handle, + vm: this, + fieldVm: this.fieldVm, + fieldPathPrefix: this.fieldPathPrefix, index: this.index, values: this.values, config: this.config, - // meta: this.meta, + meta: this.meta, update: (handle, value) => this.publishContainer.setFieldValue(`${this.fieldPathPrefix}.${handle}`, value), updateMeta: (handle, value) => this.publishContainer.setFieldMeta(`${this.metaPathPrefix}.${handle}`, value), isReadOnly: this.isReadOnly, + container: this.publishContainer, }; }, diff --git a/resources/js/components/fieldtypes/replicator/Set.vue b/resources/js/components/fieldtypes/replicator/Set.vue index d00b36f1052..03a133a2b66 100644 --- a/resources/js/components/fieldtypes/replicator/Set.vue +++ b/resources/js/components/fieldtypes/replicator/Set.vue @@ -19,6 +19,7 @@ import PreviewHtml from '@/components/fieldtypes/replicator/PreviewHtml.js'; import FieldAction from '@/components/field-actions/FieldAction.js'; import toFieldActions from '@/components/field-actions/toFieldActions.js'; import { reveal } from '@api'; +import { data_get } from "@/bootstrap/globals.js"; const emit = defineEmits(['collapsed', 'expanded', 'duplicated', 'removed']); @@ -44,7 +45,9 @@ const props = defineProps({ const { setFieldValue, setFieldMeta, - previews + previews, + container, + meta } = injectContainerContext(); const fieldPathPrefix = computed(() => `${props.fieldPath}.${props.index}`); const metaPathPrefix = computed(() => `${props.metaPath}.existing.${props.id}`); @@ -65,14 +68,15 @@ const isSetGroupVisible = computed(() => replicatorSets.length > 1 && setGroup.v const fieldActionPayload = computed(() => ({ // vm: this, // fieldVm: this.fieldVm, - // fieldPathPrefix: this.fieldPathPrefix, + fieldPathPrefix: fieldPathPrefix.value, index: props.index, values: props.values, config: props.config, - // meta: this.meta, + meta: data_get(meta.value, metaPathPrefix.value), update: (handle, value) => setFieldValue(`${fieldPathPrefix.value}.${handle}`, value), updateMeta: (handle, value) => setFieldMeta(`${metaPathPrefix.value}.${handle}`, value), isReadOnly: props.readOnly, + container, })); const fieldActions = computed(() => { From 785a6d065e0d3c1586ea5e1626e5b84ac36e671b Mon Sep 17 00:00:00 2001 From: Duncan McClean Date: Fri, 13 Feb 2026 15:23:02 +0000 Subject: [PATCH 3/5] use progress from the window instead --- resources/js/components/field-actions/FieldAction.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/js/components/field-actions/FieldAction.js b/resources/js/components/field-actions/FieldAction.js index 53963ee0d20..d5117762ec0 100644 --- a/resources/js/components/field-actions/FieldAction.js +++ b/resources/js/components/field-actions/FieldAction.js @@ -60,7 +60,7 @@ export default class FieldAction { const response = this.#run(payload); if (response instanceof Promise) { - const progress = this.#payload.vm.$progress; + const progress = Statamic.$progress; const name = this.#payload.fieldPathPrefix ?? this.#payload.handle; progress.loading(name, true); response.finally(() => progress.loading(name, false)); From ef1655bfca943d4cc123c8cf4a2c18481153c301 Mon Sep 17 00:00:00 2001 From: Duncan McClean Date: Fri, 13 Feb 2026 15:54:39 +0000 Subject: [PATCH 4/5] remove `vm` and `fieldVm` keys --- resources/js/components/fieldtypes/Fieldtype.vue | 1 - resources/js/components/fieldtypes/bard/Set.vue | 2 -- resources/js/components/fieldtypes/fieldtype.js | 1 - resources/js/components/fieldtypes/replicator/Set.vue | 2 -- 4 files changed, 6 deletions(-) diff --git a/resources/js/components/fieldtypes/Fieldtype.vue b/resources/js/components/fieldtypes/Fieldtype.vue index a1dfdf0dd6e..e6c693f8e6d 100644 --- a/resources/js/components/fieldtypes/Fieldtype.vue +++ b/resources/js/components/fieldtypes/Fieldtype.vue @@ -84,7 +84,6 @@ export default { fieldActionPayload() { return { - vm: this, fieldPathPrefix: this.fieldPathPrefix, handle: this.handle, value: this.value, diff --git a/resources/js/components/fieldtypes/bard/Set.vue b/resources/js/components/fieldtypes/bard/Set.vue index f7af58700f7..f0ee1f0c38e 100644 --- a/resources/js/components/fieldtypes/bard/Set.vue +++ b/resources/js/components/fieldtypes/bard/Set.vue @@ -265,8 +265,6 @@ export default { fieldActionPayload() { return { - vm: this, - fieldVm: this.fieldVm, fieldPathPrefix: this.fieldPathPrefix, index: this.index, values: this.values, diff --git a/resources/js/components/fieldtypes/fieldtype.js b/resources/js/components/fieldtypes/fieldtype.js index df0057884db..f5aca77ae08 100644 --- a/resources/js/components/fieldtypes/fieldtype.js +++ b/resources/js/components/fieldtypes/fieldtype.js @@ -66,7 +66,6 @@ const use = function(emit, props) { }; const fieldActionPayload = computed(() => ({ - // vm: null, fieldPathPrefix: props.fieldPathPrefix, handle: props.handle, value: props.value, diff --git a/resources/js/components/fieldtypes/replicator/Set.vue b/resources/js/components/fieldtypes/replicator/Set.vue index 03a133a2b66..264a4033fcb 100644 --- a/resources/js/components/fieldtypes/replicator/Set.vue +++ b/resources/js/components/fieldtypes/replicator/Set.vue @@ -66,8 +66,6 @@ const setGroup = computed(() => { const isSetGroupVisible = computed(() => replicatorSets.length > 1 && setGroup.value.display); const fieldActionPayload = computed(() => ({ - // vm: this, - // fieldVm: this.fieldVm, fieldPathPrefix: fieldPathPrefix.value, index: props.index, values: props.values, From ff5cfabec924e51e9cfa0042cef9c45eaf12b4a9 Mon Sep 17 00:00:00 2001 From: Duncan McClean Date: Fri, 13 Feb 2026 16:07:59 +0000 Subject: [PATCH 5/5] fallback to empty object for the test --- resources/js/components/fieldtypes/fieldtype.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/js/components/fieldtypes/fieldtype.js b/resources/js/components/fieldtypes/fieldtype.js index f5aca77ae08..252fe824d6c 100644 --- a/resources/js/components/fieldtypes/fieldtype.js +++ b/resources/js/components/fieldtypes/fieldtype.js @@ -8,7 +8,7 @@ import toFieldActions from '@/components/field-actions/toFieldActions.js'; import { injectPublishContext } from "@ui"; const use = function(emit, props) { - const { container } = injectPublishContext(); + const { container } = injectPublishContext() ?? {}; const name = computed(() => { if (props.namePrefix) {