Skip to content

Commit a43d177

Browse files
committed
feat: introduce context query function (DAP-4692)
1 parent 18b7ca6 commit a43d177

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
lines changed

libs/engine/src/app/components/context-manager.tsx

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ import { memoize } from '../common/memoize'
2121
import { createPortal } from 'react-dom'
2222
import { ModalProps } from '../contexts/modal-context/modal-context'
2323
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+
}
2429

2530
interface 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<{
371392
const 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),

libs/engine/src/app/services/target/target.service.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,22 @@ import { TransferableContext } from '../../common/transferable-context'
33
import { ScalarType, TargetCondition, Target } from './target.entity'
44

55
export class TargetService {
6+
static findContextByTarget(target: Target, context: IContextNode): IContextNode | null {
7+
if (this.isTargetMet(target, context)) {
8+
return context
9+
}
10+
11+
for (const child of context.children) {
12+
const found = this.findContextByTarget(target, child)
13+
14+
if (found) {
15+
return found
16+
}
17+
}
18+
19+
return null
20+
}
21+
622
static isTargetMet(target: Target | TransferableContext, context: IContextNode): boolean {
723
// ToDo: check insertion points?
824

0 commit comments

Comments
 (0)