Компоненты
QueryInput
Структурный поиск is:open author:me — чипы вместо текста, автодополнение.
Структурный поиск: is:open author:me due:<now+7d. То же, что FilterBar даёт кликам по полям, здесь даётся набором с клавиатуры — и на той же модели условий. Условия рисуются чипами, ключи и значения дополняются по каретке.
Пример
Попробуйте -status:done, priority:>=3, author:Мурат или свободное слово.
- Тёмная тема мигает при загрузкеbugui
<QueryInput
value={query}
onChange={setQuery}
fields={fields}
onParsed={(parsed) => setResults(tasks.filter((t) => matchesQuery(t, parsed, fields)))}
/>Синтаксис
status:open поле равно значению
label:bug,ui любое из значений (ИЛИ внутри условия)
label:bug label:ui оба значения (И между условиями)
-status:done отрицание
priority:>=3 сравнение чисел
due:<now+7d сравнение дат в синтаксисе TimeRangePicker
падает свободное слово — по текстуПропсы
| Проп | Тип | По умолчанию | Описание |
|---|---|---|---|
value* | string | — | Строка запроса. |
onChange* | (value: string) => void | — | Изменение строки. |
fields* | QueryField<T>[] | — | Поля поиска: ключ, тип, варианты значений, доступ к значению элемента. |
onParsed | (parsed) => void | — | Разобранный запрос — обычно для немедленной фильтрации. |
onSubmit | (value: string) => void | — | Enter вне подсказок. |
placeholder | string | — | Подсказка в пустом поле. |
value*stringСтрока запроса.
onChange*(value: string) => voidИзменение строки.
fields*QueryField<T>[]Поля поиска: ключ, тип, варианты значений, доступ к значению элемента.
onParsed(parsed) => voidРазобранный запрос — обычно для немедленной фильтрации.
onSubmit(value: string) => voidEnter вне подсказок.
placeholderstringПодсказка в пустом поле.
Разбор отдельно
import {
parseQuery, // строка → условия + свободный текст
matchesQuery, // проверка элемента на соответствие
suggestAt, // что подсказать при данной позиции каретки
stringifyQuery, // условия → строка (для ссылок и пресетов)
} from "@toimetdev/pathlogs-core";Значения дат сравниваются тем же разбором, что и в TimeRangePicker: due:<now+7d работает из коробки.