|
@@ -1,3 +1,4 @@
|
|
|
|
|
+
|
|
|
import { Button } from '@/components/ui/button';
|
|
import { Button } from '@/components/ui/button';
|
|
|
import { Input } from '@/components/ui/input';
|
|
import { Input } from '@/components/ui/input';
|
|
|
import { Badge } from '@/components/ui/badge';
|
|
import { Badge } from '@/components/ui/badge';
|
|
@@ -5,12 +6,14 @@ import { Search, Plus, Settings, User, Rss, List, LogOut, Shield } from 'lucide-
|
|
|
import { Link } from 'react-router-dom';
|
|
import { Link } from 'react-router-dom';
|
|
|
import { useAuth } from '@/hooks/useAuth';
|
|
import { useAuth } from '@/hooks/useAuth';
|
|
|
import { useSuperUser } from '@/hooks/useSuperUser';
|
|
import { useSuperUser } from '@/hooks/useSuperUser';
|
|
|
|
|
+
|
|
|
interface HeaderProps {
|
|
interface HeaderProps {
|
|
|
searchQuery: string;
|
|
searchQuery: string;
|
|
|
onSearchChange: (query: string) => void;
|
|
onSearchChange: (query: string) => void;
|
|
|
pinnedCount: number;
|
|
pinnedCount: number;
|
|
|
onAddFeedClick: () => void;
|
|
onAddFeedClick: () => void;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
const Header = ({
|
|
const Header = ({
|
|
|
searchQuery,
|
|
searchQuery,
|
|
|
onSearchChange,
|
|
onSearchChange,
|
|
@@ -24,34 +27,44 @@ const Header = ({
|
|
|
const {
|
|
const {
|
|
|
isSuperUser
|
|
isSuperUser
|
|
|
} = useSuperUser();
|
|
} = useSuperUser();
|
|
|
|
|
+
|
|
|
const handleSignOut = async () => {
|
|
const handleSignOut = async () => {
|
|
|
await signOut();
|
|
await signOut();
|
|
|
};
|
|
};
|
|
|
- return <header className="border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60 sticky top-0 z-50">
|
|
|
|
|
|
|
+
|
|
|
|
|
+ return (
|
|
|
|
|
+ <header className="border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60 sticky top-0 z-50">
|
|
|
<div className="container mx-auto px-4 py-4">
|
|
<div className="container mx-auto px-4 py-4">
|
|
|
<div className="flex items-center justify-between gap-4">
|
|
<div className="flex items-center justify-between gap-4">
|
|
|
<div className="flex items-center gap-3">
|
|
<div className="flex items-center gap-3">
|
|
|
<div className="flex items-center gap-2">
|
|
<div className="flex items-center gap-2">
|
|
|
<Rss className="h-6 w-6 text-primary" />
|
|
<Rss className="h-6 w-6 text-primary" />
|
|
|
<h1 className="text-xl font-bold">Feeds.Duhaz.fr</h1>
|
|
<h1 className="text-xl font-bold">Feeds.Duhaz.fr</h1>
|
|
|
- {isSuperUser && <Badge variant="destructive" className="gap-1">
|
|
|
|
|
|
|
+ {isSuperUser && (
|
|
|
|
|
+ <Badge variant="destructive" className="gap-1">
|
|
|
<Shield className="h-3 w-3" />
|
|
<Shield className="h-3 w-3" />
|
|
|
Admin
|
|
Admin
|
|
|
- </Badge>}
|
|
|
|
|
|
|
+ </Badge>
|
|
|
|
|
+ )}
|
|
|
</div>
|
|
</div>
|
|
|
<div className="hidden sm:flex items-center gap-2 text-sm text-muted-foreground">
|
|
<div className="hidden sm:flex items-center gap-2 text-sm text-muted-foreground">
|
|
|
<span>•</span>
|
|
<span>•</span>
|
|
|
-
|
|
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div className="flex items-center gap-3">
|
|
<div className="flex items-center gap-3">
|
|
|
<div className="relative">
|
|
<div className="relative">
|
|
|
<Search className="absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-muted-foreground" />
|
|
<Search className="absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-muted-foreground" />
|
|
|
- <Input placeholder="Rechercher..." value={searchQuery} onChange={e => onSearchChange(e.target.value)} className="pl-10 w-64" />
|
|
|
|
|
|
|
+ <Input
|
|
|
|
|
+ placeholder="Rechercher..."
|
|
|
|
|
+ value={searchQuery}
|
|
|
|
|
+ onChange={e => onSearchChange(e.target.value)}
|
|
|
|
|
+ className="pl-10 w-64"
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
- {user ? <>
|
|
|
|
|
|
|
+ {user ? (
|
|
|
|
|
+ <>
|
|
|
<Link to="/feeds">
|
|
<Link to="/feeds">
|
|
|
<Button variant="outline" size="sm" className="gap-2">
|
|
<Button variant="outline" size="sm" className="gap-2">
|
|
|
<List className="h-4 w-4" />
|
|
<List className="h-4 w-4" />
|
|
@@ -74,24 +87,20 @@ const Header = ({
|
|
|
<LogOut className="h-4 w-4" />
|
|
<LogOut className="h-4 w-4" />
|
|
|
</Button>
|
|
</Button>
|
|
|
</div>
|
|
</div>
|
|
|
- </> : <Link to="/auth">
|
|
|
|
|
|
|
+ </>
|
|
|
|
|
+ ) : (
|
|
|
|
|
+ <Link to="/auth">
|
|
|
<Button variant="default" size="sm" className="gap-2">
|
|
<Button variant="default" size="sm" className="gap-2">
|
|
|
<User className="h-4 w-4" />
|
|
<User className="h-4 w-4" />
|
|
|
Se connecter
|
|
Se connecter
|
|
|
</Button>
|
|
</Button>
|
|
|
- </Link>}
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
- <div className="flex items-center gap-4 mt-4">
|
|
|
|
|
- <div className="flex items-center gap-2">
|
|
|
|
|
- <span className="text-sm font-medium">Épinglé</span>
|
|
|
|
|
- <Badge variant="secondary">
|
|
|
|
|
- {pinnedCount > 0 ? `${pinnedCount}` : 'Aucun'}
|
|
|
|
|
- </Badge>
|
|
|
|
|
|
|
+ </Link>
|
|
|
|
|
+ )}
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- </header>;
|
|
|
|
|
|
|
+ </header>
|
|
|
|
|
+ );
|
|
|
};
|
|
};
|
|
|
-export default Header;
|
|
|
|
|
|
|
+
|
|
|
|
|
+export default Header;
|