Skip to content

Commit

Permalink
feat: introduce context query function (DAP-4692)
Browse files Browse the repository at this point in the history
  • Loading branch information
alsakhaev committed Jul 25, 2024
1 parent 18b7ca6 commit a43d177
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 1 deletion.
31 changes: 30 additions & 1 deletion libs/engine/src/app/components/context-manager.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@ import { memoize } from '../common/memoize'
import { createPortal } from 'react-dom'
import { ModalProps } from '../contexts/modal-context/modal-context'
import { InjectableTarget } from '../contexts/engine-context/engine-context'
import { Target } from '../services/target/target.entity'

const getRootContext = (context: IContextNode): IContextNode => {
return context.parentNode ? getRootContext(context.parentNode) : context
}

interface WidgetProps {
context: TransferableContext
Expand All @@ -29,6 +34,7 @@ interface WidgetProps {
authorId: string
}
notify: (modalProps: ModalProps) => void
query: (target: Target) => TransferableContext | null
linkDb: {
get: (
ctx: TransferableContext,
Expand Down Expand Up @@ -103,6 +109,15 @@ const ContextHandler: FC<{ context: IContextNode; insPoints: InsertionPointWithE
[context]
)

const handleContextQuery = useCallback(
(target: Target): TransferableContext | null => {
const rootContext = getRootContext(context)
const foundContext = TargetService.findContextByTarget(target, rootContext)
return foundContext ? buildTransferableContext(foundContext) : null
},
[context]
)

const handleEnableEditMode = useCallback(() => {
setIsEditMode(true)
}, [setIsEditMode])
Expand Down Expand Up @@ -157,6 +172,7 @@ const ContextHandler: FC<{ context: IContextNode; insPoints: InsertionPointWithE
allUserLinks={links}
apps={apps}
isEditMode={isEditMode}
onContextQuery={handleContextQuery}
onCreateUserLink={createUserLink}
onDeleteUserLink={deleteUserLink}
onEnableEditMode={handleEnableEditMode}
Expand All @@ -175,6 +191,7 @@ const ContextHandler: FC<{ context: IContextNode; insPoints: InsertionPointWithE
allUserLinks={links}
apps={apps}
isEditMode={isEditMode}
onContextQuery={handleContextQuery}
onCreateUserLink={createUserLink}
onDeleteUserLink={deleteUserLink}
onEnableEditMode={handleEnableEditMode}
Expand All @@ -190,6 +207,7 @@ const ContextHandler: FC<{ context: IContextNode; insPoints: InsertionPointWithE
key={c.id}
transferableContext={transferableContext}
controller={c}
onContextQuery={handleContextQuery}
onGetLinkDataCurry={handleGetLinkDataCurry}
onSetLinkDataCurry={handleSetLinkDataCurry}
/>
Expand All @@ -206,6 +224,7 @@ const InsPointHandler: FC<{
allUserLinks: BosUserLink[]
apps: AppMetadata[]
isEditMode: boolean
onContextQuery: (target: Target) => TransferableContext | null
onCreateUserLink: (appId: AppId) => Promise<void>
onDeleteUserLink: (userLinkId: UserLinkId) => Promise<void>
onEnableEditMode: () => void
Expand Down Expand Up @@ -233,6 +252,7 @@ const InsPointHandler: FC<{
allUserLinks,
apps,
isEditMode,
onContextQuery,
onCreateUserLink,
onDeleteUserLink,
onEnableEditMode,
Expand Down Expand Up @@ -316,6 +336,7 @@ const InsPointHandler: FC<{
src: link.bosWidgetId,
props: {
context: transferableContext,
query: onContextQuery,
link: {
id: link.id,
authorId: link.authorId,
Expand Down Expand Up @@ -371,6 +392,7 @@ const InsPointHandler: FC<{
const ControllerHandler: FC<{
transferableContext: TransferableContext
controller: ControllerLink
onContextQuery: (target: Target) => TransferableContext | null
onGetLinkDataCurry: (
appId: string
) => (
Expand All @@ -385,7 +407,13 @@ const ControllerHandler: FC<{
dataByAccount: LinkedDataByAccount,
indexRules: LinkIndexRules
) => Promise<void>
}> = ({ transferableContext, controller, onGetLinkDataCurry, onSetLinkDataCurry }) => {
}> = ({
transferableContext,
controller,
onContextQuery,
onGetLinkDataCurry,
onSetLinkDataCurry,
}) => {
const { redirectMap, isDevServerLoading } = useEngine()
const portalRef = useRef<DocumentFragment | null>(null)
const { notify } = useModal()
Expand All @@ -401,6 +429,7 @@ const ControllerHandler: FC<{

const props: WidgetProps = {
context: transferableContext,
query: onContextQuery,
notify,
linkDb: {
get: onGetLinkDataCurry(controller.appId),
Expand Down
16 changes: 16 additions & 0 deletions libs/engine/src/app/services/target/target.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,22 @@ import { TransferableContext } from '../../common/transferable-context'
import { ScalarType, TargetCondition, Target } from './target.entity'

export class TargetService {
static findContextByTarget(target: Target, context: IContextNode): IContextNode | null {
if (this.isTargetMet(target, context)) {
return context
}

for (const child of context.children) {
const found = this.findContextByTarget(target, child)

if (found) {
return found
}
}

return null
}

static isTargetMet(target: Target | TransferableContext, context: IContextNode): boolean {
// ToDo: check insertion points?

Expand Down

0 comments on commit a43d177

Please sign in to comment.