Skip to content

Commit bb9729e

Browse files
committed
Remove sidebar filter
1 parent 4693baf commit bb9729e

File tree

4 files changed

+25
-58
lines changed

4 files changed

+25
-58
lines changed

src/components/DeclarationsPage.tsx

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,61 +3,45 @@ import { styled } from "@linaria/react";
33
import { DeclarationsContext, type GameContext } from "./schema/DeclarationsContext";
44
import { DeclarationsSidebar } from "./DeclarationsSidebar";
55
import { ContentList } from "./schema/ContentList";
6-
import { SidebarFilterContext } from "./layout/SidebarFilterContext";
76
import { SearchContext } from "./search/SearchContext";
87
import { useHashParam } from "../utils/filtering";
98
import { NavBar } from "./layout/NavBar";
109

1110
export default function DeclarationsPage({ context }: { context: GameContext }) {
12-
const [filter, setFilter] = useState("");
1311
const [sidebarOpen, setSidebarOpen] = useState(false);
1412
const search = useHashParam("search") ?? "";
1513

1614
useEffect(() => {
1715
const listener = (e: KeyboardEvent) => {
1816
if (e.key !== "/" || e.ctrlKey || e.metaKey || e.altKey) return;
1917
const active = document.activeElement;
20-
const mainSearch = document.getElementById("main-search");
21-
const sidebarFilter = document.getElementById("sidebar-filter");
22-
23-
if (active === mainSearch) {
24-
e.preventDefault();
25-
sidebarFilter?.focus();
26-
} else if (active === sidebarFilter) {
27-
// Explicit check before the HTMLInputElement guard below,
28-
// otherwise "/" would just type into the filter input.
29-
e.preventDefault();
30-
mainSearch?.focus();
31-
} else if (!(active instanceof HTMLInputElement)) {
18+
if (!(active instanceof HTMLInputElement)) {
3219
e.preventDefault();
33-
mainSearch?.focus();
20+
document.getElementById("main-search")?.focus();
3421
}
3522
};
3623
document.addEventListener("keydown", listener);
3724
return () => document.removeEventListener("keydown", listener);
3825
}, []);
3926

4027
const searchCtx = useMemo(() => ({ search }), [search]);
41-
const filterCtx = useMemo(() => ({ filter, setFilter }), [filter]);
4228

4329
const closeSidebar = useCallback(() => setSidebarOpen(false), []);
4430
const openSidebar = useCallback(() => setSidebarOpen(true), []);
4531

4632
return (
4733
<DeclarationsContext.Provider value={context}>
4834
<SearchContext.Provider value={searchCtx}>
49-
<SidebarFilterContext.Provider value={filterCtx}>
50-
<PageGrid>
51-
<MobileSidebarOverlay data-open={sidebarOpen || undefined} onClick={closeSidebar} />
52-
<SidebarPanel data-open={sidebarOpen || undefined}>
53-
<DeclarationsSidebar onNavigate={closeSidebar} sidebarOpen={sidebarOpen} />
54-
</SidebarPanel>
55-
<ContentColumn>
56-
<NavBar onMenuClick={openSidebar} />
57-
<ContentList />
58-
</ContentColumn>
59-
</PageGrid>
60-
</SidebarFilterContext.Provider>
35+
<PageGrid>
36+
<MobileSidebarOverlay data-open={sidebarOpen || undefined} onClick={closeSidebar} />
37+
<SidebarPanel data-open={sidebarOpen || undefined}>
38+
<DeclarationsSidebar onNavigate={closeSidebar} sidebarOpen={sidebarOpen} />
39+
</SidebarPanel>
40+
<ContentColumn>
41+
<NavBar onMenuClick={openSidebar} />
42+
<ContentList />
43+
</ContentColumn>
44+
</PageGrid>
6145
</SearchContext.Provider>
6246
</DeclarationsContext.Provider>
6347
);

src/components/DeclarationsSidebar.tsx

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ import type { Range } from "@tanstack/react-virtual";
1414
import { DeclarationsContext } from "./schema/DeclarationsContext";
1515
import { Declaration } from "../data/types";
1616
import { DeclarationSidebarElement, SidebarGroupHeader, SidebarWrapper } from "./layout/Sidebar";
17-
import { SidebarFilterContext } from "./layout/SidebarFilterContext";
18-
import { SearchInput } from "./search/SearchBox";
17+
import { matchesWords, useParsedSearch } from "../utils/filtering";
1918
import { GameSwitcher, S2VLogo } from "./layout/NavBar";
2019

2120
type SidebarRow =
@@ -188,7 +187,7 @@ export const DeclarationsSidebar = ({
188187
sidebarOpen?: boolean;
189188
}) => {
190189
const { declarations, game } = useContext(DeclarationsContext);
191-
const { filter, setFilter } = useContext(SidebarFilterContext);
190+
const { nameWords, moduleWords } = useParsedSearch();
192191
const { module: activeModule = "", scope = "" } = useParams();
193192
const [collapsed, setCollapsed] = useState<Set<string>>(() => new Set());
194193
const [hydrated, setHydrated] = useState(false);
@@ -197,14 +196,19 @@ export const DeclarationsSidebar = ({
197196
const { rows, stickyIndexes } = useMemo(() => {
198197
const rows: SidebarRow[] = [];
199198
const stickyIndexes: number[] = [];
200-
const lower = filter?.toLowerCase();
199+
const hasNameFilter = nameWords.length > 0;
200+
const hasModuleFilter = moduleWords.length > 0;
201201
for (const [module, moduleMap] of declarations) {
202+
// Module filter (OR across module words, same as main search)
203+
if (hasModuleFilter) {
204+
const mod = module.toLowerCase();
205+
if (!moduleWords.some((w) => mod.includes(w))) continue;
206+
}
202207
// Collect matching items (or all items if no filter)
203208
const items: Declaration[] = [];
204209
for (const d of moduleMap.values()) {
205-
if (!lower || d.name.toLowerCase().includes(lower)) {
206-
items.push(d);
207-
}
210+
if (hasNameFilter && !matchesWords(d.name, nameWords)) continue;
211+
items.push(d);
208212
}
209213
if (items.length === 0) continue;
210214
stickyIndexes.push(rows.length);
@@ -216,7 +220,7 @@ export const DeclarationsSidebar = ({
216220
}
217221
}
218222
return { rows, stickyIndexes };
219-
}, [declarations, filter, collapsed]);
223+
}, [declarations, nameWords, moduleWords, collapsed]);
220224

221225
const activeIndex = useMemo(() => {
222226
if (!scope || !activeModule) return -1;
@@ -272,17 +276,6 @@ export const DeclarationsSidebar = ({
272276
</SidebarBrand>
273277
<GameSwitcher currentGame={game} />
274278
</SidebarBrandRow>
275-
<SidebarSearchInput
276-
id="sidebar-filter"
277-
type="search"
278-
placeholder="Filter…"
279-
value={filter}
280-
onChange={(e) => setFilter(e.target.value)}
281-
aria-label="Filter classes and enums"
282-
spellCheck={false}
283-
autoCorrect="off"
284-
autoCapitalize="off"
285-
/>
286279
</SidebarHeader>
287280
{hydrated ? (
288281
<VirtualizedList
@@ -345,10 +338,6 @@ const SidebarBrand = styled.a`
345338
white-space: nowrap;
346339
`;
347340

348-
const SidebarSearchInput = styled(SearchInput)`
349-
background: var(--background);
350-
`;
351-
352341
const SidebarList = styled.div`
353342
flex: 1;
354343
overflow: auto;

src/components/layout/SidebarFilterContext.ts

Lines changed: 0 additions & 6 deletions
This file was deleted.

src/data/intrinsics.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ const types: IntrinsicDef[] = [
304304

305305
{
306306
// Other aliases: CKV3MemberNameSet
307-
name: "KeyValues3",
307+
name: "KeyValues3",
308308
fields: [
309309
{ name: "m_bContextIndependent", offset: 0, type: bf(1) },
310310
{ name: "m_bFreeArrayMemory", offset: 0, type: bf(1) },

0 commit comments

Comments
 (0)