matrix-react-sdk
Version:
SDK for matrix.org using React
71 lines (66 loc) • 12.1 kB
JavaScript
;
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=