feat: implement initial Electron chat application with core UI components and Convex backend integration.
All checks were successful
Build and Release / build-and-release (push) Successful in 11m1s
All checks were successful
Build and Release / build-and-release (push) Successful in 11m1s
This commit is contained in:
@@ -152,10 +152,20 @@ const UserControlPanel = ({ username, userId }) => {
|
||||
if (window.sessionPersistence) {
|
||||
try { await window.sessionPersistence.clear(); } catch {}
|
||||
}
|
||||
// Clear storage (preserve theme)
|
||||
// Clear storage (preserve theme and user preferences)
|
||||
const theme = localStorage.getItem('theme');
|
||||
const savedPrefs = {};
|
||||
for (let i = 0; i < localStorage.length; i++) {
|
||||
const key = localStorage.key(i);
|
||||
if (key.startsWith('userPrefs_')) {
|
||||
savedPrefs[key] = localStorage.getItem(key);
|
||||
}
|
||||
}
|
||||
localStorage.clear();
|
||||
if (theme) localStorage.setItem('theme', theme);
|
||||
for (const [key, value] of Object.entries(savedPrefs)) {
|
||||
localStorage.setItem(key, value);
|
||||
}
|
||||
sessionStorage.clear();
|
||||
navigate('/');
|
||||
};
|
||||
@@ -749,7 +759,15 @@ const Sidebar = ({ channels, categories, activeChannel, onSelectChannel, usernam
|
||||
const [newChannelType, setNewChannelType] = useState('text');
|
||||
const [editingChannel, setEditingChannel] = useState(null);
|
||||
const [isScreenShareModalOpen, setIsScreenShareModalOpen] = useState(false);
|
||||
const [collapsedCategories, setCollapsedCategories] = useState(() => getUserPref(userId, 'collapsedCategories', {}));
|
||||
const [collapsedCategories, setCollapsedCategories] = useState(() => {
|
||||
const effectiveUserId = userId || localStorage.getItem('userId');
|
||||
return getUserPref(effectiveUserId, 'collapsedCategories', {});
|
||||
});
|
||||
useEffect(() => {
|
||||
if (userId) {
|
||||
setCollapsedCategories(getUserPref(userId, 'collapsedCategories', {}));
|
||||
}
|
||||
}, [userId]);
|
||||
const [channelListContextMenu, setChannelListContextMenu] = useState(null);
|
||||
const [voiceUserMenu, setVoiceUserMenu] = useState(null);
|
||||
const [showCreateChannelModal, setShowCreateChannelModal] = useState(false);
|
||||
@@ -1107,11 +1125,9 @@ const Sidebar = ({ channels, categories, activeChannel, onSelectChannel, usernam
|
||||
};
|
||||
|
||||
const toggleCategory = (cat) => {
|
||||
setCollapsedCategories(prev => {
|
||||
const next = { ...prev, [cat]: !prev[cat] };
|
||||
setUserPref(userId, 'collapsedCategories', next);
|
||||
return next;
|
||||
});
|
||||
const next = { ...collapsedCategories, [cat]: !collapsedCategories[cat] };
|
||||
setCollapsedCategories(next);
|
||||
setUserPref(userId, 'collapsedCategories', next);
|
||||
};
|
||||
|
||||
// Group channels by categoryId
|
||||
|
||||
Reference in New Issue
Block a user