-
-
Notifications
You must be signed in to change notification settings - Fork 482
/
Copy pathRepeatButton.tsx
82 lines (74 loc) · 2.81 KB
/
RepeatButton.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import { SetStateAction, useContext, useState, Dispatch } from 'react';
import { useSelector } from '@xstate/react';
import useTranslation from 'next-translate/useTranslation';
import RemainingRangeCount from '../RemainingRangeCount';
import RepeatAudioModal from '@/components/AudioPlayer/RepeatAudioModal/RepeatAudioModal';
import { RepetitionMode } from '@/components/AudioPlayer/RepeatAudioModal/SelectRepetitionMode';
import Wrapper from '@/components/Wrapper/Wrapper';
import Badge from '@/dls/Badge/Badge';
import PopoverMenu from '@/dls/PopoverMenu/PopoverMenu';
import Spinner, { SpinnerSize } from '@/dls/Spinner/Spinner';
import RepeatIcon from '@/icons/repeat.svg';
import { logButtonClick } from '@/utils/eventLogger';
import { selectIsLoading } from '@/xstate/actors/audioPlayer/selectors';
import { AudioPlayerMachineContext } from 'src/xstate/AudioPlayerMachineContext';
interface RepeatAudioButton {
setOpenOverflowAudioPlayerActionsMenu: Dispatch<SetStateAction<boolean>>;
}
const RepeatAudioButton = ({ setOpenOverflowAudioPlayerActionsMenu }: RepeatAudioButton) => {
const { t } = useTranslation('common');
const audioService = useContext(AudioPlayerMachineContext);
const [isModalOpen, setIsModalOpen] = useState(false);
const currentSurah = useSelector(audioService, (state) => state.context.surah);
const isLoading = useSelector(audioService, selectIsLoading);
const repeatActor = useSelector(audioService, (state) => state.context.repeatActor);
const isInRepeatMode = !!repeatActor;
const onButtonClicked = () => {
logButtonClick('audio_player_repeat');
setIsModalOpen(true);
};
return (
<>
<PopoverMenu.Item
onClick={onButtonClicked}
isDisabled={isLoading}
icon={
isLoading ? (
<Spinner size={SpinnerSize.Large} />
) : (
<Wrapper
shouldWrap={isInRepeatMode}
wrapper={(children) => (
<Badge
content={
isInRepeatMode && (
<RemainingRangeCount
rangeActor={repeatActor.getSnapshot().context.rangeCycleActor}
/>
)
}
>
{children}
</Badge>
)}
>
<RepeatIcon />
</Wrapper>
)
}
>
{t('audio.player.manage-repeat-settings')}
</PopoverMenu.Item>
{!isLoading && (
<RepeatAudioModal
defaultRepetitionMode={RepetitionMode.Range}
chapterId={currentSurah.toString()}
isOpen={isModalOpen}
onClose={() => setIsModalOpen(false)}
setOpenOverflowActionsMenu={setOpenOverflowAudioPlayerActionsMenu}
/>
)}
</>
);
};
export default RepeatAudioButton;