refactor(base): hoist NavItem type and drop IIFE in select cell

This commit is contained in:
Philipinho
2026-04-18 15:01:12 +01:00
parent bb398bb7d6
commit b02b2cd5d8
@@ -17,6 +17,10 @@ const CHOICE_COLORS = [
"blue", "cyan", "teal", "green", "lime", "yellow", "orange", "blue", "cyan", "teal", "green", "lime", "yellow", "orange",
]; ];
type NavItem =
| { kind: "choice"; choice: Choice }
| { kind: "add" };
type CellSelectProps = { type CellSelectProps = {
value: unknown; value: unknown;
property: IBaseProperty; property: IBaseProperty;
@@ -77,10 +81,6 @@ export function CellSelect({
[choices.length], [choices.length],
); );
type NavItem =
| { kind: "choice"; choice: Choice }
| { kind: "add" };
const navItems = useMemo<NavItem[]>( const navItems = useMemo<NavItem[]>(
() => [ () => [
...filteredChoices.map((c) => ({ kind: "choice" as const, choice: c })), ...filteredChoices.map((c) => ({ kind: "choice" as const, choice: c })),
@@ -138,6 +138,7 @@ export function CellSelect({
); );
if (isEditing) { if (isEditing) {
const addOptionIdx = filteredChoices.length;
return ( return (
<Popover <Popover
opened opened
@@ -198,16 +199,14 @@ export function CellSelect({
</div> </div>
); );
})} })}
{showAddOption && (() => { {showAddOption && (
const idx = filteredChoices.length;
return (
<div <div
ref={setOptionRef(idx)} ref={setOptionRef(addOptionIdx)}
className={clsx( className={clsx(
cellClasses.addOptionRow, cellClasses.addOptionRow,
idx === activeIndex && cellClasses.selectOptionKeyboardActive, addOptionIdx === activeIndex && cellClasses.selectOptionKeyboardActive,
)} )}
onMouseEnter={() => setActiveIndex(idx)} onMouseEnter={() => setActiveIndex(addOptionIdx)}
onMouseDown={(e) => { onMouseDown={(e) => {
e.preventDefault(); e.preventDefault();
}} }}
@@ -221,8 +220,7 @@ export function CellSelect({
{trimmedSearch} {trimmedSearch}
</span> </span>
</div> </div>
); )}
})()}
</div> </div>
</Popover.Dropdown> </Popover.Dropdown>
</Popover> </Popover>