44 */
55
66import type { Node } from '@nextcloud/files'
7- import type { AsyncComponent } from 'vue'
8-
9- import Vue , { defineAsyncComponent } from 'vue'
7+ import { createApp , defineAsyncComponent , h } from 'vue'
108
119export type ConflictResolutionResult < T extends File | FileSystemEntry | Node > = {
1210 selected : T [ ] ,
@@ -36,10 +34,12 @@ export async function openConflictPicker<T extends File|FileSystemEntry|Node>(
3634 options ?: ConflictPickerOptions ,
3735) : Promise < ConflictResolutionResult < T > > {
3836 const ConflictPicker = defineAsyncComponent ( ( ) => import ( './components/ConflictPicker.vue' ) ) as AsyncComponent
37+ const container = document . createElement ( 'div' )
38+
3939 return new Promise ( ( resolve , reject ) => {
40- const picker = new Vue ( {
40+ const picker = createApp ( {
4141 name : 'ConflictPickerRoot' ,
42- render : ( h ) => h ( ConflictPicker , {
42+ render : ( ) => h ( ConflictPicker , {
4343 props : {
4444 dirname,
4545 conflicts,
@@ -52,23 +52,23 @@ export async function openConflictPicker<T extends File|FileSystemEntry|Node>(
5252 resolve ( results )
5353
5454 // Destroy the component
55- picker . $destroy ( )
56- picker . $el ?. parentNode ?. removeChild ( picker . $el )
55+ picker . unmount ( )
56+ document . body ?. removeChild ( container )
5757 } ,
5858 cancel ( error ?: Error ) {
5959 // Reject the promise
6060 reject ( error ?? new Error ( 'Canceled' ) )
6161
6262 // Destroy the component
63- picker . $destroy ( )
64- picker . $el ?. parentNode ?. removeChild ( picker . $el )
63+ picker . unmount ( )
64+ document . body ?. removeChild ( container )
6565 } ,
6666 } ,
6767 } ) ,
6868 } )
6969
7070 // Mount the component
71- picker . $mount ( )
72- document . body . appendChild ( picker . $el )
71+ document . body . appendChild ( container )
72+ picker . mount ( container )
7373 } )
7474}
0 commit comments