-
Notifications
You must be signed in to change notification settings - Fork 9
/
filepicker.ts
119 lines (102 loc) · 2.97 KB
/
filepicker.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/// <reference types="@nextcloud/typings" />
declare const OC: Nextcloud.v16.OC | Nextcloud.v17.OC | Nextcloud.v18.OC | Nextcloud.v19.OC | Nextcloud.v20.OC;
export enum FilePickerType {
Choose = 1,
Move = 2,
Copy = 3,
CopyMove = 4,
}
export class FilePicker {
private title: string
private multiSelect: boolean
private mimeTypeFiler: string[]
private modal: boolean
private type: FilePickerType
private directoriesAllowed: boolean
private path?: string
public constructor(title: string,
multiSelect: boolean,
mimeTypeFilter: string[],
modal: boolean,
type: FilePickerType,
directoriesAllowed: boolean,
path?: string) {
this.title = title
this.multiSelect = multiSelect
this.mimeTypeFiler = mimeTypeFilter
this.modal = modal
this.type = type
this.directoriesAllowed = directoriesAllowed
this.path = path
}
public pick(): Promise<string> {
return new Promise((res, rej) => {
OC.dialogs.filepicker(
this.title,
res,
this.multiSelect,
this.mimeTypeFiler,
this.modal,
this.type,
this.path,
{
allowDirectoryChooser: this.directoriesAllowed
}
)
})
}
}
export class FilePickerBuilder {
private title: string
private multiSelect: boolean = false
private mimeTypeFiler: string[] = []
private modal: boolean = true
private type: FilePickerType = FilePickerType.Choose
private directoriesAllowed: boolean = false
private path?: string
public constructor(title: string) {
this.title = title
}
public setMultiSelect(ms: boolean): FilePickerBuilder {
this.multiSelect = ms
return this
}
public addMimeTypeFilter(filter: string): FilePickerBuilder {
this.mimeTypeFiler.push(filter)
return this
}
public setMimeTypeFilter(filter: string[]): FilePickerBuilder {
this.mimeTypeFiler = filter
return this
}
public setModal(modal: boolean): FilePickerBuilder {
this.modal = modal
return this
}
public setType(type: FilePickerType): FilePickerBuilder {
this.type = type
return this
}
public allowDirectories(allow: boolean = true): FilePickerBuilder {
this.directoriesAllowed = allow
return this
}
public startAt(path: string): FilePickerBuilder {
this.path = path
return this
}
public build(): FilePicker {
return new FilePicker(
this.title,
this.multiSelect,
this.mimeTypeFiler,
this.modal,
this.type,
this.directoriesAllowed,
this.path
)
}
}
export function getFilePickerBuilder(title: string): FilePickerBuilder {
return new FilePickerBuilder(title)
}