diff options
| author | Shin'ya Ueoka <ueokande@i-beam.org> | 2022-05-05 07:01:55 +0000 | 
|---|---|---|
| committer | Shin'ya Ueoka <ueokande@i-beam.org> | 2022-05-05 07:27:44 +0000 | 
| commit | 0d17912972de6b9e8b08aedf141260413c60d7fd (patch) | |
| tree | f0a56bfea9204dd3067c43e2667e3d70e581d183 /src/console/completion | |
| parent | bc890c55bfbd6d1aa4ece5b0ef96a9ab6d358ad7 (diff) | |
Use useDebounce
Diffstat (limited to 'src/console/completion')
| -rw-r--r-- | src/console/completion/hooks.ts | 135 | 
1 files changed, 48 insertions, 87 deletions
diff --git a/src/console/completion/hooks.ts b/src/console/completion/hooks.ts index 62baab4..3a2ec33 100644 --- a/src/console/completion/hooks.ts +++ b/src/console/completion/hooks.ts @@ -36,41 +36,6 @@ const propertyDocs: { [key: string]: string } = {  const completionClient = new CompletionClient(); -const useDelayedCallback = <T extends unknown, U extends unknown>( -  callback: (arg1: T, arg2: U) => void, -  timeout: number -) => { -  const [timer, setTimer] = React.useState< -    ReturnType<typeof setTimeout> | undefined -  >(); -  const [enabled, setEnabled] = React.useState(false); - -  const enableDelay = React.useCallback(() => { -    setEnabled(true); -  }, [setEnabled]); - -  const delayedCallback = React.useCallback( -    (arg1: T, arg2: U) => { -      if (enabled) { -        if (typeof timer !== "undefined") { -          clearTimeout(timer); -        } -        const id = setTimeout(() => { -          callback(arg1, arg2); -          clearTimeout(timer!); -          setTimer(undefined); -        }, timeout); -        setTimer(id); -      } else { -        callback(arg1, arg2); -      } -    }, -    [enabled, timer] -  ); - -  return { enableDelay, delayedCallback }; -}; -  const getCommandCompletions = async (query: string): Promise<Completions> => {    const items = Object.entries(commandDocs)      .filter(([name]) => name.startsWith(query)) @@ -215,60 +180,56 @@ export const useCompletions = () => {      dispatch(actions.setCompletionSource(source));    }, []); -  const { delayedCallback: queryCompletions, enableDelay } = useDelayedCallback( -    React.useCallback( -      (text: string, completionTypes: CompletionType[]) => { -        const phase = commandLineParser.inputPhase(text); -        if (phase === InputPhase.OnCommand) { -          getCommandCompletions(text).then((completions) => -            dispatch(actions.setCompletions(completions)) -          ); -        } else { -          let cmd: CommandLine | null = null; -          try { -            cmd = commandLineParser.parse(text); -          } catch (e) { -            if (e instanceof UnknownCommandError) { -              return; -            } -          } -          switch (cmd?.command) { -            case Command.Open: -            case Command.TabOpen: -            case Command.WindowOpen: -              getOpenCompletions(cmd.command, cmd.args, completionTypes).then( -                (completions) => dispatch(actions.setCompletions(completions)) -              ); -              break; -            case Command.Buffer: -              getTabCompletions(cmd.command, cmd.args, false).then( -                (completions) => dispatch(actions.setCompletions(completions)) -              ); -              break; -            case Command.BufferDelete: -            case Command.BuffersDelete: -              getTabCompletions(cmd.command, cmd.args, true).then( -                (completions) => dispatch(actions.setCompletions(completions)) -              ); -              break; -            case Command.BufferDeleteForce: -            case Command.BuffersDeleteForce: -              getTabCompletions(cmd.command, cmd.args, false).then( -                (completions) => dispatch(actions.setCompletions(completions)) -              ); -              break; -            case Command.Set: -              getPropertyCompletions(cmd.command, cmd.args).then( -                (completions) => dispatch(actions.setCompletions(completions)) -              ); -              break; +  const queryCompletions = React.useCallback( +    (text: string, completionTypes: CompletionType[]) => { +      const phase = commandLineParser.inputPhase(text); +      if (phase === InputPhase.OnCommand) { +        getCommandCompletions(text).then((completions) => +          dispatch(actions.setCompletions(completions)) +        ); +      } else { +        let cmd: CommandLine | null = null; +        try { +          cmd = commandLineParser.parse(text); +        } catch (e) { +          if (e instanceof UnknownCommandError) { +            return;            } -          enableDelay();          } -      }, -      [dispatch] -    ), -    100 +        switch (cmd?.command) { +          case Command.Open: +          case Command.TabOpen: +          case Command.WindowOpen: +            getOpenCompletions(cmd.command, cmd.args, completionTypes).then( +              (completions) => dispatch(actions.setCompletions(completions)) +            ); +            break; +          case Command.Buffer: +            getTabCompletions(cmd.command, cmd.args, false).then( +              (completions) => dispatch(actions.setCompletions(completions)) +            ); +            break; +          case Command.BufferDelete: +          case Command.BuffersDelete: +            getTabCompletions(cmd.command, cmd.args, true).then((completions) => +              dispatch(actions.setCompletions(completions)) +            ); +            break; +          case Command.BufferDeleteForce: +          case Command.BuffersDeleteForce: +            getTabCompletions(cmd.command, cmd.args, false).then( +              (completions) => dispatch(actions.setCompletions(completions)) +            ); +            break; +          case Command.Set: +            getPropertyCompletions(cmd.command, cmd.args).then((completions) => +              dispatch(actions.setCompletions(completions)) +            ); +            break; +        } +      } +    }, +    [dispatch]    );    React.useEffect(() => {  | 
