diff --git a/glass-easel-miniprogram-adapter/src/selector_query.ts b/glass-easel-miniprogram-adapter/src/selector_query.ts index f140d37..07e8878 100644 --- a/glass-easel-miniprogram-adapter/src/selector_query.ts +++ b/glass-easel-miniprogram-adapter/src/selector_query.ts @@ -9,6 +9,7 @@ export type SelectorQueryFields = { size?: boolean scrollOffset?: boolean properties?: string[] + context?: boolean // TODO support computedStyle } @@ -50,6 +51,10 @@ export type ScrollOffset = { scrollHeight: number } +export type ContextResult = { + context: unknown +} + const joinAsync = (inits: ((cb: (ret: T) => void) => void)[], cb: (rets: T[]) => void) => { let initDone = false let jobCount = inits.length @@ -137,6 +142,15 @@ class NodesRef { ) return this._$sq } + + context( + cb: (res: S extends true ? ContextResult : any[]) => void = () => { + /* empty */ + }, + ) { + this._$sq._$push(this._$sel, this._$comp, this._$single, { context: true }, cb) + return this._$sq + } } // main class @@ -298,6 +312,16 @@ export class SelectorQuery { done(undefined) } }, + (done) => { + if (fields.context) { + elem.getContext((ctx) => { + res.context = ctx + done(undefined) + }) + } else { + done(undefined) + } + }, ], () => { if (fields.properties) { diff --git a/glass-easel-miniprogram-adapter/tests/selector.test.ts b/glass-easel-miniprogram-adapter/tests/selector.test.ts index 0462f70..9fc6b0f 100644 --- a/glass-easel-miniprogram-adapter/tests/selector.test.ts +++ b/glass-easel-miniprogram-adapter/tests/selector.test.ts @@ -559,6 +559,32 @@ describe('selector query', () => { .register() }) + const ab = env.associateBackend() + const root = ab.createRoot('body', codeSpace, 'path/to/comp') + glassEasel.Element.pretendAttached(root.getComponent()) + })) + + test('query context', () => + new Promise((resolve) => { + const env = new MiniProgramEnv() + const codeSpace = env.createCodeSpace('', true) + + codeSpace.addComponentStaticConfig('path/to/comp', {}) + codeSpace.addCompiledTemplate('path/to/comp', tmpl('')) + codeSpace.componentEnv('path/to/comp', ({ Component }) => { + Component() + .lifetime('attached', function () { + this.createSelectorQuery() + .selectViewport() + .context((res) => { + expect(res.context).toBeUndefined() + resolve(undefined) + }) + .exec() + }) + .register() + }) + const ab = env.associateBackend() const root = ab.createRoot('body', codeSpace, 'path/to/comp') glassEasel.Element.pretendAttached(root.getComponent())