go-ethereum/src/components/UI/downloads/DownloadsTable.tsx
Nicolás Quiroz 91dd04faa2
feat: All releases downloads (#46)
* chore: update constants

* feat: add releases data utils

* chore: add fast-xml-parser

* chore: update types

* feat: fetch & parse all releases data

* chore: update utils

* wip: use real data on DataTable

* chore: update yarn.lock

* fix: getReleaseCommitHash

* feat: filter data per downloads tab

* chore: update DownloadsTable

* chore: update DownloadsTable Props

* fix: getReleaseArch.ts

* feat: add fetchXMLData util

* feat: add fetchLatestReleaseCommit util

* feat: add getSortedReleases util

* chore: comment wip primary release feature

* fix: fetchXMLData

* chore: add netlify.toml

* fix: total number of releases count

* fix: center showing latest releases text and use smaller font

* chore: prettier

* chore: update textStyles

* fix: merge conflicts
2022-11-29 15:29:52 -03:00

95 lines
2.8 KiB
TypeScript

import { Stack, Tabs, TabList, Tab, Text, TabPanel, TabPanels } from '@chakra-ui/react';
import { FC } from 'react';
import { DataTable } from '../../UI';
import { DOWNLOADS_TABLE_TABS, DOWNLOADS_TABLE_TAB_COLUMN_HEADERS } from '../../../constants';
import { ReleaseData } from '../../../types';
interface Props {
linuxData: ReleaseData[];
macOSData: ReleaseData[];
windowsData: ReleaseData[];
iOSData: ReleaseData[];
androidData: ReleaseData[];
amountOfReleasesToShow: number;
setTotalReleases: (idx: number) => void;
}
export const DownloadsTable: FC<Props> = ({
linuxData,
macOSData,
windowsData,
iOSData,
androidData,
amountOfReleasesToShow,
setTotalReleases
}) => {
const totalReleases = [
linuxData.length,
macOSData.length,
windowsData.length,
iOSData.length,
androidData.length
];
return (
<Stack sx={{ mt: '0 !important' }} borderBottom='2px solid' borderColor='primary'>
<Tabs variant='unstyled' onChange={idx => setTotalReleases(totalReleases[idx])}>
<TabList color='primary' bg='button-bg'>
{DOWNLOADS_TABLE_TABS.map((tab, idx) => {
return (
<Tab
key={tab}
w={'20%'}
p={4}
_selected={{
bg: 'primary',
color: 'bg'
}}
borderBottom='2px solid'
borderRight={idx === DOWNLOADS_TABLE_TABS.length - 1 ? 'none' : '2px solid'}
borderColor='primary'
>
<Text textStyle='download-tab-label'>{tab}</Text>
</Tab>
);
})}
</TabList>
<TabPanels>
<TabPanel p={0}>
<DataTable
columnHeaders={DOWNLOADS_TABLE_TAB_COLUMN_HEADERS}
data={linuxData.slice(0, amountOfReleasesToShow)}
/>
</TabPanel>
<TabPanel p={0}>
<DataTable
columnHeaders={DOWNLOADS_TABLE_TAB_COLUMN_HEADERS}
data={macOSData.slice(0, amountOfReleasesToShow)}
/>
</TabPanel>
<TabPanel p={0}>
<DataTable
columnHeaders={DOWNLOADS_TABLE_TAB_COLUMN_HEADERS}
data={windowsData.slice(0, amountOfReleasesToShow)}
/>
</TabPanel>
<TabPanel p={0}>
<DataTable
columnHeaders={DOWNLOADS_TABLE_TAB_COLUMN_HEADERS}
data={iOSData.slice(0, amountOfReleasesToShow)}
/>
</TabPanel>
<TabPanel p={0}>
<DataTable
columnHeaders={DOWNLOADS_TABLE_TAB_COLUMN_HEADERS}
data={androidData.slice(0, amountOfReleasesToShow)}
/>
</TabPanel>
</TabPanels>
</Tabs>
</Stack>
);
};