@@ -21,6 +21,11 @@ import { memoize } from '../common/memoize'
2121import { createPortal } from 'react-dom'
2222import { ModalProps } from '../contexts/modal-context/modal-context'
2323import { 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+ }
2429
2530interface WidgetProps {
2631 context : TransferableContext
@@ -29,6 +34,7 @@ interface WidgetProps {
2934 authorId : string
3035 }
3136 notify : ( modalProps : ModalProps ) => void
37+ query : ( target : Target ) => TransferableContext | null
3238 linkDb : {
3339 get : (
3440 ctx : TransferableContext ,
@@ -103,6 +109,15 @@ const ContextHandler: FC<{ context: IContextNode; insPoints: InsertionPointWithE
103109 [ context ]
104110 )
105111
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+
106121 const handleEnableEditMode = useCallback ( ( ) => {
107122 setIsEditMode ( true )
108123 } , [ setIsEditMode ] )
@@ -157,6 +172,7 @@ const ContextHandler: FC<{ context: IContextNode; insPoints: InsertionPointWithE
157172 allUserLinks = { links }
158173 apps = { apps }
159174 isEditMode = { isEditMode }
175+ onContextQuery = { handleContextQuery }
160176 onCreateUserLink = { createUserLink }
161177 onDeleteUserLink = { deleteUserLink }
162178 onEnableEditMode = { handleEnableEditMode }
@@ -175,6 +191,7 @@ const ContextHandler: FC<{ context: IContextNode; insPoints: InsertionPointWithE
175191 allUserLinks = { links }
176192 apps = { apps }
177193 isEditMode = { isEditMode }
194+ onContextQuery = { handleContextQuery }
178195 onCreateUserLink = { createUserLink }
179196 onDeleteUserLink = { deleteUserLink }
180197 onEnableEditMode = { handleEnableEditMode }
@@ -190,6 +207,7 @@ const ContextHandler: FC<{ context: IContextNode; insPoints: InsertionPointWithE
190207 key = { c . id }
191208 transferableContext = { transferableContext }
192209 controller = { c }
210+ onContextQuery = { handleContextQuery }
193211 onGetLinkDataCurry = { handleGetLinkDataCurry }
194212 onSetLinkDataCurry = { handleSetLinkDataCurry }
195213 />
@@ -206,6 +224,7 @@ const InsPointHandler: FC<{
206224 allUserLinks : BosUserLink [ ]
207225 apps : AppMetadata [ ]
208226 isEditMode : boolean
227+ onContextQuery : ( target : Target ) => TransferableContext | null
209228 onCreateUserLink : ( appId : AppId ) => Promise < void >
210229 onDeleteUserLink : ( userLinkId : UserLinkId ) => Promise < void >
211230 onEnableEditMode : ( ) => void
@@ -233,6 +252,7 @@ const InsPointHandler: FC<{
233252 allUserLinks,
234253 apps,
235254 isEditMode,
255+ onContextQuery,
236256 onCreateUserLink,
237257 onDeleteUserLink,
238258 onEnableEditMode,
@@ -316,6 +336,7 @@ const InsPointHandler: FC<{
316336 src : link . bosWidgetId ,
317337 props : {
318338 context : transferableContext ,
339+ query : onContextQuery ,
319340 link : {
320341 id : link . id ,
321342 authorId : link . authorId ,
@@ -371,6 +392,7 @@ const InsPointHandler: FC<{
371392const ControllerHandler : FC < {
372393 transferableContext : TransferableContext
373394 controller : ControllerLink
395+ onContextQuery : ( target : Target ) => TransferableContext | null
374396 onGetLinkDataCurry : (
375397 appId : string
376398 ) => (
@@ -385,7 +407,13 @@ const ControllerHandler: FC<{
385407 dataByAccount : LinkedDataByAccount ,
386408 indexRules : LinkIndexRules
387409 ) => Promise < void >
388- } > = ( { transferableContext, controller, onGetLinkDataCurry, onSetLinkDataCurry } ) => {
410+ } > = ( {
411+ transferableContext,
412+ controller,
413+ onContextQuery,
414+ onGetLinkDataCurry,
415+ onSetLinkDataCurry,
416+ } ) => {
389417 const { redirectMap, isDevServerLoading } = useEngine ( )
390418 const portalRef = useRef < DocumentFragment | null > ( null )
391419 const { notify } = useModal ( )
@@ -401,6 +429,7 @@ const ControllerHandler: FC<{
401429
402430 const props : WidgetProps = {
403431 context : transferableContext ,
432+ query : onContextQuery ,
404433 notify,
405434 linkDb : {
406435 get : onGetLinkDataCurry ( controller . appId ) ,
0 commit comments