|
| 1 | +import React from 'react'; |
| 2 | + |
| 3 | +import * as cookies from 'lib/cookies'; |
| 4 | +import useFeatureValue from 'lib/growthbook/useFeatureValue'; |
| 5 | +import * as mixpanel from 'lib/mixpanel'; |
| 6 | + |
| 7 | +export default function useTableViewValue() { |
| 8 | + const cookieValue = cookies.get(cookies.NAMES.TABLE_VIEW_ON_MOBILE); |
| 9 | + const [ value, setValue ] = React.useState<boolean | undefined>(cookieValue ? cookieValue === 'true' : undefined); |
| 10 | + const { value: featureFlag, isLoading: isFeatureLoading } = useFeatureValue('txns_view_exp', 'list_view'); |
| 11 | + |
| 12 | + const onToggle = React.useCallback(() => { |
| 13 | + setValue((prev) => { |
| 14 | + const nextValue = !prev; |
| 15 | + cookies.set(cookies.NAMES.TABLE_VIEW_ON_MOBILE, nextValue ? 'true' : 'false'); |
| 16 | + mixpanel.logEvent(mixpanel.EventTypes.PAGE_WIDGET, { |
| 17 | + Type: 'Txn view switch', |
| 18 | + Info: nextValue ? 'Table view' : 'List view', |
| 19 | + Source: 'Address page', |
| 20 | + }); |
| 21 | + return nextValue; |
| 22 | + }); |
| 23 | + }, []); |
| 24 | + |
| 25 | + React.useEffect(() => { |
| 26 | + if (!isFeatureLoading) { |
| 27 | + setValue((prev) => { |
| 28 | + if (prev === undefined) { |
| 29 | + return featureFlag === 'table_view'; |
| 30 | + } |
| 31 | + return prev; |
| 32 | + }); |
| 33 | + } |
| 34 | + }, [ featureFlag, isFeatureLoading ]); |
| 35 | + |
| 36 | + return React.useMemo(() => { |
| 37 | + if (value !== undefined) { |
| 38 | + return { |
| 39 | + value, |
| 40 | + isLoading: false, |
| 41 | + onToggle, |
| 42 | + }; |
| 43 | + } |
| 44 | + |
| 45 | + return { value: featureFlag === 'table_view', isLoading: isFeatureLoading, onToggle }; |
| 46 | + }, [ featureFlag, isFeatureLoading, onToggle, value ]); |
| 47 | +} |
0 commit comments