From 1be08815d145b1990508e4228c388aa8601708da Mon Sep 17 00:00:00 2001 From: Brendan from DeFi Date: Thu, 5 Dec 2024 14:38:29 -0800 Subject: [PATCH] Revert "feat: update ecosystem page (#1334)" This reverts commit e336f86e21e48cbd877b8963362370fa6f56d9c5. --- .vscode/settings.json | 2 + apps/bridge/src/components/Nav/DesktopNav.tsx | 2 +- apps/web/.gitignore | 1 - apps/web/app/(base-org)/ecosystem/page.tsx | 13 +- apps/web/public/images/partners/avantis.png | Bin 13462 -> 0 bytes apps/web/public/images/partners/avantis.webp | Bin 0 -> 1046 bytes apps/web/public/images/partners/avantis2.webp | Bin 0 -> 1046 bytes apps/web/public/images/partners/bend.jpg | Bin 4970 -> 0 bytes apps/web/public/images/partners/eurc.svg | 21 --- apps/web/public/images/partners/idrx.png | Bin 28411 -> 0 bytes apps/web/public/images/partners/usdc.svg | 5 - apps/web/public/images/partners/zarp.png | Bin 16630 -> 0 bytes apps/web/src/components/Ecosystem/Card.tsx | 27 +-- apps/web/src/components/Ecosystem/Content.tsx | 160 +++++------------- .../components/Ecosystem/EcosystemFilters.tsx | 145 ---------------- .../Ecosystem/EcosystemFiltersMobile.tsx | 86 ---------- apps/web/src/components/Ecosystem/List.tsx | 6 +- apps/web/src/components/Ecosystem/TagChip.tsx | 7 +- apps/web/src/data/ecosystem.json | 7 +- 19 files changed, 68 insertions(+), 414 deletions(-) delete mode 100644 apps/web/.gitignore delete mode 100644 apps/web/public/images/partners/avantis.png create mode 100644 apps/web/public/images/partners/avantis.webp create mode 100644 apps/web/public/images/partners/avantis2.webp delete mode 100644 apps/web/public/images/partners/bend.jpg delete mode 100644 apps/web/public/images/partners/eurc.svg delete mode 100644 apps/web/public/images/partners/idrx.png delete mode 100644 apps/web/public/images/partners/usdc.svg delete mode 100644 apps/web/public/images/partners/zarp.png delete mode 100644 apps/web/src/components/Ecosystem/EcosystemFilters.tsx delete mode 100644 apps/web/src/components/Ecosystem/EcosystemFiltersMobile.tsx diff --git a/.vscode/settings.json b/.vscode/settings.json index aaca799c8d..9ab2e3f516 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -24,6 +24,8 @@ "[javascriptreact]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, + + // ESLint "editor.codeActionsOnSave": ["source.fixAll.eslint"], "eslint.packageManager": "yarn", "eslint.useESLintClass": true, diff --git a/apps/bridge/src/components/Nav/DesktopNav.tsx b/apps/bridge/src/components/Nav/DesktopNav.tsx index b835b4a208..ede91f5bca 100644 --- a/apps/bridge/src/components/Nav/DesktopNav.tsx +++ b/apps/bridge/src/components/Nav/DesktopNav.tsx @@ -119,7 +119,7 @@ function IconLink({ function DesktopNav({ color }: DesktopNavProps) { return ( -
+
-
-
+
+
Base ecosystem apps and integrations overview. @@ -40,13 +39,11 @@ async function EcosystemHero() { href="https://github.com/base-org/web?tab=readme-ov-file#updating-the-base-ecosystem-page" target="_blank" rel="noreferrer noopener" - className="max-w-fit" - tabIndex={-1} // Prevents focus on anchor (want to focus on button) >
-
+
{topKeys.map((key, i) => (
@@ -81,9 +78,7 @@ export default async function Ecosystem() { - }> - - + ); diff --git a/apps/web/public/images/partners/avantis.png b/apps/web/public/images/partners/avantis.png deleted file mode 100644 index f89552afa6bb771a29f4b3cffda7599e954cf3d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13462 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ઊJ0G+WUS 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 BL}UN} diff --git a/apps/web/public/images/partners/avantis.webp b/apps/web/public/images/partners/avantis.webp new file mode 100644 index 0000000000000000000000000000000000000000..72c27cea8ee1fa2ad3605b8c4cd63b5642ff5593 GIT binary patch literal 1046 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 diff --git a/apps/web/public/images/partners/eurc.svg b/apps/web/public/images/partners/eurc.svg deleted file mode 100644 index fad4b9f46d..0000000000 --- a/apps/web/public/images/partners/eurc.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/apps/web/public/images/partners/idrx.png b/apps/web/public/images/partners/idrx.png deleted file mode 100644 index 63a8443e5c2cf69f58b62852a735566f1e35547a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28411 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

-
-
- - {category} - -
-
- - {subcategory} - -
+
+ + {tags[0]} +
diff --git a/apps/web/src/components/Ecosystem/Content.tsx b/apps/web/src/components/Ecosystem/Content.tsx index 7bb3c6dac4..0a98d49cea 100644 --- a/apps/web/src/components/Ecosystem/Content.tsx +++ b/apps/web/src/components/Ecosystem/Content.tsx @@ -1,60 +1,29 @@ 'use client'; import ecosystemApps from 'apps/web/src/data/ecosystem.json'; +import { TagChip } from 'apps/web/src/components/Ecosystem/TagChip'; import { SearchBar } from 'apps/web/src/components/Ecosystem/SearchBar'; -import { useMemo, useState, useEffect } from 'react'; +import { useMemo, useState } from 'react'; import { List } from 'apps/web/src/components/Ecosystem/List'; -import { useSearchParams } from 'next/navigation'; -import { EcosystemFilters } from 'apps/web/src/components/Ecosystem/EcosystemFilters'; -import EcosystemFiltersMobile from 'apps/web/src/components/Ecosystem/EcosystemFiltersMobile'; export type EcosystemApp = { searchName: string; name: string; - category: string; - subcategory: string; url: string; description: string; + tags: string[]; imageUrl: string; }; -const config: Record = { - wallet: ['account abstraction', 'multisig', 'self-custody'], - defi: [ - 'dex', - 'dex aggregator', - 'insurance', - 'lending/borrowing', - 'liquidity management', - 'portfolio', - 'stablecoin', - 'yield vault', - ], - consumer: [ - 'creator', - 'crypto taxes', - 'dao', - 'gaming', - 'messaging', - 'music', - 'nft', - 'payments', - 'real world', - 'social', - ], - onramp: ['centralized exchange', 'fiat on-ramp'], - infra: [ - 'ai', - 'bridge', - 'data', - 'depin', - 'developer tool', - 'identity', - 'node provider', - 'raas', - 'security', - ], -}; +const tags = [ + 'all', + ...ecosystemApps + .map((app) => app.tags) + .flat() + .filter((value, index, array) => { + return array.indexOf(value.toLocaleLowerCase()) === index; + }), +]; function orderedEcosystemAppsAsc() { return ecosystemApps.sort((a, b) => { @@ -73,90 +42,51 @@ const decoratedEcosystemApps: EcosystemApp[] = orderedEcosystemAppsAsc().map((d) searchName: d.name.toLowerCase(), })); -const updateUrlParams = (params: { categories?: string[]; subcategories?: string[] }) => { - const searchParams = new URLSearchParams(window.location.search); - - if (params.categories?.length) { - searchParams.set('category', params.categories.join(',')); - } else { - searchParams.delete('category'); - } - - if (params.subcategories?.length) { - searchParams.set('subcategory', params.subcategories.join(',')); - } else { - searchParams.delete('subcategory'); - } - - window.history.pushState( - {}, - '', - `${window.location.pathname}${searchParams.toString() ? '?' + searchParams.toString() : ''}`, - ); -}; - export default function Content() { - const [search, setSearch] = useState(''); + const [selectedTags, setSelectedTags] = useState(['all']); + const [search, setSearch] = useState(''); const [showCount, setShowCount] = useState(16); - const searchParams = useSearchParams(); - const [selectedSubcategories, setSelectedSubcategories] = useState(() => { - const subcategories = searchParams?.get('subcategory'); - return subcategories ? subcategories.split(',') : []; - }); - // If a subcategory is selected, the category is selected automatically - const selectedCategories = useMemo( - () => [ - ...new Set( - selectedSubcategories.map( - (subcategory) => - Object.keys(config).find((category) => config[category].includes(subcategory)) ?? 'all', - ), - ), - ], - [selectedSubcategories], - ); - - const filteredEcosystemApps = useMemo( - () => - decoratedEcosystemApps.filter((app) => { - const isSubcategoryMatched = - selectedSubcategories.length === 0 || selectedSubcategories.includes(app.subcategory); - const isSearched = search === '' || app.searchName.includes(search.toLowerCase()); - return isSubcategoryMatched && isSearched; - }), - [selectedSubcategories, search], - ); - - useEffect(() => { - updateUrlParams({ - categories: selectedCategories, - subcategories: selectedSubcategories, + const selectTag = (tag: string): void => { + setSelectedTags((prevTags) => { + if (tag === 'all') { + return ['all']; + } + const newTags = prevTags.includes(tag) + ? prevTags.filter((t) => t !== tag) + : [...prevTags.filter((t) => t !== 'all'), tag]; + return newTags.length === 0 ? ['all'] : newTags; }); - }, [selectedCategories, selectedSubcategories]); + }; + + const filteredEcosystemApps = useMemo(() => { + return decoratedEcosystemApps.filter((app) => { + const isTagged = + selectedTags.includes('all') || app.tags.some((tag) => selectedTags.includes(tag)); + const isSearched = search === '' || app.name.toLowerCase().includes(search.toLowerCase()); + return isTagged && isSearched; + }); + }, [selectedTags, search]); return (
- - -
+
+ {tags.map((tag) => ( + + ))} +
+
- -
void; - config: Record; -}; - -export function EcosystemFilters({ - selectedCategories, - selectedSubcategories, - setSelectedSubcategories, - config, -}: EcosystemFiltersProps) { - const categories = ['all', ...Object.keys(config)]; - - const handleCategorySelect = (category: string) => { - if (category === 'all') { - setSelectedSubcategories([]); - return; - } - - const categorySubcats = config[category] || []; - const hasAnyCategorySelected = categorySubcats.some((sub) => - selectedSubcategories.includes(sub), - ); - - if (hasAnyCategorySelected) { - setSelectedSubcategories( - selectedSubcategories.filter((sub) => !categorySubcats.includes(sub)), - ); - } else { - setSelectedSubcategories([...selectedSubcategories, ...categorySubcats]); - } - }; - - const handleSubcategorySelect = (subcategory: string) => { - if (selectedSubcategories.includes(subcategory)) { - setSelectedSubcategories(selectedSubcategories.filter((sub) => sub !== subcategory)); - } else { - setSelectedSubcategories([...selectedSubcategories, subcategory]); - } - }; - - const isAllActive = selectedSubcategories.length === 0; - - return ( -
-
- {categories.map((category, index) => { - const categoryIsSelected = selectedCategories.includes(category); - return index === 0 ? ( - - ) : ( - -
- - -
- - - - -
- - - - -
- {config[category]?.map((subcategory) => { - const subcategoryIsSelected = selectedSubcategories.includes(subcategory); - return ( - - ); - })} -
-
-
-
- - ); - })} -
-
- ); -} diff --git a/apps/web/src/components/Ecosystem/EcosystemFiltersMobile.tsx b/apps/web/src/components/Ecosystem/EcosystemFiltersMobile.tsx deleted file mode 100644 index e1c839ae8d..0000000000 --- a/apps/web/src/components/Ecosystem/EcosystemFiltersMobile.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import { TagChip } from 'apps/web/src/components/Ecosystem/TagChip'; -import { Icon } from 'apps/web/src/components/Icon/Icon'; -import { useCallback, useState } from 'react'; - -export default function EcosystemFiltersMobile({ - categories, - selectedSubcategories, - onSubcategorySelect, -}: { - categories: Record; - selectedSubcategories: string[]; - onSubcategorySelect: (subcategories: string[]) => void; -}) { - const [isOpen, setIsOpen] = useState(false); - - const toggleMenu = useCallback(() => { - setIsOpen(!isOpen); - }, [isOpen]); - - const handleSubcategorySelect = useCallback( - (subcategory: string) => { - if (selectedSubcategories.includes(subcategory)) { - onSubcategorySelect(selectedSubcategories.filter((sc) => sc !== subcategory)); - } else { - onSubcategorySelect([...selectedSubcategories, subcategory]); - } - }, - [onSubcategorySelect, selectedSubcategories], - ); - - return ( -
- - {isOpen && ( -
-
- {selectedSubcategories.length > 0 ? ( - onSubcategorySelect([])} - className="text-xs" - /> - ) : ( -
- )} - -
- -
- {Object.entries(categories).map(([category, subcategories]) => ( -
-
{category}
-
- {subcategories.map((subcategory) => ( - - ))} -
-
- ))} -
-
- )} -
- ); -} diff --git a/apps/web/src/components/Ecosystem/List.tsx b/apps/web/src/components/Ecosystem/List.tsx index de6d532f90..2ac34c8123 100644 --- a/apps/web/src/components/Ecosystem/List.tsx +++ b/apps/web/src/components/Ecosystem/List.tsx @@ -8,13 +8,13 @@ import Button from 'apps/web/src/components/base-org/Button'; import { ButtonSizes, ButtonVariants } from 'apps/web/src/components/base-org/Button/types'; export function List({ - selectedCategories, + selectedTags, searchText, apps, showCount, setShowCount, }: { - selectedCategories: string[]; + selectedTags: string[]; searchText: string; apps: EcosystemApp[]; showCount: number; @@ -43,7 +43,7 @@ export function List({
- NO RESULTS FOR “{searchText === '' ? selectedCategories.join(', ') : searchText} + NO RESULTS FOR “{searchText === '' ? selectedTags.join(', ') : searchText} ” Try searching for another term diff --git a/apps/web/src/components/Ecosystem/TagChip.tsx b/apps/web/src/components/Ecosystem/TagChip.tsx index 064229e361..e785dc0d5b 100644 --- a/apps/web/src/components/Ecosystem/TagChip.tsx +++ b/apps/web/src/components/Ecosystem/TagChip.tsx @@ -7,10 +7,9 @@ type Props = { tag: string; isSelected: boolean; selectTag: (tag: string) => void; - className?: string; }; -export function TagChip({ tag, isSelected, selectTag, className }: Props) { +export function TagChip({ tag, isSelected, selectTag }: Props) { const onClick = useCallback( (event: React.MouseEvent) => { event.preventDefault(); @@ -20,8 +19,8 @@ export function TagChip({ tag, isSelected, selectTag, className }: Props) { ); const buttonClasses = classNames( - 'uppercase tracking-wider border border-white/20 h-10 whitespace-nowrap rounded-full px-4 transition-colors', - className, + 'uppercase tracking-wider border border-white/20 h-10 whitespace-nowrap rounded-full px-4 transition-colors ', + { 'bg-white text-black': isSelected, 'text-white/50 hover:bg-white/20 hover:text-white': !isSelected, diff --git a/apps/web/src/data/ecosystem.json b/apps/web/src/data/ecosystem.json index 3ff312de15..257e0122e2 100644 --- a/apps/web/src/data/ecosystem.json +++ b/apps/web/src/data/ecosystem.json @@ -2111,9 +2111,10 @@ "name": "Bridge", "url": "https://bridge.xyz", "description": "APIs to move into, out of, and between any form of a dollar.", - "imageUrl": "/images/partners/bridge.webp", - "category": "infra", - "subcategory": "developer tool" + "tags": [ + "defi" + ], + "imageUrl": "/images/partners/bridge.webp" }, { "name": "Bungee",