UNPKG

matrix-react-sdk

Version:
71 lines (66 loc) 12.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _CommandProvider = _interopRequireDefault(require("./CommandProvider")); var _RoomProvider = _interopRequireDefault(require("./RoomProvider")); var _UserProvider = _interopRequireDefault(require("./UserProvider")); var _EmojiProvider = _interopRequireDefault(require("./EmojiProvider")); var _NotifProvider = _interopRequireDefault(require("./NotifProvider")); var _promise = require("../utils/promise"); var _SpaceProvider = _interopRequireDefault(require("./SpaceProvider")); var _RoomContext = require("../contexts/RoomContext"); var _arrays = require("../utils/arrays"); /* Copyright 2017-2024 New Vector Ltd. Copyright 2016 Aviral Dasgupta SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ const PROVIDERS = [_UserProvider.default, _RoomProvider.default, _EmojiProvider.default, _NotifProvider.default, _CommandProvider.default, _SpaceProvider.default]; // Providers will get rejected if they take longer than this. const PROVIDER_COMPLETION_TIMEOUT = 3000; class Autocompleter { constructor(room, renderingType = _RoomContext.TimelineRenderingType.Room) { (0, _defineProperty2.default)(this, "room", void 0); (0, _defineProperty2.default)(this, "providers", void 0); this.room = room; this.providers = PROVIDERS.map(Prov => { return new Prov(room, renderingType); }); } destroy() { this.providers.forEach(p => { p.destroy(); }); } async getCompletions(query, selection, force = false, limit = -1) { /* Note: This intentionally waits for all providers to return, otherwise, we run into a condition where new completions are displayed while the user is interacting with the list, which makes it difficult to predict whether an action will actually do what is intended */ // list of results from each provider, each being a list of completions or null if it times out const completionsList = await Promise.all(this.providers.map(async provider => { return (0, _promise.timeout)(provider.getCompletions(query, selection, force, limit), null, PROVIDER_COMPLETION_TIMEOUT); })); // map then filter to maintain the index for the map-operation, for this.providers to line up return (0, _arrays.filterBoolean)(completionsList.map((completions, i) => { if (!completions || !completions.length) return; return { completions, provider: this.providers[i], /* the currently matched "command" the completer tried to complete * we pass this through so that Autocomplete can figure out when to * re-show itself once hidden. */ command: this.providers[i].getCurrentCommand(query, selection, force) }; })); } } exports.default = Autocompleter; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQ29tbWFuZFByb3ZpZGVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfUm9vbVByb3ZpZGVyIiwiX1VzZXJQcm92aWRlciIsIl9FbW9qaVByb3ZpZGVyIiwiX05vdGlmUHJvdmlkZXIiLCJfcHJvbWlzZSIsIl9TcGFjZVByb3ZpZGVyIiwiX1Jvb21Db250ZXh0IiwiX2FycmF5cyIsIlBST1ZJREVSUyIsIlVzZXJQcm92aWRlciIsIlJvb21Qcm92aWRlciIsIkVtb2ppUHJvdmlkZXIiLCJOb3RpZlByb3ZpZGVyIiwiQ29tbWFuZFByb3ZpZGVyIiwiU3BhY2VQcm92aWRlciIsIlBST1ZJREVSX0NPTVBMRVRJT05fVElNRU9VVCIsIkF1dG9jb21wbGV0ZXIiLCJjb25zdHJ1Y3RvciIsInJvb20iLCJyZW5kZXJpbmdUeXBlIiwiVGltZWxpbmVSZW5kZXJpbmdUeXBlIiwiUm9vbSIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0IiwicHJvdmlkZXJzIiwibWFwIiwiUHJvdiIsImRlc3Ryb3kiLCJmb3JFYWNoIiwicCIsImdldENvbXBsZXRpb25zIiwicXVlcnkiLCJzZWxlY3Rpb24iLCJmb3JjZSIsImxpbWl0IiwiY29tcGxldGlvbnNMaXN0IiwiUHJvbWlzZSIsImFsbCIsInByb3ZpZGVyIiwidGltZW91dCIsImZpbHRlckJvb2xlYW4iLCJjb21wbGV0aW9ucyIsImkiLCJsZW5ndGgiLCJjb21tYW5kIiwiZ2V0Q3VycmVudENvbW1hbmQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1dG9jb21wbGV0ZS9BdXRvY29tcGxldGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAxNy0yMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMTYgQXZpcmFsIERhc2d1cHRhXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCB7IFJlYWN0RWxlbWVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUm9vbSB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9tYXRyaXhcIjtcblxuaW1wb3J0IENvbW1hbmRQcm92aWRlciBmcm9tIFwiLi9Db21tYW5kUHJvdmlkZXJcIjtcbmltcG9ydCBSb29tUHJvdmlkZXIgZnJvbSBcIi4vUm9vbVByb3ZpZGVyXCI7XG5pbXBvcnQgVXNlclByb3ZpZGVyIGZyb20gXCIuL1VzZXJQcm92aWRlclwiO1xuaW1wb3J0IEVtb2ppUHJvdmlkZXIgZnJvbSBcIi4vRW1vamlQcm92aWRlclwiO1xuaW1wb3J0IE5vdGlmUHJvdmlkZXIgZnJvbSBcIi4vTm90aWZQcm92aWRlclwiO1xuaW1wb3J0IHsgdGltZW91dCB9IGZyb20gXCIuLi91dGlscy9wcm9taXNlXCI7XG5pbXBvcnQgQXV0b2NvbXBsZXRlUHJvdmlkZXIsIHsgSUNvbW1hbmQgfSBmcm9tIFwiLi9BdXRvY29tcGxldGVQcm92aWRlclwiO1xuaW1wb3J0IFNwYWNlUHJvdmlkZXIgZnJvbSBcIi4vU3BhY2VQcm92aWRlclwiO1xuaW1wb3J0IHsgVGltZWxpbmVSZW5kZXJpbmdUeXBlIH0gZnJvbSBcIi4uL2NvbnRleHRzL1Jvb21Db250ZXh0XCI7XG5pbXBvcnQgeyBmaWx0ZXJCb29sZWFuIH0gZnJvbSBcIi4uL3V0aWxzL2FycmF5c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTZWxlY3Rpb25SYW5nZSB7XG4gICAgYmVnaW5uaW5nPzogYm9vbGVhbjsgLy8gd2hldGhlciB0aGUgc2VsZWN0aW9uIGlzIGluIHRoZSBmaXJzdCBibG9jayBvZiB0aGUgZWRpdG9yIG9yIG5vdFxuICAgIHN0YXJ0OiBudW1iZXI7IC8vIGJ5dGUgb2Zmc2V0IHJlbGF0aXZlIHRvIHRoZSBzdGFydCBhbmNob3Igb2YgdGhlIGN1cnJlbnQgZWRpdG9yIHNlbGVjdGlvbi5cbiAgICBlbmQ6IG51bWJlcjsgLy8gYnl0ZSBvZmZzZXQgcmVsYXRpdmUgdG8gdGhlIGVuZCBhbmNob3Igb2YgdGhlIGN1cnJlbnQgZWRpdG9yIHNlbGVjdGlvbi5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29tcGxldGlvbiB7XG4gICAgdHlwZT86IFwiYXQtcm9vbVwiIHwgXCJjb21tYW5kXCIgfCBcImNvbW11bml0eVwiIHwgXCJyb29tXCIgfCBcInVzZXJcIjtcbiAgICBjb21wbGV0aW9uOiBzdHJpbmc7XG4gICAgY29tcGxldGlvbklkPzogc3RyaW5nO1xuICAgIGNvbXBvbmVudDogUmVhY3RFbGVtZW50O1xuICAgIHJhbmdlOiBJU2VsZWN0aW9uUmFuZ2U7XG4gICAgY29tbWFuZD86IHN0cmluZztcbiAgICBzdWZmaXg/OiBzdHJpbmc7XG4gICAgLy8gSWYgcHJvdmlkZWQsIGFwcGx5IGEgTElOSyBlbnRpdHkgdG8gdGhlIGNvbXBsZXRpb24gd2l0aCB0aGVcbiAgICAvLyBkYXRhID0geyB1cmw6IGhyZWYgfS5cbiAgICBocmVmPzogc3RyaW5nO1xufVxuXG5jb25zdCBQUk9WSURFUlMgPSBbVXNlclByb3ZpZGVyLCBSb29tUHJvdmlkZXIsIEVtb2ppUHJvdmlkZXIsIE5vdGlmUHJvdmlkZXIsIENvbW1hbmRQcm92aWRlciwgU3BhY2VQcm92aWRlcl07XG5cbi8vIFByb3ZpZGVycyB3aWxsIGdldCByZWplY3RlZCBpZiB0aGV5IHRha2UgbG9uZ2VyIHRoYW4gdGhpcy5cbmNvbnN0IFBST1ZJREVSX0NPTVBMRVRJT05fVElNRU9VVCA9IDMwMDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVByb3ZpZGVyQ29tcGxldGlvbnMge1xuICAgIGNvbXBsZXRpb25zOiBJQ29tcGxldGlvbltdO1xuICAgIHByb3ZpZGVyOiBBdXRvY29tcGxldGVQcm92aWRlcjtcbiAgICBjb21tYW5kOiBQYXJ0aWFsPElDb21tYW5kPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXV0b2NvbXBsZXRlciB7XG4gICAgcHVibGljIHJvb206IFJvb207XG4gICAgcHVibGljIHByb3ZpZGVyczogQXV0b2NvbXBsZXRlUHJvdmlkZXJbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihyb29tOiBSb29tLCByZW5kZXJpbmdUeXBlOiBUaW1lbGluZVJlbmRlcmluZ1R5cGUgPSBUaW1lbGluZVJlbmRlcmluZ1R5cGUuUm9vbSkge1xuICAgICAgICB0aGlzLnJvb20gPSByb29tO1xuICAgICAgICB0aGlzLnByb3ZpZGVycyA9IFBST1ZJREVSUy5tYXAoKFByb3YpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvdihyb29tLCByZW5kZXJpbmdUeXBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgIHAuZGVzdHJveSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q29tcGxldGlvbnMoXG4gICAgICAgIHF1ZXJ5OiBzdHJpbmcsXG4gICAgICAgIHNlbGVjdGlvbjogSVNlbGVjdGlvblJhbmdlLFxuICAgICAgICBmb3JjZSA9IGZhbHNlLFxuICAgICAgICBsaW1pdCA9IC0xLFxuICAgICk6IFByb21pc2U8SVByb3ZpZGVyQ29tcGxldGlvbnNbXT4ge1xuICAgICAgICAvKiBOb3RlOiBUaGlzIGludGVudGlvbmFsbHkgd2FpdHMgZm9yIGFsbCBwcm92aWRlcnMgdG8gcmV0dXJuLFxuICAgICAgICAgb3RoZXJ3aXNlLCB3ZSBydW4gaW50byBhIGNvbmRpdGlvbiB3aGVyZSBuZXcgY29tcGxldGlvbnMgYXJlIGRpc3BsYXllZFxuICAgICAgICAgd2hpbGUgdGhlIHVzZXIgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgbGlzdCwgd2hpY2ggbWFrZXMgaXQgZGlmZmljdWx0XG4gICAgICAgICB0byBwcmVkaWN0IHdoZXRoZXIgYW4gYWN0aW9uIHdpbGwgYWN0dWFsbHkgZG8gd2hhdCBpcyBpbnRlbmRlZFxuICAgICAgICAqL1xuICAgICAgICAvLyBsaXN0IG9mIHJlc3VsdHMgZnJvbSBlYWNoIHByb3ZpZGVyLCBlYWNoIGJlaW5nIGEgbGlzdCBvZiBjb21wbGV0aW9ucyBvciBudWxsIGlmIGl0IHRpbWVzIG91dFxuICAgICAgICBjb25zdCBjb21wbGV0aW9uc0xpc3Q6IEFycmF5PElDb21wbGV0aW9uW10gfCBudWxsPiA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMubWFwKGFzeW5jIChwcm92aWRlcik6IFByb21pc2U8SUNvbXBsZXRpb25bXSB8IG51bGw+ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGltZW91dChcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXIuZ2V0Q29tcGxldGlvbnMocXVlcnksIHNlbGVjdGlvbiwgZm9yY2UsIGxpbWl0KSxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgUFJPVklERVJfQ09NUExFVElPTl9USU1FT1VULFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBtYXAgdGhlbiBmaWx0ZXIgdG8gbWFpbnRhaW4gdGhlIGluZGV4IGZvciB0aGUgbWFwLW9wZXJhdGlvbiwgZm9yIHRoaXMucHJvdmlkZXJzIHRvIGxpbmUgdXBcbiAgICAgICAgcmV0dXJuIGZpbHRlckJvb2xlYW4oXG4gICAgICAgICAgICBjb21wbGV0aW9uc0xpc3QubWFwKChjb21wbGV0aW9ucywgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY29tcGxldGlvbnMgfHwgIWNvbXBsZXRpb25zLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyOiB0aGlzLnByb3ZpZGVyc1tpXSxcblxuICAgICAgICAgICAgICAgICAgICAvKiB0aGUgY3VycmVudGx5IG1hdGNoZWQgXCJjb21tYW5kXCIgdGhlIGNvbXBsZXRlciB0cmllZCB0byBjb21wbGV0ZVxuICAgICAgICAgICAgICAgICAgICAgKiB3ZSBwYXNzIHRoaXMgdGhyb3VnaCBzbyB0aGF0IEF1dG9jb21wbGV0ZSBjYW4gZmlndXJlIG91dCB3aGVuIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIHJlLXNob3cgaXRzZWxmIG9uY2UgaGlkZGVuLlxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogdGhpcy5wcm92aWRlcnNbaV0uZ2V0Q3VycmVudENvbW1hbmQocXVlcnksIHNlbGVjdGlvbiwgZm9yY2UpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBV0EsSUFBQUEsZ0JBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGFBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLGFBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLGNBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLGNBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLFFBQUEsR0FBQUwsT0FBQTtBQUVBLElBQUFNLGNBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLFlBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLE9BQUEsR0FBQVIsT0FBQTtBQXBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFtQ0EsTUFBTVMsU0FBUyxHQUFHLENBQUNDLHFCQUFZLEVBQUVDLHFCQUFZLEVBQUVDLHNCQUFhLEVBQUVDLHNCQUFhLEVBQUVDLHdCQUFlLEVBQUVDLHNCQUFhLENBQUM7O0FBRTVHO0FBQ0EsTUFBTUMsMkJBQTJCLEdBQUcsSUFBSTtBQVF6QixNQUFNQyxhQUFhLENBQUM7RUFJeEJDLFdBQVdBLENBQUNDLElBQVUsRUFBRUMsYUFBb0MsR0FBR0Msa0NBQXFCLENBQUNDLElBQUksRUFBRTtJQUFBLElBQUFDLGdCQUFBLENBQUFDLE9BQUE7SUFBQSxJQUFBRCxnQkFBQSxDQUFBQyxPQUFBO0lBQzlGLElBQUksQ0FBQ0wsSUFBSSxHQUFHQSxJQUFJO0lBQ2hCLElBQUksQ0FBQ00sU0FBUyxHQUFHaEIsU0FBUyxDQUFDaUIsR0FBRyxDQUFFQyxJQUFJLElBQUs7TUFDckMsT0FBTyxJQUFJQSxJQUFJLENBQUNSLElBQUksRUFBRUMsYUFBYSxDQUFDO0lBQ3hDLENBQUMsQ0FBQztFQUNOO0VBRU9RLE9BQU9BLENBQUEsRUFBUztJQUNuQixJQUFJLENBQUNILFNBQVMsQ0FBQ0ksT0FBTyxDQUFFQyxDQUFDLElBQUs7TUFDMUJBLENBQUMsQ0FBQ0YsT0FBTyxDQUFDLENBQUM7SUFDZixDQUFDLENBQUM7RUFDTjtFQUVBLE1BQWFHLGNBQWNBLENBQ3ZCQyxLQUFhLEVBQ2JDLFNBQTBCLEVBQzFCQyxLQUFLLEdBQUcsS0FBSyxFQUNiQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQ3FCO0lBQy9CO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7SUFDUTtJQUNBLE1BQU1DLGVBQTRDLEdBQUcsTUFBTUMsT0FBTyxDQUFDQyxHQUFHLENBQ2xFLElBQUksQ0FBQ2IsU0FBUyxDQUFDQyxHQUFHLENBQUMsTUFBT2EsUUFBUSxJQUFvQztNQUNsRSxPQUFPLElBQUFDLGdCQUFPLEVBQ1ZELFFBQVEsQ0FBQ1IsY0FBYyxDQUFDQyxLQUFLLEVBQUVDLFNBQVMsRUFBRUMsS0FBSyxFQUFFQyxLQUFLLENBQUMsRUFDdkQsSUFBSSxFQUNKbkIsMkJBQ0osQ0FBQztJQUNMLENBQUMsQ0FDTCxDQUFDOztJQUVEO0lBQ0EsT0FBTyxJQUFBeUIscUJBQWEsRUFDaEJMLGVBQWUsQ0FBQ1YsR0FBRyxDQUFDLENBQUNnQixXQUFXLEVBQUVDLENBQUMsS0FBSztNQUNwQyxJQUFJLENBQUNELFdBQVcsSUFBSSxDQUFDQSxXQUFXLENBQUNFLE1BQU0sRUFBRTtNQUV6QyxPQUFPO1FBQ0hGLFdBQVc7UUFDWEgsUUFBUSxFQUFFLElBQUksQ0FBQ2QsU0FBUyxDQUFDa0IsQ0FBQyxDQUFDO1FBRTNCO0FBQ3BCO0FBQ0E7QUFDQTtRQUNvQkUsT0FBTyxFQUFFLElBQUksQ0FBQ3BCLFNBQVMsQ0FBQ2tCLENBQUMsQ0FBQyxDQUFDRyxpQkFBaUIsQ0FBQ2QsS0FBSyxFQUFFQyxTQUFTLEVBQUVDLEtBQUs7TUFDeEUsQ0FBQztJQUNMLENBQUMsQ0FDTCxDQUFDO0VBQ0w7QUFDSjtBQUFDYSxPQUFBLENBQUF2QixPQUFBLEdBQUFQLGFBQUEiLCJpZ25vcmVMaXN0IjpbXX0=