From 083397fe3943a940db491eedb4733e4d6fa4d534 Mon Sep 17 00:00:00 2001 From: DIYgod Date: Fri, 12 Apr 2024 21:59:42 +0800 Subject: [PATCH] feat: collapsible feed list --- package.json | 1 + pnpm-lock.yaml | 31 ++++++++++++ src/renderer/src/components/feed-list.tsx | 49 ++++++++++++++++++- src/renderer/src/components/type-tab.tsx | 2 +- .../src/components/ui/collapsible.tsx | 9 ++++ 5 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 src/renderer/src/components/ui/collapsible.tsx diff --git a/package.json b/package.json index c57ae132b..970aabb56 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "dependencies": { "@electron-toolkit/preload": "^3.0.0", "@electron-toolkit/utils": "^3.0.0", + "@radix-ui/react-collapsible": "1.0.3", "@radix-ui/react-tabs": "1.0.4", "@radix-ui/react-tooltip": "1.0.7", "@tanstack/react-query": "5.29.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7976aeb8b..54a489116 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ dependencies: '@electron-toolkit/utils': specifier: ^3.0.0 version: 3.0.0(electron@29.2.0) + '@radix-ui/react-collapsible': + specifier: 1.0.3 + version: 1.0.3(@types/react-dom@18.2.24)(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-tabs': specifier: 1.0.4 version: 1.0.4(@types/react-dom@18.2.24)(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0) @@ -1153,6 +1156,34 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.2.24)(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.75)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.75)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.75)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.24)(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.24)(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.75)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.75)(react@18.2.0) + '@types/react': 18.2.75 + '@types/react-dom': 18.2.24 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.24)(@types/react@18.2.75)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: diff --git a/src/renderer/src/components/feed-list.tsx b/src/renderer/src/components/feed-list.tsx index 2d1563d36..99eb0e324 100644 --- a/src/renderer/src/components/feed-list.tsx +++ b/src/renderer/src/components/feed-list.tsx @@ -1,12 +1,57 @@ import { useFeeds } from '@renderer/lib/feeds' +import { + Collapsible, + CollapsibleContent, + CollapsibleTrigger, +} from "@renderer/components/ui/collapsible" +import { m, AnimatePresence } from "framer-motion" export function FeedList({ type }: { type: string }) { const feeds = useFeeds() - console.log('feeds', feeds.data) + + const categories = {} + feeds.data?.forEach((feed) => { + if (!categories[feed.category.title]) { + categories[feed.category.title] = [] + } + categories[feed.category.title].push(feed) + }) + console.log('categories', categories) return (
-
{type}
+
{type}
+ {Object.keys(categories).map((category) => ( + + + + {category} + + + + + {categories[category].map((feed) => ( +
+ +
{feed.title}
+
+ ))} +
+
+
+
+ ))}
) } diff --git a/src/renderer/src/components/type-tab.tsx b/src/renderer/src/components/type-tab.tsx index 51bd23e8b..161b8ab1c 100644 --- a/src/renderer/src/components/type-tab.tsx +++ b/src/renderer/src/components/type-tab.tsx @@ -52,7 +52,7 @@ export function TypeTab() { const [active, setActive] = useState(0) const spring = useSpring(0, { stiffness: 700, - damping: 30, + damping: 40, }) useEffect(() => { diff --git a/src/renderer/src/components/ui/collapsible.tsx b/src/renderer/src/components/ui/collapsible.tsx new file mode 100644 index 000000000..a23e7a281 --- /dev/null +++ b/src/renderer/src/components/ui/collapsible.tsx @@ -0,0 +1,9 @@ +import * as CollapsiblePrimitive from "@radix-ui/react-collapsible" + +const Collapsible = CollapsiblePrimitive.Root + +const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger + +const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent + +export { Collapsible, CollapsibleTrigger, CollapsibleContent }