Files
oranguru/src/Boxer/hooks/useBoxerOptions.tsx
Hein f737b1d11d feat(globalStateStore): implement global state management with persistence
- refactor state structure to include app, layout, navigation, owner, program, session, and user
- add slices for managing program, session, owner, user, layout, navigation, and app states
- create context provider for global state with automatic fetching and throttling
- implement persistence using IndexedDB with localStorage fallback
- add comprehensive README documentation for usage and API
2026-02-07 20:03:27 +02:00

48 lines
1.3 KiB
TypeScript

import { Checkbox, Combobox } from '@mantine/core';
import { useMemo } from 'react';
import type { BoxerItem } from '../Boxer.types';
interface UseBoxerOptionsProps {
boxerData: Array<BoxerItem>;
multiSelect?: boolean;
onOptionSubmit: (index: number) => void;
value?: any | Array<any>;
}
const useBoxerOptions = (props: UseBoxerOptionsProps) => {
const { boxerData, multiSelect, onOptionSubmit, value } = props;
const options = useMemo(() => {
return boxerData.map((item, index) => {
const isSelected = multiSelect
? Array.isArray(value) && value.includes(item.value)
: value === item.value;
return (
<Combobox.Option
active={isSelected}
key={`${item.value}-${index}`}
onClick={() => {
onOptionSubmit(index);
}}
value={String(index)}
>
{multiSelect ? (
<div style={{ alignItems: 'center', display: 'flex', gap: '8px' }}>
<Checkbox checked={isSelected} onChange={() => {}} tabIndex={-1} />
<span>{item.label}</span>
</div>
) : (
item.label
)}
</Combobox.Option>
);
});
}, [boxerData, value, multiSelect, onOptionSubmit]);
return { options };
};
export default useBoxerOptions;