matrix-react-sdk
Version:
SDK for matrix.org using React
96 lines (92 loc) • 12.7 kB
JavaScript
"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"));
/*
Copyright 2019-2024 New Vector Ltd.
Copyright 2019 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
class AutocompleteWrapperModel {
constructor(updateCallback, getAutocompleterComponent, updateQuery, partCreator) {
(0, _defineProperty2.default)(this, "partIndex", void 0);
this.updateCallback = updateCallback;
this.getAutocompleterComponent = getAutocompleterComponent;
this.updateQuery = updateQuery;
this.partCreator = partCreator;
}
onEscape(e) {
this.getAutocompleterComponent()?.onEscape(e);
}
close() {
this.updateCallback({
close: true
});
}
hasSelection() {
return !!this.getAutocompleterComponent()?.hasSelection();
}
hasCompletions() {
const ac = this.getAutocompleterComponent();
return !!ac && ac.countCompletions() > 0;
}
confirmCompletion() {
this.getAutocompleterComponent()?.onConfirmCompletion();
this.updateCallback({
close: true
});
}
/**
* If there is no current autocompletion, start one and move to the first selection.
*/
async startSelection() {
const acComponent = this.getAutocompleterComponent();
if (acComponent && acComponent.countCompletions() === 0) {
// Force completions to show for the text currently entered
await acComponent.forceComplete();
}
}
selectPreviousSelection() {
this.getAutocompleterComponent()?.moveSelection(-1);
}
selectNextSelection() {
this.getAutocompleterComponent()?.moveSelection(+1);
}
onPartUpdate(part, pos) {
this.partIndex = pos.index;
return this.updateQuery(part.text);
}
onComponentConfirm(completion) {
this.updateCallback({
replaceParts: this.partForCompletion(completion),
close: true
});
}
partForCompletion(completion) {
const {
completionId
} = completion;
const text = completion.completion;
switch (completion.type) {
case "room":
return [this.partCreator.roomPill(text, completionId), this.partCreator.plain(completion.suffix || "")];
case "at-room":
return [this.partCreator.atRoomPill(completionId || ""), this.partCreator.plain(completion.suffix || "")];
case "user":
// Insert suffix only if the pill is the part with index 0 - we are at the start of the composer
return this.partCreator.createMentionParts(this.partIndex === 0, text, completionId || "");
case "command":
// command needs special handling for auto complete, but also renders as plain texts
return [this.partCreator.command(text)];
default:
// used for emoji and other plain text completion replacement
return this.partCreator.plainWithEmoji(text);
}
}
}
exports.default = AutocompleteWrapperModel;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBdXRvY29tcGxldGVXcmFwcGVyTW9kZWwiLCJjb25zdHJ1Y3RvciIsInVwZGF0ZUNhbGxiYWNrIiwiZ2V0QXV0b2NvbXBsZXRlckNvbXBvbmVudCIsInVwZGF0ZVF1ZXJ5IiwicGFydENyZWF0b3IiLCJfZGVmaW5lUHJvcGVydHkyIiwiZGVmYXVsdCIsIm9uRXNjYXBlIiwiZSIsImNsb3NlIiwiaGFzU2VsZWN0aW9uIiwiaGFzQ29tcGxldGlvbnMiLCJhYyIsImNvdW50Q29tcGxldGlvbnMiLCJjb25maXJtQ29tcGxldGlvbiIsIm9uQ29uZmlybUNvbXBsZXRpb24iLCJzdGFydFNlbGVjdGlvbiIsImFjQ29tcG9uZW50IiwiZm9yY2VDb21wbGV0ZSIsInNlbGVjdFByZXZpb3VzU2VsZWN0aW9uIiwibW92ZVNlbGVjdGlvbiIsInNlbGVjdE5leHRTZWxlY3Rpb24iLCJvblBhcnRVcGRhdGUiLCJwYXJ0IiwicG9zIiwicGFydEluZGV4IiwiaW5kZXgiLCJ0ZXh0Iiwib25Db21wb25lbnRDb25maXJtIiwiY29tcGxldGlvbiIsInJlcGxhY2VQYXJ0cyIsInBhcnRGb3JDb21wbGV0aW9uIiwiY29tcGxldGlvbklkIiwidHlwZSIsInJvb21QaWxsIiwicGxhaW4iLCJzdWZmaXgiLCJhdFJvb21QaWxsIiwiY3JlYXRlTWVudGlvblBhcnRzIiwiY29tbWFuZCIsInBsYWluV2l0aEVtb2ppIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lZGl0b3IvYXV0b2NvbXBsZXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAxOS0yMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMTkgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IHsgS2V5Ym9hcmRFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBQYXJ0LCBDb21tYW5kUGFydENyZWF0b3IsIFBhcnRDcmVhdG9yIH0gZnJvbSBcIi4vcGFydHNcIjtcbmltcG9ydCBEb2N1bWVudFBvc2l0aW9uIGZyb20gXCIuL3Bvc2l0aW9uXCI7XG5pbXBvcnQgeyBJQ29tcGxldGlvbiB9IGZyb20gXCIuLi9hdXRvY29tcGxldGUvQXV0b2NvbXBsZXRlclwiO1xuaW1wb3J0IEF1dG9jb21wbGV0ZSBmcm9tIFwiLi4vY29tcG9uZW50cy92aWV3cy9yb29tcy9BdXRvY29tcGxldGVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJQ2FsbGJhY2sge1xuICAgIHJlcGxhY2VQYXJ0cz86IFBhcnRbXTtcbiAgICBjbG9zZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFVwZGF0ZUNhbGxiYWNrID0gKGRhdGE6IElDYWxsYmFjaykgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIEdldEF1dG9jb21wbGV0ZXJDb21wb25lbnQgPSAoKSA9PiBBdXRvY29tcGxldGUgfCBudWxsO1xuZXhwb3J0IHR5cGUgVXBkYXRlUXVlcnkgPSAodGVzdDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBdXRvY29tcGxldGVXcmFwcGVyTW9kZWwge1xuICAgIHByaXZhdGUgcGFydEluZGV4PzogbnVtYmVyO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHVwZGF0ZUNhbGxiYWNrOiBVcGRhdGVDYWxsYmFjayxcbiAgICAgICAgcHJpdmF0ZSBnZXRBdXRvY29tcGxldGVyQ29tcG9uZW50OiBHZXRBdXRvY29tcGxldGVyQ29tcG9uZW50LFxuICAgICAgICBwcml2YXRlIHVwZGF0ZVF1ZXJ5OiBVcGRhdGVRdWVyeSxcbiAgICAgICAgcHJpdmF0ZSBwYXJ0Q3JlYXRvcjogUGFydENyZWF0b3IgfCBDb21tYW5kUGFydENyZWF0b3IsXG4gICAgKSB7fVxuXG4gICAgcHVibGljIG9uRXNjYXBlKGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRBdXRvY29tcGxldGVyQ29tcG9uZW50KCk/Lm9uRXNjYXBlKGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVDYWxsYmFjayh7IGNsb3NlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZ2V0QXV0b2NvbXBsZXRlckNvbXBvbmVudCgpPy5oYXNTZWxlY3Rpb24oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzQ29tcGxldGlvbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGFjID0gdGhpcy5nZXRBdXRvY29tcGxldGVyQ29tcG9uZW50KCk7XG4gICAgICAgIHJldHVybiAhIWFjICYmIGFjLmNvdW50Q29tcGxldGlvbnMoKSA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbmZpcm1Db21wbGV0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdldEF1dG9jb21wbGV0ZXJDb21wb25lbnQoKT8ub25Db25maXJtQ29tcGxldGlvbigpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHsgY2xvc2U6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgdGhlcmUgaXMgbm8gY3VycmVudCBhdXRvY29tcGxldGlvbiwgc3RhcnQgb25lIGFuZCBtb3ZlIHRvIHRoZSBmaXJzdCBzZWxlY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIHN0YXJ0U2VsZWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBhY0NvbXBvbmVudCA9IHRoaXMuZ2V0QXV0b2NvbXBsZXRlckNvbXBvbmVudCgpO1xuICAgICAgICBpZiAoYWNDb21wb25lbnQgJiYgYWNDb21wb25lbnQuY291bnRDb21wbGV0aW9ucygpID09PSAwKSB7XG4gICAgICAgICAgICAvLyBGb3JjZSBjb21wbGV0aW9ucyB0byBzaG93IGZvciB0aGUgdGV4dCBjdXJyZW50bHkgZW50ZXJlZFxuICAgICAgICAgICAgYXdhaXQgYWNDb21wb25lbnQuZm9yY2VDb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdFByZXZpb3VzU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdldEF1dG9jb21wbGV0ZXJDb21wb25lbnQoKT8ubW92ZVNlbGVjdGlvbigtMSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdE5leHRTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2V0QXV0b2NvbXBsZXRlckNvbXBvbmVudCgpPy5tb3ZlU2VsZWN0aW9uKCsxKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QYXJ0VXBkYXRlKHBhcnQ6IFBhcnQsIHBvczogRG9jdW1lbnRQb3NpdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnBhcnRJbmRleCA9IHBvcy5pbmRleDtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlUXVlcnkocGFydC50ZXh0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Db21wb25lbnRDb25maXJtKGNvbXBsZXRpb246IElDb21wbGV0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlQ2FsbGJhY2soe1xuICAgICAgICAgICAgcmVwbGFjZVBhcnRzOiB0aGlzLnBhcnRGb3JDb21wbGV0aW9uKGNvbXBsZXRpb24pLFxuICAgICAgICAgICAgY2xvc2U6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFydEZvckNvbXBsZXRpb24oY29tcGxldGlvbjogSUNvbXBsZXRpb24pOiBQYXJ0W10ge1xuICAgICAgICBjb25zdCB7IGNvbXBsZXRpb25JZCB9ID0gY29tcGxldGlvbjtcbiAgICAgICAgY29uc3QgdGV4dCA9IGNvbXBsZXRpb24uY29tcGxldGlvbjtcbiAgICAgICAgc3dpdGNoIChjb21wbGV0aW9uLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJyb29tXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFt0aGlzLnBhcnRDcmVhdG9yLnJvb21QaWxsKHRleHQsIGNvbXBsZXRpb25JZCksIHRoaXMucGFydENyZWF0b3IucGxhaW4oY29tcGxldGlvbi5zdWZmaXggfHwgXCJcIildO1xuICAgICAgICAgICAgY2FzZSBcImF0LXJvb21cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnRDcmVhdG9yLmF0Um9vbVBpbGwoY29tcGxldGlvbklkIHx8IFwiXCIpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnRDcmVhdG9yLnBsYWluKGNvbXBsZXRpb24uc3VmZml4IHx8IFwiXCIpLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICBjYXNlIFwidXNlclwiOlxuICAgICAgICAgICAgICAgIC8vIEluc2VydCBzdWZmaXggb25seSBpZiB0aGUgcGlsbCBpcyB0aGUgcGFydCB3aXRoIGluZGV4IDAgLSB3ZSBhcmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBjb21wb3NlclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnRDcmVhdG9yLmNyZWF0ZU1lbnRpb25QYXJ0cyh0aGlzLnBhcnRJbmRleCA9PT0gMCwgdGV4dCwgY29tcGxldGlvbklkIHx8IFwiXCIpO1xuICAgICAgICAgICAgY2FzZSBcImNvbW1hbmRcIjpcbiAgICAgICAgICAgICAgICAvLyBjb21tYW5kIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGF1dG8gY29tcGxldGUsIGJ1dCBhbHNvIHJlbmRlcnMgYXMgcGxhaW4gdGV4dHNcbiAgICAgICAgICAgICAgICByZXR1cm4gWyh0aGlzLnBhcnRDcmVhdG9yIGFzIENvbW1hbmRQYXJ0Q3JlYXRvcikuY29tbWFuZCh0ZXh0KV07XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIC8vIHVzZWQgZm9yIGVtb2ppIGFuZCBvdGhlciBwbGFpbiB0ZXh0IGNvbXBsZXRpb24gcmVwbGFjZW1lbnRcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJ0Q3JlYXRvci5wbGFpbldpdGhFbW9qaSh0ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFrQmUsTUFBTUEsd0JBQXdCLENBQUM7RUFHbkNDLFdBQVdBLENBQ05DLGNBQThCLEVBQzlCQyx5QkFBb0QsRUFDcERDLFdBQXdCLEVBQ3hCQyxXQUE2QyxFQUN2RDtJQUFBLElBQUFDLGdCQUFBLENBQUFDLE9BQUE7SUFBQSxLQUpVTCxjQUE4QixHQUE5QkEsY0FBOEI7SUFBQSxLQUM5QkMseUJBQW9ELEdBQXBEQSx5QkFBb0Q7SUFBQSxLQUNwREMsV0FBd0IsR0FBeEJBLFdBQXdCO0lBQUEsS0FDeEJDLFdBQTZDLEdBQTdDQSxXQUE2QztFQUN0RDtFQUVJRyxRQUFRQSxDQUFDQyxDQUFnQixFQUFRO0lBQ3BDLElBQUksQ0FBQ04seUJBQXlCLENBQUMsQ0FBQyxFQUFFSyxRQUFRLENBQUNDLENBQUMsQ0FBQztFQUNqRDtFQUVPQyxLQUFLQSxDQUFBLEVBQVM7SUFDakIsSUFBSSxDQUFDUixjQUFjLENBQUM7TUFBRVEsS0FBSyxFQUFFO0lBQUssQ0FBQyxDQUFDO0VBQ3hDO0VBRU9DLFlBQVlBLENBQUEsRUFBWTtJQUMzQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUNSLHlCQUF5QixDQUFDLENBQUMsRUFBRVEsWUFBWSxDQUFDLENBQUM7RUFDN0Q7RUFFT0MsY0FBY0EsQ0FBQSxFQUFZO0lBQzdCLE1BQU1DLEVBQUUsR0FBRyxJQUFJLENBQUNWLHlCQUF5QixDQUFDLENBQUM7SUFDM0MsT0FB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