import { createSearch } from 'common/string'; import { useBackend, useLocalState } from '../backend'; import { Box, Button, Collapsible, Dropdown, Flex, Input, Section } from '../components'; import { Window } from '../layouts'; import { refocusLayout } from '../layouts'; import { MiningUser } from './common/Mining'; const sortTypes = { 'Alphabetical': (a, b) => a - b, 'By availability': (a, b) => -(a.affordable - b.affordable), 'By price': (a, b) => a.price - b.price, }; export const MiningVendor = (props, context) => { return ( ); }; const MiningVendorItems = (props, context) => { const { act, data } = useBackend(context); const { has_id, id, items } = data; // Search thingies const [searchText, _setSearchText] = useLocalState(context, 'search', ''); const [sortOrder, _setSortOrder] = useLocalState(context, 'sort', 'Alphabetical'); const [descending, _setDescending] = useLocalState(context, 'descending', false); const searcher = createSearch(searchText, (item) => { return item[0]; }); let has_contents = false; let contents = Object.entries(items).map((kv, _i) => { let items_in_cat = Object.entries(kv[1]) .filter(searcher) .map((kv2) => { kv2[1].affordable = has_id && id.points >= kv2[1].price; return kv2[1]; }) .sort(sortTypes[sortOrder]); if (items_in_cat.length === 0) { return; } if (descending) { items_in_cat = items_in_cat.reverse(); } has_contents = true; return ; }); return (
refocusLayout()}> {has_contents ? contents : No items matching your criteria was found!}
); }; const MiningVendorSearch = (props, context) => { const [_searchText, setSearchText] = useLocalState(context, 'search', ''); const [_sortOrder, setSortOrder] = useLocalState(context, 'sort', ''); const [descending, setDescending] = useLocalState(context, 'descending', false); return ( setSearchText(value)} /> setSortOrder(v)} />