@@ -21,6 +21,11 @@ import { memoize } from '../common/memoize'
21
21
import { createPortal } from 'react-dom'
22
22
import { ModalProps } from '../contexts/modal-context/modal-context'
23
23
import { InjectableTarget } from '../contexts/engine-context/engine-context'
24
+ import { Target } from '../services/target/target.entity'
25
+
26
+ const getRootContext = ( context : IContextNode ) : IContextNode => {
27
+ return context . parentNode ? getRootContext ( context . parentNode ) : context
28
+ }
24
29
25
30
interface WidgetProps {
26
31
context : TransferableContext
@@ -29,6 +34,7 @@ interface WidgetProps {
29
34
authorId : string
30
35
}
31
36
notify : ( modalProps : ModalProps ) => void
37
+ query : ( target : Target ) => TransferableContext | null
32
38
linkDb : {
33
39
get : (
34
40
ctx : TransferableContext ,
@@ -103,6 +109,15 @@ const ContextHandler: FC<{ context: IContextNode; insPoints: InsertionPointWithE
103
109
[ context ]
104
110
)
105
111
112
+ const handleContextQuery = useCallback (
113
+ ( target : Target ) : TransferableContext | null => {
114
+ const rootContext = getRootContext ( context )
115
+ const foundContext = TargetService . findContextByTarget ( target , rootContext )
116
+ return foundContext ? buildTransferableContext ( foundContext ) : null
117
+ } ,
118
+ [ context ]
119
+ )
120
+
106
121
const handleEnableEditMode = useCallback ( ( ) => {
107
122
setIsEditMode ( true )
108
123
} , [ setIsEditMode ] )
@@ -157,6 +172,7 @@ const ContextHandler: FC<{ context: IContextNode; insPoints: InsertionPointWithE
157
172
allUserLinks = { links }
158
173
apps = { apps }
159
174
isEditMode = { isEditMode }
175
+ onContextQuery = { handleContextQuery }
160
176
onCreateUserLink = { createUserLink }
161
177
onDeleteUserLink = { deleteUserLink }
162
178
onEnableEditMode = { handleEnableEditMode }
@@ -175,6 +191,7 @@ const ContextHandler: FC<{ context: IContextNode; insPoints: InsertionPointWithE
175
191
allUserLinks = { links }
176
192
apps = { apps }
177
193
isEditMode = { isEditMode }
194
+ onContextQuery = { handleContextQuery }
178
195
onCreateUserLink = { createUserLink }
179
196
onDeleteUserLink = { deleteUserLink }
180
197
onEnableEditMode = { handleEnableEditMode }
@@ -190,6 +207,7 @@ const ContextHandler: FC<{ context: IContextNode; insPoints: InsertionPointWithE
190
207
key = { c . id }
191
208
transferableContext = { transferableContext }
192
209
controller = { c }
210
+ onContextQuery = { handleContextQuery }
193
211
onGetLinkDataCurry = { handleGetLinkDataCurry }
194
212
onSetLinkDataCurry = { handleSetLinkDataCurry }
195
213
/>
@@ -206,6 +224,7 @@ const InsPointHandler: FC<{
206
224
allUserLinks : BosUserLink [ ]
207
225
apps : AppMetadata [ ]
208
226
isEditMode : boolean
227
+ onContextQuery : ( target : Target ) => TransferableContext | null
209
228
onCreateUserLink : ( appId : AppId ) => Promise < void >
210
229
onDeleteUserLink : ( userLinkId : UserLinkId ) => Promise < void >
211
230
onEnableEditMode : ( ) => void
@@ -233,6 +252,7 @@ const InsPointHandler: FC<{
233
252
allUserLinks,
234
253
apps,
235
254
isEditMode,
255
+ onContextQuery,
236
256
onCreateUserLink,
237
257
onDeleteUserLink,
238
258
onEnableEditMode,
@@ -316,6 +336,7 @@ const InsPointHandler: FC<{
316
336
src : link . bosWidgetId ,
317
337
props : {
318
338
context : transferableContext ,
339
+ query : onContextQuery ,
319
340
link : {
320
341
id : link . id ,
321
342
authorId : link . authorId ,
@@ -371,6 +392,7 @@ const InsPointHandler: FC<{
371
392
const ControllerHandler : FC < {
372
393
transferableContext : TransferableContext
373
394
controller : ControllerLink
395
+ onContextQuery : ( target : Target ) => TransferableContext | null
374
396
onGetLinkDataCurry : (
375
397
appId : string
376
398
) => (
@@ -385,7 +407,13 @@ const ControllerHandler: FC<{
385
407
dataByAccount : LinkedDataByAccount ,
386
408
indexRules : LinkIndexRules
387
409
) => Promise < void >
388
- } > = ( { transferableContext, controller, onGetLinkDataCurry, onSetLinkDataCurry } ) => {
410
+ } > = ( {
411
+ transferableContext,
412
+ controller,
413
+ onContextQuery,
414
+ onGetLinkDataCurry,
415
+ onSetLinkDataCurry,
416
+ } ) => {
389
417
const { redirectMap, isDevServerLoading } = useEngine ( )
390
418
const portalRef = useRef < DocumentFragment | null > ( null )
391
419
const { notify } = useModal ( )
@@ -401,6 +429,7 @@ const ControllerHandler: FC<{
401
429
402
430
const props : WidgetProps = {
403
431
context : transferableContext ,
432
+ query : onContextQuery ,
404
433
notify,
405
434
linkDb : {
406
435
get : onGetLinkDataCurry ( controller . appId ) ,
0 commit comments