import React from 'react'; import AutocompleteProvider from './AutocompleteProvider'; import Q from 'q'; import Fuse from 'fuse.js'; import {TextualCompletion} from './Components'; const COMMANDS = [ { command: '/me', args: '', description: 'Displays action', }, { command: '/ban', args: ' [reason]', description: 'Bans user with given id', }, { command: '/deop', args: '', description: 'Deops user with given id', }, { command: '/invite', args: '', description: 'Invites user with given id to current room' }, { command: '/join', args: '', description: 'Joins room with given alias', }, { command: '/kick', args: ' [reason]', description: 'Kicks user with given id', }, { command: '/nick', args: '', description: 'Changes your display nickname', }, ]; let COMMAND_RE = /(^\/\w*)/g; let instance = null; export default class CommandProvider extends AutocompleteProvider { constructor() { super(COMMAND_RE); this.fuse = new Fuse(COMMANDS, { keys: ['command', 'args', 'description'], }); } getCompletions(query: string, selection: {start: number, end: number}) { let completions = []; let {command, range} = this.getCurrentCommand(query, selection); if (command) { completions = this.fuse.search(command[0]).map(result => { return { completion: result.command + ' ', component: (), range, }; }); } return Q.when(completions); } getName() { return 'Commands'; } static getInstance(): CommandProvider { if (instance == null) instance = new CommandProvider(); return instance; } }