PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.14.6
GiveWP – Donation Plugin and Fundraising Platform v4.14.6
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / Views / Components / AdminDetailsPage / Tabs / Router.tsx
give / src / Views / Components / AdminDetailsPage / Tabs Last commit date
Router.tsx 1 year ago TabList.tsx 9 months ago TabPanels.tsx 1 year ago
Router.tsx
73 lines
1 import { useEffect, useState } from 'react';
2 import type { PressEvent } from 'react-aria-components';
3 import { TabsContext, LinkContext, Tabs } from 'react-aria-components';
4 import { Tab } from '../types';
5
6 /**
7 * @since 4.4.0
8 */
9 export default function TabsRouter({ children, tabDefinitions }: { children: React.ReactNode, tabDefinitions: Tab[] }) {
10 const [selectedKey, onSelectionChange] = useState(tabDefinitions[0].id);
11
12 const onPress = (e: PressEvent) => {
13 onSelectionChange(e.target.getAttribute('data-href'));
14 };
15
16 const getTabFromURL = () => {
17 const urlParams = new URLSearchParams(window.location.search);
18 const tabId = urlParams.get('tab') || selectedKey;
19 return tabDefinitions.find((tab) => tab.id === tabId);
20 };
21
22 const handleTabNavigation = (tabId: string) => {
23 const newTab = tabDefinitions.find((tab) => tab.id === tabId);
24
25 if (!newTab) {
26 return;
27 }
28
29 const urlParams = new URLSearchParams(window.location.search);
30 urlParams.set('tab', newTab.id);
31
32 window.history.pushState(null, newTab.title, `${window.location.pathname}?${urlParams.toString()}`);
33
34 onSelectionChange(newTab.id);
35 };
36
37 const handleUrlTabParamOnFirstLoad = () => {
38 const activeTab = tabDefinitions.find((tab) => tab.id === selectedKey);
39 const urlParams = new URLSearchParams(window.location.search);
40 // Add the 'tab' parameter only if it's not in the URL yet
41 if (!urlParams.has('tab')) {
42 urlParams.set('tab', selectedKey);
43 window.history.replaceState(null, activeTab?.title, `${window.location.pathname}?${urlParams.toString()}`);
44 } else {
45 onSelectionChange(getTabFromURL()?.id);
46 }
47 };
48
49 useEffect(() => {
50 handleUrlTabParamOnFirstLoad();
51
52 const handlePopState = () => onSelectionChange(getTabFromURL()?.id);
53
54 // Updates state based on URL when user navigates with "Back" or "Forward" buttons
55 window.addEventListener('popstate', handlePopState);
56
57 // Cleanup listener on unmount
58 return () => {
59 window.removeEventListener('popstate', handlePopState);
60 };
61 }, []);
62
63 return (
64 <TabsContext.Provider value={{ selectedKey, onSelectionChange: handleTabNavigation }}>
65 <LinkContext.Provider value={{ onPress }}>
66 <Tabs>
67 {children}
68 </Tabs>
69 </LinkContext.Provider>
70 </TabsContext.Provider>
71 );
72 }
73