diff --git a/src/components/dialog/GlobalDialog.vue b/src/components/dialog/GlobalDialog.vue index f3c7bf073..a20b030b9 100644 --- a/src/components/dialog/GlobalDialog.vue +++ b/src/components/dialog/GlobalDialog.vue @@ -7,6 +7,7 @@ class="global-dialog" v-bind="item.dialogComponentProps" :auto-z-index="false" + :pt="item.dialogComponentProps.pt" :pt:mask:style="{ zIndex: baseZIndex + index + 1 }" :aria-labelledby="item.key" > diff --git a/src/stores/dialogStore.ts b/src/stores/dialogStore.ts index 548827bcc..925a6b553 100644 --- a/src/stores/dialogStore.ts +++ b/src/stores/dialogStore.ts @@ -1,13 +1,22 @@ // We should consider moving to https://primevue.org/dynamicdialog/ once everything is in Vue. // Currently we need to bridge between legacy app code and Vue app with a Pinia store. +import { merge } from 'lodash' import { defineStore } from 'pinia' +import type { DialogPassThroughOptions } from 'primevue/dialog' import { type Component, markRaw, ref } from 'vue' -interface DialogComponentProps { +import type GlobalDialog from '@/components/dialog/GlobalDialog.vue' + +interface CustomDialogComponentProps { maximizable?: boolean + maximized?: boolean onClose?: () => void + pt?: DialogPassThroughOptions } +type DialogComponentProps = InstanceType['$props'] & + CustomDialogComponentProps + interface DialogInstance { key: string visible: boolean @@ -15,7 +24,7 @@ interface DialogInstance { headerComponent?: Component component: Component contentProps: Record - dialogComponentProps: Record + dialogComponentProps: DialogComponentProps } export interface ShowDialogOptions { @@ -90,13 +99,13 @@ export const useDialogStore = defineStore('dialog', () => { onAfterHide: () => { closeDialog(dialog) }, - pt: { + pt: merge(options.dialogComponentProps?.pt || {}, { root: { onMousedown: () => { riseDialog(dialog) } } - } + }) } } dialogStack.value.push(dialog)