Files
explore/lib/hooks/useTableViewValue.tsx
tom goriunovandGitHub 1895ee4901 Mobile. A/B test: txs/token transfers table view (address details page) (#3241)
* Mobile. A/B test: txs/token transfers table view (address details page)

Resolves #3230

* fixes and test

* [skip ci] change mixpanel event
2026-01-29 12:52:49 +01:00

48 lines
1.5 KiB
TypeScript

import React from 'react';
import * as cookies from 'lib/cookies';
import useFeatureValue from 'lib/growthbook/useFeatureValue';
import * as mixpanel from 'lib/mixpanel';
export default function useTableViewValue() {
const cookieValue = cookies.get(cookies.NAMES.TABLE_VIEW_ON_MOBILE);
const [ value, setValue ] = React.useState<boolean | undefined>(cookieValue ? cookieValue === 'true' : undefined);
const { value: featureFlag, isLoading: isFeatureLoading } = useFeatureValue('txns_view_exp', 'list_view');
const onToggle = React.useCallback(() => {
setValue((prev) => {
const nextValue = !prev;
cookies.set(cookies.NAMES.TABLE_VIEW_ON_MOBILE, nextValue ? 'true' : 'false');
mixpanel.logEvent(mixpanel.EventTypes.PAGE_WIDGET, {
Type: 'Txn view switch',
Info: nextValue ? 'Table view' : 'List view',
Source: 'Address page',
});
return nextValue;
});
}, []);
React.useEffect(() => {
if (!isFeatureLoading) {
setValue((prev) => {
if (prev === undefined) {
return featureFlag === 'table_view';
}
return prev;
});
}
}, [ featureFlag, isFeatureLoading ]);
return React.useMemo(() => {
if (value !== undefined) {
return {
value,
isLoading: false,
onToggle,
};
}
return { value: featureFlag === 'table_view', isLoading: isFeatureLoading, onToggle };
}, [ featureFlag, isFeatureLoading, onToggle, value ]);
}