{"version":3,"file":"static/js/8772.148158fc.chunk.js","mappings":"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","sources":["common/hooks/useAbTest.ts","common/hooks/useDelayedState.ts","common/privateConsts.ts","common/util/Array/getRandomItem.ts","components/shared/CharacterComment/index.tsx","components/shared/Panel/Shop/Footer.tsx","components/shared/Panel/Shop/CoinShopButton/CoinShopButton.tsx","components/shared/Panel/Shop/ItemList/Record/BuyButton.tsx","components/shared/Panel/Shop/ItemList/Record/Record.tsx","components/shared/Panel/Shop/ItemList/List.tsx","components/shared/Panel/Shop/Panel.tsx","../node_modules/@stripe/stripe-js/dist/stripe.esm.js","components/shared/Payment/PaymentForm/CheckoutForm.tsx","components/shared/Payment/PaymentForm/PaymentForm.tsx","components/shared/Payment/SelectionArea/TicketSelectionArea.tsx","components/shared/Payment/SelectionArea/index.tsx","components/shared/Payment/SelectionArea/CoinSelectionArea/SpecialOffer.tsx","components/shared/Payment/SelectionArea/CoinSelectionArea/CoinSelectionArea.tsx","components/shared/Payment/Panel.tsx","../node_modules/@stripe/react-stripe-js/dist/react-stripe.umd.js"],"sourcesContent":["import { useEffect, useState } from \"react\";\r\nimport { sendPost, sleepAsync } from \"../functions\";\r\nimport { getRandomItem } from \"../util/Array/getRandomItem\";\r\n\r\nexport function useAbTest>({\r\n testName,\r\n keys,\r\n initialKey,\r\n open = true,\r\n}: {\r\n testName: string; // max length is 200 (DB column limit)\r\n keys: T; // max length of each string is 200 (DB column limit)\r\n initialKey?: T[number];\r\n open?: boolean;\r\n}) {\r\n const [key, setKey] = useState(initialKey);\r\n const [isAlreadySuccess, setAlreadySuccess] = useState(false);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n setKey(initialKey);\r\n return;\r\n }\r\n fetchKey(testName, keys).then(key => {\r\n setKey(key);\r\n setAlreadySuccess(false);\r\n });\r\n }, [testName, ...keys, open, initialKey]);\r\n\r\n return {\r\n abTestSuccess: () => {\r\n if (key && !isAlreadySuccess) {\r\n setAlreadySuccess(true);\r\n fetchSuccess(testName, key);\r\n }\r\n },\r\n abTestKey: key,\r\n };\r\n}\r\n\r\nconst noFetch =\r\n location.href.includes(\"://localhost\") || localStorage.getItem(\"isAdmin\");\r\n\r\nasync function fetchKey>(\r\n testName: string,\r\n keys: T\r\n): Promise {\r\n try {\r\n if (noFetch) {\r\n console.log(\"GetAbTestKey\", {\r\n testName,\r\n keys,\r\n });\r\n if (testName.length > 200) {\r\n alert(\r\n \"AB test error! Maximum length of testName is 200! It's because of the DB table's column setting!\"\r\n );\r\n }\r\n const tooLongKey = keys.find(k => k.length > 200);\r\n if (tooLongKey) {\r\n alert(\r\n \"AB test error! A too long AB test key is included! Test Name:\" +\r\n testName +\r\n \" Key:\" +\r\n tooLongKey +\r\n \" It's because of the DB table's column setting!\"\r\n );\r\n }\r\n await sleepAsync(500);\r\n return getRandomItem(keys) ?? keys[0];\r\n }\r\n\r\n const { key } = await sendPost<\r\n { testName: string; keys: T },\r\n { key: T[number] }\r\n >(\r\n {\r\n testName,\r\n keys,\r\n },\r\n `/api/SystemBase/GetAbTestKey`\r\n );\r\n return key;\r\n } catch {\r\n return getRandomItem(keys) ?? keys[0];\r\n }\r\n}\r\n\r\nfunction fetchSuccess(testName: string, key: string) {\r\n if (noFetch) {\r\n console.log(\"AbTestSuccess\", {\r\n testName,\r\n key,\r\n });\r\n return;\r\n }\r\n sendPost(\r\n {\r\n testName,\r\n key,\r\n },\r\n `/api/SystemBase/AbTestSuccess`\r\n );\r\n}\r\n","import { useEffect, useState } from \"react\";\r\n\r\nexport function useDelayedState(\r\n state: T,\r\n checkOpen: (state: T) => boolean,\r\n timeoutMilliSecond: number\r\n): { delayedState: T; delayedOpen: boolean } {\r\n const [delayedState, setDelayedState] = useState(state);\r\n useEffect(() => {\r\n if (checkOpen(state)) {\r\n // When it opens\r\n setDelayedState(state);\r\n return;\r\n }\r\n\r\n // When it closes\r\n const timeoutId = setTimeout(() => {\r\n setDelayedState(state);\r\n }, timeoutMilliSecond);\r\n return () => {\r\n clearTimeout(timeoutId);\r\n };\r\n }, [state, timeoutMilliSecond, checkOpen]);\r\n\r\n return { delayedState, delayedOpen: checkOpen(delayedState) };\r\n}\r\n","export const GOOGLE_ANALYTICS = \"UA-122613642-6\";\r\nexport const GOOGLE_ADS_CLIENT = \"ca-pub-8006404698960678\";\r\nexport const GOOGLE_ADS_SLOT = \"2560074548\";\r\nexport const LOG_TOKEN = \"d5(TaY(G*Z*C6T88_bz)9n6rus.vN4H-/gufqntxmg128\";\r\nexport const STRIPE_TEST_PUBLIC_KEY =\r\n \"pk_test_51LhhV3HweUPlZUIvprAPWnuvtH8SbyRzeIrS7unJzGNPN2ya3zVdrMmiCS0ByNJmFM8zyWdNPmTex0xVU9qnfGNp00HuzjH6Mj\";\r\nexport const STRIPE_PRODUCTION_PUBLIC_KEY =\r\n \"pk_live_51LhhV3HweUPlZUIvope4FfZ0jeF2hoOzoIkDKBKN7JDFItTSh2MzVkgpcje7MucjuzWAb9W2ToobUp3FW9CoVURg00oQmqnWcW\";\r\n","export function getRandomItem(arr: T[] | ReadonlyArray): T | undefined {\r\n return arr[Math.floor(Math.random() * arr.length)];\r\n}\r\n","import { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { BaseCSSProperties } from \"@material-ui/core/styles/withStyles\";\r\nimport * as React from \"react\";\r\nimport * as consts from \"../../../common/consts\";\r\nimport { spaceBetween } from \"../../../common/util/Array/spaceBetween\";\r\nimport \"./CharacterComment.css\";\r\n\r\ntype TProps = {\r\n imgNumber: number;\r\n screenWidth: number;\r\n comment: string | React.ReactNode;\r\n style?: BaseCSSProperties;\r\n commentStyle?: BaseCSSProperties;\r\n imgStyle?: BaseCSSProperties;\r\n containerRef?: React.RefObject;\r\n className?: string;\r\n};\r\nexport default function CharacterComment(props: TProps) {\r\n const {\r\n imgNumber,\r\n screenWidth,\r\n comment,\r\n style,\r\n commentStyle,\r\n imgStyle,\r\n containerRef,\r\n className,\r\n } = props;\r\n const c = useStyles({ style, imgStyle, screenWidth, commentStyle });\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n {comment}\r\n
\r\n
\r\n \r\n );\r\n}\r\nconst useStyles = makeStyles<\r\n Theme,\r\n {\r\n style?: BaseCSSProperties;\r\n imgStyle?: BaseCSSProperties;\r\n commentStyle?: BaseCSSProperties;\r\n screenWidth: number;\r\n }\r\n>({\r\n container: ({ style }) => ({ ...style }),\r\n ninjaPic: ({ imgStyle, screenWidth }) => ({\r\n width: (screenWidth * 2) / 10,\r\n ...imgStyle,\r\n }),\r\n comment: ({ screenWidth, commentStyle }) => ({\r\n width: screenWidth > 767 ? (screenWidth * 7) / 10 - 15 : \"100%\",\r\n ...commentStyle,\r\n }),\r\n});\r\n","import Card from \"@material-ui/core/Card\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { appsPublicImg } from \"../../../../common/consts\";\r\nimport { theme } from \"../../../zApps/Layout\";\r\nimport { User } from \"../../User/types\";\r\n\r\nexport const footerCoinsHeight = 45;\r\n\r\nexport function Footer({ user }: { user?: User }) {\r\n const c = useFooterStyles();\r\n return (\r\n \r\n Your current coins:\r\n
\r\n \r\n \r\n {user?.coin?.toLocaleString() ?? 0}\r\n \r\n
\r\n
\r\n );\r\n}\r\nconst useFooterStyles = makeStyles({\r\n container: {\r\n position: \"absolute\",\r\n bottom: 0,\r\n right: 0,\r\n width: \"100%\",\r\n height: footerCoinsHeight,\r\n borderRadius: 0,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-end\",\r\n paddingRight: 10,\r\n zIndex: 10,\r\n },\r\n currentCoinMessage: {\r\n paddingRight: 7,\r\n },\r\n priceContainer: {\r\n marginRight: 5,\r\n height: 30,\r\n display: \"flex\",\r\n alignItems: \"flex-end\",\r\n fontWeight: \"bold\",\r\n borderBottom: `solid ${theme.palette.primary.main}`,\r\n paddingRight: 10,\r\n paddingBottom: 1,\r\n fontSize: 17,\r\n },\r\n coinImg: { width: 25, height: 25, marginRight: 5, marginLeft: 3 },\r\n price: { position: \"relative\", top: 1 },\r\n});\r\n","import Card from \"@material-ui/core/Card\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport StorefrontIcon from \"@material-ui/icons/Storefront\";\r\nimport { changeAppState, getAppState } from \"../../../../../common/appState\";\r\nimport { useAbTest } from \"../../../../../common/hooks/useAbTest\";\r\nimport { SuccessButton } from \"../../../Button/SuccessButton\";\r\nimport { footerCoinsHeight } from \"../Footer\";\r\n\r\nexport const coinShopButtonHeight = 35;\r\n\r\nexport function CoinShopButton() {\r\n const { abTestKey, abTestSuccess } = useAbTest({\r\n testName: \"coin-shop-button-label-in-item-shop\",\r\n keys: [\"Coin Shop\", \"Buy Coins\"],\r\n });\r\n\r\n const c = useCoinStyles({ abTestFetched: !!abTestKey });\r\n\r\n return (\r\n {\r\n if (!getAppState().user) {\r\n changeAppState(\"signInPanelState\", { type: \"signUp\" });\r\n return;\r\n }\r\n // changeAppState(\"paymentPanelState\", { type: \"coin\" });\r\n abTestSuccess();\r\n }}\r\n >\r\n }>\r\n {abTestKey}\r\n \r\n \r\n );\r\n}\r\nconst useCoinStyles = makeStyles({\r\n card: ({ abTestFetched }) => ({\r\n position: \"absolute\",\r\n bottom: footerCoinsHeight,\r\n height: coinShopButtonHeight,\r\n left: 0,\r\n padding: 2,\r\n opacity: abTestFetched ? 1 : 0,\r\n transition: \"all 500ms\",\r\n }),\r\n button: {\r\n maxHeight: 30,\r\n minHeight: 30,\r\n fontSize: \"15px !important\",\r\n lineHeight: 1,\r\n },\r\n});\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { useState } from \"react\";\r\nimport { changeAppState } from \"../../../../../../common/appState\";\r\nimport { fetchPost } from \"../../../../../../common/util/fetch\";\r\nimport { theme } from \"../../../../../zApps/Layout\";\r\nimport { setItemsFromServerSide } from \"../../../../../zApps/Layout/Login/MyPage/components/OpenableCards/ItemsCard/items\";\r\nimport { SoldItem } from \"../../../../../zApps/Layout/Login/MyPage/components/OpenableCards/ItemsCard/items/Item\";\r\nimport { PossessedItem_ServerSide } from \"../../../../../zApps/Layout/Login/MyPage/components/OpenableCards/ItemsCard/items/types\";\r\nimport ShurikenProgress from \"../../../../Animations/ShurikenProgress\";\r\nimport { PrimaryButton } from \"../../../../Button/PrimaryButton\";\r\nimport { User } from \"../../../../User/types\";\r\n\r\nexport function BuyButton({\r\n item,\r\n necessaryCoins,\r\n user,\r\n quantity,\r\n afterBuying,\r\n}: {\r\n item: SoldItem;\r\n necessaryCoins: number;\r\n user?: User;\r\n quantity: number;\r\n afterBuying: () => void;\r\n}) {\r\n const [submitting, setSubmitting] = useState(false);\r\n const c = useItemUseButtonStyles();\r\n\r\n return (\r\n {\r\n if (!user) {\r\n changeAppState(\"signInPanelState\", { type: \"signUp\" });\r\n return;\r\n }\r\n if (necessaryCoins > 0) {\r\n alertCoinShortage(necessaryCoins);\r\n return;\r\n }\r\n\r\n setSubmitting(true);\r\n await fetchBuyItem(user.userId, item.key, item.price, quantity);\r\n showSuccessDialog();\r\n setSubmitting(false);\r\n\r\n afterBuying();\r\n }}\r\n disabled={submitting}\r\n >\r\n {submitting ? : \"Buy\"}\r\n \r\n );\r\n}\r\nconst useItemUseButtonStyles = makeStyles({\r\n button: {\r\n maxWidth: 66,\r\n minWidth: 66,\r\n maxHeight: 30,\r\n minHeight: 30,\r\n fontSize: \"15px !important\",\r\n lineHeight: 1,\r\n },\r\n});\r\n\r\nfunction alertCoinShortage(necessaryCoins: number) {\r\n changeAppState(\"simpleDialogState\", {\r\n open: true,\r\n title: \"Not enough coins!\",\r\n message: `You need **${necessaryCoins.toLocaleString()}** more coins to buy this item!`,\r\n buttonLabel: \"OK\",\r\n onButtonClick: () => {\r\n changeAppState(\"simpleDialogState\", {\r\n open: false,\r\n });\r\n\r\n // コインの販売中止\r\n // const enoughCoins = coinProducts\r\n // .filter(p => p.coin >= necessaryCoins)\r\n // .map(p => p.coin);\r\n // const coinsToBuy = Math.min(...enoughCoins);\r\n // const coinProductKeyToBuy = coinProducts.find(\r\n // p => p.coin === coinsToBuy\r\n // )?.key;\r\n // changeAppState(\"paymentPanelState\", {\r\n // type: \"coin\",\r\n // initiallyClickedItemKey: coinProductKeyToBuy || undefined,\r\n // });\r\n },\r\n titleStyle: { color: theme.palette.secondary.main },\r\n });\r\n}\r\n\r\nfunction showSuccessDialog() {\r\n changeAppState(\"simpleDialogState\", {\r\n open: true,\r\n title: \"Success!\",\r\n message: `You successfully bought the item!`,\r\n buttonLabel: \"Open Item Box\",\r\n onButtonClick: () => {\r\n changeAppState(\"simpleDialogState\", { open: false });\r\n changeAppState(\"shopPanelState\", { open: false });\r\n changeAppState(\"signInPanelState\", {\r\n type: \"myPageTop\",\r\n initialView: \"MyPageItemsCard\",\r\n });\r\n },\r\n titleStyle: { color: theme.palette.success.main },\r\n });\r\n}\r\n\r\nasync function fetchBuyItem(\r\n userId: number,\r\n itemKey: string,\r\n price: number,\r\n quantity: number\r\n): Promise {\r\n const result = await fetchPost<\r\n {\r\n userId: number;\r\n itemKey: string;\r\n price: number;\r\n quantity: number;\r\n },\r\n { user: User; items: PossessedItem_ServerSide[] }\r\n >(\"api/ItemShop/BuyItem\", { userId, itemKey, price, quantity });\r\n\r\n if (\"error\" in result) {\r\n return;\r\n }\r\n changeAppState(\"user\", result.user);\r\n setItemsFromServerSide(result.items);\r\n}\r\n","import Card from \"@material-ui/core/Card\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { appsPublicImg } from \"../../../../../../common/consts\";\r\nimport { SoldItem } from \"../../../../../zApps/Layout/Login/MyPage/components/OpenableCards/ItemsCard/items/Item\";\r\nimport { User } from \"../../../../User/types\";\r\nimport { BuyButton } from \"./BuyButton\";\r\n\r\nconst recordHeight = 100;\r\nconst imageContainerWidth = 80;\r\nconst imageWidth = 40;\r\n\r\nexport function Record({\r\n item,\r\n user,\r\n isFocused,\r\n}: {\r\n item: SoldItem;\r\n user?: User;\r\n isFocused: boolean;\r\n}) {\r\n const [quantity, setQuantity] = useState(1);\r\n const necessaryCoins = user ? item.price * quantity - user.coin : 0;\r\n const c = useStyles({ necessaryCoins, isFocused });\r\n\r\n const maxQuantity = Math.min(\r\n 30,\r\n Math.floor((user?.coin || 0) / item.price) || 1\r\n );\r\n\r\n const arrChoice = Array(maxQuantity)\r\n .fill(undefined)\r\n .map((v, i) => i + 1);\r\n\r\n useEffect(() => {\r\n if (arrChoice.includes(quantity)) {\r\n return;\r\n }\r\n setQuantity(1);\r\n }, [arrChoice.length, user?.coin]);\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
{item.name}
\r\n
{item.getExplanation(user)}
\r\n
\r\n
\r\n \r\n {item.price.toLocaleString()}\r\n
\r\n
\r\n ×\r\n {\r\n setQuantity(Number(ev.target.value) || 1);\r\n }}\r\n className={c.select}\r\n >\r\n {arrChoice.map(num => (\r\n \r\n ))}\r\n \r\n
\r\n {\r\n setQuantity(1);\r\n }}\r\n />\r\n
\r\n
\r\n
\r\n );\r\n}\r\nconst useStyles = makeStyles<\r\n Theme,\r\n { necessaryCoins: number; isFocused: boolean }\r\n>(theme => ({\r\n container: ({ isFocused }) => ({\r\n marginBottom: 5,\r\n height: recordHeight,\r\n display: \"flex\",\r\n border: isFocused\r\n ? `solid 3px ${theme.palette.success.main}`\r\n : undefined,\r\n }),\r\n leftBlock: {\r\n height: recordHeight,\r\n width: imageContainerWidth,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n },\r\n leftBlockInnerContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n lineHeight: 1.3,\r\n },\r\n image: { width: imageWidth },\r\n rightBlock: { padding: \"2px 5px 5px\", position: \"relative\", width: \"100%\" },\r\n itemName: {\r\n fontWeight: \"bold\",\r\n fontSize: \"large\",\r\n },\r\n explanation: {\r\n fontSize: \"13px\",\r\n color: theme.palette.grey[700],\r\n lineHeight: 1.4,\r\n },\r\n priceAndBuyButton: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n position: \"absolute\",\r\n bottom: 5,\r\n right: 5,\r\n fontSize: 15,\r\n },\r\n priceContainer: ({ necessaryCoins }) => ({\r\n marginRight: 5,\r\n height: 30,\r\n display: \"flex\",\r\n alignItems: \"flex-end\",\r\n fontWeight: \"bold\",\r\n borderBottom: `solid ${\r\n necessaryCoins > 0\r\n ? theme.palette.grey[400]\r\n : theme.palette.primary.main\r\n }`,\r\n paddingRight: 10,\r\n paddingBottom: 1,\r\n }),\r\n coinImg: {\r\n width: 21,\r\n height: 21,\r\n marginRight: 2,\r\n },\r\n select: { marginLeft: 5, minWidth: 37.6 },\r\n quantityContainer: {\r\n fontSize: \"small\",\r\n display: \"flex\",\r\n marginRight: 10,\r\n position: \"relative\",\r\n top: 2,\r\n },\r\n}));\r\n","import Card from \"@material-ui/core/Card\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { ReactNode } from \"react\";\r\nimport { allItems } from \"../../../../zApps/Layout/Login/MyPage/components/OpenableCards/ItemsCard/items\";\r\nimport { ItemKey } from \"../../../../zApps/Layout/Login/MyPage/components/OpenableCards/ItemsCard/items/types\";\r\nimport { User } from \"../../../User/types\";\r\nimport { Record } from \"./Record/Record\";\r\n\r\nexport function ItemList({\r\n user,\r\n focusedItemKey,\r\n}: {\r\n user?: User;\r\n focusedItemKey?: ItemKey;\r\n}) {\r\n const c = useStyles();\r\n\r\n return (\r\n \r\n {[...allItems]\r\n .sort((a, b) => {\r\n if (a.key === focusedItemKey) {\r\n return -1;\r\n }\r\n if (b.key === focusedItemKey) {\r\n return 1;\r\n }\r\n return 0;\r\n })\r\n .reduce((acc, { price, ...itemRest }) => {\r\n if (price === \"notSold\") {\r\n return acc;\r\n }\r\n return [\r\n ...acc,\r\n ,\r\n ];\r\n }, [])}\r\n \r\n );\r\n}\r\nconst useStyles = makeStyles(theme => ({\r\n container: {\r\n backgroundColor: theme.palette.grey[100],\r\n padding: \"5px 5px 0\",\r\n },\r\n}));\r\n","import { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { useLayoutEffect, useState } from \"react\";\r\nimport { useAppState } from \"../../../../common/appState\";\r\nimport { useDelayedState } from \"../../../../common/hooks/useDelayedState\";\r\nimport { useScreenSize } from \"../../../../common/hooks/useScreenSize\";\r\nimport { ItemKey } from \"../../../zApps/Layout/Login/MyPage/components/OpenableCards/ItemsCard/items/types\";\r\nimport { RightPanel } from \"../RightPanel\";\r\nimport { coinShopButtonHeight } from \"./CoinShopButton/CoinShopButton\";\r\nimport { Footer, footerCoinsHeight } from \"./Footer\";\r\nimport { ItemList } from \"./ItemList/List\";\r\n\r\nconst transitionMilliseconds = 1000;\r\nexport const panelWidth = 500;\r\n\r\nexport default function ShopPanel() {\r\n const [panelState, setPanelState] = useAppState(\"shopPanelState\");\r\n const { delayedOpen, delayedState } = useDelayedState(\r\n panelState,\r\n ({ open }) => open,\r\n transitionMilliseconds\r\n );\r\n\r\n return (\r\n {\r\n setPanelState({ open: false });\r\n }}\r\n panelWidth={panelWidth}\r\n globalPanelState={panelState}\r\n transitionMilliseconds={transitionMilliseconds}\r\n >\r\n {delayedOpen && (\r\n \r\n )}\r\n \r\n );\r\n}\r\n\r\nexport function Content({ focusedItemKey }: { focusedItemKey?: ItemKey }) {\r\n const [user] = useAppState(\"user\");\r\n const { scrollableContainerHeight } = useScrollableContainerHeight();\r\n\r\n const c = useStyles({ scrollableContainerHeight });\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

Item Shop

\r\n
\r\n \r\n
\r\n {/* */}\r\n
\r\n
\r\n );\r\n}\r\nconst useStyles = makeStyles({\r\n container: {\r\n position: \"relative\",\r\n },\r\n scrollableContainer: ({ scrollableContainerHeight }) => ({\r\n paddingBottom: footerCoinsHeight + coinShopButtonHeight + 5,\r\n padding: \"0 5px\",\r\n overflowY: \"auto\",\r\n height: scrollableContainerHeight,\r\n transition: \"all 500ms\",\r\n }),\r\n titleContainer: {\r\n width: \"100%\",\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n padding: \"5px 20px\",\r\n marginBottom: 5,\r\n },\r\n title: {\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n maxWidth: \"100%\",\r\n height: 48,\r\n fontWeight: \"bold\",\r\n },\r\n});\r\n\r\nfunction useScrollableContainerHeight() {\r\n const { screenWidth, screenHeight } = useScreenSize();\r\n const [scrollableContainerHeight, setScrollableContainerHeight] =\r\n useState(0);\r\n useLayoutEffect(() => {\r\n setScrollableContainerHeight(screenHeight - 68);\r\n }, [screenWidth, screenHeight]);\r\n\r\n return { scrollableContainerHeight };\r\n}\r\n","var V3_URL = 'https://js.stripe.com/v3';\nvar V3_URL_REGEX = /^https:\\/\\/js\\.stripe\\.com\\/v3\\/?(\\?.*)?$/;\nvar EXISTING_SCRIPT_MESSAGE = 'loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used';\nvar findScript = function findScript() {\n var scripts = document.querySelectorAll(\"script[src^=\\\"\".concat(V3_URL, \"\\\"]\"));\n\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i];\n\n if (!V3_URL_REGEX.test(script.src)) {\n continue;\n }\n\n return script;\n }\n\n return null;\n};\n\nvar injectScript = function injectScript(params) {\n var queryString = params && !params.advancedFraudSignals ? '?advancedFraudSignals=false' : '';\n var script = document.createElement('script');\n script.src = \"\".concat(V3_URL).concat(queryString);\n var headOrBody = document.head || document.body;\n\n if (!headOrBody) {\n throw new Error('Expected document.body not to be null. Stripe.js requires a element.');\n }\n\n headOrBody.appendChild(script);\n return script;\n};\n\nvar registerWrapper = function registerWrapper(stripe, startTime) {\n if (!stripe || !stripe._registerWrapper) {\n return;\n }\n\n stripe._registerWrapper({\n name: 'stripe-js',\n version: \"1.48.0\",\n startTime: startTime\n });\n};\n\nvar stripePromise = null;\nvar loadScript = function loadScript(params) {\n // Ensure that we only attempt to load Stripe.js at most once\n if (stripePromise !== null) {\n return stripePromise;\n }\n\n stripePromise = new Promise(function (resolve, reject) {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n // Resolve to null when imported server side. This makes the module\n // safe to import in an isomorphic code base.\n resolve(null);\n return;\n }\n\n if (window.Stripe && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n }\n\n if (window.Stripe) {\n resolve(window.Stripe);\n return;\n }\n\n try {\n var script = findScript();\n\n if (script && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n } else if (!script) {\n script = injectScript(params);\n }\n\n script.addEventListener('load', function () {\n if (window.Stripe) {\n resolve(window.Stripe);\n } else {\n reject(new Error('Stripe.js not available'));\n }\n });\n script.addEventListener('error', function () {\n reject(new Error('Failed to load Stripe.js'));\n });\n } catch (error) {\n reject(error);\n return;\n }\n });\n return stripePromise;\n};\nvar initStripe = function initStripe(maybeStripe, args, startTime) {\n if (maybeStripe === null) {\n return null;\n }\n\n var stripe = maybeStripe.apply(undefined, args);\n registerWrapper(stripe, startTime);\n return stripe;\n}; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\n// own script injection.\n\nvar stripePromise$1 = Promise.resolve().then(function () {\n return loadScript(null);\n});\nvar loadCalled = false;\nstripePromise$1[\"catch\"](function (err) {\n if (!loadCalled) {\n console.warn(err);\n }\n});\nvar loadStripe = function loadStripe() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n loadCalled = true;\n var startTime = Date.now();\n return stripePromise$1.then(function (maybeStripe) {\n return initStripe(maybeStripe, args, startTime);\n });\n};\n\nexport { loadStripe };\n","import {\r\n PaymentElement,\r\n useElements,\r\n useStripe,\r\n} from \"@stripe/react-stripe-js\";\r\nimport { FormEventHandler, useEffect, useState } from \"react\";\r\nimport ShurikenProgress from \"../../Animations/ShurikenProgress\";\r\n\r\nexport default function CheckoutForm({\r\n success,\r\n isFormReady,\r\n setFormReady,\r\n submitting,\r\n setSubmitting,\r\n}: {\r\n success: () => Promise;\r\n isFormReady: boolean;\r\n setFormReady: (ready: boolean) => void;\r\n submitting: boolean;\r\n setSubmitting: (submitting: boolean) => void;\r\n}) {\r\n const stripe = useStripe();\r\n const elements = useElements();\r\n\r\n const [message, setMessage] = useState(null);\r\n\r\n useEffect(() => {\r\n if (!stripe) {\r\n return;\r\n }\r\n\r\n const clientSecret = new URLSearchParams(window.location.search).get(\r\n \"payment_intent_client_secret\"\r\n );\r\n\r\n if (!clientSecret) {\r\n return;\r\n }\r\n\r\n stripe.retrievePaymentIntent(clientSecret).then(({ paymentIntent }) => {\r\n switch (paymentIntent?.status) {\r\n case \"succeeded\":\r\n setMessage(\"Payment succeeded!\");\r\n break;\r\n case \"processing\":\r\n setMessage(\"Your payment is processing.\");\r\n break;\r\n case \"requires_payment_method\":\r\n setMessage(\r\n \"Your payment was not successful, please try again.\"\r\n );\r\n break;\r\n default:\r\n setMessage(\"Something went wrong.\");\r\n break;\r\n }\r\n });\r\n }, [stripe]);\r\n\r\n const handleSubmit: FormEventHandler = async e => {\r\n e.preventDefault();\r\n\r\n if (!stripe || !elements || !isFormReady) {\r\n // Stripe.js has not yet loaded.\r\n // Make sure to disable form submission until Stripe.js has loaded.\r\n return;\r\n }\r\n\r\n setSubmitting(true);\r\n\r\n const paymentIntentResult = await stripe.confirmPayment({\r\n elements,\r\n confirmParams: {\r\n return_url: location.href,\r\n },\r\n redirect: \"if_required\",\r\n });\r\n\r\n if (\r\n [\"succeeded\", \"processing\"].some(\r\n okStatus =>\r\n okStatus === paymentIntentResult.paymentIntent?.status\r\n )\r\n ) {\r\n await success();\r\n setSubmitting(false);\r\n return;\r\n }\r\n\r\n const error = paymentIntentResult.error;\r\n if (!error) {\r\n setSubmitting(false);\r\n return;\r\n }\r\n\r\n if (error.type === \"card_error\" || error.type === \"validation_error\") {\r\n setMessage(error.message);\r\n } else {\r\n setMessage(\"An unexpected error occurred.\");\r\n }\r\n setSubmitting(false);\r\n };\r\n\r\n return (\r\n
\r\n {\r\n setFormReady(true);\r\n }}\r\n />\r\n \r\n \r\n {submitting ? : \"Buy now\"}\r\n \r\n \r\n {/* Show any error or success messages */}\r\n {message &&
{message}
}\r\n \r\n );\r\n}\r\n","import { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { Elements } from \"@stripe/react-stripe-js\";\r\nimport { loadStripe } from \"@stripe/stripe-js\";\r\nimport { useEffect, useState } from \"react\";\r\nimport {\r\n STRIPE_PRODUCTION_PUBLIC_KEY,\r\n STRIPE_TEST_PUBLIC_KEY,\r\n} from \"../../../../common/privateConsts\";\r\nimport { spaceBetween } from \"../../../../common/util/Array/spaceBetween\";\r\nimport { fetchPost } from \"../../../../common/util/fetch\";\r\nimport ShurikenProgress from \"../../Animations/ShurikenProgress\";\r\nimport { User } from \"../../User/types\";\r\n\r\nimport CheckoutForm from \"./CheckoutForm\";\r\nimport \"./style.css\";\r\nimport { OrderItem } from \"./types\";\r\n\r\n// Make sure to call loadStripe outside of a component’s render to avoid\r\n// recreating the Stripe object on every render.\r\n// This is your test publishable API key.\r\nconst stripePublicKey = location.host.startsWith(\"localhost\")\r\n ? STRIPE_TEST_PUBLIC_KEY\r\n : STRIPE_PRODUCTION_PUBLIC_KEY;\r\nconst stripePromise = loadStripe(stripePublicKey, { locale: \"en\" });\r\n\r\nexport function PaymentForm({\r\n user: { userId },\r\n orderItems,\r\n success,\r\n submitting,\r\n setSubmitting,\r\n setPaymentId,\r\n}: {\r\n user: User;\r\n orderItems: OrderItem[];\r\n success: () => Promise;\r\n submitting: boolean;\r\n setSubmitting: (submitting: boolean) => void;\r\n setPaymentId: (id: string) => void;\r\n}) {\r\n const [isFormReady, setFormReady] = useState(false);\r\n const [clientSecret, setClientSecret] = useState(\"\");\r\n\r\n useEffect(() => {\r\n // Create PaymentIntent as soon as the page loads\r\n fetchCreate(userId, orderItems).then(result => {\r\n if (result == null) {\r\n setClientSecret(\"\");\r\n setPaymentId(\"\");\r\n return;\r\n }\r\n setClientSecret(result.clientSecret);\r\n setPaymentId(result.id);\r\n });\r\n }, [userId, orderItems]);\r\n\r\n const appearance = {\r\n theme: \"stripe\",\r\n } as const;\r\n const options = {\r\n clientSecret,\r\n appearance,\r\n };\r\n\r\n const c = useStyles({ isFormReady });\r\n\r\n return (\r\n
\r\n {!isFormReady && (\r\n \r\n )}\r\n\r\n {clientSecret && (\r\n \r\n \r\n \r\n \r\n
\r\n )}\r\n \r\n );\r\n}\r\nconst useStyles = makeStyles({\r\n container: { minHeight: 400 },\r\n paymentContent: ({ isFormReady }) => ({\r\n opacity: isFormReady ? 1 : 0,\r\n transition: \"opacity 500ms\",\r\n }),\r\n});\r\n\r\ntype Res = { clientSecret: string; id: string };\r\nasync function fetchCreate(\r\n userId: number,\r\n items: OrderItem[]\r\n): Promise {\r\n const result = await fetchPost<{ userId: number; items: OrderItem[] }, Res>(\r\n \"api/Payment/Create\",\r\n { userId, items }\r\n );\r\n\r\n if (\"error\" in result) {\r\n return null;\r\n }\r\n return result;\r\n}\r\n","import Card from \"@material-ui/core/Card\";\r\nimport Collapse from \"@material-ui/core/Collapse\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { RefObject, useEffect, useLayoutEffect, useRef, useState } from \"react\";\r\nimport { changeAppState, useAppState } from \"../../../../common/appState\";\r\nimport { appsPublicImg } from \"../../../../common/consts\";\r\nimport { sleepAsync } from \"../../../../common/functions\";\r\nimport { spaceBetween } from \"../../../../common/util/Array/spaceBetween\";\r\nimport { PrimaryButton } from \"../../Button/PrimaryButton\";\r\nimport { panelWidth } from \"../../Panel/Shop/Panel\";\r\nimport { User } from \"../../User/types\";\r\nimport { OrderItem } from \"../PaymentForm/types\";\r\n\r\nexport const normalTickets = [\r\n { key: \"NormalLesson\", title: \"1 ticket\", ticket: 1 },\r\n { key: \"NormalLesson5\", title: \"5 tickets\", ticket: 5 },\r\n { key: \"NormalLesson10\", title: \"10 tickets\", ticket: 10 },\r\n] as const;\r\n\r\nexport const specialTickets = [\r\n { key: \"SpecialPriceLesson\", title: \"1 ticket\", ticket: 1 },\r\n { key: \"SpecialPriceLesson5\", title: \"5 tickets\", ticket: 5 },\r\n { key: \"SpecialPriceLesson10\", title: \"10 tickets\", ticket: 10 },\r\n] as const;\r\n\r\nexport function TicketSelectionArea({\r\n chosenItem,\r\n setChosenItem,\r\n prices,\r\n paymentSuccess,\r\n submitting,\r\n initiallyClickedItemKey,\r\n user,\r\n scrollableContainerRef,\r\n}: {\r\n chosenItem?: OrderItem;\r\n setChosenItem: (item?: OrderItem) => void;\r\n prices: {\r\n [key: string]: number;\r\n };\r\n paymentSuccess: boolean;\r\n submitting: boolean;\r\n initiallyClickedItemKey?: string;\r\n user: User;\r\n scrollableContainerRef: RefObject;\r\n}) {\r\n const [clickedItemKey, setClickedItemKey] = useState(\"\"); // Just clicked, and still not pushed the payment button\r\n const stillChoosing = !chosenItem; // Payment button was pushed or the special offer was clicked\r\n const isNormalTicketChosen = normalTickets.some(\r\n t => t.key === chosenItem?.id\r\n );\r\n const isSpecialTicketChosen = specialTickets.some(\r\n t => t.key === chosenItem?.id\r\n );\r\n\r\n useEffect(() => {\r\n if (initiallyClickedItemKey) {\r\n setClickedItemKey(initiallyClickedItemKey);\r\n }\r\n }, [initiallyClickedItemKey]);\r\n\r\n const c = useStyles({\r\n stillChoosing,\r\n scrollableContainerClientWidth:\r\n scrollableContainerRef.current?.clientWidth ?? panelWidth,\r\n });\r\n\r\n const [privateLessonInfo] = useAppState(\"privateLessonInfo\");\r\n\r\n return (\r\n
\r\n \r\n \r\n {normalTickets.map(o => (\r\n {\r\n setClickedItemKey(o.key);\r\n }}\r\n clicked={clickedItemKey === o.key}\r\n imgPath={`${appsPublicImg}shop/${o.key}.png`}\r\n stillChoosing={stillChoosing}\r\n initiallyClicked={o.key === initiallyClickedItemKey}\r\n />\r\n ))}\r\n \r\n \r\n\r\n {privateLessonInfo && privateLessonInfo.specialPriceUSD > 0 && (\r\n <>\r\n \r\n

\r\n Special Price for {user.name}\r\n

\r\n
\r\n \r\n \r\n {specialTickets.map(o => (\r\n {\r\n setClickedItemKey(o.key);\r\n }}\r\n clicked={clickedItemKey === o.key}\r\n imgPath={`${appsPublicImg}shop/${o.key}.png`}\r\n stillChoosing={stillChoosing}\r\n initiallyClicked={\r\n o.key === initiallyClickedItemKey\r\n }\r\n />\r\n ))}\r\n \r\n \r\n \r\n )}\r\n\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\nconst itemCardSize = 130;\r\nconst borderWidth = 3;\r\nconst useStyles = makeStyles<\r\n Theme,\r\n { stillChoosing: boolean; scrollableContainerClientWidth: number }\r\n>({\r\n commentDiv: {\r\n marginLeft: 10,\r\n fontSize: \"medium\",\r\n },\r\n itemCardCollapse: {\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n },\r\n container: {\r\n width: \"100%\",\r\n marginBottom: 20,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n },\r\n scrollableCard: ({ stillChoosing, scrollableContainerClientWidth }) => ({\r\n width: stillChoosing\r\n ? scrollableContainerClientWidth - 10\r\n : itemCardSize + 10 + borderWidth * 2,\r\n transition: \"width 500ms\",\r\n marginBottom: 20,\r\n display: \"flex\",\r\n overflowX: stillChoosing ? \"auto\" : \"hidden\",\r\n paddingRight: 5,\r\n }),\r\n specialFor: { width: \"100%\", textAlign: \"center\" },\r\n});\r\n\r\nfunction PaymentButton({\r\n chosenItem,\r\n clickedItemKey,\r\n setChosenItem,\r\n disabled,\r\n}: {\r\n chosenItem?: OrderItem;\r\n clickedItemKey: string;\r\n setChosenItem: (item?: OrderItem) => void;\r\n disabled: boolean;\r\n}) {\r\n if (!chosenItem) {\r\n return (\r\n {\r\n setChosenItem({ id: clickedItemKey, num: 1 });\r\n }}\r\n fullWidth\r\n >\r\n Payment\r\n \r\n );\r\n }\r\n return (\r\n {\r\n setChosenItem();\r\n\r\n const initiallyClickedItemKey = chosenItem?.id;\r\n if (initiallyClickedItemKey) {\r\n const intervalId = setInterval(() => {\r\n changeAppState(\"paymentPanelState\", {\r\n type: \"ticket\",\r\n });\r\n changeAppState(\"paymentPanelState\", {\r\n type: \"ticket\",\r\n initiallyClickedItemKey,\r\n });\r\n }, 10);\r\n await sleepAsync(700);\r\n clearInterval(intervalId);\r\n }\r\n }}\r\n >\r\n See other items\r\n \r\n );\r\n}\r\n\r\nconst baseOuterWidth = itemCardSize + borderWidth * 2;\r\nfunction ItemCard({\r\n title,\r\n price,\r\n onClick,\r\n clicked,\r\n imgPath,\r\n stillChoosing,\r\n initiallyClicked,\r\n}: {\r\n title: string;\r\n price?: number;\r\n onClick: () => void;\r\n clicked: boolean;\r\n imgPath: string;\r\n stillChoosing: boolean;\r\n initiallyClicked: boolean;\r\n}) {\r\n const shouldDisappear = !stillChoosing && !clicked;\r\n const c = useItemCardStyles({ clicked, shouldDisappear });\r\n\r\n const ref = useRef(null);\r\n useLayoutEffect(() => {\r\n if (initiallyClicked) {\r\n ref.current?.scrollIntoView({ inline: \"center\", block: \"end\" });\r\n }\r\n }, [initiallyClicked]);\r\n\r\n return (\r\n \r\n
\r\n {title}\r\n
\r\n
\r\n
\r\n {title}\r\n
\r\n \r\n $ {price}\r\n \r\n
\r\n \r\n );\r\n}\r\nconst useItemCardStyles = makeStyles<\r\n Theme,\r\n { clicked: boolean; shouldDisappear: boolean }\r\n>(theme => ({\r\n containerCard: ({ shouldDisappear, clicked }) => {\r\n const outerWidth = shouldDisappear ? 0 : baseOuterWidth;\r\n return {\r\n cursor: clicked ? undefined : \"pointer\",\r\n margin: shouldDisappear ? 0 : \"5px 0 5px 5px\",\r\n border: clicked\r\n ? `solid ${borderWidth}px ${theme.palette.primary.main}`\r\n : undefined,\r\n padding: clicked || shouldDisappear ? undefined : borderWidth,\r\n minWidth: outerWidth,\r\n maxWidth: outerWidth,\r\n height: baseOuterWidth,\r\n position: \"relative\",\r\n overflow: \"hidden\",\r\n transition: \"margin 500ms, min-width 500ms, max-width 500ms\",\r\n boxSizing: \"border-box\",\r\n };\r\n },\r\n imgContainer: {\r\n position: \"absolute\",\r\n zIndex: 1,\r\n width: itemCardSize,\r\n height: itemCardSize,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n },\r\n img: ({ clicked }) => ({\r\n position: \"absolute\",\r\n zIndex: 0,\r\n width: itemCardSize,\r\n opacity: clicked ? 1 : 0.5,\r\n }),\r\n messagesContainer: {\r\n position: \"absolute\",\r\n zIndex: 2,\r\n width: itemCardSize,\r\n height: itemCardSize,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n fontWeight: \"bold\",\r\n },\r\n title: {\r\n color: theme.palette.primary.main,\r\n whiteSpace: \"nowrap\",\r\n fontSize: 18,\r\n },\r\n coinNumber: { fontSize: \"22px\", marginRight: 1 },\r\n coinNumberClone: { position: \"absolute\", left: 0 },\r\n priceCard: ({ clicked }) => ({\r\n backgroundColor: theme.palette.grey[700],\r\n color: \"white\",\r\n fontSize: \"large\",\r\n marginBottom: 5,\r\n width: itemCardSize - 10,\r\n textAlign: \"center\",\r\n opacity: clicked ? 1 : 0.8,\r\n transition: \"all 500ms\",\r\n }),\r\n}));\r\n","import { RefObject, useEffect, useState } from \"react\";\r\nimport { User } from \"../../User/types\";\r\nimport { OrderItem, PaymentState } from \"../PaymentForm/types\";\r\nimport { TicketSelectionArea } from \"./TicketSelectionArea\";\r\n\r\nexport function SelectionArea({\r\n panelState: { type, initiallyClickedItemKey },\r\n setChosenItems,\r\n chosenItems,\r\n paymentSuccess,\r\n submitting,\r\n user,\r\n scrollableContainerRef,\r\n}: {\r\n panelState: PaymentState;\r\n setChosenItems: (items: OrderItem[]) => void;\r\n chosenItems: OrderItem[];\r\n paymentSuccess: boolean;\r\n submitting: boolean;\r\n user: User;\r\n scrollableContainerRef: RefObject;\r\n}) {\r\n const [prices, setPrices] = useState<{\r\n [key: string]: number;\r\n }>({});\r\n\r\n useEffect(() => {\r\n fetch(`api/Payment/GetItemPrices?type=${type}`)\r\n .then(r => r.json())\r\n .then(p => setPrices(p));\r\n }, [type]);\r\n\r\n switch (type) {\r\n // コイン販売中止\r\n // case \"coin\": {\r\n // return (\r\n // {\r\n // setChosenItems(item ? [item] : []);\r\n // }}\r\n // prices={prices}\r\n // paymentSuccess={paymentSuccess}\r\n // submitting={submitting}\r\n // initiallyClickedItemKey={initiallyClickedItemKey}\r\n // user={user}\r\n // scrollableContainerRef={scrollableContainerRef}\r\n // />\r\n // );\r\n // }\r\n case \"ticket\": {\r\n return (\r\n {\r\n setChosenItems(item ? [item] : []);\r\n }}\r\n prices={prices}\r\n paymentSuccess={paymentSuccess}\r\n submitting={submitting}\r\n initiallyClickedItemKey={initiallyClickedItemKey}\r\n user={user}\r\n scrollableContainerRef={scrollableContainerRef}\r\n />\r\n );\r\n }\r\n default: {\r\n const _exhaustiveCheck: never = type;\r\n return null;\r\n }\r\n }\r\n}\r\n","import Card from \"@material-ui/core/Card\";\r\nimport Collapse from \"@material-ui/core/Collapse\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { RefObject, useLayoutEffect, useRef } from \"react\";\r\nimport { appsPublicImg } from \"../../../../../common/consts\";\r\nimport { sleepAsync } from \"../../../../../common/functions\";\r\nimport { useAbTest } from \"../../../../../common/hooks/useAbTest\";\r\nimport { spaceBetween } from \"../../../../../common/util/Array/spaceBetween\";\r\nimport { relativeScroll } from \"../../../../../common/util/Scroll/relativeScroll\";\r\nimport { SeasonAnimation } from \"../../../Animations/SeasonAnimation\";\r\nimport { PrimaryButton } from \"../../../Button/PrimaryButton\";\r\nimport CharacterComment from \"../../../CharacterComment\";\r\nimport { User } from \"../../../User/types\";\r\nimport { panelWidth } from \"../../Panel\";\r\n\r\nexport function SpecialOffer({\r\n user,\r\n cheapestDollars,\r\n screenWidth,\r\n setItem,\r\n stillChoosing,\r\n isSpecialOfferChosen,\r\n scrollableContainerRef,\r\n paymentSuccess,\r\n}: {\r\n user: User;\r\n cheapestDollars: number;\r\n screenWidth: number;\r\n setItem: () => void;\r\n stillChoosing: boolean;\r\n isSpecialOfferChosen: boolean;\r\n scrollableContainerRef: RefObject;\r\n paymentSuccess: boolean;\r\n}) {\r\n const { abTestKey, abTestSuccess } = useAbTest({\r\n testName: \"coin-special-offer-character\",\r\n keys: [\"1\", \"2\", \"3\"],\r\n });\r\n const onClick = () => {\r\n setItem();\r\n abTestSuccess();\r\n };\r\n\r\n const scrollTargetRef = useRef(null);\r\n useLayoutEffect(() => {\r\n if (!isSpecialOfferChosen) {\r\n return;\r\n }\r\n const scroll = () => {\r\n if (!scrollableContainerRef.current || !scrollTargetRef.current) {\r\n return;\r\n }\r\n relativeScroll(\r\n scrollableContainerRef.current,\r\n scrollTargetRef.current\r\n );\r\n };\r\n (async () => {\r\n await sleepAsync(500);\r\n scroll();\r\n await sleepAsync(500);\r\n scroll();\r\n })();\r\n }, [isSpecialOfferChosen]);\r\n\r\n const c = useStyles({ isSpecialOfferChosen });\r\n\r\n return (\r\n \r\n
\r\n

Special Offer!

\r\n \r\n \r\n \r\n \r\n \r\n Get twice the coins!\r\n \r\n {abTestKey && (\r\n \r\n Your coins will{\" \"}\r\n double\r\n !\r\n
\r\n Now you have{\" \"}\r\n {user.coin.toLocaleString()} coins. So,\r\n your coins will become{\" \"}\r\n \r\n {(user.coin * 2).toLocaleString()}\r\n \r\n !\r\n
\r\n }\r\n screenWidth={\r\n Math.min(screenWidth, panelWidth) - 40\r\n }\r\n imgNumber={Number(abTestKey)}\r\n style={{ zIndex: 2 }}\r\n />\r\n )}\r\n \r\n $ {cheapestDollars}\r\n \r\n \r\n \r\n \r\n \r\n Buy Special Offer!\r\n \r\n \r\n \r\n \r\n );\r\n}\r\nconst useStyles = makeStyles(\r\n theme => ({\r\n container: ({ isSpecialOfferChosen }) => ({\r\n marginTop: 30,\r\n paddingTop: 30,\r\n paddingBottom: isSpecialOfferChosen ? 0 : 20,\r\n borderTop: `solid 2px ${theme.palette.grey[200]}`,\r\n borderBottom: `solid 2px ${theme.palette.grey[200]}`,\r\n transition: \"all 500ms\",\r\n }),\r\n specialOffer: {\r\n padding: \"0 20px\",\r\n marginBottom: 15,\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n maxWidth: \"100%\",\r\n height: 48,\r\n fontWeight: \"bold\",\r\n textAlign: \"center\",\r\n },\r\n outerCard: {\r\n padding: 5,\r\n backgroundColor: theme.palette.grey[100],\r\n },\r\n innerCard: ({ isSpecialOfferChosen }) => ({\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n padding: 15,\r\n cursor: isSpecialOfferChosen ? undefined : \"pointer\",\r\n position: \"relative\",\r\n border: isSpecialOfferChosen\r\n ? `solid 3px ${theme.palette.primary.main}`\r\n : undefined,\r\n }),\r\n img: ({ isSpecialOfferChosen }) => ({\r\n width: \"100%\",\r\n position: \"absolute\",\r\n bottom: 0,\r\n opacity: isSpecialOfferChosen ? 1 : 0.4,\r\n transition: \"all 500ms\",\r\n zIndex: 0,\r\n }),\r\n cardTitle: {\r\n color: theme.palette.primary.main,\r\n fontSize: 25,\r\n zIndex: 1,\r\n },\r\n commentDiv: {\r\n marginLeft: 10,\r\n fontSize: \"medium\",\r\n },\r\n price: ({ isSpecialOfferChosen }) => ({\r\n backgroundColor: theme.palette.grey[700],\r\n color: \"white\",\r\n fontSize: \"large\",\r\n width: \"100%\",\r\n marginTop: 20,\r\n textAlign: \"center\",\r\n opacity: isSpecialOfferChosen ? 1 : 0.9,\r\n transition: \"all 500ms\",\r\n fontWeight: \"bold\",\r\n zIndex: 2,\r\n }),\r\n buyButton: { marginTop: 15 },\r\n })\r\n);\r\n","import Card from \"@material-ui/core/Card\";\r\nimport Collapse from \"@material-ui/core/Collapse\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { RefObject, useEffect, useLayoutEffect, useRef, useState } from \"react\";\r\nimport { appsPublicImg } from \"../../../../../common/consts\";\r\nimport { sleepAsync } from \"../../../../../common/functions\";\r\nimport { useScreenSize } from \"../../../../../common/hooks/useScreenSize\";\r\nimport { spaceBetween } from \"../../../../../common/util/Array/spaceBetween\";\r\nimport { PrimaryButton } from \"../../../Button/PrimaryButton\";\r\nimport CharacterComment from \"../../../CharacterComment\";\r\nimport { panelWidth } from \"../../../Panel/Shop/Panel\";\r\nimport { User } from \"../../../User/types\";\r\nimport { OrderItem } from \"../../PaymentForm/types\";\r\nimport { SpecialOffer } from \"./SpecialOffer\";\r\n\r\nexport const coinProducts = [\r\n { key: \"PocketfulOfCoins\", title: \"Pocketful of Coins\", coin: 10000 },\r\n { key: \"PileOfCoins\", title: \"Pile of Coins\", coin: 30000 },\r\n { key: \"BagOfCoins\", title: \"Bag of Coins\", coin: 90000 },\r\n { key: \"SackOfCoins\", title: \"Sack of Coins\", coin: 300000 },\r\n { key: \"BoxOfCoins\", title: \"Box of Coins\", coin: 500000 },\r\n { key: \"ChestOfCoins\", title: \"Chest of Coins\", coin: 900000 },\r\n] as const;\r\n\r\nexport const specialOffer = \"SpecialOffer\";\r\n\r\nconst userCoinMaximumLimit = Math.floor(Number.MAX_SAFE_INTEGER / 2);\r\n\r\nexport function CoinSelectionArea({\r\n chosenItem,\r\n setChosenItem,\r\n prices,\r\n paymentSuccess,\r\n submitting,\r\n initiallyClickedItemKey,\r\n user,\r\n scrollableContainerRef,\r\n}: {\r\n chosenItem?: OrderItem;\r\n setChosenItem: (item?: OrderItem) => void;\r\n prices: {\r\n [key: string]: number;\r\n };\r\n paymentSuccess: boolean;\r\n submitting: boolean;\r\n initiallyClickedItemKey?: string;\r\n user: User;\r\n scrollableContainerRef: RefObject;\r\n}) {\r\n const [clickedItemKey, setClickedItemKey] = useState(\"\"); // Just clicked, and still not pushed the payment button\r\n const stillChoosing = !chosenItem; // Payment button was pushed or the special offer was clicked\r\n const isSpecialOfferChosen = chosenItem?.id === specialOffer;\r\n\r\n useEffect(() => {\r\n if (initiallyClickedItemKey) {\r\n setClickedItemKey(initiallyClickedItemKey);\r\n }\r\n }, [initiallyClickedItemKey]);\r\n\r\n const { screenWidth } = useScreenSize();\r\n\r\n const cheapestDollars = prices[specialOffer];\r\n const cheapestKey = Object.entries(prices).find(\r\n p => p[1] === cheapestDollars\r\n )?.[0];\r\n const cheapestCoin =\r\n coinProducts.find(p => p.key === cheapestKey)?.coin ?? 0;\r\n const hasMoreThanCheapestCoin = user.coin > cheapestCoin;\r\n\r\n const c = useStyles({\r\n stillChoosing,\r\n scrollableContainerClientWidth:\r\n scrollableContainerRef.current?.clientWidth ?? panelWidth,\r\n });\r\n\r\n if (!paymentSuccess && user.coin > userCoinMaximumLimit) {\r\n return (\r\n \r\n Sorry! You already have too many coins!\r\n \r\n }\r\n screenWidth={Math.min(screenWidth, panelWidth) - 40}\r\n imgNumber={2}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n {coinProducts.map(o => (\r\n {\r\n setClickedItemKey(o.key);\r\n }}\r\n clicked={clickedItemKey === o.key}\r\n coin={o.coin}\r\n imgPath={`${appsPublicImg}shop/${o.key}.png`}\r\n stillChoosing={stillChoosing}\r\n initiallyClicked={o.key === initiallyClickedItemKey}\r\n />\r\n ))}\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n {hasMoreThanCheapestCoin && (\r\n {\r\n setClickedItemKey(specialOffer);\r\n setChosenItem({ id: specialOffer, num: 1 });\r\n }}\r\n stillChoosing={stillChoosing}\r\n isSpecialOfferChosen={isSpecialOfferChosen}\r\n scrollableContainerRef={scrollableContainerRef}\r\n paymentSuccess={paymentSuccess}\r\n />\r\n )}\r\n
\r\n );\r\n}\r\nconst itemCardSize = 130;\r\nconst borderWidth = 3;\r\nconst useStyles = makeStyles<\r\n Theme,\r\n { stillChoosing: boolean; scrollableContainerClientWidth: number }\r\n>({\r\n commentDiv: {\r\n marginLeft: 10,\r\n fontSize: \"medium\",\r\n },\r\n itemCardCollapse: {\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n },\r\n container: {\r\n width: \"100%\",\r\n marginBottom: 20,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n },\r\n scrollableCard: ({ stillChoosing, scrollableContainerClientWidth }) => ({\r\n width: stillChoosing\r\n ? scrollableContainerClientWidth - 10\r\n : itemCardSize + 10 + borderWidth * 2,\r\n transition: \"width 500ms\",\r\n marginBottom: 20,\r\n display: \"flex\",\r\n overflowX: stillChoosing ? \"auto\" : \"hidden\",\r\n paddingRight: 5,\r\n }),\r\n});\r\n\r\nfunction PaymentButton({\r\n chosenItem,\r\n clickedItemKey,\r\n setChosenItem,\r\n disabled,\r\n}: {\r\n chosenItem?: OrderItem;\r\n clickedItemKey: string;\r\n setChosenItem: (item?: OrderItem) => void;\r\n disabled: boolean;\r\n}) {\r\n if (!chosenItem) {\r\n return (\r\n {\r\n setChosenItem({ id: clickedItemKey, num: 1 });\r\n }}\r\n fullWidth\r\n >\r\n Payment\r\n \r\n );\r\n }\r\n return (\r\n {\r\n setChosenItem();\r\n\r\n const initiallyClickedItemKey = chosenItem?.id;\r\n if (initiallyClickedItemKey) {\r\n const intervalId = setInterval(() => {\r\n // changeAppState(\"paymentPanelState\", {\r\n // type: \"coin\",\r\n // });\r\n // changeAppState(\"paymentPanelState\", {\r\n // type: \"coin\",\r\n // initiallyClickedItemKey,\r\n // });\r\n }, 10);\r\n await sleepAsync(700);\r\n clearInterval(intervalId);\r\n }\r\n }}\r\n >\r\n See other items\r\n \r\n );\r\n}\r\n\r\nconst baseOuterWidth = itemCardSize + borderWidth * 2;\r\nfunction ItemCard({\r\n title,\r\n price,\r\n onClick,\r\n clicked,\r\n coin,\r\n imgPath,\r\n stillChoosing,\r\n initiallyClicked,\r\n}: {\r\n title: string;\r\n price?: number;\r\n onClick: () => void;\r\n clicked: boolean;\r\n coin: number;\r\n imgPath: string;\r\n stillChoosing: boolean;\r\n initiallyClicked: boolean;\r\n}) {\r\n const shouldDisappear = !stillChoosing && !clicked;\r\n const c = useItemCardStyles({ clicked, shouldDisappear });\r\n\r\n const ref = useRef(null);\r\n useLayoutEffect(() => {\r\n if (initiallyClicked) {\r\n ref.current?.scrollIntoView({ inline: \"center\", block: \"end\" });\r\n }\r\n }, [initiallyClicked]);\r\n\r\n const localeCoin = coin.toLocaleString();\r\n\r\n return (\r\n \r\n
\r\n {title}\r\n
\r\n
\r\n
\r\n
{title}
\r\n
\r\n {/* ↓ Clone to prevent shadow from overlapping ↓ */}\r\n \r\n {localeCoin}\r\n \r\n \r\n {localeCoin}\r\n \r\n {/* ↑ Clone to prevent shadow from overlapping ↑ */}\r\n\r\n coins\r\n
\r\n
\r\n \r\n $ {price}\r\n \r\n
\r\n \r\n );\r\n}\r\nconst useItemCardStyles = makeStyles<\r\n Theme,\r\n { clicked: boolean; shouldDisappear: boolean }\r\n>(theme => ({\r\n containerCard: ({ shouldDisappear, clicked }) => {\r\n const outerWidth = shouldDisappear ? 0 : baseOuterWidth;\r\n return {\r\n cursor: clicked ? undefined : \"pointer\",\r\n margin: shouldDisappear ? 0 : \"5px 0 5px 5px\",\r\n border: clicked\r\n ? `solid ${borderWidth}px ${theme.palette.primary.main}`\r\n : undefined,\r\n padding: clicked || shouldDisappear ? undefined : borderWidth,\r\n minWidth: outerWidth,\r\n maxWidth: outerWidth,\r\n height: baseOuterWidth,\r\n position: \"relative\",\r\n overflow: \"hidden\",\r\n transition: \"margin 500ms, min-width 500ms, max-width 500ms\",\r\n boxSizing: \"border-box\",\r\n };\r\n },\r\n imgContainer: {\r\n position: \"absolute\",\r\n zIndex: 1,\r\n width: itemCardSize,\r\n height: itemCardSize,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n },\r\n img: ({ clicked }) => ({\r\n position: \"absolute\",\r\n zIndex: 0,\r\n width: itemCardSize,\r\n opacity: clicked ? 1 : 0.5,\r\n }),\r\n messagesContainer: {\r\n position: \"absolute\",\r\n zIndex: 2,\r\n width: itemCardSize,\r\n height: itemCardSize,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n fontWeight: \"bold\",\r\n },\r\n titleAndCoin: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n },\r\n title: {\r\n color: theme.palette.primary.main,\r\n whiteSpace: \"nowrap\",\r\n fontSize: 15,\r\n },\r\n coinNumber: { fontSize: \"22px\", marginRight: 1 },\r\n coinNumberClone: { position: \"absolute\", left: 0 },\r\n priceCard: ({ clicked }) => ({\r\n backgroundColor: theme.palette.grey[700],\r\n color: \"white\",\r\n fontSize: \"large\",\r\n marginBottom: 5,\r\n width: itemCardSize - 10,\r\n textAlign: \"center\",\r\n opacity: clicked ? 1 : 0.8,\r\n transition: \"all 500ms\",\r\n }),\r\n}));\r\n","import Card from \"@material-ui/core/Card\";\r\nimport Collapse from \"@material-ui/core/Collapse\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { RefObject, useEffect, useRef, useState } from \"react\";\r\nimport { changeAppState, useAppState } from \"../../../common/appState\";\r\nimport { useDelayedState } from \"../../../common/hooks/useDelayedState\";\r\nimport { useScreenSize } from \"../../../common/hooks/useScreenSize\";\r\nimport { capitalizeInitialChar } from \"../../../common/util/String/capitalizeInitialChar\";\r\nimport { fetchPost } from \"../../../common/util/fetch\";\r\nimport { PrivateLessonInfo } from \"../../zApps/Layout/Login/MyPage/MyPageTop/components/PrivateLesson/types\";\r\nimport { SuccessButton } from \"../Button/SuccessButton\";\r\nimport CharacterComment from \"../CharacterComment\";\r\nimport { RightPanel } from \"../Panel/RightPanel\";\r\nimport { User } from \"../User/types\";\r\nimport { PaymentForm } from \"./PaymentForm/PaymentForm\";\r\nimport {\r\n CoinOrder,\r\n OrderItem,\r\n PaymentPanelState,\r\n TicketOrder,\r\n} from \"./PaymentForm/types\";\r\nimport { SelectionArea } from \"./SelectionArea\";\r\nimport {\r\n coinProducts,\r\n specialOffer,\r\n} from \"./SelectionArea/CoinSelectionArea/CoinSelectionArea\";\r\nimport {\r\n normalTickets,\r\n specialTickets,\r\n} from \"./SelectionArea/TicketSelectionArea\";\r\n\r\nconst transitionMilliseconds = 1000;\r\nexport const panelWidth = 500;\r\n\r\nexport default function PaymentPanel() {\r\n const [panelState, setPanelState] = useAppState(\"paymentPanelState\");\r\n const isOpen = panelState !== \"close\";\r\n\r\n const scrollableContainerRef = useRef(null);\r\n\r\n return (\r\n {\r\n setPanelState(\"close\");\r\n }}\r\n panelWidth={panelWidth}\r\n globalPanelState={panelState}\r\n transitionMilliseconds={transitionMilliseconds}\r\n scrollableContainerRef={scrollableContainerRef}\r\n >\r\n \r\n \r\n );\r\n}\r\n\r\nfunction Content({\r\n panelState,\r\n scrollableContainerRef,\r\n}: {\r\n panelState: PaymentPanelState;\r\n scrollableContainerRef: RefObject;\r\n}) {\r\n const [user] = useAppState(\"user\");\r\n const isGuest = !user;\r\n useEffect(() => {\r\n if (isGuest) {\r\n // Normally this will not happen\r\n changeAppState(\"paymentPanelState\", \"close\");\r\n changeAppState(\"signInPanelState\", { type: \"signUp\" });\r\n }\r\n }, [isGuest]);\r\n\r\n const [chosenItems, setChosenItems] = useState([]);\r\n\r\n const { delayedState } = useDelayedState(\r\n panelState,\r\n state => state !== \"close\",\r\n transitionMilliseconds\r\n );\r\n\r\n const [submitting, setSubmitting] = useState(false);\r\n const [successMessage, setSuccessMessage] = useState(\"\");\r\n const [paymentId, setPaymentId] = useState(\"\");\r\n\r\n const c = useContentStyles();\r\n\r\n if (delayedState === \"close\" || isGuest) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n

\r\n {capitalizeInitialChar(delayedState.type)} Shop\r\n

\r\n\r\n \r\n\r\n {chosenItems.length > 0 && !successMessage && (\r\n {\r\n switch (delayedState.type) {\r\n // コイン販売中止\r\n // case \"coin\": {\r\n // const { earnedCoins, userAfterUpdate } =\r\n // await onCoinSuccess(\r\n // chosenItems,\r\n // user,\r\n // paymentId\r\n // );\r\n // if (userAfterUpdate) {\r\n // changeAppState(\"user\", userAfterUpdate);\r\n // setSuccessMessage(\r\n // `You got ${earnedCoins.toLocaleString()} coins, and now you have ${userAfterUpdate.coin.toLocaleString()} coins!`\r\n // );\r\n // }\r\n // break;\r\n // }\r\n case \"ticket\": {\r\n const {\r\n privateLessonInfoAfterUpdate,\r\n earnedTickets,\r\n } = await onTicketSuccess(\r\n chosenItems,\r\n user,\r\n paymentId\r\n );\r\n if (privateLessonInfoAfterUpdate) {\r\n changeAppState(\r\n \"privateLessonInfo\",\r\n privateLessonInfoAfterUpdate\r\n );\r\n setSuccessMessage(\r\n `You got ${earnedTickets} tickets, and now you have ${privateLessonInfoAfterUpdate.tickets} tickets!`\r\n );\r\n }\r\n break;\r\n }\r\n default: {\r\n const _exhaustiveCheck: never =\r\n delayedState.type;\r\n }\r\n }\r\n }}\r\n />\r\n )}\r\n\r\n \r\n
\r\n );\r\n}\r\nconst useContentStyles = makeStyles({\r\n container: {\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n marginTop: 20,\r\n paddingRight: 5,\r\n paddingLeft: 5,\r\n paddingBottom: 40,\r\n },\r\n title: {\r\n padding: \"0 20px\",\r\n marginBottom: 20,\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n maxWidth: \"100%\",\r\n height: 48,\r\n fontWeight: \"bold\",\r\n textAlign: \"center\",\r\n },\r\n});\r\n\r\nasync function onCoinSuccess(\r\n chosenItems: OrderItem[],\r\n user: User,\r\n paymentId: string\r\n) {\r\n const coinOrders = chosenItems.map(item => {\r\n if (item.id === specialOffer) {\r\n return {\r\n ...item,\r\n coin: user.coin,\r\n };\r\n }\r\n return {\r\n ...item,\r\n coin: coinProducts.find(p => p.key === item.id)?.coin ?? 0,\r\n };\r\n });\r\n const userAfterUpdate = await fetchBuyCoins(\r\n user.userId,\r\n coinOrders,\r\n paymentId\r\n );\r\n const earnedCoins = coinOrders.reduce(\r\n (acc, val) => acc + val.coin * val.num,\r\n 0\r\n );\r\n return { earnedCoins, userAfterUpdate };\r\n}\r\n\r\nasync function onTicketSuccess(\r\n chosenItems: OrderItem[],\r\n user: User,\r\n paymentId: string\r\n) {\r\n const ticketOrders = chosenItems.map(item => {\r\n const chosenTicket = [...normalTickets, ...specialTickets].find(\r\n p => p.key === item.id\r\n );\r\n return {\r\n ...item,\r\n ticket: chosenTicket?.ticket ?? 0,\r\n productName: chosenTicket?.title ?? \"\",\r\n };\r\n });\r\n const earnedTickets = ticketOrders.reduce(\r\n (acc, val) => acc + val.ticket * val.num,\r\n 0\r\n );\r\n const privateLessonInfoAfterUpdate = await fetchBuyTickets(\r\n user.userId,\r\n ticketOrders,\r\n paymentId\r\n );\r\n return { earnedTickets, privateLessonInfoAfterUpdate };\r\n}\r\n\r\nfunction SuccessComment({ successMessage }: { successMessage: string }) {\r\n const { screenWidth } = useScreenSize();\r\n const characterCommentWidth = Math.min(450, screenWidth - 20);\r\n const c = useSuccessCommentStyles();\r\n\r\n return (\r\n \r\n \r\n

Payment successful!

\r\n \r\n {\r\n changeAppState(\"paymentPanelState\", \"close\");\r\n }}\r\n >\r\n OK\r\n \r\n
\r\n
\r\n );\r\n}\r\nconst useSuccessCommentStyles = makeStyles(theme => ({\r\n containerCard: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n padding: \"15px 0\",\r\n },\r\n title: {\r\n color: theme.palette.success.dark,\r\n fontWeight: \"bold\",\r\n },\r\n}));\r\n\r\nasync function fetchBuyCoins(\r\n userId: number,\r\n coinOrders: CoinOrder[],\r\n paymentId: string\r\n): Promise {\r\n const user = await fetchPost<\r\n { userId: number; coinOrders: CoinOrder[]; paymentId: string },\r\n User\r\n >(\"api/Payment/BuyCoins\", { userId, coinOrders, paymentId });\r\n\r\n if (\"error\" in user) {\r\n return null;\r\n }\r\n return user;\r\n}\r\n\r\nasync function fetchBuyTickets(\r\n userId: number,\r\n ticketOrders: TicketOrder[],\r\n paymentId: string\r\n): Promise {\r\n const privateLessonInfo = await fetchPost<\r\n { userId: number; ticketOrders: TicketOrder[]; paymentId: string },\r\n PrivateLessonInfo\r\n >(\"api/Payment/BuyTickets\", { userId, ticketOrders, paymentId });\r\n\r\n if (\"error\" in privateLessonInfo) {\r\n return null;\r\n }\r\n return privateLessonInfo;\r\n}\r\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) :\n typeof define === 'function' && define.amd ? define(['exports', 'react'], factory) :\n (global = global || self, factory(global.ReactStripe = {}, global.React));\n}(this, (function (exports, React) { 'use strict';\n\n React = React && Object.prototype.hasOwnProperty.call(React, 'default') ? React['default'] : React;\n\n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n }\n\n function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n }\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n }\n\n function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n }\n\n function _iterableToArrayLimit(arr, i) {\n var _i = arr && (typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]);\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n\n function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n function createCommonjsModule(fn, module) {\n \treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n }\n\n /**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n var ReactPropTypesSecret_1 = ReactPropTypesSecret;\n\n function emptyFunction() {}\n\n function emptyFunctionWithReset() {}\n\n emptyFunctionWithReset.resetWarningCache = emptyFunction;\n\n var factoryWithThrowingShims = function () {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret_1) {\n // It is still safe when called from React.\n return;\n }\n\n var err = new Error('Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use PropTypes.checkPropTypes() to call them. ' + 'Read more at http://fb.me/use-check-prop-types');\n err.name = 'Invariant Violation';\n throw err;\n }\n shim.isRequired = shim;\n\n function getShim() {\n return shim;\n }\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n ReactPropTypes.PropTypes = ReactPropTypes;\n return ReactPropTypes;\n };\n\n var propTypes = createCommonjsModule(function (module) {\n /**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = factoryWithThrowingShims();\n }\n });\n\n var usePrevious = function usePrevious(value) {\n var ref = React.useRef(value);\n React.useEffect(function () {\n ref.current = value;\n }, [value]);\n return ref.current;\n };\n\n var isUnknownObject = function isUnknownObject(raw) {\n return raw !== null && _typeof(raw) === 'object';\n };\n var isPromise = function isPromise(raw) {\n return isUnknownObject(raw) && typeof raw.then === 'function';\n }; // We are using types to enforce the `stripe` prop in this lib,\n // but in an untyped integration `stripe` could be anything, so we need\n // to do some sanity validation to prevent type errors.\n\n var isStripe = function isStripe(raw) {\n return isUnknownObject(raw) && typeof raw.elements === 'function' && typeof raw.createToken === 'function' && typeof raw.createPaymentMethod === 'function' && typeof raw.confirmCardPayment === 'function';\n };\n\n var PLAIN_OBJECT_STR = '[object Object]';\n var isEqual = function isEqual(left, right) {\n if (!isUnknownObject(left) || !isUnknownObject(right)) {\n return left === right;\n }\n\n var leftArray = Array.isArray(left);\n var rightArray = Array.isArray(right);\n if (leftArray !== rightArray) return false;\n var leftPlainObject = Object.prototype.toString.call(left) === PLAIN_OBJECT_STR;\n var rightPlainObject = Object.prototype.toString.call(right) === PLAIN_OBJECT_STR;\n if (leftPlainObject !== rightPlainObject) return false; // not sure what sort of special object this is (regexp is one option), so\n // fallback to reference check.\n\n if (!leftPlainObject && !leftArray) return left === right;\n var leftKeys = Object.keys(left);\n var rightKeys = Object.keys(right);\n if (leftKeys.length !== rightKeys.length) return false;\n var keySet = {};\n\n for (var i = 0; i < leftKeys.length; i += 1) {\n keySet[leftKeys[i]] = true;\n }\n\n for (var _i = 0; _i < rightKeys.length; _i += 1) {\n keySet[rightKeys[_i]] = true;\n }\n\n var allKeys = Object.keys(keySet);\n\n if (allKeys.length !== leftKeys.length) {\n return false;\n }\n\n var l = left;\n var r = right;\n\n var pred = function pred(key) {\n return isEqual(l[key], r[key]);\n };\n\n return allKeys.every(pred);\n };\n\n var extractAllowedOptionsUpdates = function extractAllowedOptionsUpdates(options, prevOptions, immutableKeys) {\n if (!isUnknownObject(options)) {\n return null;\n }\n\n return Object.keys(options).reduce(function (newOptions, key) {\n var isUpdated = !isUnknownObject(prevOptions) || !isEqual(options[key], prevOptions[key]);\n\n if (immutableKeys.includes(key)) {\n if (isUpdated) {\n console.warn(\"Unsupported prop change: options.\".concat(key, \" is not a mutable property.\"));\n }\n\n return newOptions;\n }\n\n if (!isUpdated) {\n return newOptions;\n }\n\n return _objectSpread2(_objectSpread2({}, newOptions || {}), {}, _defineProperty({}, key, options[key]));\n }, null);\n };\n\n var INVALID_STRIPE_ERROR = 'Invalid prop `stripe` supplied to `Elements`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.'; // We are using types to enforce the `stripe` prop in this lib, but in a real\n // integration `stripe` could be anything, so we need to do some sanity\n // validation to prevent type errors.\n\n var validateStripe = function validateStripe(maybeStripe) {\n if (maybeStripe === null || isStripe(maybeStripe)) {\n return maybeStripe;\n }\n\n throw new Error(INVALID_STRIPE_ERROR);\n };\n\n var parseStripeProp = function parseStripeProp(raw) {\n if (isPromise(raw)) {\n return {\n tag: 'async',\n stripePromise: Promise.resolve(raw).then(validateStripe)\n };\n }\n\n var stripe = validateStripe(raw);\n\n if (stripe === null) {\n return {\n tag: 'empty'\n };\n }\n\n return {\n tag: 'sync',\n stripe: stripe\n };\n };\n\n var ElementsContext = /*#__PURE__*/React.createContext(null);\n ElementsContext.displayName = 'ElementsContext';\n var parseElementsContext = function parseElementsContext(ctx, useCase) {\n if (!ctx) {\n throw new Error(\"Could not find Elements context; You need to wrap the part of your app that \".concat(useCase, \" in an provider.\"));\n }\n\n return ctx;\n };\n var CartElementContext = /*#__PURE__*/React.createContext(null);\n CartElementContext.displayName = 'CartElementContext';\n var parseCartElementContext = function parseCartElementContext(ctx, useCase) {\n if (!ctx) {\n throw new Error(\"Could not find Elements context; You need to wrap the part of your app that \".concat(useCase, \" in an provider.\"));\n }\n\n return ctx;\n };\n /**\n * The `Elements` provider allows you to use [Element components](https://stripe.com/docs/stripe-js/react#element-components) and access the [Stripe object](https://stripe.com/docs/js/initializing) in any nested component.\n * Render an `Elements` provider at the root of your React app so that it is available everywhere you need it.\n *\n * To use the `Elements` provider, call `loadStripe` from `@stripe/stripe-js` with your publishable key.\n * The `loadStripe` function will asynchronously load the Stripe.js script and initialize a `Stripe` object.\n * Pass the returned `Promise` to `Elements`.\n *\n * @docs https://stripe.com/docs/stripe-js/react#elements-provider\n */\n\n var Elements = function Elements(_ref) {\n var rawStripeProp = _ref.stripe,\n options = _ref.options,\n children = _ref.children;\n var parsed = React.useMemo(function () {\n return parseStripeProp(rawStripeProp);\n }, [rawStripeProp]);\n\n var _React$useState = React.useState(null),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n cart = _React$useState2[0],\n setCart = _React$useState2[1];\n\n var _React$useState3 = React.useState(null),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n cartState = _React$useState4[0],\n setCartState = _React$useState4[1]; // For a sync stripe instance, initialize into context\n\n\n var _React$useState5 = React.useState(function () {\n return {\n stripe: parsed.tag === 'sync' ? parsed.stripe : null,\n elements: parsed.tag === 'sync' ? parsed.stripe.elements(options) : null\n };\n }),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n ctx = _React$useState6[0],\n setContext = _React$useState6[1];\n\n React.useEffect(function () {\n var isMounted = true;\n\n var safeSetContext = function safeSetContext(stripe) {\n setContext(function (ctx) {\n // no-op if we already have a stripe instance (https://github.com/stripe/react-stripe-js/issues/296)\n if (ctx.stripe) return ctx;\n return {\n stripe: stripe,\n elements: stripe.elements(options)\n };\n });\n }; // For an async stripePromise, store it in context once resolved\n\n\n if (parsed.tag === 'async' && !ctx.stripe) {\n parsed.stripePromise.then(function (stripe) {\n if (stripe && isMounted) {\n // Only update Elements context if the component is still mounted\n // and stripe is not null. We allow stripe to be null to make\n // handling SSR easier.\n safeSetContext(stripe);\n }\n });\n } else if (parsed.tag === 'sync' && !ctx.stripe) {\n // Or, handle a sync stripe instance going from null -> populated\n safeSetContext(parsed.stripe);\n }\n\n return function () {\n isMounted = false;\n };\n }, [parsed, ctx, options]); // Warn on changes to stripe prop\n\n var prevStripe = usePrevious(rawStripeProp);\n React.useEffect(function () {\n if (prevStripe !== null && prevStripe !== rawStripeProp) {\n console.warn('Unsupported prop change on Elements: You cannot change the `stripe` prop after setting it.');\n }\n }, [prevStripe, rawStripeProp]); // Apply updates to elements when options prop has relevant changes\n\n var prevOptions = usePrevious(options);\n React.useEffect(function () {\n if (!ctx.elements) {\n return;\n }\n\n var updates = extractAllowedOptionsUpdates(options, prevOptions, ['clientSecret', 'fonts']);\n\n if (updates) {\n ctx.elements.update(updates);\n }\n }, [options, prevOptions, ctx.elements]); // Attach react-stripe-js version to stripe.js instance\n\n React.useEffect(function () {\n var anyStripe = ctx.stripe;\n\n if (!anyStripe || !anyStripe._registerWrapper || !anyStripe.registerAppInfo) {\n return;\n }\n\n anyStripe._registerWrapper({\n name: 'react-stripe-js',\n version: \"1.16.5\"\n });\n\n anyStripe.registerAppInfo({\n name: 'react-stripe-js',\n version: \"1.16.5\",\n url: 'https://stripe.com/docs/stripe-js/react'\n });\n }, [ctx.stripe]);\n return /*#__PURE__*/React.createElement(ElementsContext.Provider, {\n value: ctx\n }, /*#__PURE__*/React.createElement(CartElementContext.Provider, {\n value: {\n cart: cart,\n setCart: setCart,\n cartState: cartState,\n setCartState: setCartState\n }\n }, children));\n };\n Elements.propTypes = {\n stripe: propTypes.any,\n options: propTypes.object\n };\n var useElementsContextWithUseCase = function useElementsContextWithUseCase(useCaseMessage) {\n var ctx = React.useContext(ElementsContext);\n return parseElementsContext(ctx, useCaseMessage);\n };\n var useCartElementContextWithUseCase = function useCartElementContextWithUseCase(useCaseMessage) {\n var ctx = React.useContext(CartElementContext);\n return parseCartElementContext(ctx, useCaseMessage);\n };\n /**\n * @docs https://stripe.com/docs/stripe-js/react#useelements-hook\n */\n\n var useElements = function useElements() {\n var _useElementsContextWi = useElementsContextWithUseCase('calls useElements()'),\n elements = _useElementsContextWi.elements;\n\n return elements;\n };\n /**\n * @docs https://stripe.com/docs/stripe-js/react#usestripe-hook\n */\n\n var useStripe = function useStripe() {\n var _useElementsContextWi2 = useElementsContextWithUseCase('calls useStripe()'),\n stripe = _useElementsContextWi2.stripe;\n\n return stripe;\n };\n /**\n * @docs https://stripe.com/docs/payments/checkout/cart-element\n */\n\n var useCartElement = function useCartElement() {\n var _useCartElementContex = useCartElementContextWithUseCase('calls useCartElement()'),\n cart = _useCartElementContex.cart;\n\n return cart;\n };\n /**\n * @docs https://stripe.com/docs/payments/checkout/cart-element\n */\n\n var useCartElementState = function useCartElementState() {\n var _useCartElementContex2 = useCartElementContextWithUseCase('calls useCartElementState()'),\n cartState = _useCartElementContex2.cartState;\n\n return cartState;\n };\n /**\n * @docs https://stripe.com/docs/stripe-js/react#elements-consumer\n */\n\n var ElementsConsumer = function ElementsConsumer(_ref2) {\n var children = _ref2.children;\n var ctx = useElementsContextWithUseCase('mounts '); // Assert to satisfy the busted React.FC return type (it should be ReactNode)\n\n return children(ctx);\n };\n ElementsConsumer.propTypes = {\n children: propTypes.func.isRequired\n };\n\n var useAttachEvent = function useAttachEvent(element, event, cb) {\n var cbDefined = !!cb;\n var cbRef = React.useRef(cb); // In many integrations the callback prop changes on each render.\n // Using a ref saves us from calling element.on/.off every render.\n\n React.useEffect(function () {\n cbRef.current = cb;\n }, [cb]);\n React.useEffect(function () {\n if (!cbDefined || !element) {\n return function () {};\n }\n\n var decoratedCb = function decoratedCb() {\n if (cbRef.current) {\n cbRef.current.apply(cbRef, arguments);\n }\n };\n\n element.on(event, decoratedCb);\n return function () {\n element.off(event, decoratedCb);\n };\n }, [cbDefined, event, element, cbRef]);\n };\n\n var capitalized = function capitalized(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n };\n\n var createElementComponent = function createElementComponent(type, isServer) {\n var displayName = \"\".concat(capitalized(type), \"Element\");\n\n var ClientElement = function ClientElement(_ref) {\n var id = _ref.id,\n className = _ref.className,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n onBlur = _ref.onBlur,\n onFocus = _ref.onFocus,\n onReady = _ref.onReady,\n onChange = _ref.onChange,\n onEscape = _ref.onEscape,\n onClick = _ref.onClick,\n onLoadError = _ref.onLoadError,\n onLoaderStart = _ref.onLoaderStart,\n onNetworksChange = _ref.onNetworksChange,\n onCheckout = _ref.onCheckout,\n onLineItemClick = _ref.onLineItemClick,\n onConfirm = _ref.onConfirm,\n onCancel = _ref.onCancel,\n onShippingAddressChange = _ref.onShippingAddressChange,\n onShippingRateChange = _ref.onShippingRateChange;\n\n var _useElementsContextWi = useElementsContextWithUseCase(\"mounts <\".concat(displayName, \">\")),\n elements = _useElementsContextWi.elements;\n\n var _React$useState = React.useState(null),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n element = _React$useState2[0],\n setElement = _React$useState2[1];\n\n var elementRef = React.useRef(null);\n var domNode = React.useRef(null);\n\n var _useCartElementContex = useCartElementContextWithUseCase(\"mounts <\".concat(displayName, \">\")),\n setCart = _useCartElementContex.setCart,\n setCartState = _useCartElementContex.setCartState; // For every event where the merchant provides a callback, call element.on\n // with that callback. If the merchant ever changes the callback, removes\n // the old callback with element.off and then call element.on with the new one.\n\n\n useAttachEvent(element, 'blur', onBlur);\n useAttachEvent(element, 'focus', onFocus);\n useAttachEvent(element, 'escape', onEscape);\n useAttachEvent(element, 'click', onClick);\n useAttachEvent(element, 'loaderror', onLoadError);\n useAttachEvent(element, 'loaderstart', onLoaderStart);\n useAttachEvent(element, 'networkschange', onNetworksChange);\n useAttachEvent(element, 'lineitemclick', onLineItemClick);\n useAttachEvent(element, 'confirm', onConfirm);\n useAttachEvent(element, 'cancel', onCancel);\n useAttachEvent(element, 'shippingaddresschange', onShippingAddressChange);\n useAttachEvent(element, 'shippingratechange', onShippingRateChange);\n var readyCallback;\n\n if (type === 'cart') {\n readyCallback = function readyCallback(event) {\n setCartState(event);\n onReady && onReady(event);\n };\n } else if (onReady) {\n if (type === 'payButton') {\n // Passes through the event, which includes visible PM types\n readyCallback = onReady;\n } else {\n // For other Elements, pass through the Element itself.\n readyCallback = function readyCallback() {\n onReady(element);\n };\n }\n }\n\n useAttachEvent(element, 'ready', readyCallback);\n var changeCallback = type === 'cart' ? function (event) {\n setCartState(event);\n onChange && onChange(event);\n } : onChange;\n useAttachEvent(element, 'change', changeCallback);\n var checkoutCallback = type === 'cart' ? function (event) {\n setCartState(event);\n onCheckout && onCheckout(event);\n } : onCheckout;\n useAttachEvent(element, 'checkout', checkoutCallback);\n React.useLayoutEffect(function () {\n if (elementRef.current === null && elements && domNode.current !== null) {\n var newElement = elements.create(type, options);\n\n if (type === 'cart' && setCart) {\n // we know that elements.create return value must be of type StripeCartElement if type is 'cart',\n // we need to cast because typescript is not able to infer which overloaded method is used based off param type\n setCart(newElement);\n } // Store element in a ref to ensure it's _immediately_ available in cleanup hooks in StrictMode\n\n\n elementRef.current = newElement; // Store element in state to facilitate event listener attachment\n\n setElement(newElement);\n newElement.mount(domNode.current);\n }\n }, [elements, options, setCart]);\n var prevOptions = usePrevious(options);\n React.useEffect(function () {\n if (!elementRef.current) {\n return;\n }\n\n var updates = extractAllowedOptionsUpdates(options, prevOptions, ['paymentRequest']);\n\n if (updates) {\n elementRef.current.update(updates);\n }\n }, [options, prevOptions]);\n React.useLayoutEffect(function () {\n return function () {\n if (elementRef.current) {\n elementRef.current.destroy();\n elementRef.current = null;\n }\n };\n }, []);\n return /*#__PURE__*/React.createElement(\"div\", {\n id: id,\n className: className,\n ref: domNode\n });\n }; // Only render the Element wrapper in a server environment.\n\n\n var ServerElement = function ServerElement(props) {\n // Validate that we are in the right context by calling useElementsContextWithUseCase.\n useElementsContextWithUseCase(\"mounts <\".concat(displayName, \">\"));\n useCartElementContextWithUseCase(\"mounts <\".concat(displayName, \">\"));\n var id = props.id,\n className = props.className;\n return /*#__PURE__*/React.createElement(\"div\", {\n id: id,\n className: className\n });\n };\n\n var Element = isServer ? ServerElement : ClientElement;\n Element.propTypes = {\n id: propTypes.string,\n className: propTypes.string,\n onChange: propTypes.func,\n onBlur: propTypes.func,\n onFocus: propTypes.func,\n onReady: propTypes.func,\n onEscape: propTypes.func,\n onClick: propTypes.func,\n onLoadError: propTypes.func,\n onLoaderStart: propTypes.func,\n onNetworksChange: propTypes.func,\n onCheckout: propTypes.func,\n onLineItemClick: propTypes.func,\n onConfirm: propTypes.func,\n onCancel: propTypes.func,\n onShippingAddressChange: propTypes.func,\n onShippingRateChange: propTypes.func,\n options: propTypes.object\n };\n Element.displayName = displayName;\n Element.__elementType = type;\n return Element;\n };\n\n var isServer = typeof window === 'undefined';\n /**\n * Requires beta access:\n * Contact [Stripe support](https://support.stripe.com/) for more information.\n *\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var AuBankAccountElement = createElementComponent('auBankAccount', isServer);\n /**\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var CardElement = createElementComponent('card', isServer);\n /**\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var CardNumberElement = createElementComponent('cardNumber', isServer);\n /**\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var CardExpiryElement = createElementComponent('cardExpiry', isServer);\n /**\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var CardCvcElement = createElementComponent('cardCvc', isServer);\n /**\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var FpxBankElement = createElementComponent('fpxBank', isServer);\n /**\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var IbanElement = createElementComponent('iban', isServer);\n /**\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var IdealBankElement = createElementComponent('idealBank', isServer);\n /**\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var P24BankElement = createElementComponent('p24Bank', isServer);\n /**\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var EpsBankElement = createElementComponent('epsBank', isServer);\n var PaymentElement = createElementComponent('payment', isServer);\n /**\n * Requires beta access:\n * Contact [Stripe support](https://support.stripe.com/) for more information.\n *\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var PayButtonElement = createElementComponent('payButton', isServer);\n /**\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var PaymentRequestButtonElement = createElementComponent('paymentRequestButton', isServer);\n /**\n * Requires beta access:\n * Contact [Stripe support](https://support.stripe.com/) for more information.\n *\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var LinkAuthenticationElement = createElementComponent('linkAuthentication', isServer);\n /**\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var AddressElement = createElementComponent('address', isServer);\n /**\n * @deprecated\n * Use `AddressElement` instead.\n *\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var ShippingAddressElement = createElementComponent('shippingAddress', isServer);\n /**\n * Requires beta access:\n * Contact [Stripe support](https://support.stripe.com/) for more information.\n *\n * @docs https://stripe.com/docs/elements/cart-element\n */\n\n var CartElement = createElementComponent('cart', isServer);\n /**\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var PaymentMethodMessagingElement = createElementComponent('paymentMethodMessaging', isServer);\n /**\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var AffirmMessageElement = createElementComponent('affirmMessage', isServer);\n /**\n * @docs https://stripe.com/docs/stripe-js/react#element-components\n */\n\n var AfterpayClearpayMessageElement = createElementComponent('afterpayClearpayMessage', isServer);\n\n exports.AddressElement = AddressElement;\n exports.AffirmMessageElement = AffirmMessageElement;\n exports.AfterpayClearpayMessageElement = AfterpayClearpayMessageElement;\n exports.AuBankAccountElement = AuBankAccountElement;\n exports.CardCvcElement = CardCvcElement;\n exports.CardElement = CardElement;\n exports.CardExpiryElement = CardExpiryElement;\n exports.CardNumberElement = CardNumberElement;\n exports.CartElement = CartElement;\n exports.Elements = Elements;\n exports.ElementsConsumer = ElementsConsumer;\n exports.EpsBankElement = EpsBankElement;\n exports.FpxBankElement = FpxBankElement;\n exports.IbanElement = IbanElement;\n exports.IdealBankElement = IdealBankElement;\n exports.LinkAuthenticationElement = LinkAuthenticationElement;\n exports.P24BankElement = P24BankElement;\n exports.PayButtonElement = PayButtonElement;\n exports.PaymentElement = PaymentElement;\n exports.PaymentMethodMessagingElement = PaymentMethodMessagingElement;\n exports.PaymentRequestButtonElement = PaymentRequestButtonElement;\n exports.ShippingAddressElement = ShippingAddressElement;\n exports.useCartElement = useCartElement;\n exports.useCartElementState = useCartElementState;\n exports.useElements = useElements;\n exports.useStripe = useStripe;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n"],"names":["useAbTest","_ref","testName","keys","initialKey","_ref$open","open","_useState","useState","_useState2","_slicedToArray","key","setKey","_useState3","_useState4","isAlreadySuccess","setAlreadySuccess","useEffect","_x","_x2","_fetchKey","apply","arguments","fetchKey","then","concat","_toConsumableArray","abTestSuccess","noFetch","console","log","sendPost","fetchSuccess","abTestKey","location","href","includes","localStorage","getItem","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_getRandomItem","tooLongKey","_yield$sendPost","_getRandomItem2","wrap","_context","prev","next","length","alert","find","k","sleepAsync","abrupt","getRandomItem","sent","t0","stop","useDelayedState","state","checkOpen","timeoutMilliSecond","delayedState","setDelayedState","timeoutId","setTimeout","clearTimeout","delayedOpen","GOOGLE_ADS_CLIENT","GOOGLE_ADS_SLOT","STRIPE_TEST_PUBLIC_KEY","STRIPE_PRODUCTION_PUBLIC_KEY","arr","Math","floor","random","CharacterComment","props","imgNumber","screenWidth","comment","style","commentStyle","imgStyle","containerRef","className","c","useStyles","_jsxs","ref","spaceBetween","container","children","_jsx","src","consts","alt","ninjaPic","makeStyles","_objectSpread","_ref2","width","_ref3","Footer","_user$coin$toLocaleSt","_user$coin","user","useFooterStyles","Card","elevation","currentCoinMessage","priceContainer","appsPublicImg","coinImg","price","coin","toLocaleString","position","bottom","right","height","borderRadius","display","alignItems","justifyContent","paddingRight","zIndex","marginRight","fontWeight","borderBottom","theme","paddingBottom","fontSize","marginLeft","top","card","left","padding","opacity","abTestFetched","transition","button","maxHeight","minHeight","lineHeight","BuyButton","item","necessaryCoins","quantity","afterBuying","submitting","setSubmitting","useItemUseButtonStyles","PrimaryButton","size","onClick","changeAppState","type","alertCoinShortage","fetchBuyItem","userId","title","message","buttonLabel","onButtonClick","initialView","titleStyle","color","disabled","ShurikenProgress","maxWidth","minWidth","_x3","_x4","_fetchBuyItem","_callee2","itemKey","result","_context2","fetchPost","setItemsFromServerSide","items","Record","isFocused","setQuantity","maxQuantity","min","arrChoice","Array","fill","undefined","map","v","i","leftBlock","leftBlockInnerContainer","image","rightBlock","itemName","name","explanation","getExplanation","priceAndBuyButton","quantityContainer","value","onChange","ev","Number","target","select","num","marginBottom","border","palette","success","main","flexDirection","grey","primary","ItemList","focusedItemKey","allItems","sort","a","b","reduce","acc","itemRest","_objectWithoutProperties","_excluded","backgroundColor","transitionMilliseconds","panelWidth","ShopPanel","_useAppState","useAppState","_useAppState2","panelState","setPanelState","_useDelayedState","RightPanel","panelName","onClose","globalPanelState","Content","_useAppState3","_useScrollableContain","_useScreenSize","useScreenSize","screenHeight","scrollableContainerHeight","setScrollableContainerHeight","useLayoutEffect","useScrollableContainerHeight","scrollableContainer","titleContainer","footerCoinsHeight","overflowY","overflow","textOverflow","whiteSpace","V3_URL","V3_URL_REGEX","EXISTING_SCRIPT_MESSAGE","stripePromise","loadScript","params","Promise","resolve","reject","window","document","Stripe","warn","script","scripts","querySelectorAll","test","findScript","queryString","advancedFraudSignals","createElement","headOrBody","head","body","Error","appendChild","injectScript","addEventListener","error","stripePromise$1","loadCalled","err","CheckoutForm","isFormReady","setFormReady","stripe","useStripe","elements","useElements","setMessage","clientSecret","URLSearchParams","search","get","retrievePaymentIntent","paymentIntent","status","handleSubmit","e","paymentIntentResult","preventDefault","confirmPayment","confirmParams","return_url","redirect","some","okStatus","_paymentIntentResult$","id","onSubmit","PaymentElement","onReady","_len","args","_key","startTime","Date","now","maybeStripe","_registerWrapper","version","registerWrapper","initStripe","loadStripe","host","startsWith","locale","PaymentForm","orderItems","setPaymentId","setClientSecret","_fetchCreate","fetchCreate","options","appearance","marginTop","paymentContent","Elements","normalTickets","ticket","specialTickets","TicketSelectionArea","_scrollableContainerR","_scrollableContainerR2","chosenItem","setChosenItem","prices","paymentSuccess","initiallyClickedItemKey","scrollableContainerRef","clickedItemKey","setClickedItemKey","stillChoosing","isNormalTicketChosen","t","isSpecialTicketChosen","scrollableContainerClientWidth","current","clientWidth","privateLessonInfo","Collapse","in","itemCardCollapse","scrollableCard","o","ItemCard","clicked","imgPath","initiallyClicked","specialPriceUSD","_Fragment","specialFor","classes","root","wrapperInner","PaymentButton","itemCardSize","commentDiv","overflowX","textAlign","intervalId","setInterval","clearInterval","fullWidth","_ref5","useItemCardStyles","shouldDisappear","useRef","_ref$current","scrollIntoView","inline","block","containerCard","imgContainer","img","messagesContainer","priceCard","_ref6","outerWidth","cursor","margin","boxSizing","_ref7","coinNumber","coinNumberClone","_ref8","SelectionArea","_ref$panelState","setChosenItems","chosenItems","setPrices","fetch","r","json","p","paddingTop","isSpecialOfferChosen","borderTop","specialOffer","outerCard","innerCard","_ref4","cardTitle","buyButton","MAX_SAFE_INTEGER","titleAndCoin","PaymentPanel","isOpen","isGuest","_useState5","_useState6","successMessage","setSuccessMessage","_useState7","_useState8","paymentId","useContentStyles","capitalizeInitialChar","_yield$onTicketSucces","privateLessonInfoAfterUpdate","earnedTickets","onTicketSuccess","tickets","SuccessComment","paddingLeft","_x5","_x6","_onTicketSuccess","_callee3","ticketOrders","_context3","_chosenTicket$ticket","_chosenTicket$title","chosenTicket","productName","val","fetchBuyTickets","characterCommentWidth","useSuccessCommentStyles","timeout","SuccessButton","dark","_x10","_x11","_x12","_fetchBuyTickets","_callee5","_context5","exports","React","ownKeys","object","enumerableOnly","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","_objectSpread2","source","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_typeof","obj","Symbol","iterator","constructor","prototype","configurable","writable","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","isArray","_i","_s","_e","_arr","_n","_d","call","done","minLen","_arrayLikeToArray","n","toString","slice","from","len","arr2","TypeError","createCommonjsModule","fn","module","hasOwnProperty","ReactPropTypesSecret_1","emptyFunction","emptyFunctionWithReset","resetWarningCache","factoryWithThrowingShims","shim","propName","componentName","propFullName","secret","getShim","isRequired","ReactPropTypes","array","bool","func","number","string","symbol","any","arrayOf","element","elementType","instanceOf","node","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","propTypes","usePrevious","isUnknownObject","raw","isPromise","isStripe","createToken","createPaymentMethod","confirmCardPayment","PLAIN_OBJECT_STR","isEqual","leftArray","leftPlainObject","leftKeys","rightKeys","keySet","allKeys","l","pred","every","extractAllowedOptionsUpdates","prevOptions","immutableKeys","newOptions","isUpdated","INVALID_STRIPE_ERROR","validateStripe","parseStripeProp","tag","ElementsContext","createContext","displayName","parseElementsContext","ctx","useCase","CartElementContext","parseCartElementContext","rawStripeProp","parsed","useMemo","_React$useState2","cart","setCart","_React$useState4","cartState","setCartState","_React$useState6","setContext","isMounted","safeSetContext","prevStripe","updates","update","anyStripe","registerAppInfo","url","Provider","useElementsContextWithUseCase","useCaseMessage","useContext","useCartElementContextWithUseCase","useCartElement","useCartElementState","ElementsConsumer","useAttachEvent","event","cb","cbDefined","cbRef","decoratedCb","on","off","capitalized","str","charAt","toUpperCase","createElementComponent","isServer","Element","readyCallback","_ref$options","onBlur","onFocus","onEscape","onLoadError","onLoaderStart","onNetworksChange","onCheckout","onLineItemClick","onConfirm","onCancel","onShippingAddressChange","onShippingRateChange","setElement","elementRef","domNode","_useCartElementContex","newElement","create","mount","destroy","__elementType","AuBankAccountElement","CardElement","CardNumberElement","CardExpiryElement","CardCvcElement","FpxBankElement","IbanElement","IdealBankElement","P24BankElement","EpsBankElement","PayButtonElement","PaymentRequestButtonElement","LinkAuthenticationElement","AddressElement","ShippingAddressElement","CartElement","PaymentMethodMessagingElement","AffirmMessageElement","AfterpayClearpayMessageElement","factory","require"],"sourceRoot":""}