feat: Media-Requests im Dashboard mit Neu/Gesehen-Unterscheidung statt nur Favoriten-Zaehler
This commit is contained in:
@@ -2070,7 +2070,9 @@ function Dashboard({ toast, mobile, setActive, setDevToolsNav, unreadMsgs=0, unr
|
||||
padding:'4px 10px', fontSize:9, fontFamily:'monospace', letterSpacing:1,
|
||||
}}>
|
||||
{unackedFavs?.isAdmin
|
||||
? `⭐ ${unackedFavs.count} neue Favorit${unackedFavs.count!==1?'en':''}`
|
||||
? ((unackedFavs.newCount || 0) > 0
|
||||
? `🆕 ${unackedFavs.count} neue Request${unackedFavs.count!==1?'s':''}`
|
||||
: `📋 ${unackedFavs.count} Request${unackedFavs.count!==1?'s':''}`)
|
||||
: `✅ ${unackedFavs.count} Favorit${unackedFavs.count!==1?'en':' wurde'} bestätigt`
|
||||
}
|
||||
</button>
|
||||
@@ -3784,7 +3786,7 @@ export default function App() {
|
||||
const [hiddenTools,setHiddenTools]=useState([]);
|
||||
const [active,setActiveRaw]=useState('dashboard');
|
||||
const [devToolsNav, setDevToolsNav] = useState(null);
|
||||
const pollUnackedFavs = () => api('/tools/media/favorites/unacked').then(d=>setUnackedFavs({count:d.count||0,isAdmin:d.isAdmin})).catch(()=>{});
|
||||
const pollUnackedFavs = () => api('/tools/media/favorites/unacked').then(d=>setUnackedFavs({count:d.count||0,newCount:d.newCount||0,isAdmin:d.isAdmin})).catch(()=>{});
|
||||
|
||||
const setActive = (page) => {
|
||||
if (page === 'dashboard' && window.__newBuildAvailable && window.__safeReloadIfNewBuild?.()) return;
|
||||
@@ -3801,7 +3803,7 @@ export default function App() {
|
||||
const [unreadBoard, setUnreadBoard] = useState(0);
|
||||
const [unreadPromoted, setUnreadPromoted] = useState(0);
|
||||
const [unreadChangelog,setUnreadChangelog]= useState(0);
|
||||
const [unackedFavs, setUnackedFavs] = useState({count:0,isAdmin:false});
|
||||
const [unackedFavs, setUnackedFavs] = useState({count:0,newCount:0,isAdmin:false});
|
||||
const [mediaInitTab, setMediaInitTab] = useState(null);
|
||||
const [dashboardKey, setDashboardKey] = useState(0);
|
||||
|
||||
@@ -3856,7 +3858,9 @@ export default function App() {
|
||||
|
||||
useEffect(()=>{
|
||||
if(!user)return;
|
||||
pollUnackedFavs(); const ti=setInterval(pollUnackedFavs,30000); return()=>clearInterval(ti);
|
||||
pollUnackedFavs(); const ti=setInterval(pollUnackedFavs,30000);
|
||||
window.addEventListener('favorites-seen', pollUnackedFavs);
|
||||
return()=>{ clearInterval(ti); window.removeEventListener('favorites-seen', pollUnackedFavs); };
|
||||
},[user]);
|
||||
|
||||
useEffect(()=>{
|
||||
|
||||
@@ -768,7 +768,15 @@ function FavoritenKalender({ onOpenModal }) {
|
||||
api('/tools/media/favorites/all').catch(() => null),
|
||||
]).then(([mine, all]) => {
|
||||
setFavs(mine);
|
||||
if (all) { setAllFavs(all); setIsAdmin(true); }
|
||||
if (all) {
|
||||
setAllFavs(all);
|
||||
setIsAdmin(true);
|
||||
// Admin hat die offenen Requests jetzt gesehen — nimmt ihnen das
|
||||
// "neu"-Label im Dashboard, bis sie tatsächlich quittiert werden
|
||||
api('/tools/media/favorites/mark-seen', { method:'POST', body:{} })
|
||||
.then(() => window.dispatchEvent(new CustomEvent('favorites-seen')))
|
||||
.catch(() => {});
|
||||
}
|
||||
}).catch(e => setError(e.message)).finally(() => setLoading(false));
|
||||
}, []);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user