import * as React from 'react'; import groupBy from 'lodash/groupBy'; import { useObservableSuspense } from 'observable-hooks'; import Box from '@wcpos/components/src/box'; import Tabs from '@wcpos/components/src/tabs'; import TaxRatesFooter from './footer'; import TaxRateTable from './rate-table'; /** * */ export const TaxRatesTabs = ({ query }) => { const [index, setIndex] = React.useState(0); const result = useObservableSuspense(query.resource); const rates = result.hits.map(({ document }) => document); /** * */ const routes = React.useMemo(() => { const ratesByClass = groupBy(rates, 'class'); const defaultOrder = ['standard', 'reduced-rate', 'zero-rate']; // sort by default order const sortedGroupedTaxRates = []; // For each class in the default order, if it exists in the groups, add it to the sorted groups defaultOrder.forEach((taxClass) => { if (ratesByClass[taxClass]) { sortedGroupedTaxRates.push({ class: taxClass, rates: ratesByClass[taxClass], }); delete ratesByClass[taxClass]; } }); // For each remaining group, add it to the sorted groups for (const taxClass in ratesByClass) { sortedGroupedTaxRates.push({ class: taxClass, rates: ratesByClass[taxClass], }); } // now create the tabs return sortedGroupedTaxRates.map((group) => ({ key: group.class, title: group.class, Component: , })); }, [rates]); /** * */ const renderScene = React.useCallback(({ route }) => { return {route.Component}; }, []); /** * TODO - add empty state */ return ( {Array.isArray(rates) && rates.length > 0 ? ( ) : null} ); }; export default TaxRatesTabs;