// screen-misc.jsx — My ideas (grid/list), Favorite, Settings const { useState: useMiscState, useEffect: useMiscEffect } = React; function IdeaCard({ idea, votes, onVote, openIdea }) { return (
openIdea(idea)}>
{idea.title}

{idea.desc}

{idea.author}
onVote(idea.id, d)} />
); } function ListShell({ title, sub, ideas, votes, onVote, openIdea }) { const Icon = window.Icon; const [view, setView] = useMiscState('grid'); return (
{title}
{sub}
{['grid', 'list'].map(v => ( ))}
{view === 'grid' ? (
{ideas.map(i => )}
) : (
{ideas.map(i => ( openIdea(i)}> ))}
#Idea titleCategoryStatusStatistics
#{i.rank} {i.title} onVote(i.id, d)} />
)}
); } function MyIdeasScreen({ currentUser, votes, onVote, openIdea }) { const [ideas, setIdeas] = useMiscState([]); useMiscEffect(() => { if (!currentUser?.id) return; window.API.getUser(currentUser.id) .then(d => setIdeas((d.ideas || []).map(i => ({ ...i, up: Number(i.up_votes ?? 0), down: Number(i.down_votes ?? 0), comments: Number(i.comment_count ?? 0), rank: Number(i.rank ?? i.id), desc: i.description || '', })))) .catch(() => setIdeas(window.IDEAS.slice(0, 6))); }, [currentUser?.id]); return ; } function FavoriteScreen(props) { return i % 3 === 0)} {...props} />; } function SettingsScreen({ onLogout }) { const Icon = window.Icon; const [toggles, setToggles] = useMiscState({ email: true, push: false, weekly: true, mentions: true }); const t = (k) => setToggles(s => ({ ...s, [k]: !s[k] })); const rows = [ ['email', 'Email notifications', 'Get notified when your ideas receive activity'], ['push', 'Push notifications', 'Real-time alerts in your browser'], ['weekly', 'Weekly digest', 'A Monday summary of top ideas across teams'], ['mentions', 'Mentions & replies', 'When someone replies to your comments'], ]; return (
Settings
Control how IdeaMint keeps you in the loop.
{rows.map(([k, label, desc], i) => (
{label}
{desc}
))}
{onLogout && (
)}
); } Object.assign(window, { MyIdeasScreen, FavoriteScreen, SettingsScreen });