import { FurniturePickupAllComposer } from '@nitrots/nitro-renderer'; import { FC, useEffect, useMemo, useState } from 'react'; import { GetSessionDataManager, LocalizeText, RoomObjectItem, SendMessageComposer } from '../../../../api'; import { Base, Button, Flex, InfiniteScroll, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text, classNames } from '../../../../common'; const LIMIT_FURNI_PICKALL = 100; interface ChooserWidgetViewProps { title: string; items: RoomObjectItem[]; selectItem: (item: RoomObjectItem) => void; onClose: () => void; pickallFurni?: boolean; } export const ChooserWidgetView: FC = props => { const { title = null, items = [], selectItem = null, onClose = null } = props; const [ selectedItem, setSelectedItem ] = useState(null); const [ searchValue, setSearchValue ] = useState(''); const canSeeId = GetSessionDataManager().isModerator; const [ checkAll, setCheckAll ] = useState(false); const [ checkedIds, setCheckedIds ] = useState([]); const checkedId = (id?: number) => { if (id) { if (isChecked(id)) setCheckedIds(checkedIds.filter(x => x !== id)); else if(checkedIds.length < LIMIT_FURNI_PICKALL) setCheckedIds([ ...checkedIds, id ]); } else { setCheckAll(value => !value); if (!checkAll) { const itemIds = filteredItems.map(x => x.id).slice(0, LIMIT_FURNI_PICKALL); setCheckedIds(itemIds); } else { setCheckedIds([]); } } } const isChecked = (id: number) => checkedIds.includes(id); const onClickPickAll = () => { SendMessageComposer(new FurniturePickupAllComposer(...checkedIds)); setCheckedIds([]); setCheckAll(false); } const filteredItems = useMemo(() => { const value = searchValue.toLocaleLowerCase(); const itemsFilter = items.filter(item => item.name?.toLocaleLowerCase().includes(value)); const itemsFilterSorted = itemsFilter.sort((a, b) => a.name.localeCompare(b.name)); return itemsFilterSorted }, [ items, searchValue ]); useEffect(() => { if(!selectedItem) return; selectItem(selectedItem); }, [ selectedItem, selectItem ]); return ( setSearchValue(event.target.value) } /> { props.pickallFurni && checkedId() } /> } { return ( setSelectedItem(row) }> { props.pickallFurni && checkedId(row.id) } /> } { row.name } { canSeeId && (' - ' + row.id) } ); } } /> { props.pickallFurni && } ); }