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

56 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 23:05:23 -08:00
{!error ? (
2021-12-22 06:42:57 -08:00
selectedTags.length === 0 ? (
<>
<NetworkSection
title="Our favorites"
icon={<FiHeart />}
iconColor="rgb(190 24 93)"
2021-12-22 23:05:23 -08:00
networks={data?.filter((network) =>
2021-12-22 23:10:18 -08:00
network.tags.find((tag) => tag.label === "Favorite")
2021-12-22 06:42:57 -08:00
)}
/>
<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
)
2021-12-22 23:05:23 -08:00
) : (
2021-12-22 22:22:01 -08:00
<div>
<JSONPretty data={error} />
</div>
2021-11-30 02:46:31 -08:00
)}
</section>
);
};