navigation

This commit is contained in:
Tickbase
2026-07-11 12:19:38 +02:00
parent b5ca91d9a9
commit e8906d6ec0
2 changed files with 42 additions and 30 deletions
+4 -15
View File
@@ -1,34 +1,23 @@
import { Button } from '@/components/buttons' import { Icon, diamond, search } from '@/components/icons'
import { Icon, diamond, refresh, search } from '@/components/icons'
interface HeaderProps { interface HeaderProps {
onRefresh: () => void
refreshDisabled?: boolean
onSearch: (query: string) => void onSearch: (query: string) => void
searchQuery: string searchQuery: string
} }
/** /**
* Application header component * Application header component
* Contains the app title, search input, and refresh button * Contains the app title and search input
*/ */
const Header = ({ onRefresh, refreshDisabled = false, onSearch, searchQuery }: HeaderProps) => { const Header = ({ onSearch, searchQuery }: HeaderProps) => {
return ( return (
<header className="app-header"> <header className="app-header">
<div className="app-title"> <div className="app-title">
<Icon name={diamond} variant="solid" size="lg" className="app-logo-icon" /> <Icon name={diamond} variant="solid" size="lg" className="app-logo-icon" />
<h1>CreamLinux</h1> <h1>CreamLinux</h1>
</div> </div>
<div className="header-controls"> <div className="header-controls">
<Button
variant="primary"
onClick={onRefresh}
disabled={refreshDisabled}
className="refresh-button"
leftIcon={<Icon name={refresh} variant="solid" size="md" />}
>
Refresh
</Button>
<div className="search-container"> <div className="search-container">
<input <input
type="text" type="text"
+38 -15
View File
@@ -1,11 +1,11 @@
import { Icon, layers, linux, proton, settings } from '@/components/icons' import { useState, useEffect } from 'react'
import { getVersion } from '@tauri-apps/api/app'
import { Icon, layers, linux, proton, settings, diamond } from '@/components/icons'
import { epic } from '@/components/icons' import { epic } from '@/components/icons'
import { Button } from '@/components/buttons'
interface SidebarProps { interface SidebarProps {
setFilter: (filter: string) => void setFilter: (filter: string) => void
currentFilter: string currentFilter: string
onSettingsClick: () => void
} }
type FilterItem = { type FilterItem = {
@@ -15,7 +15,20 @@ type FilterItem = {
variant?: string variant?: string
} }
const Sidebar = ({ setFilter, currentFilter, onSettingsClick }: SidebarProps) => { const Sidebar = ({ setFilter, currentFilter }: SidebarProps) => {
const [version, setVersion] = useState('')
useEffect(() => {
getVersion()
.then(setVersion)
.catch(() => setVersion(''))
}, [])
const generalFilters: FilterItem[] = [
{ id: 'overview', label: 'Overview', icon: diamond, variant: 'solid' },
{ id: 'settings', label: 'Settings', icon: settings, variant: 'solid' },
]
const steamFilters: FilterItem[] = [ const steamFilters: FilterItem[] = [
{ id: 'all', label: 'All Games', icon: layers, variant: 'solid' }, { id: 'all', label: 'All Games', icon: layers, variant: 'solid' },
{ id: 'native', label: 'Native', icon: linux, variant: 'brand' }, { id: 'native', label: 'Native', icon: linux, variant: 'brand' },
@@ -45,6 +58,12 @@ const Sidebar = ({ setFilter, currentFilter, onSettingsClick }: SidebarProps) =>
<h2>Library</h2> <h2>Library</h2>
</div> </div>
<div className="sidebar-section">
<ul className="filter-list">
{generalFilters.map(renderFilter)}
</ul>
</div>
<div className="sidebar-section"> <div className="sidebar-section">
<span className="sidebar-section-label">Steam</span> <span className="sidebar-section-label">Steam</span>
<ul className="filter-list"> <ul className="filter-list">
@@ -59,18 +78,22 @@ const Sidebar = ({ setFilter, currentFilter, onSettingsClick }: SidebarProps) =>
</ul> </ul>
</div> </div>
<Button <div className="sidebar-footer">
variant="secondary" <div className="sidebar-footer-info">
size="medium" {version && <span className="sidebar-footer-version">v{version}</span>}
onClick={onSettingsClick} <span className="sidebar-footer-build">Stable</span>
className="settings-button" </div>
leftIcon={<Icon name={settings} variant="solid" size="md" className="settings-icon" />} <a
fullWidth href="https://github.com/Novattz/creamlinux-installer"
> target="_blank"
Settings rel="noopener noreferrer"
</Button> className="sidebar-footer-link"
>
GitHub
</a>
</div>
</div> </div>
) )
} }
export default Sidebar export default Sidebar