Remove fuzzy @mention search

This commit is contained in:
Chris Svenningsen 2020-11-04 14:04:48 -08:00 committed by GitHub
parent ca83281986
commit 4def45b86a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 211 additions and 152 deletions

View file

@ -1,21 +1,11 @@
// Copyright 2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import Fuse from 'fuse.js';
import Delta from 'quill-delta';
import { DeltaOperation } from 'quill';
import { ConversationType } from '../state/ducks/conversations';
import { BodyRangeType } from '../types/Util';
const FUSE_OPTIONS = {
shouldSort: true,
threshold: 0.2,
maxPatternLength: 32,
minMatchCharLength: 1,
keys: ['name', 'firstName', 'profileName', 'title'],
};
export const getTextAndMentionsFromOps = (
ops: Array<DeltaOperation>
): [string, Array<BodyRangeType>] => {
@ -88,49 +78,3 @@ export const getDeltaToRemoveStaleMentions = (
return new Delta(newOps);
};
export class MemberRepository {
private members: Array<ConversationType>;
private fuse: Fuse<ConversationType>;
constructor(members: Array<ConversationType> = []) {
this.members = members;
this.fuse = new Fuse<ConversationType>(this.members, FUSE_OPTIONS);
}
updateMembers(members: Array<ConversationType>): void {
this.members = members;
this.fuse = new Fuse(members, FUSE_OPTIONS);
}
getMembers(omit?: ConversationType): Array<ConversationType> {
if (omit) {
return this.members.filter(({ id }) => id !== omit.id);
}
return this.members;
}
getMemberById(id?: string): ConversationType | undefined {
return id
? this.members.find(({ id: memberId }) => memberId === id)
: undefined;
}
getMemberByUuid(uuid?: string): ConversationType | undefined {
return uuid
? this.members.find(({ uuid: memberUuid }) => memberUuid === uuid)
: undefined;
}
search(pattern: string, omit?: ConversationType): Array<ConversationType> {
const results = this.fuse.search(pattern);
if (omit) {
return results.filter(({ id }) => id !== omit.id);
}
return results;
}
}