1 |
- {"version":3,"file":"47658.js","mappings":"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","sources":["webpack://quran.com/./public/icons/chevron-down.svg","webpack://quran.com/./public/icons/menu_more_horiz.svg","webpack://quran.com/./src/components/Collection/CollectionSorter/CollectionSorter.module.scss","webpack://quran.com/./src/pages/index.module.scss","webpack://quran.com/./src/components/Collection/CollectionSorter/CollectionSorter.tsx","webpack://quran.com/./src/components/dls/ConfirmationModal/ConfirmationModal.tsx","webpack://quran.com/./src/components/dls/ConfirmationModal/hooks.ts","webpack://quran.com/./types/CollectionSortOptions.ts"],"sourcesContent":["var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgChevronDown = function SvgChevronDown(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 15,\n height: 15,\n viewBox: \"0 0 15 15\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.135 6.158a.5.5 0 0 1 .707-.023L7.5 9.565l3.658-3.43a.5.5 0 0 1 .684.73l-4 3.75a.5.5 0 0 1-.684 0l-4-3.75a.5.5 0 0 1-.023-.707Z\",\n fill: \"currentColor\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n })));\n};\nexport default SvgChevronDown;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgMenuMoreHoriz = function SvgMenuMoreHoriz(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 13a1 1 0 1 0 0-2 1 1 0 0 0 0 2ZM19 13a1 1 0 1 0 0-2 1 1 0 0 0 0 2ZM5 13a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })));\n};\nexport default SvgMenuMoreHoriz;","// Exports\nmodule.exports = {\n\t\"sorter\": \"CollectionSorter_sorter__FUf1K\",\n\t\"sortTrigger\": \"CollectionSorter_sortTrigger__C17Do\",\n\t\"itemIcon\": \"CollectionSorter_itemIcon___37wK\"\n};\n","// Exports\nmodule.exports = {\n\t\"pageContainer\": \"index_pageContainer__Pxtn3\",\n\t\"loadingContainer\": \"index_loadingContainer__WEZFc\",\n\t\"flow\": \"index_flow__rCTR5\",\n\t\"flowItem\": \"index_flowItem__GnXWz\",\n\t\"additionalVerticalGap\": \"index_additionalVerticalGap__nzYz6\",\n\t\"fullWidth\": \"index_fullWidth__1n4ux\"\n};\n","import styles from './CollectionSorter.module.scss';\n\nimport ChevronDownIcon from '@/icons/chevron-down.svg';\nimport { logEvent } from '@/utils/eventLogger';\nimport PopoverMenu from 'src/components/dls/PopoverMenu/PopoverMenu';\n\nconst CollectionSorter = ({\n options,\n selectedOptionId,\n onChange,\n isSingleCollection,\n collectionId = null,\n}) => {\n const selectedOption = options.find((option) => option.id === selectedOptionId);\n\n const onOpenChange = (isOpen: boolean) => {\n const eventData = {\n collectionId,\n };\n if (isSingleCollection) {\n if (isOpen) {\n logEvent('collection_sorter_opened', eventData);\n } else {\n logEvent('collection_sorter_closed', eventData);\n }\n } else if (isOpen) {\n logEvent('collections_sorter_opened', eventData);\n } else {\n logEvent('collections_sorter_closed', eventData);\n }\n };\n\n return (\n <div className={styles.sorter}>\n <PopoverMenu\n trigger={\n <span className={styles.sortTrigger}>\n {selectedOption.label}\n <span className={styles.itemIcon}>\n <ChevronDownIcon />\n </span>\n </span>\n }\n onOpenChange={onOpenChange}\n >\n {options.map((option) => (\n <PopoverMenu.Item\n shouldCloseMenuAfterClick\n key={option.id}\n onClick={() => onChange(option.id)}\n >\n {option.label}\n </PopoverMenu.Item>\n ))}\n </PopoverMenu>\n </div>\n );\n};\n\nexport default CollectionSorter;\n","/* eslint-disable react/no-array-index-key */\nimport { useMemo } from 'react';\n\nimport { useConfirmModal } from './hooks';\n\nimport Modal from '@/dls/Modal/Modal';\n\nconst ConfirmationModal = () => {\n const { onCancel, onConfirm, state } = useConfirmModal();\n\n const actions = useMemo(() => {\n const returnedActions = [];\n if (state.confirmText && onConfirm) {\n returnedActions.push({\n label: state.confirmText,\n onClick: onConfirm,\n });\n }\n if (state.cancelText && onCancel) {\n returnedActions.push({\n label: state.cancelText,\n onClick: onCancel,\n isCloseAction: true,\n });\n }\n return returnedActions;\n }, [onCancel, onConfirm, state.cancelText, state.confirmText]);\n\n const onClose = () => {\n if (onCancel) {\n onCancel();\n }\n };\n\n return (\n <Modal isOpen={!!state.open} onClickOutside={onClose} onEscapeKeyDown={onClose}>\n <Modal.Body>\n <Modal.Header>\n <Modal.Title>{state.title}</Modal.Title>\n <Modal.Subtitle>{state.subtitle}</Modal.Subtitle>\n </Modal.Header>\n <p>{state.description}</p>\n </Modal.Body>\n <Modal.Footer>\n {actions.map((action, index) => {\n const { onClick, label } = action;\n if (action.isCloseAction) {\n return (\n <Modal.CloseAction key={index} onClick={onClick}>\n {label}\n </Modal.CloseAction>\n );\n }\n return (\n <Modal.Action key={index} onClick={onClick}>\n {label}\n </Modal.Action>\n );\n })}\n </Modal.Footer>\n </Modal>\n );\n};\n\nexport default ConfirmationModal;\n","import { useEffect, useState } from 'react';\n\ntype State = {\n title?: string;\n subtitle?: string;\n description?: string;\n confirmText?: string;\n cancelText?: string;\n open?: boolean;\n};\n\nlet memoryState: State = {\n open: false,\n};\n\nconst updateState = (newState: State) => {\n memoryState = newState;\n listeners.forEach((listener) => listener(memoryState));\n};\n\nconst listeners: Array<(state: State) => void> = [];\n\n/**\n * When this hook (useConfirmationModalInternal) is called.\n * We set `useState` in the component. So that it will trigger rerender when the state changes\n *\n * `setState` is registered to a global `listeners`.\n * Every time we `updateState`, this will update the state in every components that subscribe\n * to the changes (listeners)\n */\n\nexport const useConfirmModal = () => {\n const [state, setState] = useState(memoryState);\n useEffect(() => {\n listeners.push(setState);\n return () => {\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n };\n }, [state]);\n\n const closeConfirm = () => {\n updateState({ ...state, open: false });\n };\n\n const onConfirm = () => {\n closeConfirm();\n resolveCallback(true);\n };\n\n const onCancel = () => {\n closeConfirm();\n resolveCallback(false);\n };\n\n return { state, onCancel, onConfirm };\n};\n\nlet resolveCallback: (arg: boolean) => void;\n\n/**\n * This hook is meant to be consumed by other components\n * Check ConfirmationModal.stories.tsx for an example\n *\n * This hook return a callback, that's when called return a Promise<boolean>\n * if the user click \"confirm\", boolean will be true, otherwise it will be false\n */\n\nexport const useConfirm = () => {\n const confirm = (state: State) => {\n updateState({ ...state, open: true });\n return new Promise((res) => {\n resolveCallback = res;\n });\n };\n\n return confirm;\n};\n","export enum CollectionDetailSortOption {\n RecentlyAdded = 'recentlyAdded',\n VerseKey = 'verseKey',\n}\n\nexport enum CollectionListSortOption {\n RecentlyUpdated = 'recentlyUpdated',\n Alphabetical = 'alphabetical',\n}\n"],"names":["styles","ChevronDownIcon","logEvent","PopoverMenu","CollectionSorter","options","selectedOptionId","onChange","isSingleCollection","collectionId","selectedOption","find","option","id","onOpenChange","isOpen","eventData","div","className","sorter","trigger","span","sortTrigger","label","itemIcon","map","Item","shouldCloseMenuAfterClick","onClick","useMemo","useConfirmModal","Modal","ConfirmationModal","onCancel","onConfirm","state","actions","returnedActions","confirmText","push","cancelText","isCloseAction","onClose","open","onClickOutside","onEscapeKeyDown","Body","Header","Title","title","Subtitle","subtitle","p","description","Footer","action","index","CloseAction","Action","useEffect","useState","memoryState","updateState","newState","listeners","forEach","listener","setState","indexOf","splice","closeConfirm","resolveCallback","useConfirm","confirm","Promise","res","CollectionDetailSortOption","RecentlyAdded","VerseKey","CollectionListSortOption","RecentlyUpdated","Alphabetical"],"sourceRoot":""}
|