/
45case
/
ptable
Обзор
Документация
Войти
/
45case
/
ptable
Код
Запросы
3
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
dev
src/shared/lib/search.ts
70 строк
2 KB
Olya
feat: добавить sql.js (SQLite WASM), IPC-обработчики и универсальный поиск
09 июл 2026, 11:06
09 июл 2026, 11:06
e0492bf
Код
Авторство
О чём код?
import { getElements } from "@/entities/element/api/elements"; import type { PeriodicElement } from "@/entities/element/model/elements"; export interface SearchResult { type: "element"; element: PeriodicElement; matchField: string; } function isElectron(): boolean { return typeof window !== "undefined" && !!window.electronAPI?.search; } export async function searchAll(query: string): Promise<SearchResult[]> { const trimmed = query.trim(); if (!trimmed) return []; if (isElectron()) { // Поиск через SQLite в Electron const results = await window.electronAPI!.search(trimmed); return results.map((r) => ({ type: "element" as const, element: r as unknown as PeriodicElement, matchField: "sqlite", })); } // Fallback: поиск по JSON в браузере const normalized = trimmed.toLowerCase(); const elements = getElements(); return elements .filter((el) => { return ( el.symbol.toLowerCase() === normalized || el.slug.includes(normalized) || el.name.toLowerCase().includes(normalized) || el.nameEn.toLowerCase().includes(normalized) || el.atomicNumber.toString() === normalized ); }) .map((el) => ({ type: "element" as const, element: el, matchField: "json", })); } export function searchAllSync(query: string): SearchResult[] { // Синхронная версия только для браузера (без IPC) const trimmed = query.trim(); if (!trimmed || isElectron()) return []; const normalized = trimmed.toLowerCase(); return getElements() .filter((el) => { return ( el.symbol.toLowerCase() === normalized || el.slug.includes(normalized) || el.name.toLowerCase().includes(normalized) || el.nameEn.toLowerCase().includes(normalized) || el.atomicNumber.toString() === normalized ); }) .map((el) => ({ type: "element" as const, element: el, matchField: "json", })); }