Skip to content

Commit a63857e

Browse files
committed
fix: patchOptions should withMarkRaw and its options should be Partial of UseModalOptions
1 parent b0cda9f commit a63857e

File tree

2 files changed

+14
-8
lines changed

2 files changed

+14
-8
lines changed

packages/vue-final-modal/src/Modal.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export type UseModalOptionsPrivate<
1616
> = {
1717
defaultModelValue?: boolean
1818
context?: Vfm
19-
component: Component
19+
component?: Component
2020
attrs?: ModalProps
2121
slots?: {
2222
default: ModalSlot<DefaultSlotProps>
@@ -45,7 +45,7 @@ export type UseModalReturnType<ModalProps extends ComponentProps, DefaultSlotPro
4545
options: UseModalOptions<ModalProps, DefaultSlotProps>
4646
open: () => Promise<string>
4747
close: () => Promise<string>
48-
patchOptions: (options: UseModalOptions<ModalProps, DefaultSlotProps>) => void
48+
patchOptions: (options: Partial<UseModalOptions<ModalProps, DefaultSlotProps>>) => void
4949
destroy: () => void
5050
}
5151

packages/vue-final-modal/src/useApi.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { isString, tryOnUnmounted } from '@vueuse/core'
22
import { computed, inject, markRaw, reactive, useAttrs } from 'vue'
3+
import VueFinalModal from './components/VueFinalModal/VueFinalModal.vue'
34
import type CoreModal from './components/CoreModal/CoreModal.vue'
45
import { internalVfmSymbol, vfmSymbol } from './injectionSymbols'
56
import type { ComponentProps, InternalVfm, ModalSlot, UseModalOptions, UseModalOptionsPrivate, UseModalReturnType, Vfm } from './Modal'
@@ -26,7 +27,7 @@ function withMarkRaw<
2627
const { component, slots: innerSlots, ...rest } = options
2728

2829
const slots = typeof innerSlots === 'undefined'
29-
? undefined
30+
? {}
3031
: Object.fromEntries<ModalSlot>(Object.entries(innerSlots).map(([name, maybeComponent]) => {
3132
if (isString(maybeComponent))
3233
return [name, maybeComponent] as const
@@ -43,7 +44,7 @@ function withMarkRaw<
4344

4445
return {
4546
...rest,
46-
component: markRaw(component),
47+
component: markRaw(component || VueFinalModal),
4748
slots,
4849
}
4950
}
@@ -58,6 +59,7 @@ function defineModal<
5859
const options = reactive({
5960
id: Symbol('useModal'),
6061
modelValue: !!_options?.defaultModelValue,
62+
attrs: {},
6163
...withMarkRaw(_options),
6264
}) as UseModalOptionsPrivate<ModalProps, DefaultSlotProps>
6365

@@ -84,10 +86,14 @@ function defineModal<
8486
})
8587
}
8688

87-
function patchOptions(_options: UseModalOptions<ModalProps, DefaultSlotProps>) {
88-
Object.assign(options?.attrs || {}, _options?.attrs || {})
89-
Object.assign(options?.component || {}, _options?.component || {})
90-
Object.assign(options?.slots || {}, _options?.slots || {})
89+
function patchOptions(_options: Partial<UseModalOptions<ModalProps, DefaultSlotProps>>) {
90+
const _patchOptions = withMarkRaw(_options)
91+
if (_patchOptions?.attrs)
92+
Object.assign(options.attrs || {}, _patchOptions.attrs)
93+
if (_patchOptions?.component)
94+
Object.assign(options.component || {}, _patchOptions.component)
95+
if (_patchOptions?.slots)
96+
Object.assign(options.slots || {}, _patchOptions.slots)
9197
}
9298

9399
function destroy(): void {

0 commit comments

Comments
 (0)