mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
fix(topbar): sync subscription visibility with account subscriptions
Replace per-address visibility tracking with a boolean flag so newly subscribed boards appear immediately in the topbar without requiring a modal reopen.
This commit is contained in:
@@ -8,7 +8,7 @@ import styles from './topbar-edit-modal.module.css';
|
||||
|
||||
const TopbarEditModal = () => {
|
||||
const { showModal, closeTopbarEditModal } = useTopbarEditModalStore();
|
||||
const { visibleDirectories, visibleSubscriptions, setDirectoryVisibility, setSubscriptionVisibility } = useTopbarVisibilityStore();
|
||||
const { visibleDirectories, showSubscriptionsInTopbar, setDirectoryVisibility, setShowSubscriptionsInTopbar } = useTopbarVisibilityStore();
|
||||
const account = useAccount();
|
||||
const subscriptions = useMemo(() => account?.subscriptions || [], [account?.subscriptions]);
|
||||
const location = useLocation();
|
||||
@@ -37,17 +37,16 @@ const TopbarEditModal = () => {
|
||||
// Local state for text input (will be saved on Save click)
|
||||
// Empty string means all directories visible (default), otherwise show only the specified codes
|
||||
const [localDirectoryInput, setLocalDirectoryInput] = useState<string>(allDirectoriesVisible ? '' : directoriesToString(visibleDirectories));
|
||||
// Check if all subscriptions are visible (if any subscription is visible, show subscriptions is checked)
|
||||
const [showSubscriptions, setShowSubscriptions] = useState<boolean>(subscriptions.length > 0 && subscriptions.some((addr: string) => visibleSubscriptions.has(addr)));
|
||||
const [showSubscriptions, setShowSubscriptions] = useState<boolean>(showSubscriptionsInTopbar);
|
||||
|
||||
// Update local state when modal opens or store changes
|
||||
// Sync local state when modal opens or store changes
|
||||
useEffect(() => {
|
||||
if (showModal) {
|
||||
const allVisible = allBoardCodes.every((code) => visibleDirectories.has(code));
|
||||
setLocalDirectoryInput(allVisible ? '' : directoriesToString(visibleDirectories));
|
||||
setShowSubscriptions(subscriptions.length > 0 && subscriptions.some((addr: string) => visibleSubscriptions.has(addr)));
|
||||
setShowSubscriptions(showSubscriptionsInTopbar);
|
||||
}
|
||||
}, [showModal, visibleDirectories, visibleSubscriptions, allBoardCodes, subscriptions]);
|
||||
}, [showModal, visibleDirectories, showSubscriptionsInTopbar, allBoardCodes]);
|
||||
|
||||
if (!showModal) {
|
||||
return null;
|
||||
@@ -75,13 +74,7 @@ const TopbarEditModal = () => {
|
||||
});
|
||||
}
|
||||
|
||||
// Apply subscription visibility changes
|
||||
// If showSubscriptions is checked, make all subscriptions visible
|
||||
// Otherwise, hide all subscriptions
|
||||
subscriptions.forEach((address: string) => {
|
||||
setSubscriptionVisibility(address, showSubscriptions);
|
||||
});
|
||||
|
||||
setShowSubscriptionsInTopbar(showSubscriptions);
|
||||
closeTopbarEditModal();
|
||||
};
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ const TopBarDesktop = () => {
|
||||
const { openCreateBoardModal } = useCreateBoardModalStore();
|
||||
const { openTopbarEditModal } = useTopbarEditModalStore();
|
||||
const { openDirectoryModal } = useDirectoryModalStore();
|
||||
const { visibleDirectories, visibleSubscriptions } = useTopbarVisibilityStore();
|
||||
const { visibleDirectories, showSubscriptionsInTopbar } = useTopbarVisibilityStore();
|
||||
const directories = useDirectories();
|
||||
|
||||
// Memoize allBoardCodes since it's derived from a constant
|
||||
@@ -127,8 +127,8 @@ const TopBarDesktop = () => {
|
||||
},
|
||||
);
|
||||
|
||||
// Filter subscriptions to only show visible ones
|
||||
const visibleSubscriptionAddresses = subscriptions.filter((address: string) => visibleSubscriptions.has(address));
|
||||
// Show all subscriptions when enabled; no separate per-address tracking (avoids drift when subscribing from board-buttons)
|
||||
const visibleSubscriptionAddresses = showSubscriptionsInTopbar ? subscriptions : [];
|
||||
|
||||
// Check if any directories are hidden
|
||||
const hasHiddenDirectories = useMemo(() => {
|
||||
|
||||
Reference in New Issue
Block a user