Remove fuzzy @mention search
This commit is contained in:
parent
ca83281986
commit
4def45b86a
10 changed files with 211 additions and 152 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue