meshtastic/src/pages/showcase/_components/Networks.tsx

58 lines
1.6 KiB
TypeScript
Raw Normal View History

2021-11-30 02:46:31 -08:00
import React from 'react';
import { FiHeart, FiSearch } from 'react-icons/fi';
2021-12-22 22:22:01 -08:00
import JSONPretty from 'react-json-pretty';
2021-12-22 06:42:57 -08:00
import useSWR from 'swr';
2021-11-30 02:46:31 -08:00
2021-12-22 22:22:01 -08:00
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
2021-12-22 06:42:57 -08:00
import { useSelectedTags } from '@site/src/hooks/useSelectedTags';
2021-11-30 02:46:31 -08:00
2021-12-22 06:42:57 -08:00
import { useFilteredNetworks } from '../../../hooks/useFilteredNetworks';
import { Showcase } from '../../../utils/apiTypes';
import { fetcher } from '../../../utils/swr';
import { NetworkSection } from './NetworkSection';
2021-11-30 02:46:31 -08:00
export const Networks = (): JSX.Element => {
2021-12-22 22:22:01 -08:00
const { siteConfig } = useDocusaurusContext();
2021-12-22 06:42:57 -08:00
const { data, error } = useSWR<Showcase[]>(
2021-12-22 22:22:01 -08:00
`${siteConfig.customFields.API_URL}/showcase`,
2021-12-22 06:42:57 -08:00
fetcher
);
2021-12-22 22:22:01 -08:00
2021-11-30 02:46:31 -08:00
const selectedTags = useSelectedTags();
2021-12-22 06:42:57 -08:00
const filteredNetworks = useFilteredNetworks(data ?? []);
2021-11-30 02:46:31 -08:00
return (
<section className="margin-top--lg margin-bottom--xl">
2021-12-22 06:42:57 -08:00
{data && !error ? (
selectedTags.length === 0 ? (
<>
<NetworkSection
title="Our favorites"
icon={<FiHeart />}
iconColor="rgb(190 24 93)"
networks={data.filter((network) =>
network.tags.find((tag) => tag.label === "Favourite")
)}
/>
<NetworkSection title="All networks" networks={data} />
</>
) : (
2021-11-30 02:46:31 -08:00
<NetworkSection
2021-12-22 06:42:57 -08:00
title="Results"
icon={<FiSearch />}
networks={filteredNetworks}
2021-11-30 02:46:31 -08:00
/>
2021-12-22 06:42:57 -08:00
)
) : error ? (
2021-12-22 22:22:01 -08:00
<div>
<JSONPretty data={error} />
</div>
2021-11-30 02:46:31 -08:00
) : (
2021-12-22 06:42:57 -08:00
<div>Loading...</div>
2021-11-30 02:46:31 -08:00
)}
</section>
);
};