33 * SPDX-License-Identifier: AGPL-3.0-or-later
44 */
55
6- if ( ! window . _vue_richtext_custom_picker_elements ) {
7- window . _vue_richtext_custom_picker_elements = { }
8- }
6+ import { logger } from '../../utils/logger.ts'
7+
8+ window . _vue_richtext_custom_picker_elements ??= { }
9+ window . _registerCustomPickerElement ??= registerCustomPickerElement
910
1011/**
1112 * Representation of the render callback result
1213 * It contains a dom element and an object (Vue instance or other fancy things)
1314 */
14- class NcCustomPickerRenderResult {
15+ export class NcCustomPickerRenderResult {
16+
17+ public element : HTMLElement
18+ public object : object
1519
1620 /**
17- * @param { HTMLElement } element The HTML element
18- * @param { object } object The object
21+ * @param element - The HTML element
22+ * @param object - The object
1923 */
20- constructor ( element , object ) {
24+ constructor ( element : HTMLElement , object : object ) {
2125 this . element = element
2226 this . object = object
2327 }
2428
2529}
2630
27- const isCustomPickerElementRegistered = ( id ) => {
31+ interface CustomPickerElementProps {
32+ providerId : number
33+ accessible : boolean
34+ }
35+
36+ type CustomPickerElementRegistrationCallback = ( el : HTMLElement , options : CustomPickerElementProps ) => void
37+ type CustomPickerElementDestroyCallback = ( el : HTMLElement , result : NcCustomPickerRenderResult ) => void
38+
39+ export interface CustomPickerElement {
40+ id : string
41+ size : 'small' | 'normal' | 'large' | 'full'
42+
43+ callback : CustomPickerElementRegistrationCallback
44+ onDestroy : CustomPickerElementDestroyCallback
45+ }
46+
47+ /**
48+ * @param id - Id of the element to check
49+ */
50+ export function isCustomPickerElementRegistered ( id : string ) : boolean {
2851 return ! ! window . _vue_richtext_custom_picker_elements [ id ]
2952}
3053
31- const getCustomPickerElementSize = ( id ) => {
54+ /**
55+ * @param id - Id of the element to get
56+ */
57+ export function getCustomPickerElementSize ( id : string ) : 'small' | 'normal' | 'large' | 'full' | null {
3258 const size = window . _vue_richtext_custom_picker_elements [ id ] ?. size
3359 if ( [ 'small' , 'normal' , 'large' , 'full' ] . includes ( size ) ) {
3460 return size
3561 }
3662 return null
3763}
3864
39- const registerCustomPickerElement = ( id , callback , onDestroy = ( el ) => { } , size = 'large' ) => {
65+ /**
66+ * @param id - Id of element to register
67+ * @param callback - Render callback
68+ * @param onDestroy - Cleanup callback
69+ * @param size - Size of the element
70+ */
71+ export function registerCustomPickerElement (
72+ id : string ,
73+ callback : CustomPickerElementRegistrationCallback ,
74+ onDestroy : CustomPickerElementDestroyCallback = ( ) => { } ,
75+ size : CustomPickerElement [ 'size' ] = 'large' ,
76+ ) {
4077 if ( window . _vue_richtext_custom_picker_elements [ id ] ) {
41- console . error ( ' Custom reference picker element for id ' + id + ' already registered' )
78+ logger . error ( ` Custom reference picker element for id ${ id } already registered` )
4279 return
4380 }
4481
@@ -50,30 +87,31 @@ const registerCustomPickerElement = (id, callback, onDestroy = (el) => {}, size
5087 }
5188}
5289
53- const renderCustomPickerElement = ( el , { providerId, accessible } ) => {
90+ /**
91+ * @param el - element to render to
92+ * @param options - Element options
93+ */
94+ export function renderCustomPickerElement ( el : HTMLElement , options : CustomPickerElementProps ) {
95+ const { providerId, accessible } = options
5496 if ( ! window . _vue_richtext_custom_picker_elements [ providerId ] ) {
55- console . error ( ' Custom reference picker element for reference provider ID ' + providerId + ' not registered' )
97+ logger . error ( ` Custom reference picker element for reference provider ID ${ providerId } not registered` )
5698 return
5799 }
58100
59- return window . _vue_richtext_custom_picker_elements [ providerId ] . callback ( el , { providerId, accessible } )
101+ return window . _vue_richtext_custom_picker_elements [ providerId ]
102+ . callback ( el , { providerId, accessible } )
60103}
61104
62- const destroyCustomPickerElement = ( providerId , el , renderResult ) => {
105+ /**
106+ * @param providerId - Provider id of element to destroy
107+ * @param el - The element to destroy element from
108+ * @param renderResult - The render result
109+ */
110+ export function destroyCustomPickerElement ( providerId : string , el : HTMLElement , renderResult : NcCustomPickerRenderResult ) {
63111 if ( ! window . _vue_richtext_custom_picker_elements [ providerId ] ) {
64112 return
65113 }
66114
67- window . _vue_richtext_custom_picker_elements [ providerId ] . onDestroy ( el , renderResult )
68- }
69-
70- window . _registerCustomPickerElement = registerCustomPickerElement
71-
72- export {
73- NcCustomPickerRenderResult ,
74- registerCustomPickerElement ,
75- renderCustomPickerElement ,
76- destroyCustomPickerElement ,
77- isCustomPickerElementRegistered ,
78- getCustomPickerElementSize ,
115+ window . _vue_richtext_custom_picker_elements [ providerId ]
116+ . onDestroy ( el , renderResult )
79117}
0 commit comments