1 |
- {"version":3,"file":"14918.js","mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRA,sCAAsC,GACtC;AAAmC;AAES;AACe;AAEU;AACxB;AAEM;AACD;AAEmB;AACzB;AACF;AACI;AACO;AACqB;AACO;AAEjF,MAAMgB,eAAe,GAAG,IAAM;IAC5B,MAAM,EAAEC,CAAC,GAAE,GAAGf,oEAAc,CAAC,OAAO,CAAC;IACrC,MAAMgB,YAAY,GAAGlB,iDAAU,CAACe,qGAAyB,CAAC;IAE1D,MAAMI,cAAc,GAAGlB,0DAAW,CAACiB,YAAY,EAAE,CAACE,KAAK,GACrDA,KAAK,CAACC,OAAO,CAAC,wCAAwC,CAAC,CACxD;IACD,MAAMC,WAAW,GAAGrB,0DAAW,CAACiB,YAAY,EAAE,CAACE,KAAK,GAAK,CAAC,CAACA,KAAK,CAACG,OAAO,CAACC,UAAU,CAAC;IACpF,MAAMC,SAAS,GAAGxB,0DAAW,CAACiB,YAAY,EAAEJ,+FAAe,CAAC;IAE5D,sDAAsD;IACtD,MAAMY,aAAa,GAAG,IAAM;QAC1B,IAAIJ,WAAW,EAAE;YACfJ,YAAY,CAACS,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,MAAMC,eAAe,GAAGzB,0FAAyB,EAAE;QAEnDU,6EAAc,CAAC,YAAY,EAAE;YAC3BgB,SAAS,EAAED,eAAe;YAC1BE,IAAI,EAAE1B,8EAAmB;SAC1B,CAAC,CAAC;QAEHc,YAAY,CAACS,IAAI,CAAC;YAChBG,IAAI,EAAE,YAAY;YAClBD,SAAS,EAAEG,MAAM,CAACJ,eAAe,CAAC;YAClCK,WAAW,EAAE7B,8EAAmB;SACjC,CAAC,CAAC;IACL,CAAC;IAED,MAAM8B,cAAc,GAAG,IAAM;QAC3BhB,YAAY,CAACS,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,EAAEH,UAAU,GAAE,GAAGN,YAAY,CAACiB,WAAW,EAAE,CAACZ,OAAO;IACzD,qBACE,mDAACa,KAAG;QAACC,SAAS,EAAEhC,gFAAgB;kBAC9B,sEAAC+B,KAAG;YAACC,SAAS,EAAEhC,uFAAuB;;gBACpCc,cAAc,IAAIG,WAAW,iBAC5B,mDAACf,oEAAM;oBACLiC,MAAM,EAAEf,SAAS,iBAAG,mDAACf,qEAAO,KAAG,iBAAG,mDAACC,iEAAS,KAAG;oBAC/C8B,OAAO,EAAEP,cAAc;oBACvBQ,EAAE,EAAC,cAAc;oBACjBZ,IAAI,EAAEtB,oFAAkB;oBACxBoC,IAAI,EAAEnC,gFAAgB;oBACtB4B,SAAS,EAAEhC,sFAAsB;8BAEhCY,CAAC,CAAC,aAAa,CAAC;kBACV,iBAET,mDAACV,oEAAM;oBACLiC,MAAM,gBAAE,mDAAC5B,uEAAQ,KAAG;oBACpB6B,OAAO,EAAEf,aAAa;oBACtBqB,eAAe,EAAE,KAAK;oBACtBL,EAAE,EAAC,cAAc;oBACjBZ,IAAI,EAAEtB,oFAAkB;oBACxBoC,IAAI,EAAEnC,gFAAgB;oBACtB4B,SAAS,EAAEhC,sFAAsB;8BAEhCY,CAAC,CAAC,YAAY,CAAC;kBACT;gBAEVO,UAAU,kBAAI,mDAAClB,kEAAgB;oBAACkB,UAAU,EAAEA,UAAU;kBAAI;;UACvD;MACF,CACN;AACJ,CAAC;AAED,iEAAeR,eAAe,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxF/B,4CAA4C,GAC5C;AAAyC;AACkB;AAEvB;AAEe;AAEE;AACsB;AAE3E,MAAMV,gBAAgB,GAAG,CAAC,EAAEkB,UAAU,GAAE,GAAK;IAC3C,MAAM,CAACJ,KAAK,CAAC,GAAG4B,uDAAQ,CAACxB,UAAU,CAAC;IAEpC,MAAM2B,WAAW,GAAGD,2FAAqB,CAAC,KAAM,CAAS3B,OAAO,CAAC;IACjE,MAAM,EAAEN,CAAC,GAAE,GAAGf,oEAAc,CAAC,OAAO,CAAC;IAErC,MAAMkD,eAAe,GAAG,IAAM;QAC5BvC,4EAAc,CAAC,uBAAuB,CAAC,CAAC;IAC1C,CAAC;IAED,qBACE,wDAACuB,KAAG;QAACC,SAAS,EAAEhC,iFAAkB;;0BAChC,mDAACgD,MAAI;gBAAChB,SAAS,EAAEhC,kFAAmB;0BAAG8C,WAAW,CAACI,KAAK;cAAQ;YAAC,GAAG;0BACpE,wDAACN,+DAAI;gBAACR,OAAO,EAAEW,eAAe;gBAAEI,IAAI,EAAC,QAAQ;gBAACnB,SAAS,EAAEhC,uFAAwB;;oBAAE,GAChF;oBAACY,CAAC,CAAC,QAAQ,CAAC;oBAAC,GAChB;;cAAO;;MACH,CACN;AACJ,CAAC;AAED,iEAAeX,gBAAgB,EAAC;;;;;;;;;;;;;;;;;;;;;;;;AC/B2B;AACf;AAIqB;AACG;AAClB;AACT;AAEzC,MAAM4C,qBAAqB,GAAG,CAAC3B,OAAqB,GAAkB;IACpE,MAAM,EAAEN,CAAC,GAAE6C,IAAI,GAAE,GAAG5D,oEAAc,CAAC,OAAO,CAAC;IAE3C,MAAM6D,YAAY,GAAGxC,OAAO;IAE5B,MAAM,EAAEyC,IAAI,EAAEC,WAAW,GAAE,GAAGP,yDAAe,CAC3CK,YAAY,CAACjC,IAAI,KAAK1B,yFAAmB,GAAGwD,yEAAc,CAACG,YAAY,CAACrB,EAAE,EAAEoB,IAAI,CAAC,GAAG,IAAI,EACxF,IAAMD,iEAAc,CAACE,YAAY,CAACrB,EAAE,EAAEoB,IAAI,CAAC,CAC5C;IAED,MAAMK,qBAAqB,GAAG,IAAmB;QAC/C,MAAMC,cAAc,GAAGT,kFAAe,CAACI,YAAY,CAACrB,EAAE,CAAC;QACvD,OAAO;YACLa,KAAK,EAAEtC,CAAC,CAAC,CAAC,gBAAgB,EAAEmD,cAAc,CAACb,KAAK,CAAC,CAAC,CAAC;YACnDc,WAAW,EAAEpD,CAAC,CAAC,CAAC,gBAAgB,EAAEmD,cAAc,CAACC,WAAW,CAAC,CAAC,CAAC;SAChE,CAAC;IACJ,CAAC;IAED,MAAMC,qBAAqB,GAAG,IAAmB;QAC/C,MAAMC,eAAe,GAAGN,WAAW,EAAEO,OAAO;QAC5C,OAAO;YACLjB,KAAK,EAAEgB,eAAe,EAAEE,cAAc,EAAEC,IAAI;YAC5CL,WAAW,EAAEE,eAAe,EAAEI,KAAK,EAAED,IAAI;SAC1C,CAAC;IACJ,CAAC;IAED,IAAIX,YAAY,CAACjC,IAAI,KAAK1B,yFAAmB,EAAE,OAAO+D,qBAAqB,EAAE,CAAC;IAC9E,OAAOG,qBAAqB,EAAE,CAAC;AACjC,CAAC;AAED,iEAAepB,qBAAqB,EAAC;;;;;;;;;;;;;;;;;;;;;;ACxCrC,+CAA+C,GAE2B;AAC7B;AAEtC,MAAM4B,2BAA2B,GAAG,CAAC1D,KAAK,GAC/CA,KAAK,CAACG,OAAO,CAACwD,SAAS,KAAKH,mGAAkB,CAAC;AAE1C,MAAMI,2BAA2B,GAAG,CAAC5D,KAAK,GAAKA,KAAK,CAACG,OAAO,CAAC0D,SAAS,EAAEF,SAAS,CAAC;AAElF,MAAMjE,eAAe,GAAG,CAACM,KAAK,GAAKA,KAAK,CAAC8D,MAAM,CAAC,SAAS,CAAC,CAAC;AAE3D,MAAMC,oBAAoB,GAAG,CAAC/D,KAAK,GACxCA,KAAK,CAACC,OAAO,CAAC,wCAAwC,CAAC,CAAC;AAEnD,MAAM+D,6BAA6B,GAAG,CAAChE,KAAK,EAAEiE,SAAS,GAAK;IACjE,MAAMlE,cAAc,GAAGgE,oBAAoB,CAAC/D,KAAK,CAAC;IAClD,MAAMkE,YAAY,GAAGlE,KAAK,CAACG,OAAO,CAACgE,KAAK;IACxC,OAAOpE,cAAc,IAAImE,YAAY,KAAKD,SAAS,CAAC;AACtD,CAAC,CAAC;AAEK,MAAMG,6BAA6B,GAAG,CAACpE,KAAK,EAAEiE,SAAS,GAAK;IACjE,MAAM5D,SAAS,GAAGX,eAAe,CAACM,KAAK,CAAC;IACxC,MAAMkE,YAAY,GAAGlE,KAAK,CAACG,OAAO,CAACgE,KAAK;IACxC,OAAO9D,SAAS,IAAI6D,YAAY,KAAKD,SAAS,CAAC;AACjD,CAAC,CAAC;AAEK,MAAMI,wBAAwB,GAAG,CAACrE,KAAK,EAAEsE,QAAQ,GAAK;IAC3D,MAAM,EAAEH,KAAK,GAAEI,UAAU,GAAE,GAAGvE,KAAK,CAACG,OAAO;IAC3C,OACEH,KAAK,CAACC,OAAO,CAAC,wCAAwC,CAAC,IACvDwD,YAAY,CAACU,KAAK,EAAEI,UAAU,CAAC,KAAKD,QAAQ,CAC5C;AACJ,CAAC,CAAC;AAEK,MAAME,oBAAoB,GAAG,CAACxE,KAAK,EAAEsE,QAAQ,GAAK;IACvD,MAAM,EAAEH,KAAK,GAAEI,UAAU,GAAE,GAAGvE,KAAK,CAACG,OAAO;IAC3C,OAAOT,eAAe,CAACM,KAAK,CAAC,IAAIyD,mEAAY,CAACU,KAAK,EAAEI,UAAU,CAAC,KAAKD,QAAQ,CAAC;AAChF,CAAC,CAAC","sources":["webpack://quran.com/./src/components/HomePage/PlayRadioButton.module.scss","webpack://quran.com/./src/components/HomePage/PlayRadioButton.tsx","webpack://quran.com/./src/components/HomePage/RadioInformation.tsx","webpack://quran.com/./src/xstate/Radio/useCurrentStationInfo.ts","webpack://quran.com/./src/xstate/actors/audioPlayer/selectors.ts"],"sourcesContent":["// Exports\nmodule.exports = {\n\t\"ctaButton\": \"PlayRadioButton_ctaButton__cEBo8\",\n\t\"container\": \"PlayRadioButton_container___GD_P\",\n\t\"playRadioSection\": \"PlayRadioButton_playRadioSection__0qUwH\",\n\t\"stationTitle\": \"PlayRadioButton_stationTitle__QI0ui\",\n\t\"editStationButton\": \"PlayRadioButton_editStationButton__Esi_Y\",\n\t\"playPauseButton\": \"PlayRadioButton_playPauseButton__sHEjM\"\n};\n","/* eslint-disable react/no-multi-comp */\nimport { useContext } from 'react';\n\nimport { useSelector } from '@xstate/react';\nimport useTranslation from 'next-translate/useTranslation';\n\nimport { getRandomCuratedStationId } from '../Radio/curatedStations';\nimport { StationType } from '../Radio/types';\n\nimport styles from './PlayRadioButton.module.scss';\nimport RadioInformation from './RadioInformation';\n\nimport Button, { ButtonType, ButtonSize } from '@/dls/Button/Button';\nimport Spinner from '@/dls/Spinner/Spinner';\nimport PauseIcon from '@/icons/pause.svg';\nimport PlayIcon from '@/icons/play-arrow.svg';\nimport { logButtonClick } from '@/utils/eventLogger';\nimport { selectIsLoading } from 'src/xstate/actors/audioPlayer/selectors';\nimport { AudioPlayerMachineContext } from 'src/xstate/AudioPlayerMachineContext';\n\nconst PlayRadioButton = () => {\n const { t } = useTranslation('radio');\n const audioService = useContext(AudioPlayerMachineContext);\n\n const isAudioPlaying = useSelector(audioService, (state) =>\n state.matches('VISIBLE.AUDIO_PLAYER_INITIATED.PLAYING'),\n );\n const isRadioMode = useSelector(audioService, (state) => !!state.context.radioActor);\n const isLoading = useSelector(audioService, selectIsLoading);\n\n // TODO: handle continue radio from last saved session\n const onPlayClicked = () => {\n if (isRadioMode) {\n audioService.send('TOGGLE');\n return;\n }\n const randomStationId = getRandomCuratedStationId();\n\n logButtonClick('play_radio', {\n stationId: randomStationId,\n type: StationType.Curated,\n });\n\n audioService.send({\n type: 'PLAY_RADIO',\n stationId: Number(randomStationId),\n stationType: StationType.Curated,\n });\n };\n\n const onPauseClicked = () => {\n audioService.send('TOGGLE');\n };\n\n const { radioActor } = audioService.getSnapshot().context;\n return (\n <div className={styles.container}>\n <div className={styles.playRadioSection}>\n {isAudioPlaying && isRadioMode ? (\n <Button\n prefix={isLoading ? <Spinner /> : <PauseIcon />}\n onClick={onPauseClicked}\n id=\"radio-button\"\n type={ButtonType.Success}\n size={ButtonSize.Small}\n className={styles.playPauseButton}\n >\n {t('pause-radio')}\n </Button>\n ) : (\n <Button\n prefix={<PlayIcon />}\n onClick={onPlayClicked}\n shouldFlipOnRTL={false}\n id=\"radio-button\"\n type={ButtonType.Success}\n size={ButtonSize.Small}\n className={styles.playPauseButton}\n >\n {t('play-radio')}\n </Button>\n )}\n {radioActor && <RadioInformation radioActor={radioActor} />}\n </div>\n </div>\n );\n};\n\nexport default PlayRadioButton;\n","/* eslint-disable i18next/no-literal-string */\nimport { useActor } from '@xstate/react';\nimport useTranslation from 'next-translate/useTranslation';\n\nimport Link from '../dls/Link/Link';\n\nimport styles from './PlayRadioButton.module.scss';\n\nimport { logButtonClick } from '@/utils/eventLogger';\nimport useCurrentStationInfo from 'src/xstate/Radio/useCurrentStationInfo';\n\nconst RadioInformation = ({ radioActor }) => {\n const [state] = useActor(radioActor);\n\n const stationInfo = useCurrentStationInfo((state as any).context);\n const { t } = useTranslation('radio');\n\n const onChangeClicked = () => {\n logButtonClick('homepage_change_radio');\n };\n\n return (\n <div className={styles.stationInfo}>\n <span className={styles.stationTitle}>{stationInfo.title}</span>{' '}\n <Link onClick={onChangeClicked} href=\"/radio\" className={styles.editStationButton}>\n ({t('change')})\n </Link>\n </div>\n );\n};\n\nexport default RadioInformation;\n","import useTranslation from 'next-translate/useTranslation';\nimport useSWRImmutable from 'swr/immutable';\n\nimport RadioContext from '../actors/radio/types/RadioContext';\n\nimport curatedStations from '@/components/Radio/curatedStations';\nimport { StationInfo, StationType } from '@/components/Radio/types';\nimport { makeReciterUrl } from '@/utils/apiPaths';\nimport { getReciterData } from 'src/api';\n\nconst useCurrentStationInfo = (context: RadioContext): StationInfo => {\n const { t, lang } = useTranslation('radio');\n\n const stationState = context;\n\n const { data: reciterData } = useSWRImmutable(\n stationState.type === StationType.Reciter ? makeReciterUrl(stationState.id, lang) : null,\n () => getReciterData(stationState.id, lang),\n );\n\n const getCuratedStationInfo = (): StationInfo => {\n const curatedStation = curatedStations[stationState.id];\n return {\n title: t(`curated-station.${curatedStation.title}`),\n description: t(`curated-station.${curatedStation.description}`),\n };\n };\n\n const getReciterStationInfo = (): StationInfo => {\n const selectedReciter = reciterData?.reciter;\n return {\n title: selectedReciter?.translatedName?.name,\n description: selectedReciter?.style?.name,\n };\n };\n\n if (stationState.type === StationType.Curated) return getCuratedStationInfo();\n return getReciterStationInfo();\n};\n\nexport default useCurrentStationInfo;\n","/* eslint-disable import/prefer-default-export */\n\nimport { DEFAULT_RECITER } from '@/redux/defaultSettings/defaultSettings';\nimport { makeVerseKey } from '@/utils/verse';\n\nexport const selectIsUsingDefaultReciter = (state) =>\n state.context.reciterId === DEFAULT_RECITER.id;\n\nexport const selectCurrentAudioReciterId = (state) => state.context.audioData?.reciterId;\n\nexport const selectIsLoading = (state) => state.hasTag('loading');\n\nexport const selectIsAudioPlaying = (state) =>\n state.matches('VISIBLE.AUDIO_PLAYER_INITIATED.PLAYING');\n\nexport const selectIsPlayingCurrentChapter = (state, chapterId) => {\n const isAudioPlaying = selectIsAudioPlaying(state);\n const currentSurah = state.context.surah;\n return isAudioPlaying && currentSurah === chapterId;\n};\n\nexport const selectIsLoadingCurrentChapter = (state, chapterId) => {\n const isLoading = selectIsLoading(state);\n const currentSurah = state.context.surah;\n return isLoading && currentSurah === chapterId;\n};\n\nexport const selectIsVerseBeingPlayed = (state, verseKey) => {\n const { surah, ayahNumber } = state.context;\n return (\n state.matches('VISIBLE.AUDIO_PLAYER_INITIATED.PLAYING') &&\n makeVerseKey(surah, ayahNumber) === verseKey\n );\n};\n\nexport const selectIsVerseLoading = (state, verseKey) => {\n const { surah, ayahNumber } = state.context;\n return selectIsLoading(state) && makeVerseKey(surah, ayahNumber) === verseKey;\n};\n"],"names":["useContext","useSelector","useTranslation","getRandomCuratedStationId","StationType","styles","RadioInformation","Button","ButtonType","ButtonSize","Spinner","PauseIcon","PlayIcon","logButtonClick","selectIsLoading","AudioPlayerMachineContext","PlayRadioButton","t","audioService","isAudioPlaying","state","matches","isRadioMode","context","radioActor","isLoading","onPlayClicked","send","randomStationId","stationId","type","Curated","Number","stationType","onPauseClicked","getSnapshot","div","className","container","playRadioSection","prefix","onClick","id","Success","size","Small","playPauseButton","shouldFlipOnRTL","useActor","Link","useCurrentStationInfo","stationInfo","onChangeClicked","span","stationTitle","title","href","editStationButton","useSWRImmutable","curatedStations","makeReciterUrl","getReciterData","lang","stationState","data","reciterData","Reciter","getCuratedStationInfo","curatedStation","description","getReciterStationInfo","selectedReciter","reciter","translatedName","name","style","DEFAULT_RECITER","makeVerseKey","selectIsUsingDefaultReciter","reciterId","selectCurrentAudioReciterId","audioData","hasTag","selectIsAudioPlaying","selectIsPlayingCurrentChapter","chapterId","currentSurah","surah","selectIsLoadingCurrentChapter","selectIsVerseBeingPlayed","verseKey","ayahNumber","selectIsVerseLoading"],"sourceRoot":""}
|