UNPKG

@lit/reactive-element

Version:

A simple low level base class for creating fast, lightweight web components

57 lines 1.86 kB
/** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ import { decorateProperty } from './base.js'; // Note, in the future, we may extend this decorator to support the use case // where the queried element may need to do work to become ready to interact // with (e.g. load some implementation code). If so, we might elect to // add a second argument defining a function that can be run to make the // queried element loaded/updated/ready. /** * A property decorator that converts a class property into a getter that * returns a promise that resolves to the result of a querySelector on the * element's renderRoot done after the element's `updateComplete` promise * resolves. When the queried property may change with element state, this * decorator can be used instead of requiring users to await the * `updateComplete` before accessing the property. * * @param selector A DOMString containing one or more selectors to match. * * See: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector * * ```ts * class MyElement { * @queryAsync('#first') * first: Promise<HTMLDivElement>; * * render() { * return html` * <div id="first"></div> * <div id="second"></div> * `; * } * } * * // external usage * async doSomethingWithFirst() { * (await aMyElement.first).doSomething(); * } * ``` * @category Decorator */ export function queryAsync(selector) { return decorateProperty({ descriptor: (_name) => ({ async get() { var _a; await this.updateComplete; return (_a = this.renderRoot) === null || _a === void 0 ? void 0 : _a.querySelector(selector); }, enumerable: true, configurable: true, }), }); } //# sourceMappingURL=query-async.js.map