11import { useEffect , useState } from 'react' ;
22import { ScrollView , View } from 'react-native' ;
33
4+ import ResponsiveModal , { ModalState } from '@/components/ResponsiveModal' ;
45import { Dialog , DialogContent , DialogTrigger } from '@/components/ui/dialog' ;
56import { useDimension } from '@/hooks/useDimension' ;
6- import { cn } from '@/lib/utils' ;
77
88import TierPointsSheetContent from './TierPointsSheetContent' ;
99
1010import type { TierPointsSheetProps } from './TierPointsSheet.types' ;
1111
12- // Bottom sheet on phones, the standard centred modal from `md` up.
12+ const MODAL_STATE : ModalState = { name : 'tier-points' , number : 1 } ;
13+ const CLOSE_STATE : ModalState = { name : 'close' , number : 0 } ;
14+
15+ /**
16+ * How points work: a bottom sheet on phones, the standard `ResponsiveModal` from
17+ * `md` up.
18+ */
1319const TierPointsSheet = ( { trigger, open : controlledOpen , onOpenChange } : TierPointsSheetProps ) => {
1420 const { isScreenMedium } = useDimension ( ) ;
1521 const [ uncontrolledOpen , setUncontrolledOpen ] = useState ( false ) ;
@@ -33,28 +39,44 @@ const TierPointsSheet = ({ trigger, open: controlledOpen, onOpenChange }: TierPo
3339 onOpenChange ?.( nextOpen ) ;
3440 } ;
3541
42+ const content = (
43+ < TierPointsSheetContent
44+ animationSession = { animationSession }
45+ isSheet = { ! isScreenMedium }
46+ onClose = { ( ) => handleOpenChange ( false ) }
47+ />
48+ ) ;
49+
50+ if ( isScreenMedium ) {
51+ return (
52+ < View >
53+ < ResponsiveModal
54+ currentModal = { MODAL_STATE }
55+ previousModal = { CLOSE_STATE }
56+ isOpen = { open }
57+ onOpenChange = { handleOpenChange }
58+ trigger = { trigger ?? null }
59+ contentKey = "tier-points"
60+ shouldAnimate = { false }
61+ hideHeader
62+ contentClassName = "bg-[#1C1C1C]"
63+ >
64+ { content }
65+ </ ResponsiveModal >
66+ </ View >
67+ ) ;
68+ }
69+
3670 return (
3771 < View >
3872 < Dialog open = { open } onOpenChange = { handleOpenChange } >
3973 { trigger && < DialogTrigger asChild > { trigger } </ DialogTrigger > }
4074 < DialogContent
41- showCloseButton = { isScreenMedium }
42- className = { cn (
43- 'overflow-hidden bg-[#1C1C1C] p-0' ,
44- isScreenMedium
45- ? 'max-h-[86vh] md:max-w-lg'
46- : 'fixed bottom-0 left-1/2 h-[min(792px,calc(100vh-16px))] w-full max-w-[419px] -translate-x-1/2 rounded-b-none rounded-t-[40px]' ,
47- ) }
75+ showCloseButton = { false }
76+ className = "fixed bottom-0 left-1/2 h-[min(792px,calc(100vh-16px))] w-full max-w-[419px] -translate-x-1/2 overflow-hidden rounded-b-none rounded-t-[40px] bg-[#1C1C1C] p-0"
4877 >
49- { ! isScreenMedium && (
50- < View className = "absolute left-1/2 top-4 z-10 h-[5px] w-[73px] -translate-x-1/2 rounded-full bg-white/20" />
51- ) }
52- < ScrollView showsVerticalScrollIndicator = { false } >
53- < TierPointsSheetContent
54- animationSession = { animationSession }
55- onClose = { ( ) => handleOpenChange ( false ) }
56- />
57- </ ScrollView >
78+ < View className = "absolute left-1/2 top-4 z-10 h-[5px] w-[73px] -translate-x-1/2 rounded-full bg-white/20" />
79+ < ScrollView showsVerticalScrollIndicator = { false } > { content } </ ScrollView >
5880 </ DialogContent >
5981 </ Dialog >
6082 </ View >
0 commit comments