aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-hub/src/meshbay_hub/static/group-page.js
diff options
context:
space:
mode:
Diffstat (limited to 'packages/meshbay-hub/src/meshbay_hub/static/group-page.js')
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/group-page.js21
1 files changed, 19 insertions, 2 deletions
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/group-page.js b/packages/meshbay-hub/src/meshbay_hub/static/group-page.js
index d7c81ad..6b9c82a 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/group-page.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/group-page.js
@@ -35,8 +35,25 @@ function GroupPage({ groupId, group, token, username, userId, userPrefs,
const [descDraft, setDescDraft] = useState('');
const [savingDesc, setSavingDesc] = useState(false);
const defaultTab = (userPrefs && (userPrefs[`default_tab:${groupId}`] || userPrefs['default_tab'])) || 'chat';
- const [tab, setTab] = useState(defaultTab);
- useEffect(() => { setTab(defaultTab); }, [groupId]);
+ // The create-group wizard can request a one-shot landing tab (Settings, where
+ // the invite form is) via session.openGroupTab. It applies once, only to the
+ // group it names, and never touches the user's default-tab preference — every
+ // other way into a group still lands on that preference, or 'chat'.
+ const consumeTabOverride = useCallback(() => {
+ const o = session.openGroupTab;
+ if (o && o.groupId === groupId) { session.openGroupTab = null; return o.tab; }
+ return null;
+ }, [groupId]);
+ const [tab, setTab] = useState(() => consumeTabOverride() || defaultTab);
+ // GroupPage is not remounted when switching groups (see the refreshedRef note
+ // below), so react to a real groupId change here — but not to the initial
+ // mount, where useState already picked the right tab.
+ const tabGroupRef = useRef(groupId);
+ useEffect(() => {
+ if (tabGroupRef.current === groupId) return;
+ tabGroupRef.current = groupId;
+ setTab(consumeTabOverride() || defaultTab);
+ }, [groupId]);
const [groupMuted, setGroupMuted] = useState(() => !!(group && group.muted));
const _lastTouch = useRef(0);