{"version":3,"file":"static/js/6002.3b1e3064.chunk.js","mappings":"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","sources":["common/hooks/useAbTest.ts","common/hooks/useDelayedState.ts","common/privateConsts.ts","common/util/Array/getRandomItem.ts","common/util/Array/orderByBoolean.ts","common/util/Scroll/relativeScroll.ts","components/shared/Button/DarkButton.tsx","components/shared/CharacterComment/index.tsx","components/shared/Dialog/CenterDialog.tsx","components/shared/Dialog/ResultXpDialog/RegisteredUser.tsx","components/shared/EllipsisLabel/EllipsisLabel.tsx","components/shared/GoogleAd.tsx","components/shared/Input/TextField.tsx","components/shared/Popover/DarkPopoverMenu.tsx","components/shared/User/OtherUserPanel/getUserStudyAchievements.ts","components/shared/User/UserAvatar/UploadCameraButton.tsx","components/shared/User/UserAvatar/UserAvatar.tsx","components/shared/User/UserAvatar/validateImage.ts","components/zApps/Layout/Login/MyPage/Fields/BioField/BioLinks/getLinkText.ts","components/zApps/Layout/Login/MyPage/MyPageTop/components/ShareButton.tsx","components/zApps/Layout/Login/MyPage/MyPageTop/logout.ts","components/zApps/Layout/Login/MyPage/components/XpProgressBar.tsx","components/zApps/Layout/Login/MyPage/useProgress.ts","common/util/String/trim.ts","components/zApps/Layout/Login/MyPage/loginSuccess.ts","components/zApps/Layout/Login/SignUp/TermOfUsePanel.tsx","components/zApps/Layout/Login/SignUp/SignUp.tsx","components/zApps/Layout/Login/ForgotPassword.tsx","components/zApps/Layout/Login/MyPage/Fields/AvatarField.tsx","icon/AddLinkIcon.tsx","components/zApps/Layout/Login/MyPage/MyPageTop/useScrollToMyPageItem.ts","components/zApps/Layout/Login/MyPage/Fields/BioField/BioLinks/AddLinksDialog.tsx","components/zApps/Layout/Login/MyPage/Fields/BioField/BioLinks/index.tsx","components/zApps/Layout/Login/MyPage/Fields/BioField/index.tsx","components/zApps/Layout/Login/MyPage/Fields/UsernameField.tsx","icon/SavingsIcon.tsx","components/zApps/Layout/Login/MyPage/components/OpenableCards/OpenableCard.tsx","components/zApps/Layout/Login/MyPage/components/OpenableCards/BonusCard/InviteFriendsButton.tsx","components/zApps/Layout/Login/MyPage/components/OpenableCards/BonusCard/BonusCard.tsx","components/zApps/Layout/Login/MyPage/components/OpenableCards/FriendsCard/components/fetchUsersForRanking.ts","components/zApps/Layout/Login/MyPage/components/OpenableCards/FriendsCard/components/FriendsTab/FriendRecord.tsx","components/zApps/Layout/Login/MyPage/components/OpenableCards/FriendsCard/components/FriendsTab/FriendsTab.tsx","components/zApps/Layout/Login/MyPage/components/OpenableCards/FriendsCard/types.ts","components/zApps/Layout/Login/MyPage/components/OpenableCards/FriendsCard/components/RequestsTab/RequestRecord.tsx","components/zApps/Layout/Login/MyPage/components/OpenableCards/FriendsCard/components/RequestsTab/RequestsTab.tsx","components/zApps/Layout/Login/MyPage/components/OpenableCards/FriendsCard/FindFriendsButton.tsx","components/zApps/Layout/Login/MyPage/components/OpenableCards/FriendsCard/FriendsCard.tsx","components/zApps/Layout/Login/MyPage/components/OpenableCards/ItemsCard/ItemList/ItemShopButton.tsx","components/zApps/Layout/Login/MyPage/components/OpenableCards/ItemsCard/ItemList/Record.tsx","components/zApps/Layout/Login/MyPage/components/OpenableCards/ItemsCard/ItemList/List.tsx","components/zApps/Layout/Login/MyPage/components/OpenableCards/ItemsCard/ItemsCard.tsx","components/zApps/Layout/Login/MyPage/components/OpenableCards/MessagesCard/MessageUserRecord.tsx","components/zApps/Layout/Login/MyPage/components/OpenableCards/MessagesCard/MessagesCard.tsx","components/zApps/Layout/Login/MyPage/components/OpenableCards/ProgressCard.tsx","components/zApps/Layout/Login/MyPage/components/OpenableCards/QuestsCard/functions.tsx","components/zApps/Layout/Login/MyPage/components/OpenableCards/QuestsCard/ClaimAllButton.tsx","components/zApps/Layout/Login/MyPage/components/OpenableCards/QuestsCard/QuestRecord.tsx","components/zApps/Layout/Login/MyPage/components/OpenableCards/QuestsCard/QuestsCard.tsx","components/zApps/Layout/Login/MyPage/components/OpenableCards/RankingAroundMe/RankingAroundMe.tsx","components/zApps/Layout/Login/MyPage/MyPageTop/components/PrivateLesson/PrivateLessonCard.tsx","components/zApps/Layout/Login/MyPage/MyPageTop/components/XpBoostTimer/XpBoostTimer.tsx","components/zApps/Layout/Login/MyPage/MyPageTop/MyPageTop.tsx","components/zApps/Layout/Login/SignIn.tsx","components/zApps/Layout/Login/Panel.tsx","components/zApps/Layout/Login/SignUp/PasswordField.tsx","components/zApps/Layout/Login/SignUp/validation.tsx","components/zApps/zApps/Terms.tsx","components/zApps/zApps/parts/Ranking/LevelRanking/BasicRanking/BasicRankingRecord.tsx","components/zApps/zApps/parts/Ranking/LevelRanking/BasicRanking/BasicRanking.tsx","components/zApps/zApps/parts/Ranking/LevelRanking/RankingRecordContainer.tsx","icon/UnfriendIcon.tsx"],"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","export function orderByBoolean([...array]: T[], fnc: (array: T) => boolean) {\r\n // Sort while keeping original order in the same group\r\n return splitByBoolean(array, fnc).flat();\r\n}\r\n\r\nexport function splitByBoolean(\r\n [...array]: T[],\r\n fnc: (array: T, index: number) => boolean\r\n): [trueArray: T[], falseArray: T[]] {\r\n return array.reduce<[T[], T[]]>(\r\n (acc, val, i) => {\r\n if (fnc(val, i)) {\r\n return [[...acc[0], val], acc[1]];\r\n }\r\n return [acc[0], [...acc[1], val]];\r\n },\r\n [[], []]\r\n );\r\n}\r\n","import { sleepAsync } from \"../../functions\";\r\n\r\nexport async function relativeScroll(\r\n scrollableEl: HTMLDivElement,\r\n targetEl: HTMLElement,\r\n offset: number = 0,\r\n noSmooth?: boolean\r\n) {\r\n const startFromBottom = checkReachedBottom(scrollableEl);\r\n\r\n let timeToWait = 100;\r\n if (await checkScrolling(scrollableEl, timeToWait)) {\r\n return; // Don't disturb user's scroll operation\r\n }\r\n\r\n while (true) {\r\n if (timeToWait < 500) {\r\n timeToWait += 10;\r\n }\r\n\r\n const targetTop = targetEl.getBoundingClientRect().top;\r\n const scrollableTop = scrollableEl.getBoundingClientRect().top;\r\n const dif = scrollableTop + offset - targetTop;\r\n\r\n const reachedTarget = dif ** 2 < 3;\r\n const reachedBottom =\r\n !startFromBottom && checkReachedBottom(scrollableEl);\r\n\r\n if (reachedTarget || reachedBottom) {\r\n return;\r\n }\r\n\r\n const stillScrolling = await checkScrolling(scrollableEl, timeToWait);\r\n if (!stillScrolling) {\r\n scrollableEl.scrollTo({\r\n top:\r\n targetTop + scrollableEl.scrollTop - scrollableTop - offset,\r\n behavior: noSmooth ? undefined : \"smooth\",\r\n });\r\n }\r\n\r\n if (startFromBottom) {\r\n if (!(await checkScrolling(scrollableEl, timeToWait))) {\r\n return;\r\n }\r\n }\r\n console.log(\"scrolling\");\r\n }\r\n}\r\n\r\nfunction checkReachedBottom(scrollableEl: HTMLDivElement) {\r\n return (\r\n Math.floor(scrollableEl.scrollHeight) -\r\n Math.ceil(scrollableEl.offsetHeight) -\r\n Math.ceil(scrollableEl.scrollTop) <=\r\n 1\r\n );\r\n}\r\n\r\nasync function checkScrolling(\r\n scrollableEl: HTMLDivElement,\r\n timeToWait: number\r\n) {\r\n const previousScrollTop = scrollableEl.scrollTop;\r\n await sleepAsync(timeToWait);\r\n return scrollableEl.scrollTop !== previousScrollTop;\r\n}\r\n","import Button, { ButtonProps } from \"@material-ui/core/Button\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { BaseCSSProperties } from \"@material-ui/core/styles/withStyles\";\r\nimport { forwardRef } from \"react\";\r\nimport { spaceBetween } from \"../../../common/util/Array/spaceBetween\";\r\n\r\ntype Props = { style?: BaseCSSProperties } & Omit<\r\n ButtonProps,\r\n \"style\" | \"buttonRef\"\r\n>;\r\n\r\nexport const DarkButton = forwardRef(\r\n ({ style, className, ...rest }, ref) => {\r\n const c = useStyles({ style });\r\n return (\r\n \r\n );\r\n }\r\n);\r\nconst useStyles = makeStyles(\r\n ({ palette }) => ({\r\n button: ({ style }) => ({\r\n backgroundColor: palette.grey[800],\r\n \"&:hover\": {\r\n backgroundColor: palette.grey[700],\r\n },\r\n color: \"white\",\r\n fontSize: \"medium\",\r\n ...style,\r\n }),\r\n })\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 Button from \"@material-ui/core/Button\";\r\nimport Card from \"@material-ui/core/Card\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { BaseCSSProperties } from \"@material-ui/core/styles/withStyles\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\nimport { ReactNode, useEffect, useState } from \"react\";\r\nimport { AppState } from \"../../../common/appState\";\r\nimport { useOpenAnimationFinished } from \"../../../common/hooks/panelAndDialog/useOpenAnimationFinished\";\r\nimport { usePanelAndDialogOpenOrder } from \"../../../common/hooks/panelAndDialog/usePanelAndDialogOpenOrder\";\r\nimport { spaceBetween } from \"../../../common/util/Array/spaceBetween\";\r\nimport { zIndex } from \"../../zApps/Layout/zIndex\";\r\nimport ShurikenProgress from \"../Animations/ShurikenProgress\";\r\n\r\nexport function CenterDialog({\r\n open,\r\n transitionMilliseconds = 0,\r\n style,\r\n className,\r\n darkLayerStyle,\r\n children,\r\n onClose,\r\n withoutCloseButton,\r\n globalDialogState,\r\n isChildrenUnmounted,\r\n}: {\r\n open: boolean;\r\n transitionMilliseconds?: number;\r\n style?: BaseCSSProperties;\r\n className?: string;\r\n darkLayerStyle?: BaseCSSProperties;\r\n children: ReactNode;\r\n onClose?: () => void;\r\n withoutCloseButton?: boolean;\r\n globalDialogState?: AppState[keyof AppState]; // When the dialog's global state changed, zIndex increases (especially when targetId changes)\r\n isChildrenUnmounted?: boolean;\r\n}) {\r\n const { openedOrder } = usePanelAndDialogOpenOrder(\r\n globalDialogState,\r\n open,\r\n transitionMilliseconds\r\n );\r\n\r\n const c = useResultDialogStyles({\r\n transitionDuration: `${transitionMilliseconds}ms`,\r\n style,\r\n darkLayerStyle,\r\n openedOrder,\r\n });\r\n\r\n const [isContentShown, setIsContentShown] = useState(false);\r\n\r\n useEffect(() => {\r\n if (open && !isContentShown) {\r\n // when it opens\r\n setTimeout(() => {\r\n setIsContentShown(open);\r\n }, 10);\r\n return;\r\n }\r\n\r\n if (!open && isContentShown) {\r\n // when it closes\r\n setTimeout(() => {\r\n setIsContentShown(false);\r\n }, transitionMilliseconds);\r\n }\r\n }, [open, transitionMilliseconds]);\r\n\r\n const isCompletelyOpened = open && isContentShown;\r\n const { isOpenAnimationFinished } = useOpenAnimationFinished(\r\n isCompletelyOpened,\r\n transitionMilliseconds\r\n );\r\n\r\n if (!open && !isContentShown) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {\r\n ev.stopPropagation();\r\n }}\r\n >\r\n {!withoutCloseButton && (\r\n \r\n \r\n \r\n )}\r\n {isChildrenUnmounted && open ? (\r\n \r\n ) : (\r\n children\r\n )}\r\n \r\n \r\n );\r\n}\r\n\r\nconst useResultDialogStyles = makeStyles<\r\n Theme,\r\n {\r\n transitionDuration: string;\r\n style?: BaseCSSProperties;\r\n darkLayerStyle?: BaseCSSProperties;\r\n openedOrder: number; // 0 to 30, The last opened panel or dialog is 0.\r\n }\r\n>(({ palette }) => ({\r\n darkLayer: ({ transitionDuration, darkLayerStyle, openedOrder }) => ({\r\n position: \"fixed\",\r\n top: 0,\r\n left: 0,\r\n width: \"100%\",\r\n height: \"100%\",\r\n backgroundColor: \"rgba(0,0,0,0.7)\",\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n transitionProperty: \"opacity\",\r\n transitionDuration,\r\n zIndex: zIndex.panelAndDialog.darkLayer(openedOrder),\r\n ...darkLayerStyle,\r\n }),\r\n opacity0: { opacity: 0 },\r\n opacity1: { opacity: 1 },\r\n card: ({ style, openedOrder }) => ({\r\n width: \"100%\",\r\n maxWidth: 350,\r\n height: \"100%\",\r\n maxHeight: 350,\r\n backgroundColor: \"white\",\r\n borderRadius: 16,\r\n zIndex: zIndex.panelAndDialog.panelOrDialog(openedOrder),\r\n ...style,\r\n }),\r\n closeButton: {\r\n borderRadius: \"50%\",\r\n maxWidth: 28,\r\n maxHeight: 28,\r\n minWidth: 28,\r\n minHeight: 28,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n backgroundColor: palette.success.main,\r\n \"&:hover\": {\r\n backgroundColor: palette.success.light,\r\n },\r\n color: \"white\",\r\n lineHeight: 1,\r\n marginLeft: \"auto\",\r\n marginTop: 3,\r\n marginRight: 3,\r\n padding: 0,\r\n },\r\n closeIcon: { width: 20, height: 20 },\r\n}));\r\n","import Card from \"@material-ui/core/Card\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport ArrowForwardIcon from \"@material-ui/icons/ArrowForwardIos\";\r\nimport { ReactNode, useEffect, useState } from \"react\";\r\nimport { changeAppState, useAppState } from \"../../../../common/appState\";\r\nimport { useUser } from \"../../../../common/hooks/useUser\";\r\nimport { spaceBetween } from \"../../../../common/util/Array/spaceBetween\";\r\nimport { XpProgressArea } from \"../../../zApps/Layout/Login/MyPage/components/XpProgressBar\";\r\nimport { User } from \"../../User/types\";\r\nimport { CenterDialog } from \"../CenterDialog\";\r\nimport {\r\n AddRegisteredUserXpParams,\r\n RegisteredUserXpDialogState,\r\n} from \"./types\";\r\n\r\nconst setRegisteredUserResultDialogState = (\r\n state: RegisteredUserXpDialogState\r\n) => {\r\n changeAppState(\"registeredUserXpDialogState\", state);\r\n};\r\n\r\nexport async function addRegisteredUserXp(\r\n params: AddRegisteredUserXpParams,\r\n user: User\r\n) {\r\n setRegisteredUserResultDialogState(params);\r\n\r\n /**\r\n * Check isLevelUp\r\n */\r\n const xpToAdd = params.xpToAdd * params.boostRate;\r\n const {\r\n user: newUser,\r\n levelUp,\r\n myRank,\r\n } = await fetchAddXp(xpToAdd, user.userId);\r\n changeAppState(\"user\", newUser);\r\n setRegisteredUserResultDialogState({\r\n ...params,\r\n isLevelUp: levelUp,\r\n myRank,\r\n });\r\n}\r\n\r\nconst initialState: Exclude = {\r\n onCloseCallBack: undefined,\r\n xpToAdd: 0,\r\n topSmallMessage: \"\",\r\n isLevelUp: false,\r\n boostRate: 1,\r\n};\r\n\r\nexport default function ResultXpDialogWrapper() {\r\n const [globalDialogState] = useAppState(\"registeredUserXpDialogState\");\r\n\r\n const open = globalDialogState !== \"close\";\r\n\r\n const [lazyState, setLazyState] =\r\n useState>(initialState);\r\n\r\n useEffect(() => {\r\n if (open) {\r\n setLazyState(globalDialogState);\r\n return;\r\n }\r\n const timeoutId = setTimeout(() => {\r\n // Wait until the animation finishes\r\n setLazyState(initialState);\r\n }, 500);\r\n return () => {\r\n clearTimeout(timeoutId);\r\n };\r\n }, [globalDialogState]);\r\n\r\n const {\r\n onCloseCallBack,\r\n xpToAdd,\r\n topSmallMessage,\r\n isLevelUp,\r\n myRank,\r\n boostRate,\r\n } = lazyState;\r\n\r\n return (\r\n {\r\n setRegisteredUserResultDialogState(\"close\");\r\n onCloseCallBack?.();\r\n }}\r\n xpToAdd={xpToAdd}\r\n topSmallMessage={topSmallMessage}\r\n isLevelUp={isLevelUp}\r\n myRank={myRank}\r\n globalDialogState={globalDialogState}\r\n boostRate={boostRate}\r\n />\r\n );\r\n}\r\n\r\nfunction ResultXpDialog_RegisteredUser({\r\n open,\r\n onClose,\r\n xpToAdd,\r\n topSmallMessage,\r\n isLevelUp,\r\n myRank,\r\n globalDialogState,\r\n boostRate,\r\n}: {\r\n open: boolean;\r\n onClose: () => void;\r\n xpToAdd: number;\r\n topSmallMessage: ReactNode;\r\n isLevelUp?: boolean;\r\n myRank?: number;\r\n globalDialogState: RegisteredUserXpDialogState;\r\n boostRate: number;\r\n}) {\r\n const c = useRegisteredUserResultDialogStyles({ loaded: !!myRank });\r\n const { user } = useUser();\r\n\r\n return (\r\n \r\n
\r\n {isLevelUp && (\r\n \r\n LEVEL UP!\r\n \r\n )}\r\n\r\n
\r\n {topSmallMessage}\r\n

\r\n You got{\" \"}\r\n \r\n {xpToAdd}\r\n {boostRate > 1 && (\r\n ×{boostRate}\r\n )}\r\n {\" \"}\r\n XP!\r\n

\r\n
\r\n\r\n \r\n

Level: {user?.level}

\r\n \r\n {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n changeAppState(\"signInPanelState\", {\r\n type: \"myPageTop\",\r\n initialView: \"MyPageUserRankingAroundMe\",\r\n });\r\n }}\r\n >\r\n {`Your ranking is ${myRank || \"\"}`}\r\n \r\n \r\n \r\n
\r\n \r\n\r\n
\r\n \r\n OK\r\n \r\n
\r\n \r\n \r\n );\r\n}\r\nconst useRegisteredUserResultDialogStyles = makeStyles<\r\n Theme,\r\n { loaded: boolean }\r\n>(theme => ({\r\n container: {\r\n margin: \"0 10px\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n height: 288,\r\n position: \"relative\",\r\n },\r\n xp: { color: theme.palette.secondary.main, marginBottom: 0 },\r\n progressCard: ({ loaded }) => ({\r\n paddingTop: 20,\r\n paddingBottom: 22,\r\n paddingLeft: loaded ? 30 : 0,\r\n paddingRight: loaded ? 30 : 0,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-around\",\r\n position: \"relative\",\r\n bottom: 5,\r\n maxWidth: loaded ? 270 : 0,\r\n minHeight: 160,\r\n transition: \"all 700ms\",\r\n overflow: \"hidden\",\r\n }),\r\n level: {\r\n marginBottom: 10,\r\n whiteSpace: \"nowrap\",\r\n },\r\n levelUp: {\r\n position: \"absolute\",\r\n top: -20,\r\n left: -5,\r\n backgroundColor: theme.palette.secondary.main,\r\n color: \"white\",\r\n padding: 5,\r\n transform: \"rotate(-15deg)\",\r\n },\r\n rakingContainer: {\r\n marginTop: 12,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n fontSize: \"medium\",\r\n color: theme.palette.primary.main,\r\n fontWeight: \"bold\",\r\n cursor: \"pointer\",\r\n transition: \"opacity 200ms\",\r\n opacity: 1,\r\n \"&:hover\": {\r\n opacity: 0.7,\r\n },\r\n whiteSpace: \"nowrap\",\r\n },\r\n arrowIconButton: {\r\n backgroundColor: theme.palette.primary.main,\r\n color: \"white\",\r\n width: 10,\r\n height: 10,\r\n marginLeft: 5,\r\n transition: \"all 200ms\",\r\n \"&:hover\": {\r\n backgroundColor: theme.palette.primary.main,\r\n },\r\n },\r\n arrowIcon: { width: 10, height: 10 },\r\n}));\r\n\r\nasync function fetchAddXp(\r\n xpToAdd: number,\r\n userId: number\r\n): Promise<{ user: User; levelUp: boolean; myRank: number }> {\r\n const formData = new FormData();\r\n formData.append(\"xpToAdd\", xpToAdd.toString());\r\n formData.append(\"userId\", userId.toString());\r\n\r\n const res = await fetch(\"api/User/AddXp\", {\r\n method: \"POST\",\r\n body: formData,\r\n });\r\n return res.json();\r\n}\r\n","import { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { BaseCSSProperties } from \"@material-ui/core/styles/withStyles\";\r\nimport { TooltipProps } from \"@material-ui/core/Tooltip\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { useScreenSize } from \"../../../common/hooks/useScreenSize\";\r\nimport { Tooltip } from \"../Tooltip\";\r\n\r\nexport const EllipsisLabel = ({\r\n title,\r\n placement,\r\n style,\r\n tooltipProps,\r\n}: {\r\n title: string;\r\n placement?: TooltipProps[\"placement\"];\r\n style?: BaseCSSProperties;\r\n tooltipProps?: Partial;\r\n}) => {\r\n const c = useStyles({ style });\r\n\r\n const textElementRef = useRef(null);\r\n const [trimmedTitle, setTrimmedTitle] = useState(title);\r\n const { screenWidth } = useScreenSize();\r\n\r\n const isOverflowed = title !== trimmedTitle;\r\n\r\n useEffect(() => {\r\n setTrimmedTitle(title);\r\n }, [title, screenWidth]);\r\n\r\n useEffect(() => {\r\n if (!textElementRef.current) {\r\n return;\r\n }\r\n\r\n if (\r\n textElementRef.current.scrollWidth >\r\n textElementRef.current.clientWidth\r\n ) {\r\n setTrimmedTitle(trimmedTitle.slice(0, -1).trim());\r\n }\r\n }, [trimmedTitle]);\r\n\r\n return (\r\n \r\n
\r\n {trimmedTitle}\r\n {isOverflowed && \"...\"}\r\n
\r\n \r\n );\r\n};\r\nconst useStyles = makeStyles({\r\n div: ({ style }) => ({\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\", // just in case where the calculation doesn't work well\r\n ...style,\r\n }),\r\n});\r\n","import { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { BaseCSSProperties } from \"@material-ui/core/styles/withStyles\";\r\nimport GoogleAds from \"react-google-ads\";\r\nimport { useAppState } from \"../../common/appState\";\r\nimport { adminUserId } from \"../../common/consts\";\r\nimport { GOOGLE_ADS_CLIENT, GOOGLE_ADS_SLOT } from \"../../common/privateConsts\";\r\nimport { spaceBetween } from \"../../common/util/Array/spaceBetween\";\r\n\r\ninterface Props {\r\n className?: string;\r\n style?: BaseCSSProperties;\r\n}\r\n\r\nexport function GoogleAd({ className, style }: Props) {\r\n return null;\r\n\r\n const [user] = useAppState(\"user\");\r\n const c = useStyles(style ?? {});\r\n\r\n return (\r\n \r\n );\r\n}\r\nconst useStyles = makeStyles({\r\n aside: style => ({ ...style }),\r\n});\r\n","import { InputBaseComponentProps } from \"@material-ui/core/InputBase\";\r\nimport MuiTextField, { TextFieldProps } from \"@material-ui/core/TextField\";\r\nimport { CSSProperties, useState } from \"react\";\r\n\r\nexport function TextField({\r\n onMouseDown,\r\n onFocus,\r\n inputProps,\r\n ...rest\r\n}: TextFieldProps) {\r\n const [inputStyle, setInputStyle] = useState(\r\n getInitialInputStyle(inputProps, rest.autoFocus)\r\n );\r\n\r\n return (\r\n {\r\n /**\r\n * Prevent iPhone screen from zooming automatically\r\n * Reference: https://stackoverflow.com/a/41487632\r\n */\r\n (\r\n ev.target as HTMLInputElement | HTMLTextAreaElement\r\n ).style.fontSize = \"16px\"; // Modify the real DOM directly before iPhone detects the font-size\r\n\r\n setInputStyle({ ...inputProps?.style, fontSize: 16 }); // Virtual DOM will also be changed\r\n\r\n onMouseDown?.(ev);\r\n }}\r\n onFocus={ev => {\r\n setInputStyle({ ...inputProps?.style });\r\n\r\n onFocus?.(ev);\r\n }}\r\n inputProps={{\r\n ...inputProps,\r\n style: { ...inputProps?.style, ...inputStyle },\r\n }}\r\n />\r\n );\r\n}\r\n\r\nexport function focusInputSafely(inputEl: HTMLInputElement) {\r\n const currentFontSize = inputEl.style.fontSize;\r\n inputEl.style.fontSize = \"16px\"; // Modify the real DOM directly before iPhone detects the font-size\r\n inputEl.focus();\r\n inputEl.style.fontSize = currentFontSize;\r\n}\r\n\r\nfunction getInitialInputStyle(\r\n inputProps: InputBaseComponentProps | undefined,\r\n autoFocus?: boolean\r\n): CSSProperties | undefined {\r\n if (autoFocus) {\r\n return { ...inputProps?.style, fontSize: 16 };\r\n }\r\n return inputProps?.style;\r\n}\r\n","import Card from \"@material-ui/core/Card\";\r\nimport Popover from \"@material-ui/core/Popover\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { ReactNode } from \"react\";\r\nimport { spaceBetween } from \"../../../common/util/Array/spaceBetween\";\r\nimport { DarkButton } from \"../Button/DarkButton\";\r\n\r\nexport function DarkPopoverMenu({\r\n anchorEl,\r\n containerEl,\r\n open,\r\n onClose,\r\n items,\r\n disabled,\r\n}: {\r\n anchorEl: HTMLButtonElement | HTMLDivElement | SVGSVGElement | null;\r\n containerEl: HTMLDivElement | null;\r\n open: boolean;\r\n onClose: () => void;\r\n items: {\r\n key?: string;\r\n label: string;\r\n onClick?: () => void;\r\n icon?: ReactNode;\r\n }[];\r\n disabled?: boolean;\r\n}) {\r\n const c = usePopoverStyles();\r\n\r\n return (\r\n \r\n
\r\n \r\n {items.map((item, i) => (\r\n {\r\n item.onClick?.();\r\n onClose();\r\n }}\r\n className={spaceBetween(\r\n c.darkButton,\r\n i === 0 && c.topDarkButton\r\n )}\r\n disabled={disabled}\r\n >\r\n {item.label}\r\n \r\n ))}\r\n \r\n
\r\n
\r\n \r\n );\r\n}\r\nconst usePopoverStyles = makeStyles(theme => ({\r\n topDarkButton: {\r\n borderBottom: \"solid 1px grey\",\r\n borderBottomRightRadius: 0,\r\n borderBottomLeftRadius: 0,\r\n },\r\n darkButton: {\r\n paddingLeft: 20,\r\n paddingRight: 20,\r\n },\r\n paper: {\r\n backgroundColor: \"rgba(0,0,0,0)\",\r\n },\r\n tail: {\r\n position: \"absolute\",\r\n bottom: 10,\r\n transform: \"rotate(45deg)\",\r\n backgroundColor: theme.palette.grey[800],\r\n zIndex: 1,\r\n width: 30,\r\n height: 30,\r\n },\r\n card: {\r\n backgroundColor: theme.palette.grey[800],\r\n zIndex: 2,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n container: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n position: \"relative\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n paddingBottom: 15,\r\n },\r\n}));\r\n","import { questsManager } from \"../../../zApps/Layout/Login/MyPage/components/OpenableCards/QuestsCard/quests/quests\";\r\nimport { Quest } from \"../../../zApps/Layout/Login/MyPage/components/OpenableCards/QuestsCard/quests/types\";\r\n\r\nexport const excludedAchievements = [\r\n \"hiragana-50\",\r\n \"hiragana-20\",\r\n \"katakana-50\",\r\n \"katakana-20\",\r\n];\r\n\r\nexport function getUserStudyAchievements(achievements: string[]): Quest[] {\r\n return questsManager\r\n .getStudyQuests()\r\n .filter(\r\n q =>\r\n achievements.includes(q.questKey) &&\r\n !excludedAchievements.includes(q.questKey)\r\n );\r\n}\r\n","import Button from \"@material-ui/core/Button\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { BaseCSSProperties } from \"@material-ui/core/styles/withStyles\";\r\nimport CameraIcon from \"@material-ui/icons/CameraAlt\";\r\nimport { useMemo } from \"react\";\r\nimport { changeAppState } from \"../../../../common/appState\";\r\nimport { User } from \"../types\";\r\nimport { validateImage } from \"./validateImage\";\r\n\r\nlet currentMaxId = 0;\r\n\r\nexport function UploadCameraButton({\r\n submitting,\r\n setSubmitting,\r\n userId,\r\n size,\r\n style,\r\n}: {\r\n submitting: boolean;\r\n setSubmitting: (submitting: boolean) => void;\r\n userId: number;\r\n size: number;\r\n style?: BaseCSSProperties;\r\n}) {\r\n const c = useUploadCameraStyles({ size, labelStyle: style });\r\n\r\n const id = useMemo(() => {\r\n currentMaxId++;\r\n return \"icon-button-photo-\" + currentMaxId;\r\n }, []);\r\n\r\n return (\r\n <>\r\n {\r\n if (!target.files || !target.files[0]) {\r\n return;\r\n }\r\n const file = target.files[0];\r\n\r\n const error = validateImage(file);\r\n if (error) {\r\n alert(error);\r\n return;\r\n }\r\n\r\n setSubmitting(true);\r\n fetchUpdateAvatar(userId, file).then(({ user }) => {\r\n changeAppState(\"user\", user);\r\n setTimeout(() => {\r\n setSubmitting(false);\r\n }, 50);\r\n });\r\n }}\r\n />\r\n {!submitting && (\r\n \r\n )}\r\n \r\n );\r\n}\r\nconst useUploadCameraStyles = makeStyles<\r\n Theme,\r\n {\r\n size: number;\r\n labelStyle?: BaseCSSProperties;\r\n }\r\n>(({ palette }) => ({\r\n label: ({ labelStyle }) => ({\r\n ...labelStyle,\r\n }),\r\n cameraButton: ({ size }) => ({\r\n borderRadius: \"50%\",\r\n maxWidth: size,\r\n maxHeight: size,\r\n minWidth: size,\r\n minHeight: size,\r\n backgroundColor: palette.grey[800],\r\n color: \"white\",\r\n transition: \"all 200ms\",\r\n \"&:hover\": {\r\n backgroundColor: palette.grey[600],\r\n },\r\n transform: \"scale(0.8)\",\r\n }),\r\n cameraIcon: ({ size }) => ({\r\n width: (size * 2) / 3,\r\n height: (size * 2) / 3,\r\n }),\r\n input: { display: \"none\" },\r\n}));\r\n\r\nasync function fetchUpdateAvatar(\r\n userId: number,\r\n file: File\r\n): Promise<{ user: User }> {\r\n const formData = new FormData();\r\n formData.append(\"userId\", userId.toString());\r\n formData.append(\"file\", file);\r\n\r\n const res = await fetch(\"api/User/UpdateAvatar\", {\r\n method: \"POST\",\r\n body: formData,\r\n });\r\n return res.json();\r\n}\r\n","import Avatar, { AvatarProps } from \"@material-ui/core/Avatar\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport PersonIcon from \"@material-ui/icons/Person\";\r\nimport { RefObject } from \"react\";\r\nimport { spaceBetween } from \"../../../../common/util/Array/spaceBetween\";\r\nimport { theme } from \"../../../zApps/Layout\";\r\nimport { User, UserForRanking } from \"../types\";\r\n\r\ninterface Props extends AvatarProps {\r\n user: User | UserForRanking | undefined;\r\n colorNumber: number | \"noColor\";\r\n size: number;\r\n icon300?: boolean;\r\n avatarRef?: RefObject;\r\n}\r\n\r\nexport function UserAvatar({\r\n user,\r\n colorNumber,\r\n size,\r\n className,\r\n icon300,\r\n avatarRef,\r\n ...rest\r\n}: Props) {\r\n const c = useStyles({ size, colorNumber });\r\n\r\n if (user?.avatarPath) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst colors = [\r\n \"#DC7633\",\r\n theme.palette.primary.light,\r\n theme.palette.success.main,\r\n theme.palette.secondary.light,\r\n \"#8E44AD\",\r\n \"#EC7063\",\r\n \"#34495E\",\r\n \"#5499C7\",\r\n \"#D4AC0D\",\r\n];\r\n\r\nconst useStyles = makeStyles<\r\n Theme,\r\n { size: number; colorNumber: number | \"noColor\" }\r\n>(theme => ({\r\n imgAvatar: ({ size }) => ({\r\n width: size,\r\n height: size,\r\n boxShadow: `0 0 3px ${theme.palette.grey[400]}`,\r\n }),\r\n img: ({ size }) => ({\r\n objectFit: \"cover\",\r\n objectPosition: \"50% 50%\",\r\n width: size,\r\n height: size,\r\n }),\r\n iconAvatar: ({ size, colorNumber }) => ({\r\n width: size,\r\n height: size,\r\n backgroundColor:\r\n colorNumber === \"noColor\"\r\n ? undefined\r\n : colors[colorNumber % colors.length],\r\n }),\r\n icon: ({ size }) => ({\r\n width: size * 0.8,\r\n height: size * 0.8,\r\n }),\r\n}));\r\n","export const validImageContentTypes = [\"image/jpeg\", \"image/png\", \"image/gif\"]; // Corresponding constants are also in: Z-Apps\\Util\\ImageUtil.cs\r\n\r\nexport function validateImage(file: File) {\r\n if (!validImageContentTypes.includes(file.type)) {\r\n return \"Sorry, only JPG, JPEG, PNG & GIF files are allowed\";\r\n }\r\n\r\n if (file.size > 10000000) {\r\n return \"File size must be less than 10MB\";\r\n }\r\n return null;\r\n}\r\n","export function getLinkText(title: string | null, url: string) {\r\n let linkText = title;\r\n const hostname = new URL(url).hostname;\r\n const domain = hostname.replace(/^www\\./, \"\");\r\n const lowestLevelDomain = domain.split(/[.-_]/)[0];\r\n\r\n if (linkText) {\r\n const lowerLinkText = linkText.toLocaleLowerCase();\r\n const isWordInLinkTextIncludedInDomain = lowerLinkText\r\n .split(\" \")\r\n .some(t => lowestLevelDomain.includes(t));\r\n\r\n const isPartOfDomainIncludedInLinkText = lowestLevelDomain\r\n .split(\".\")\r\n .some(d => lowerLinkText.includes(d));\r\n\r\n if (\r\n isWordInLinkTextIncludedInDomain ||\r\n isPartOfDomainIncludedInLinkText ||\r\n (domain in allowedCombination &&\r\n lowerLinkText.includes(allowedCombination[domain]))\r\n ) {\r\n return linkText;\r\n }\r\n }\r\n\r\n return domain.length > 27 ? domain.slice(0, 27) + \"...\" : domain;\r\n}\r\n\r\nconst allowedCombination = {\r\n \"wa.me\": \"whatsapp\",\r\n} as {\r\n [key: string]: string;\r\n};\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport ShareIcon from \"@material-ui/icons/Share\";\r\nimport { Z_APPS_SHORT_URL } from \"../../../../../../../common/consts\";\r\nimport { DarkButton } from \"../../../../../../shared/Button/DarkButton\";\r\n\r\nexport function ShareButton({ userId }: { userId?: number }) {\r\n const c = useStyles();\r\n\r\n return (\r\n }\r\n className={c.button}\r\n onClick={async () => {\r\n if (!userId) {\r\n return;\r\n }\r\n try {\r\n await navigator.clipboard.writeText(\r\n `${Z_APPS_SHORT_URL}/u/${userId}`\r\n );\r\n alert(\"Profile Link Copied\");\r\n } catch (err) {\r\n alert(\"Failed to copy\");\r\n }\r\n }}\r\n >\r\n Share\r\n \r\n );\r\n}\r\nconst useStyles = makeStyles({\r\n button: {\r\n position: \"absolute\",\r\n top: 7,\r\n right: 7,\r\n maxHeight: 25,\r\n minHeight: 25,\r\n fontSize: \"small !important\",\r\n lineHeight: 1,\r\n },\r\n icon: { width: 15 },\r\n});\r\n","import { initializeAppState } from \"../../../../../../common/appState\";\r\nimport { clearLocalStorageData } from \"../progressManager\";\r\n\r\nexport async function logout(shouldNotRemountMain?: boolean) {\r\n const promise = fetch(\"api/Auth/Logout\", {\r\n headers: {\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n credentials: \"include\",\r\n });\r\n\r\n initializeAppState(\r\n \"user\",\r\n \"relatedUsers\",\r\n \"items\",\r\n \"xpBeforeSignUp\",\r\n \"unreadMessages\",\r\n \"questState\",\r\n \"isDailyBonusUnclaimed\",\r\n \"xpBoostRemainingSeconds\",\r\n \"lastUsedXpBooster\",\r\n \"unreadComments\",\r\n \"invitationBonusList\",\r\n \"authorPanelState\",\r\n \"otherUserPanelsState\",\r\n \"messagePanelState\",\r\n \"vocabRoulettePanelState\",\r\n \"shopPanelState\",\r\n \"paymentPanelState\",\r\n \"activeUsersPanelState\",\r\n \"socialPanelState\",\r\n \"imageDetailPanelState\",\r\n \"invitationCardPanelState\",\r\n \"simpleDialogState\",\r\n \"guestUserXpDialogState\",\r\n \"registeredUserXpDialogState\",\r\n \"friendsLimitDialogState\",\r\n \"guestMessageLimitDialogState\",\r\n \"addCoinsDialogState\"\r\n );\r\n clearLocalStorageData(shouldNotRemountMain);\r\n\r\n await promise; // No need to return. Just wait.\r\n}\r\n","import LinearProgress from \"@material-ui/core/LinearProgress\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useUser } from \"../../../../../../common/hooks/useUser\";\r\nimport { spaceBetween } from \"../../../../../../common/util/Array/spaceBetween\";\r\nimport { XpProgress } from \"./types\";\r\n\r\nexport function XpProgressArea() {\r\n const c = useXpProgressStyles();\r\n const { user } = useUser();\r\n\r\n const [xpProgress, setXpProgress] = useState(null);\r\n useEffect(() => {\r\n if (user) {\r\n let isStillValid = true;\r\n getXpProgress(user.xp).then(x => {\r\n if (isStillValid) {\r\n setXpProgress(x);\r\n }\r\n });\r\n return () => {\r\n isStillValid = false;\r\n };\r\n }\r\n }, [user?.xp]);\r\n\r\n if (!user) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n
\r\n XP: {xpProgress?.xpProgress}/{xpProgress?.necessaryXp}\r\n
\r\n \r\n
\r\n );\r\n}\r\nconst useXpProgressStyles = makeStyles(() => ({\r\n container: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n transition: \"width 500ms\",\r\n overflow: \"hidden\",\r\n },\r\n width0: { width: 0 },\r\n width210: { width: 210 },\r\n linearProgress: { width: 210, marginBottom: 10 },\r\n}));\r\n\r\nasync function getXpProgress(xp: number): Promise {\r\n const res = await fetch(`api/User/GetXpProgress?xp=${xp}`);\r\n return res.json();\r\n}\r\n","import { useEffect, useState } from \"react\";\r\nimport { vocabGenre } from \"../../../../../types/vocab\";\r\nimport { getKanaPercentage } from \"../../../zApps/parts/KanaQuiz/kanaProgress\";\r\nimport { getGrammarSaveKey, sFetchAllGrammar } from \"./progressManager/grammar\";\r\nimport \"./style.css\";\r\n\r\nexport function useProgress(\r\n loadAllGenres: () => void,\r\n allGenres: vocabGenre[]\r\n) {\r\n const [kanaProgress, setKanaProgress] = useState(0);\r\n const [hiraganaProgress, setHiraganaProgress] = useState(0);\r\n const [katakanaProgress, setKatakanaProgress] = useState(0);\r\n const [vocabProgress, setVocabProgress] = useState(0);\r\n const [kanjiProgress, setKanjiProgress] = useState(0);\r\n const [enToHiraganaProgress, setEnToHiraganaProgress] = useState(0);\r\n const [enToKanjiProgress, setEnToKanjiProgress] = useState(0);\r\n const [vocabListProgress, setVocabListProgress] = useState(0);\r\n const [actionGameProgress, setActionGameProgress] = useState(0);\r\n const [grammarProgress, setGrammarProgress] = useState(0);\r\n\r\n useEffect(() => {\r\n loadAllGenres();\r\n\r\n const hiraganaPercentage = getKanaPercentage(\"Hiragana\");\r\n const katakanaPercentage = getKanaPercentage(\"Katakana\");\r\n\r\n setHiraganaProgress(hiraganaPercentage);\r\n setKatakanaProgress(katakanaPercentage);\r\n setKanaProgress(\r\n Math.floor(\r\n (getKanaPercentage(\"Hiragana\") +\r\n getKanaPercentage(\"Katakana\")) /\r\n 2\r\n )\r\n );\r\n setActionGameProgress(\r\n [1, 2, 3]\r\n .map(i => localStorage.getItem(`action-game${i}-progress`))\r\n .filter(p => p).length\r\n );\r\n }, [loadAllGenres]);\r\n\r\n useEffect(() => {\r\n const { vocab, kanji, enToHiragana, enToKanji } =\r\n getVocabPercentage(allGenres);\r\n\r\n setVocabProgress(Math.floor(vocab));\r\n setKanjiProgress(Math.floor(kanji));\r\n setEnToHiraganaProgress(Math.floor(enToHiragana));\r\n setEnToKanjiProgress(Math.floor(enToKanji));\r\n\r\n setVocabListProgress(\r\n Math.floor((vocab + kanji + enToHiragana + enToKanji) / 4)\r\n );\r\n }, [allGenres.length]);\r\n\r\n useEffect(() => {\r\n sFetchAllGrammar().then(g => {\r\n const sum = g.reduce(\r\n (acc, val) =>\r\n acc +\r\n (Number(\r\n localStorage.getItem(getGrammarSaveKey(val.path))\r\n ) || 0),\r\n 0\r\n );\r\n setGrammarProgress(Math.floor(sum / g.length));\r\n });\r\n }, []);\r\n\r\n const totalProgress = Math.floor(\r\n (hiraganaProgress +\r\n katakanaProgress +\r\n vocabProgress +\r\n enToHiraganaProgress +\r\n enToKanjiProgress +\r\n kanjiProgress +\r\n grammarProgress) /\r\n 7\r\n );\r\n\r\n useEffect(() => {\r\n localStorage.setItem(\"user_totalProgress\", totalProgress.toString());\r\n }, [totalProgress]);\r\n\r\n return {\r\n kanaProgress,\r\n hiraganaProgress,\r\n katakanaProgress,\r\n vocabProgress,\r\n enToHiraganaProgress,\r\n enToKanjiProgress,\r\n kanjiProgress,\r\n vocabListProgress,\r\n actionGameProgress,\r\n grammarProgress,\r\n totalProgress,\r\n };\r\n}\r\n\r\nfunction getVocabPercentage(allVocabGenres: vocabGenre[]): {\r\n vocab: number;\r\n kanji: number;\r\n enToHiragana: number;\r\n enToKanji: number;\r\n} {\r\n const { vocab, kanji, enToHiragana, enToKanji } = allVocabGenres.reduce(\r\n (acc, { genreId }) => ({\r\n vocab:\r\n acc.vocab +\r\n Number(\r\n localStorage.getItem(`vocab-quiz-percentage-${genreId}`)\r\n ),\r\n kanji:\r\n acc.kanji +\r\n Number(\r\n localStorage.getItem(`kanji-quiz-percentage-${genreId}`)\r\n ),\r\n enToHiragana:\r\n acc.enToHiragana +\r\n Number(\r\n localStorage.getItem(\r\n `EnToHiragana-quiz-percentage-${genreId}`\r\n )\r\n ),\r\n enToKanji:\r\n acc.enToKanji +\r\n Number(\r\n localStorage.getItem(`EnToKanji-quiz-percentage-${genreId}`)\r\n ),\r\n }),\r\n { vocab: 0, kanji: 0, enToHiragana: 0, enToKanji: 0 }\r\n );\r\n\r\n return {\r\n vocab: vocab / allVocabGenres.length,\r\n kanji: kanji / allVocabGenres.length,\r\n enToHiragana: enToHiragana / allVocabGenres.length,\r\n enToKanji: enToKanji / allVocabGenres.length,\r\n };\r\n}\r\n","const invisibleCharCodes = [8206];\r\nconst invisibleCharacters = invisibleCharCodes.map(c => String.fromCharCode(c));\r\n\r\nexport function trim(str: string) {\r\n let trimmed = str.trim();\r\n while (trimmed.length > 0 && invisibleCharacters.includes(trimmed[0])) {\r\n trimmed = trimmed.substring(1);\r\n }\r\n while (\r\n trimmed.length > 0 &&\r\n invisibleCharacters.includes(trimmed[trimmed.length - 1])\r\n ) {\r\n trimmed = trimmed.slice(0, -1);\r\n }\r\n return trimmed;\r\n}\r\n\r\n","import { changeAppState } from \"../../../../../common/appState\";\r\nimport { User } from \"../../../../shared/User/types\";\r\nimport { mergeLocalStorageAndSavedUserData } from \"./progressManager\";\r\n\r\nexport async function loginSuccess(user: User) {\r\n await mergeLocalStorageAndSavedUserData(user);\r\n changeAppState(\"signInPanelState\", { type: \"myPageTop\" });\r\n}\r\n","import { makeStyles } from \"@material-ui/core/styles\";\nimport { RightPanel } from \"../../../../shared/Panel/RightPanel\";\nimport Terms from \"../../../zApps/Terms\";\n\nexport function TermOfUsePanel({\n open,\n onClose,\n}: {\n open: boolean;\n onClose: () => void;\n}) {\n const c = useStyles();\n\n return (\n \n
\n \n
\n
\n );\n}\nconst useStyles = makeStyles({\n container: { margin: \"0 20px 30px\" },\n});\n\n","import Avatar from \"@material-ui/core/Avatar\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Collapse from \"@material-ui/core/Collapse\";\r\nimport Container from \"@material-ui/core/Container\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport PencilIcon from \"@material-ui/icons/Create\";\r\nimport LockOutlinedIcon from \"@material-ui/icons/LockOutlined\";\r\nimport { ReactNode, SyntheticEvent, useEffect, useMemo, useState } from \"react\";\r\nimport { changeAppState, getAppState } from \"../../../../../common/appState\";\r\nimport { sendPost } from \"../../../../../common/functions\";\r\nimport { useAbTest } from \"../../../../../common/hooks/useAbTest\";\r\nimport { useScreenSize } from \"../../../../../common/hooks/useScreenSize\";\r\nimport { trim } from \"../../../../../common/util/String/trim\";\r\nimport { FetchResult } from \"../../../../../types/fetch\";\r\nimport ShurikenProgress from \"../../../../shared/Animations/ShurikenProgress\";\r\nimport CharacterComment from \"../../../../shared/CharacterComment\";\r\nimport { TextField } from \"../../../../shared/Input/TextField\";\r\nimport { User } from \"../../../../shared/User/types\";\r\nimport { loginSuccess } from \"../MyPage/loginSuccess\";\r\nimport { signInPanelWidth } from \"../Panel\";\r\nimport { PasswordField } from \"./PasswordField\";\r\nimport { TermOfUsePanel } from \"./TermOfUsePanel\";\r\nimport {\r\n emailValidate,\r\n realTimeValidate,\r\n submissionValidate,\r\n} from \"./validation\";\r\n\r\nexport function SignUp({\r\n chosen,\r\n panelClosed,\r\n email,\r\n password,\r\n setEmail,\r\n setPassword,\r\n encodedEmail,\r\n}: {\r\n chosen: boolean;\r\n panelClosed: boolean;\r\n email: string;\r\n password: string;\r\n setEmail: (email: string) => void;\r\n setPassword: (password: string) => void;\r\n encodedEmail: string;\r\n}) {\r\n const classes = useStyles();\r\n const signUpClasses = useSignUpStyles();\r\n const { screenWidth } = useScreenSize();\r\n\r\n const [name, setName] = useState(\"\");\r\n const nameFromEmail = getUserNameFromEmail(email);\r\n const nameToSend = trim(name) || nameFromEmail;\r\n\r\n const [submissionError, setSubmissionError] = useState(null);\r\n const realTimeError = useMemo(\r\n () => realTimeValidate(nameToSend, email, password),\r\n [nameToSend, email, password]\r\n );\r\n const [submitting, setSubmitting] = useState(false);\r\n const error = submissionError || realTimeError;\r\n\r\n const onSubmit = async (ev: SyntheticEvent) => {\r\n ev.preventDefault();\r\n\r\n const sError = submissionValidate(nameToSend, email, password);\r\n if (sError) {\r\n setSubmissionError(sError);\r\n return;\r\n }\r\n\r\n setSubmitting(true);\r\n const user: FetchResult = await sendPost(\r\n {\r\n name: nameToSend,\r\n email,\r\n password,\r\n initialXp: getAppState().xpBeforeSignUp,\r\n },\r\n \"api/Auth/Register\"\r\n );\r\n\r\n if (\"error\" in user) {\r\n setSubmissionError(\r\n getSubmissionError(user.error, () => {\r\n setEmail(email);\r\n })\r\n );\r\n setSubmitting(false);\r\n return;\r\n }\r\n\r\n abTestSuccess();\r\n await loginSuccess(user);\r\n setSubmitting(false);\r\n changeAppState(\"xpBeforeSignUp\", 0);\r\n };\r\n\r\n const { partiallyOpened, containerC } = useOpenState(\r\n chosen,\r\n panelClosed,\r\n screenWidth > 600 ? 25 : 15\r\n );\r\n const { getAbTestedComment, abTestSuccess } =\r\n useAbTestedComment(partiallyOpened);\r\n if (!partiallyOpened) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n

Sign up

\r\n
\r\n\r\n \r\n {getAbTestedComment()}\r\n
\r\n }\r\n />\r\n\r\n \r\n
{error}
\r\n
\r\n\r\n
\r\n {\r\n setEmail(ev.target.value.trim());\r\n setSubmissionError(null);\r\n }}\r\n value={email}\r\n helperText={\r\n \r\n }\r\n disabled={!!encodedEmail}\r\n inputProps={{\r\n className: encodedEmail\r\n ? classes.fixedEmailField\r\n : undefined,\r\n }}\r\n />\r\n\r\n \r\n\r\n {\r\n setPassword(ev.target.value.trim());\r\n setSubmissionError(null);\r\n }}\r\n password={password}\r\n />\r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n {\r\n ev.preventDefault();\r\n changeAppState(\"signInPanelState\", {\r\n type: \"signIn\",\r\n });\r\n }}\r\n >\r\n Already have an account? Sign in\r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\nconst useSignUpStyles = makeStyles(theme => ({\r\n submit: {\r\n margin: theme.spacing(2, 0, 2),\r\n fontSize: \"1rem\",\r\n },\r\n term: {\r\n margin: theme.spacing(3, 0, 0),\r\n },\r\n}));\r\n\r\nexport function useOpenState(\r\n chosen: boolean,\r\n panelClosed: boolean,\r\n sidePadding?: number\r\n) {\r\n const [showContent, setShowContent] = useState(false);\r\n useEffect(() => {\r\n if (chosen && !showContent) {\r\n // when open\r\n setTimeout(() => {\r\n setShowContent(true);\r\n }, 100);\r\n return;\r\n }\r\n if (!chosen && showContent) {\r\n // when close\r\n setTimeout(() => {\r\n setShowContent(false);\r\n }, 550);\r\n }\r\n }, [chosen]);\r\n\r\n const containerC = useContainerStyles({\r\n panelClosed,\r\n showContent,\r\n chosen,\r\n sidePadding,\r\n });\r\n\r\n return {\r\n partiallyOpened: chosen || showContent,\r\n containerC,\r\n };\r\n}\r\nexport const useContainerStyles = makeStyles<\r\n Theme,\r\n {\r\n panelClosed: boolean;\r\n showContent: boolean;\r\n chosen: boolean;\r\n sidePadding?: number;\r\n }\r\n>({\r\n container: ({ panelClosed, showContent, chosen, sidePadding }) => ({\r\n position: \"absolute\",\r\n right: getContentRight(chosen, showContent, panelClosed),\r\n transition: \"all 500ms\",\r\n paddingLeft: sidePadding,\r\n paddingRight: sidePadding,\r\n }),\r\n});\r\nfunction getContentRight(\r\n chosen: boolean,\r\n showContent: boolean,\r\n panelClosed: boolean\r\n) {\r\n if (panelClosed) {\r\n return 0; // Panel itself is closed\r\n }\r\n\r\n if (!chosen && !showContent) {\r\n return 600; // Still not open this content\r\n }\r\n if (chosen && !showContent) {\r\n return 600; // Now trying to open\r\n }\r\n if (chosen && showContent) {\r\n return 0; // Completely opened\r\n }\r\n if (!chosen && showContent) {\r\n return -600; // Trying to close\r\n }\r\n return;\r\n}\r\n\r\nfunction getUserNameFromEmail(email: string) {\r\n return email.split(\"@\")[0].replaceAll(\".\", \" \");\r\n}\r\n\r\nfunction UserNameField({\r\n setName,\r\n setSubmissionError,\r\n name,\r\n}: {\r\n setName: (name: string) => void;\r\n setSubmissionError: (error: ReactNode) => void;\r\n name: string;\r\n}) {\r\n return (\r\n \r\n
\r\n {\r\n setName(ev.target.value);\r\n setSubmissionError(null);\r\n }}\r\n value={name}\r\n />\r\n
\r\n
\r\n );\r\n}\r\n\r\nfunction UserNameFromEmailField({\r\n email,\r\n name,\r\n nameFromEmail,\r\n setName,\r\n}: {\r\n email: string;\r\n name: string;\r\n nameFromEmail: string;\r\n setName: (name: string) => void;\r\n}) {\r\n const c = useUserNameFromEmailFieldStyles();\r\n return (\r\n \r\n
\r\n
\r\n Username: \r\n {nameFromEmail}\r\n
\r\n {\r\n setName(nameFromEmail); // Change the mode into edit-mode by setting \"name\"\r\n }}\r\n className={c.iconButton}\r\n >\r\n \r\n \r\n
\r\n \r\n );\r\n}\r\nconst useUserNameFromEmailFieldStyles = makeStyles(theme => ({\r\n container: {\r\n fontSize: theme.typography.fontSize,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n nameFromEmail: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n iconButton: { padding: 5 },\r\n}));\r\n\r\nfunction SubmitButton({\r\n submitting,\r\n error,\r\n className,\r\n}: {\r\n submitting: boolean;\r\n error?: ReactNode;\r\n className: string;\r\n}) {\r\n const { abTestKey, abTestSuccess } = useAbTest({\r\n testName: \"SignUpPanel-SubmitButtonMessage\",\r\n keys: [\r\n \"Sign Up\",\r\n \"Sign Up!\",\r\n \"Join Now\",\r\n \"Join Now!\",\r\n \"Register\",\r\n \"Register!\",\r\n ] as const,\r\n });\r\n return (\r\n {\r\n abTestSuccess();\r\n }}\r\n >\r\n {!abTestKey || submitting ? (\r\n \r\n ) : (\r\n abTestKey\r\n )}\r\n \r\n );\r\n}\r\n\r\nfunction useAbTestedComment(chosen: boolean) {\r\n const { abTestKey, abTestSuccess } = useAbTest({\r\n testName: \"SignUpPanel-CharacterComment-Instruction\",\r\n keys: [\r\n \"can-check-level\",\r\n \"can-sync\",\r\n \"save-progress\",\r\n \"save-progress-noCreditCard\",\r\n \"japanese-master\",\r\n \"japanese-master-noCreditCard\",\r\n ] as const,\r\n open: chosen,\r\n });\r\n return {\r\n getAbTestedComment: () => {\r\n switch (abTestKey) {\r\n case \"can-check-level\": {\r\n return \"You can always check your current Japanese level by making a free lifetime account!\";\r\n }\r\n case \"can-sync\": {\r\n return \"You can sync your progress between your devices or browsers by making an account!\";\r\n }\r\n case \"save-progress\": {\r\n return \"Make a free lifetime account to save your progress!\";\r\n }\r\n case \"save-progress-noCreditCard\": {\r\n return \"Make a free lifetime account to save your progress! No credit card needed!\";\r\n }\r\n case \"japanese-master\": {\r\n return \"Make a free lifetime account, and be a Japanese master!\";\r\n }\r\n case \"japanese-master-noCreditCard\": {\r\n return \"Make a free lifetime account, and be a Japanese master! No credit card needed!\";\r\n }\r\n case undefined: {\r\n return ;\r\n }\r\n default: {\r\n const exhaustiveCheck: never = abTestKey;\r\n return null;\r\n }\r\n }\r\n },\r\n abTestSuccess,\r\n };\r\n}\r\n\r\nexport const useStyles = makeStyles(theme => ({\r\n paper: {\r\n marginTop: theme.spacing(1),\r\n marginBottom: theme.spacing(4),\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n },\r\n avatar: {\r\n margin: theme.spacing(1),\r\n backgroundColor: theme.palette.secondary.main,\r\n },\r\n form: {\r\n width: \"100%\",\r\n marginTop: theme.spacing(1),\r\n },\r\n submit: {\r\n margin: theme.spacing(3, 0, 2),\r\n fontSize: \"1rem\",\r\n },\r\n errorContainer: {\r\n padding: 10,\r\n textAlign: \"center\",\r\n fontWeight: \"bold\",\r\n marginTop: 15,\r\n color: \"red\",\r\n },\r\n bold: { fontWeight: \"bold\" },\r\n signUpTitleContainer: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n marginBottom: 15,\r\n },\r\n signUpTitle: { fontWeight: \"bold\", paddingRight: 56 },\r\n signUpComment: {\r\n textAlign: \"left\",\r\n padding: \"0 8px\",\r\n },\r\n fixedEmailField: {\r\n cursor: \"not-allowed\",\r\n color: theme.palette.grey[600],\r\n backgroundColor: theme.palette.grey[100],\r\n },\r\n}));\r\n\r\nfunction getSubmissionError(\r\n error: string,\r\n setSignInEmail: () => void\r\n): ReactNode {\r\n if (error === \"duplication\") {\r\n return (\r\n \r\n This email address has already been registered.\r\n
\r\n Do you want to{\" \"}\r\n {\r\n ev.preventDefault();\r\n setSignInEmail();\r\n changeAppState(\"signInPanelState\", { type: \"signIn\" });\r\n }}\r\n className=\"bold\"\r\n >\r\n sign in\r\n \r\n ?\r\n
\r\n );\r\n }\r\n return error;\r\n}\r\n\r\nfunction TermOfUse({ className }: { className: string }) {\r\n const [open, setOpen] = useState(false);\r\n return (\r\n <>\r\n
\r\n Please read{\" \"}\r\n {\r\n ev.preventDefault();\r\n setOpen(true);\r\n }}\r\n >\r\n the Term of Use\r\n {\" \"}\r\n before creating an account.\r\n
\r\n {\r\n setOpen(false);\r\n }}\r\n />\r\n \r\n );\r\n}\r\n","import Avatar from \"@material-ui/core/Avatar\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Collapse from \"@material-ui/core/Collapse\";\r\nimport Container from \"@material-ui/core/Container\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport LockOutlinedIcon from \"@material-ui/icons/LockOutlined\";\r\nimport { ReactNode, SyntheticEvent, useState } from \"react\";\r\nimport { changeAppState } from \"../../../../common/appState\";\r\nimport { useScreenSize } from \"../../../../common/hooks/useScreenSize\";\r\nimport { FetchResult, Ok } from \"../../../../types/fetch\";\r\nimport ShurikenProgress from \"../../../shared/Animations/ShurikenProgress\";\r\nimport { DarkButton } from \"../../../shared/Button/DarkButton\";\r\nimport CharacterComment from \"../../../shared/CharacterComment\";\r\nimport { TextField } from \"../../../shared/Input/TextField\";\r\nimport { signInPanelWidth } from \"./Panel\";\r\nimport { useOpenState } from \"./SignUp/SignUp\";\r\n\r\nexport function ForgotPassword({\r\n chosen,\r\n panelClosed,\r\n email,\r\n setEmail,\r\n setPassword,\r\n}: {\r\n chosen: boolean;\r\n panelClosed: boolean;\r\n email: string;\r\n setEmail: (email: string) => void;\r\n setPassword: (password: string) => void;\r\n}) {\r\n const c = useStyles();\r\n const { screenWidth } = useScreenSize();\r\n const [submissionError, setSubmissionError] = useState(null);\r\n const [submitting, setSubmitting] = useState(false);\r\n const [mode, setMode] = useState<\"sendEmail\" | \"setNewPassword\">(\r\n \"sendEmail\"\r\n );\r\n\r\n const { partiallyOpened, containerC } = useOpenState(\r\n chosen,\r\n panelClosed,\r\n screenWidth > 600 ? 25 : 15\r\n );\r\n if (!partiallyOpened) {\r\n return null;\r\n }\r\n\r\n const sendEmail = async (ev: SyntheticEvent) => {\r\n ev.preventDefault();\r\n\r\n setSubmitting(true);\r\n const res = await fetch(\"api/Auth/SendEmailToChangePassword\", {\r\n method: \"POST\",\r\n headers: {\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n credentials: \"include\",\r\n body: JSON.stringify({\r\n email,\r\n }),\r\n });\r\n const result: FetchResult = await res.json();\r\n\r\n if (\"message\" in result) {\r\n if (result.message === \"success\") {\r\n setMode(\"setNewPassword\");\r\n } else {\r\n setSubmissionError(\"Failed to send an email\");\r\n }\r\n } else {\r\n setSubmissionError(getEmailError(result.error));\r\n }\r\n setSubmitting(false);\r\n };\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n

Forgot Password

\r\n {submissionError && (\r\n
{submissionError}
\r\n )}\r\n\r\n \r\n
\r\n
\r\n Enter your email address that you used to register.\r\n Lingual Ninja will send you an email with a link to\r\n reset your password.\r\n
\r\n {\r\n setEmail(ev.target.value);\r\n setSubmissionError(null);\r\n }}\r\n value={email}\r\n />\r\n \r\n {submitting ? (\r\n \r\n ) : (\r\n \"Reset password\"\r\n )}\r\n \r\n \r\n \r\n \r\n {\r\n ev.preventDefault();\r\n changeAppState(\"signInPanelState\", {\r\n type: \"signIn\",\r\n });\r\n }}\r\n >\r\n {\"Remember your password?\"}\r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n An email was sent to{\" \"}\r\n {email}! Please\r\n check your email!\r\n
\r\n }\r\n style={{ marginTop: 20 }}\r\n />\r\n {\r\n setPassword(\"\");\r\n changeAppState(\"signInPanelState\", {\r\n type: \"signIn\",\r\n });\r\n }}\r\n >\r\n Sign in\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nfunction getEmailError(error: string): ReactNode {\r\n if (error === \"emailNoMatch\") {\r\n return (\r\n \r\n Sorry, we can't find an account with this email address.\r\n
\r\n Please try again or{\" \"}\r\n {\r\n ev.preventDefault();\r\n changeAppState(\"signInPanelState\", { type: \"signUp\" });\r\n }}\r\n >\r\n create a new account\r\n \r\n .\r\n
\r\n );\r\n }\r\n return error;\r\n}\r\n\r\nexport const useStyles = makeStyles(theme => ({\r\n paper: {\r\n marginTop: theme.spacing(1),\r\n marginBottom: theme.spacing(4),\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n },\r\n avatar: {\r\n margin: theme.spacing(1),\r\n backgroundColor: theme.palette.secondary.main,\r\n },\r\n form: {\r\n width: \"100%\",\r\n marginTop: theme.spacing(1),\r\n },\r\n submit: {\r\n margin: theme.spacing(3, 0, 2),\r\n },\r\n errorContainer: {\r\n padding: 10,\r\n textAlign: \"center\",\r\n fontWeight: \"bold\",\r\n marginTop: 15,\r\n color: \"red\",\r\n },\r\n h2Title: { fontWeight: \"bold\", marginTop: 10 },\r\n explanation: { margin: \"20px 0 15px\" },\r\n charComment: {\r\n textAlign: \"left\",\r\n padding: \"0 8px\",\r\n fontSize: \"large\",\r\n },\r\n}));\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { useState } from \"react\";\r\nimport ShurikenProgress from \"../../../../../shared/Animations/ShurikenProgress\";\r\nimport { User } from \"../../../../../shared/User/types\";\r\nimport { UploadCameraButton } from \"../../../../../shared/User/UserAvatar/UploadCameraButton\";\r\nimport { UserAvatar } from \"../../../../../shared/User/UserAvatar/UserAvatar\";\r\n\r\nexport function AvatarField({\r\n user,\r\n isProfileEditable,\r\n}: {\r\n user: User;\r\n isProfileEditable: boolean;\r\n}) {\r\n const c = useAvatarFieldStyles();\r\n const [submitting, setSubmitting] = useState(false);\r\n\r\n return (\r\n
\r\n {submitting ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {isProfileEditable && (\r\n \r\n )}\r\n
\r\n );\r\n}\r\nconst useAvatarFieldStyles = makeStyles({\r\n container: { position: \"relative\" },\r\n});\r\n","import SvgIcon, { SvgIconProps } from \"@material-ui/core/SvgIcon\";\r\n\r\nexport function AddLinkIcon(props: SvgIconProps) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n","import { RefObject, useEffect, useRef } from \"react\";\r\nimport { changeAppState } from \"../../../../../../common/appState\";\r\nimport { relativeScroll } from \"../../../../../../common/util/Scroll/relativeScroll\";\r\nimport \"../style.css\";\r\nimport { InitialView } from \"./types\";\r\n\r\nexport function useScrollToMyPageItem({\r\n scrollableContainerRef,\r\n initialView,\r\n itemName,\r\n}: {\r\n scrollableContainerRef: RefObject;\r\n initialView?: InitialView;\r\n itemName: InitialView;\r\n}) {\r\n const scrollTargetRef = useRef(null);\r\n const scrollToThisArea = () => {\r\n if (!scrollTargetRef.current || !scrollableContainerRef.current) {\r\n setTimeout(scrollToThisArea, 200);\r\n return;\r\n }\r\n relativeScroll(\r\n scrollableContainerRef.current,\r\n scrollTargetRef.current,\r\n 10\r\n );\r\n };\r\n\r\n const initiallyOpen = initialView === itemName;\r\n useEffect(() => {\r\n if (!initiallyOpen) {\r\n return;\r\n }\r\n scrollToThisArea();\r\n changeAppState(\"signInPanelState\", {\r\n type: \"myPageTop\",\r\n });\r\n }, [initiallyOpen]);\r\n\r\n return { scrollTargetRef };\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 ShurikenProgress from \"../../../../../../../shared/Animations/ShurikenProgress\";\r\nimport { PrimaryButton } from \"../../../../../../../shared/Button/PrimaryButton\";\r\nimport { CenterDialog } from \"../../../../../../../shared/Dialog/CenterDialog\";\r\nimport { TextField } from \"../../../../../../../shared/Input/TextField\";\r\nimport { BioLink, User } from \"../../../../../../../shared/User/types\";\r\n\r\nexport function AddLinksDialog({\r\n isAddLinkDialogOpen,\r\n closeDialog,\r\n user: { userId, bioLinks },\r\n}: {\r\n isAddLinkDialogOpen: boolean;\r\n closeDialog: () => void;\r\n user: User;\r\n}) {\r\n const c = useAddLinksDialogStyles();\r\n\r\n const [url, setUrl] = useState(\"\");\r\n const [urlError, setUrlError] = useState(\"\");\r\n\r\n const [title, setTitle] = useState(\"\");\r\n const [titleError, setTitleError] = useState(\"\");\r\n\r\n const isError = !!urlError || !!titleError;\r\n\r\n const [submitting, setSubmitting] = useState(false);\r\n\r\n return (\r\n <>\r\n {\r\n closeDialog();\r\n }}\r\n className={c.addLinkDialog}\r\n transitionMilliseconds={200}\r\n >\r\n
\r\n

Add Social Link

\r\n\r\n
\r\n {\r\n const newUrl = ev.target.value\r\n .trim()\r\n .slice(0, 200);\r\n setUrl(newUrl);\r\n if (urlError) {\r\n setUrlError(getUrlError(newUrl, bioLinks));\r\n }\r\n }}\r\n value={url}\r\n placeholder={\"https://example.com\"}\r\n onBlur={() => {\r\n setUrlError(getUrlError(url, bioLinks));\r\n }}\r\n error={!!urlError}\r\n helperText={\r\n urlError && (\r\n <>\r\n \r\n {urlError}\r\n \r\n
\r\n \r\n Example: https://example.com\r\n \r\n \r\n )\r\n }\r\n />\r\n\r\n {\r\n const newTitle = ev.target.value;\r\n setTitle(newTitle);\r\n setTitleError(getTitleError(newTitle));\r\n }}\r\n value={title}\r\n className={c.titleField}\r\n error={!!titleError}\r\n helperText={\r\n titleError && (\r\n \r\n {titleError}\r\n \r\n )\r\n }\r\n />\r\n\r\n {\r\n setSubmitting(true);\r\n\r\n const urlError = getUrlError(url, bioLinks);\r\n if (urlError) {\r\n setUrlError(urlError);\r\n setSubmitting(false);\r\n return;\r\n }\r\n const titleError = getTitleError(title);\r\n if (titleError) {\r\n setTitleError(titleError);\r\n setSubmitting(false);\r\n return;\r\n }\r\n\r\n // Save\r\n await fetchUpdateBioLinks(userId, [\r\n ...bioLinks,\r\n { url, title },\r\n ]);\r\n\r\n closeDialog();\r\n\r\n setTitle(\"\");\r\n setTitleError(\"\");\r\n setUrl(\"\");\r\n setUrlError(\"\");\r\n setSubmitting(false);\r\n }}\r\n >\r\n {submitting ? (\r\n \r\n ) : (\r\n \"Save\"\r\n )}\r\n \r\n
\r\n
\r\n \r\n \r\n );\r\n}\r\nconst useAddLinksDialogStyles = makeStyles({\r\n addLinkDialog: {\r\n height: \"auto\",\r\n maxWidth: 320,\r\n maxHeight: \"100%\",\r\n },\r\n inputContainer: {\r\n padding: \"0 10px 15px\",\r\n },\r\n titleField: {\r\n marginTop: 5,\r\n marginBottom: 15,\r\n },\r\n errorText: {\r\n color: \"red\",\r\n fontSize: \"small\",\r\n },\r\n});\r\n\r\nfunction getUrlError(url: string, bioLinks: BioLink[]) {\r\n if (checkInvalidUrl(url)) {\r\n return \"Please enter a valid URL.\";\r\n }\r\n if (bioLinks.some(l => l.url === url.trim())) {\r\n return \"You have already registered this URL.\";\r\n }\r\n return \"\";\r\n}\r\n\r\nfunction checkInvalidUrl(url: string) {\r\n var regex =\r\n /(http|https):\\/\\/(\\w+:{0,1}\\w*)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%!\\-\\/]))?/;\r\n if (!regex.test(url)) {\r\n return true;\r\n }\r\n\r\n try {\r\n new URL(url); // Just in case\r\n } catch {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction getTitleError(title: string) {\r\n if (title.length > 20) {\r\n return \"Title should be less than 20 characters.\";\r\n }\r\n return \"\";\r\n}\r\n\r\nexport async function fetchUpdateBioLinks(userId: number, bioLinks: BioLink[]) {\r\n const result = await fetchPost<\r\n { userId: number; bioLinks: BioLink[] },\r\n { user: User }\r\n >(\"api/User/UpdateBioLinks\", { userId, bioLinks });\r\n if (\"error\" in result) {\r\n return;\r\n }\r\n changeAppState(\"user\", result.user);\r\n}\r\n","import Card from \"@material-ui/core/Card\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\nimport { useState } from \"react\";\r\nimport { ATargetBlank } from \"../../../../../../../shared/Link/ATargetBlank\";\r\nimport { User } from \"../../../../../../../shared/User/types\";\r\nimport { AddLinksDialog, fetchUpdateBioLinks } from \"./AddLinksDialog\";\r\nimport { getLinkText } from \"./getLinkText\";\r\n\r\nexport function BioLinks({\r\n isAddLinkDialogOpen,\r\n closeDialog,\r\n user,\r\n}: {\r\n isAddLinkDialogOpen: boolean;\r\n closeDialog: () => void;\r\n user: User;\r\n}) {\r\n const c = useStyles();\r\n const [submitting, setSubmitting] = useState(\"\");\r\n\r\n return (\r\n <>\r\n
\r\n {user.bioLinks.map(({ url, title }) => {\r\n if (submitting === url) {\r\n return null;\r\n }\r\n const linkText = getLinkText(title, url);\r\n\r\n return (\r\n \r\n \r\n {linkText}\r\n \r\n\r\n {\r\n setSubmitting(url);\r\n await fetchUpdateBioLinks(\r\n user.userId,\r\n user.bioLinks.filter(l => l.url !== url)\r\n );\r\n setSubmitting(\"\");\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 useStyles = makeStyles({\r\n linkContainer: { display: \"flex\", flexWrap: \"wrap\", gap: 5, width: \"100%\" },\r\n link: {\r\n fontSize: \"small\",\r\n },\r\n linkCard: {\r\n marginTop: 4,\r\n whiteSpace: \"nowrap\",\r\n padding: \"1px 5px\",\r\n },\r\n deleteIconButton: {\r\n backgroundColor: \"white\",\r\n maxHeight: 17,\r\n maxWidth: 17,\r\n position: \"relative\",\r\n left: 4,\r\n },\r\n});\r\n\r\n","import Button from \"@material-ui/core/Button\";\r\nimport Card from \"@material-ui/core/Card\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport PencilIcon from \"@material-ui/icons/Create\";\r\nimport Visibility from \"@material-ui/icons/Visibility\";\r\nimport { RefObject, useEffect, useState } from \"react\";\r\nimport { changeAppState } from \"../../../../../../../common/appState\";\r\nimport { spaceBetween } from \"../../../../../../../common/util/Array/spaceBetween\";\r\nimport { AddLinkIcon } from \"../../../../../../../icon/AddLinkIcon\";\r\nimport ShurikenProgress from \"../../../../../../shared/Animations/ShurikenProgress\";\r\nimport { DarkButton } from \"../../../../../../shared/Button/DarkButton\";\r\nimport { TextField } from \"../../../../../../shared/Input/TextField\";\r\nimport { Markdown } from \"../../../../../../shared/Markdown\";\r\nimport { openOtherUserPanel } from \"../../../../../../shared/User/OtherUserPanel/functions\";\r\nimport { User } from \"../../../../../../shared/User/types\";\r\nimport { signInPanelWidth } from \"../../../Panel\";\r\nimport { InitialView } from \"../../MyPageTop/types\";\r\nimport { useScrollToMyPageItem } from \"../../MyPageTop/useScrollToMyPageItem\";\r\nimport { BioLinks } from \"./BioLinks\";\r\nimport { ElementToEmphasize } from \"./types\";\r\n\r\nexport function BioField({\r\n user,\r\n isProfileEditable,\r\n initialView,\r\n scrollableContainerRef,\r\n elementToEmphasize,\r\n}: {\r\n user: User;\r\n isProfileEditable: boolean;\r\n initialView?: InitialView;\r\n scrollableContainerRef: RefObject;\r\n elementToEmphasize?: ElementToEmphasize;\r\n}) {\r\n const [editMode, setEditMode] = useState(false);\r\n const [isAddLinkDialogOpen, setAddLinkDialogOpen] = useState(false);\r\n\r\n const { scrollTargetRef } = useScrollToMyPageItem({\r\n scrollableContainerRef,\r\n initialView,\r\n itemName: \"MyPageBio\",\r\n });\r\n\r\n const field = editMode ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n const [isAddLinkButtonEmphasized, setAddLinkButtonEmphasized] =\r\n useState(false);\r\n useEffect(() => {\r\n if (elementToEmphasize === \"AddLinkButton\") {\r\n setAddLinkButtonEmphasized(true);\r\n }\r\n }, [elementToEmphasize]);\r\n\r\n const c = useBioFieldStyles({\r\n editMode,\r\n isUrlFull: user.bioLinks.length >= 5 || user.sul >= 3,\r\n });\r\n\r\n return (\r\n <>\r\n
\r\n {field}\r\n
\r\n\r\n {\r\n setAddLinkDialogOpen(false);\r\n }}\r\n user={user}\r\n />\r\n\r\n
\r\n }\r\n onClick={() => {\r\n setAddLinkDialogOpen(true);\r\n setAddLinkButtonEmphasized(false);\r\n }}\r\n >\r\n Add Social Link\r\n \r\n }\r\n onClick={() => {\r\n openOtherUserPanel(user.userId);\r\n }}\r\n >\r\n View As\r\n \r\n
\r\n \r\n );\r\n}\r\nconst useBioFieldStyles = makeStyles<\r\n Theme,\r\n {\r\n editMode: boolean;\r\n isUrlFull: boolean;\r\n }\r\n>({\r\n buttonsContainer: {\r\n marginTop: 5,\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n width: \"100%\",\r\n },\r\n linksButton: ({ editMode, isUrlFull }) => ({\r\n maxHeight: 30,\r\n marginRight: isUrlFull ? 0 : 4,\r\n fontSize: \"small\",\r\n maxWidth: editMode || isUrlFull ? 0 : signInPanelWidth,\r\n minWidth: 0,\r\n overflow: \"hidden\",\r\n padding: \"4px 0\",\r\n transition: \"all 500ms\",\r\n }),\r\n sizeChangeAnime: {\r\n animation: \"$sizeChange 5s\",\r\n animationIterationCount: \"infinite\",\r\n animationDelay: \"1s\",\r\n },\r\n \"@keyframes sizeChange\": {\r\n \"0%\": {\r\n transform: \"scale(1)\",\r\n },\r\n \"5%\": {\r\n transform: \"scale(1.2)\",\r\n },\r\n \"15%\": {\r\n transform: \"scale(1)\",\r\n },\r\n \"20%\": {\r\n transform: \"scale(1.2)\",\r\n },\r\n \"30%\": {\r\n transform: \"scale(1)\",\r\n },\r\n \"35%\": {\r\n transform: \"scale(1.2)\",\r\n },\r\n \"45%\": {\r\n transform: \"scale(1)\",\r\n },\r\n \"50%\": {\r\n transform: \"scale(1.2)\",\r\n },\r\n \"60%\": {\r\n transform: \"scale(1)\",\r\n },\r\n \"100%\": {\r\n transform: \"scale(1)\",\r\n },\r\n },\r\n viewAsButton: ({ editMode }) => ({\r\n maxHeight: 30,\r\n fontSize: \"small\",\r\n maxWidth: editMode ? 0 : signInPanelWidth,\r\n minWidth: 0,\r\n overflow: \"hidden\",\r\n padding: \"4px 0\",\r\n transition: \"all 500ms\",\r\n }),\r\n});\r\n\r\nfunction PreviewField({\r\n bio,\r\n setEditMode,\r\n isProfileEditable,\r\n}: {\r\n bio: string;\r\n setEditMode: (editMode: boolean) => void;\r\n isProfileEditable: boolean;\r\n}) {\r\n const c = usePreviewFieldStyles({ isProfileEditable });\r\n\r\n return (\r\n {\r\n if (!isProfileEditable) {\r\n return;\r\n }\r\n setEditMode(true);\r\n }}\r\n >\r\n \r\n \r\n \r\n {isProfileEditable && (\r\n \r\n )}\r\n \r\n );\r\n}\r\nconst usePreviewFieldStyles = makeStyles(\r\n ({ palette }) => ({\r\n pencilIcon: { width: 20, height: 20 },\r\n previewContainer: {\r\n width: \"100%\",\r\n marginTop: 15,\r\n position: \"relative\",\r\n },\r\n markdownContainerCard: ({ isProfileEditable }) => ({\r\n padding: 15,\r\n cursor: isProfileEditable ? \"pointer\" : undefined,\r\n }),\r\n editButton: {\r\n backgroundColor: palette.grey[800],\r\n color: \"white\",\r\n maxWidth: 30,\r\n maxHeight: 30,\r\n minWidth: 30,\r\n minHeight: 30,\r\n position: \"absolute\",\r\n bottom: 5,\r\n right: 5,\r\n transition: \"all 200ms\",\r\n \"&:hover\": {\r\n backgroundColor: palette.grey[600],\r\n },\r\n },\r\n })\r\n);\r\n\r\nfunction EditField({\r\n user,\r\n setEditMode,\r\n}: {\r\n user: User;\r\n setEditMode: (editMode: boolean) => void;\r\n}) {\r\n const [bio, setBio] = useState(user.bio);\r\n\r\n const error =\r\n bio.length > 999\r\n ? \"Your bio must be less than 1000 characters.\"\r\n : undefined;\r\n\r\n const c = useEditFieldStyles({ isError: !!error });\r\n\r\n const [submitting, setSubmitting] = useState(false);\r\n\r\n return (\r\n
\r\n {\r\n setBio(ev.target.value || \"\");\r\n }}\r\n inputProps={{\r\n style: {\r\n paddingBottom: 20,\r\n },\r\n }}\r\n autoFocus\r\n helperText={\r\n error ? (\r\n
{error}
\r\n ) : undefined\r\n }\r\n />\r\n {\r\n setSubmitting(true);\r\n fetchUpdateBio(user.userId, bio).then(({ user }) => {\r\n setSubmitting(false);\r\n changeAppState(\"user\", user);\r\n setEditMode(false);\r\n });\r\n }}\r\n color=\"primary\"\r\n disabled={!!error || submitting}\r\n >\r\n {submitting ? : \"Save\"}\r\n \r\n
\r\n );\r\n}\r\nconst useEditFieldStyles = makeStyles({\r\n editContainer: { width: \"100%\", marginTop: 25, position: \"relative\" },\r\n errorText: { color: \"red\", height: 20 },\r\n saveButton: ({ isError }) => ({\r\n position: \"absolute\",\r\n bottom: isError ? 30 : 5,\r\n right: 5,\r\n maxWidth: 30,\r\n maxHeight: 30,\r\n transition: \"all 200ms\",\r\n }),\r\n});\r\n\r\nasync function fetchUpdateBio(\r\n userId: number,\r\n bio: string\r\n): Promise<{ user: User }> {\r\n const formData = new FormData();\r\n formData.append(\"userId\", userId.toString());\r\n formData.append(\"bio\", bio);\r\n\r\n const res = await fetch(\"api/User/UpdateBio\", {\r\n method: \"POST\",\r\n body: formData,\r\n });\r\n return res.json();\r\n}\r\n","import Button from \"@material-ui/core/Button\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport PencilIcon from \"@material-ui/icons/Create\";\r\nimport { useState } from \"react\";\r\nimport { changeAppState } from \"../../../../../../common/appState\";\r\nimport { trim } from \"../../../../../../common/util/String/trim\";\r\nimport ShurikenProgress from \"../../../../../shared/Animations/ShurikenProgress\";\r\nimport { TextField } from \"../../../../../shared/Input/TextField\";\r\nimport { User } from \"../../../../../shared/User/types\";\r\nimport { nameValidate } from \"../../SignUp/validation\";\r\n\r\nexport function UsernameField({\r\n user,\r\n isProfileEditable,\r\n}: {\r\n user: User;\r\n isProfileEditable: boolean;\r\n}) {\r\n const [editMode, setEditMode] = useState(false);\r\n\r\n if (editMode) {\r\n return ;\r\n }\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction PreviewField({\r\n user,\r\n setEditMode,\r\n isProfileEditable,\r\n}: {\r\n user: User;\r\n setEditMode: (editMode: boolean) => void;\r\n isProfileEditable: boolean;\r\n}) {\r\n const c = usePreviewFieldStyles({ isProfileEditable });\r\n return (\r\n

\r\n {user.name}\r\n {\r\n if (!isProfileEditable) {\r\n return;\r\n }\r\n setEditMode(true);\r\n }}\r\n className={c.iconButton}\r\n >\r\n \r\n \r\n

\r\n );\r\n}\r\nconst usePreviewFieldStyles = makeStyles(\r\n {\r\n container: {\r\n marginTop: 15,\r\n marginBottom: 20,\r\n fontWeight: \"bold\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n paddingLeft: 35,\r\n },\r\n iconButton: ({ isProfileEditable }) => ({\r\n padding: 5,\r\n marginBottom: -5,\r\n visibility: isProfileEditable ? \"visible\" : \"hidden\",\r\n }),\r\n pencilIcon: { height: 25, width: 25 },\r\n }\r\n);\r\n\r\nfunction EditField({\r\n user,\r\n setEditMode,\r\n}: {\r\n user: User;\r\n setEditMode: (editMode: boolean) => void;\r\n}) {\r\n const [submitting, setSubmitting] = useState(false);\r\n const [name, setName] = useState(user.name);\r\n\r\n const trimmedName = trim(name);\r\n const error = nameValidate(trimmedName);\r\n\r\n const c = useEditFieldStyles();\r\n\r\n return (\r\n

\r\n {\r\n setName(ev.target.value || \"\");\r\n }}\r\n helperText={\r\n error ? (\r\n
{error}
\r\n ) : undefined\r\n }\r\n error={!!error}\r\n InputProps={{\r\n endAdornment: (\r\n \r\n {\r\n setSubmitting(true);\r\n fetchUpdateName(\r\n user.userId,\r\n trimmedName\r\n ).then(({ user }) => {\r\n setSubmitting(false);\r\n changeAppState(\"user\", user);\r\n setEditMode(false);\r\n });\r\n }}\r\n color=\"primary\"\r\n disabled={!!error || submitting}\r\n >\r\n {submitting ? (\r\n \r\n ) : (\r\n \"Save\"\r\n )}\r\n \r\n \r\n ),\r\n }}\r\n />\r\n

\r\n );\r\n}\r\nconst useEditFieldStyles = makeStyles({\r\n container: {\r\n marginTop: 15,\r\n marginBottom: 20,\r\n display: \"flex\",\r\n alignItems: \"flex-end\",\r\n },\r\n saveButton: {\r\n maxWidth: 30,\r\n maxHeight: 30,\r\n transition: \"all 200ms\",\r\n marginLeft: -2,\r\n },\r\n errorText: { color: \"red\", height: 20 },\r\n});\r\n\r\nasync function fetchUpdateName(\r\n userId: number,\r\n name: string\r\n): Promise<{ user: User }> {\r\n const formData = new FormData();\r\n formData.append(\"userId\", userId.toString());\r\n formData.append(\"name\", name);\r\n\r\n const res = await fetch(\"api/User/UpdateName\", {\r\n method: \"POST\",\r\n body: formData,\r\n });\r\n return res.json();\r\n}\r\n","import SvgIcon, { SvgIconProps } from \"@material-ui/core/SvgIcon\";\r\n\r\nexport function SavingsIcon(props: SvgIconProps) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n","import Button from \"@material-ui/core/Button\";\r\nimport 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 CloseIcon from \"@material-ui/icons/Close\";\r\nimport { ReactNode, RefObject, useEffect, useRef, useState } from \"react\";\r\nimport {\r\n changeAppState,\r\n getAppState,\r\n} from \"../../../../../../../common/appState\";\r\nimport { sleepAsync } from \"../../../../../../../common/functions\";\r\nimport { spaceBetween } from \"../../../../../../../common/util/Array/spaceBetween\";\r\nimport { relativeScroll } from \"../../../../../../../common/util/Scroll/relativeScroll\";\r\nimport { AlertIcon } from \"../../../../../../../icon/AlertIcon\";\r\nimport { InitialView, OpenableCardId } from \"../../MyPageTop/types\";\r\n\r\nexport function OpenableCard({\r\n children,\r\n buttonMessage = \"Detail\",\r\n title,\r\n icon,\r\n saveKey: _saveKey,\r\n open,\r\n setOpen,\r\n alwaysShowIcon,\r\n alwaysShowTitle,\r\n id,\r\n initiallyOpenedId,\r\n collapseTimeout = 500,\r\n isNotOpenable,\r\n exclamationMark,\r\n scrollableContainerRef,\r\n}: {\r\n children: ReactNode;\r\n buttonMessage?: string;\r\n title: ReactNode;\r\n icon: ReactNode;\r\n saveKey: string;\r\n open: boolean;\r\n setOpen: (open: boolean) => void;\r\n alwaysShowIcon?: boolean;\r\n alwaysShowTitle?: boolean;\r\n id: OpenableCardId;\r\n initiallyOpenedId?: InitialView;\r\n collapseTimeout?: number;\r\n isNotOpenable?: boolean;\r\n exclamationMark?: boolean;\r\n scrollableContainerRef: RefObject;\r\n}) {\r\n const saveKey = \"OpenableCard-status-\" + _saveKey;\r\n const [isTitleShown, setTitleShown] = useState(!open);\r\n\r\n const c = useOpenableCardStyles({\r\n open,\r\n isTitleShown,\r\n isTitleExist: !!title,\r\n alwaysShowIcon,\r\n alwaysShowTitle,\r\n });\r\n\r\n const cardRef = useRef(null);\r\n const scrollToThisCard = async () => {\r\n for (let i = 0; i < 20; i = i + 1) {\r\n if (!cardRef.current || !scrollableContainerRef.current) {\r\n await sleepAsync(i * 10 + 200);\r\n continue;\r\n }\r\n relativeScroll(scrollableContainerRef.current, cardRef.current, 10);\r\n return; // ループ中止\r\n }\r\n };\r\n\r\n const closeCollapse = async () => {\r\n if (open) {\r\n // To close the Collapse\r\n setOpen(false);\r\n await sleepAsync(collapseTimeout);\r\n setTitleShown(true);\r\n }\r\n };\r\n const openCollapse = () => {\r\n if (!isNotOpenable && !open) {\r\n // To open the Collapse\r\n setOpen(true);\r\n setTitleShown(false);\r\n }\r\n };\r\n useEffect(() => {\r\n if (isNotOpenable && open) {\r\n closeCollapse();\r\n }\r\n }, [isNotOpenable, open]);\r\n\r\n const [isCardOpenClicked, setCardOpenClicked] = useState(false);\r\n const onClickOpenCollapse = async () => {\r\n setCardOpenClicked(true);\r\n openCollapse();\r\n };\r\n\r\n useEffect(() => {\r\n const previousStatus = localStorage.getItem(saveKey);\r\n if (!previousStatus) {\r\n return;\r\n }\r\n\r\n if (previousStatus === \"open\") {\r\n openCollapse();\r\n return;\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n localStorage.setItem(saveKey, open ? \"open\" : \"close\");\r\n }, [open]);\r\n\r\n const initiallyOpen = id === initiallyOpenedId;\r\n const [completelyOpened, setCompletelyOpened] = useState(false);\r\n const shouldScrollToThisCard = initiallyOpen || isCardOpenClicked;\r\n const onEntered = () => {\r\n if (shouldScrollToThisCard) {\r\n scrollToThisCard();\r\n setCardOpenClicked(false);\r\n\r\n // Enable to scroll more than once\r\n const { signInPanelState } = getAppState();\r\n changeAppState(\"signInPanelState\", {\r\n ...signInPanelState,\r\n initialView: undefined,\r\n });\r\n }\r\n setCompletelyOpened(true);\r\n };\r\n useEffect(() => {\r\n if (!initiallyOpen) {\r\n return;\r\n }\r\n if (completelyOpened) {\r\n onEntered(); // Already entered (InitialView was changed after the MyPage panel opened)\r\n return;\r\n }\r\n openCollapse();\r\n }, [initiallyOpen]);\r\n\r\n return (\r\n \r\n {exclamationMark && (\r\n \r\n )}\r\n\r\n
\r\n
{title}
\r\n
\r\n \r\n \r\n {open || !isTitleShown ? : buttonMessage}\r\n \r\n
\r\n
\r\n\r\n {\r\n setCompletelyOpened(false);\r\n }}\r\n classes={{\r\n wrapper: c.collapseWrapper,\r\n }}\r\n >\r\n {children}\r\n \r\n \r\n );\r\n}\r\nconst useOpenableCardStyles = makeStyles<\r\n Theme,\r\n {\r\n open: boolean;\r\n isTitleShown: boolean;\r\n isTitleExist: boolean;\r\n alwaysShowIcon?: boolean;\r\n alwaysShowTitle?: boolean;\r\n }\r\n>(({ palette }) => ({\r\n card: ({ open }) => ({\r\n minHeight: 40,\r\n width: \"100%\",\r\n fontSize: \"large\",\r\n margin: open ? \"30px 0\" : \"5px 0\",\r\n padding: \"40px 0 0\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n position: \"relative\",\r\n cursor: open ? undefined : \"pointer\",\r\n transition: \"all 500ms\",\r\n }),\r\n closedContainer: {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\",\r\n alignItems: \"center\",\r\n position: \"absolute\",\r\n top: 7,\r\n right: 0,\r\n width: \"100%\",\r\n },\r\n title: ({ isTitleShown, alwaysShowTitle, isTitleExist }) => ({\r\n width: \"100%\",\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n fontWeight: \"bold\",\r\n fontSize: \"large\",\r\n opacity: (alwaysShowTitle || isTitleShown) && isTitleExist ? 1 : 0,\r\n transition: \"all 300ms\",\r\n }),\r\n buttonsContainer: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n position: \"absolute\",\r\n right: 5,\r\n width: \"calc(100% - 10px)\",\r\n },\r\n button: ({ open }) => ({\r\n backgroundColor: open ? palette.grey[800] : palette.primary.main,\r\n color: \"white\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n maxWidth: open ? 30 : 66,\r\n minWidth: open ? 30 : 66,\r\n maxHeight: 30,\r\n minHeight: 30,\r\n transition: \"all 500ms\",\r\n \"&:hover\": {\r\n backgroundColor: open ? palette.grey[800] : undefined, // To disable the smartphone's too long hover state\r\n },\r\n }),\r\n iconButton: ({ open, alwaysShowIcon }) => ({\r\n backgroundColor: palette.grey[800],\r\n color: \"white\",\r\n maxWidth: 30,\r\n maxHeight: 30,\r\n minWidth: 30,\r\n minHeight: 30,\r\n transition: \"background-color 200ms, opacity 500ms\",\r\n \"&:hover\": {\r\n backgroundColor: palette.grey[600],\r\n },\r\n opacity: !alwaysShowIcon && open ? 0 : 1,\r\n lineHeight: 1,\r\n }),\r\n collapse: {\r\n width: \"100%\",\r\n },\r\n collapseWrapper: { width: \"100%\" },\r\n}));\r\n","import { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport KeyboardArrowRightIcon from \"@material-ui/icons/KeyboardArrowRight\";\r\nimport MailIcon from \"@material-ui/icons/Mail\";\r\nimport {\r\n changeAppState,\r\n getAppState,\r\n} from \"../../../../../../../../common/appState\";\r\nimport { PrimaryButton } from \"../../../../../../../shared/Button/PrimaryButton\";\r\n\r\nexport function InviteFriendsButton({ hasNoData }: { hasNoData?: boolean }) {\r\n const c = useStyles({ hasNoData });\r\n\r\n return (\r\n
\r\n }\r\n endIcon={}\r\n onClick={() => {\r\n if (\r\n getAppState().items.some(\r\n item => item.item.key === \"invitation_card\"\r\n )\r\n ) {\r\n changeAppState(\"signInPanelState\", {\r\n type: \"myPageTop\",\r\n initialView: \"MyPageItemsCard\",\r\n itemKeyToFocus: \"invitation_card\",\r\n });\r\n return;\r\n }\r\n changeAppState(\"shopPanelState\", {\r\n open: true,\r\n focusedItemKey: \"invitation_card\",\r\n });\r\n }}\r\n >\r\n Invite {!hasNoData && \"More \"}Friends\r\n \r\n
\r\n );\r\n}\r\nconst useStyles = makeStyles({\r\n container: ({ hasNoData }) => ({\r\n marginBottom: 10,\r\n marginTop: 5,\r\n paddingRight: 5,\r\n paddingLeft: 5,\r\n display: \"flex\",\r\n justifyContent: hasNoData ? \"center\" : \"flex-end\",\r\n alignItems: \"center\",\r\n width: \"100%\",\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 Card from \"@material-ui/core/Card\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { RefObject, useEffect, useRef, useState } from \"react\";\r\nimport {\r\n changeAppState,\r\n getAppState,\r\n useAppState,\r\n} from \"../../../../../../../../common/appState\";\r\nimport { useScreenSize } from \"../../../../../../../../common/hooks/useScreenSize\";\r\nimport { fetchPostFormData } from \"../../../../../../../../common/util/fetch\";\r\nimport { SavingsIcon } from \"../../../../../../../../icon/SavingsIcon\";\r\nimport { FetchResult } from \"../../../../../../../../types/fetch\";\r\nimport ShurikenProgress from \"../../../../../../../shared/Animations/ShurikenProgress\";\r\nimport { SuccessButton } from \"../../../../../../../shared/Button/SuccessButton\";\r\nimport { addRegisteredUserXp } from \"../../../../../../../shared/Dialog/ResultXpDialog/RegisteredUser\";\r\nimport { openOtherUserPanel } from \"../../../../../../../shared/User/OtherUserPanel/functions\";\r\nimport { User } from \"../../../../../../../shared/User/types\";\r\nimport { UserAvatar } from \"../../../../../../../shared/User/UserAvatar/UserAvatar\";\r\nimport { InitialView } from \"../../../MyPageTop/types\";\r\nimport { OpenableCard } from \"../OpenableCard\";\r\nimport { InviteFriendsButton } from \"./InviteFriendsButton\";\r\nimport { InvitationBonus } from \"./types\";\r\n\r\nconst cardId = \"MyPageBonusCard\";\r\n\r\nexport function BonusCard({\r\n initialView,\r\n scrollableContainerRef,\r\n}: {\r\n initialView?: InitialView;\r\n scrollableContainerRef: RefObject;\r\n}) {\r\n const [open, setOpen] = useState(false);\r\n const [invitationBonusList] = useAppState(\"invitationBonusList\");\r\n\r\n const c = useStyles();\r\n\r\n const validBonusCount = invitationBonusList.filter(\r\n b => b.coins > 0 || b.xp > 0\r\n ).length;\r\n\r\n return (\r\n \r\n Bonus\r\n {validBonusCount > 0 && (\r\n <>\r\n {\": \"}\r\n \r\n {validBonusCount}\r\n \r\n \r\n )}\r\n \r\n }\r\n icon={}\r\n saveKey={cardId}\r\n id={cardId}\r\n open={open}\r\n setOpen={setOpen}\r\n alwaysShowIcon\r\n alwaysShowTitle\r\n initiallyOpenedId={initialView}\r\n exclamationMark={validBonusCount > 0}\r\n scrollableContainerRef={scrollableContainerRef}\r\n >\r\n \r\n \r\n );\r\n}\r\nconst useStyles = makeStyles(theme => ({\r\n titleNumber: { color: theme.palette.success.dark },\r\n}));\r\n\r\nfunction BonusList({\r\n invitationBonusList,\r\n}: {\r\n invitationBonusList: InvitationBonus[];\r\n}) {\r\n const hasNoData = invitationBonusList.length === 0;\r\n const c = useListStyles({ hasNoData });\r\n const [submitting, setSubmitting] = useState(false);\r\n\r\n return (\r\n
\r\n
\r\n XP and Coins from users you have invited\r\n
\r\n\r\n
\r\n {invitationBonusList.map((bonus, i) => (\r\n \r\n ))}\r\n
\r\n\r\n \r\n
\r\n );\r\n}\r\nconst useListStyles = makeStyles(theme => ({\r\n container: {\r\n backgroundColor: theme.palette.grey[100],\r\n height: 308,\r\n maxHeight: 308,\r\n flex: 1,\r\n fontSize: \"large\",\r\n overflowY: \"auto\",\r\n overflowX: \"hidden\",\r\n position: \"relative\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n },\r\n noData: {\r\n width: \"100%\",\r\n height: 305,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n color: theme.palette.grey[600],\r\n },\r\n explanation: ({ hasNoData }) => ({\r\n color: theme.palette.grey[700],\r\n fontSize: \"small\",\r\n paddingTop: hasNoData ? 95 : 5,\r\n paddingBottom: hasNoData ? 45 : 0,\r\n }),\r\n recordsContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: 5,\r\n margin: \"5px 0\",\r\n width: \"100%\",\r\n },\r\n}));\r\n\r\ntype SubmittingTarget = false | \"coin\" | \"xp\";\r\nfunction BonusRecord({\r\n bonus,\r\n i,\r\n globalSubmitting,\r\n setGlobalSubmitting,\r\n}: {\r\n bonus: InvitationBonus;\r\n i: number;\r\n globalSubmitting: boolean;\r\n setGlobalSubmitting: (submitting: boolean) => void;\r\n}) {\r\n const hasBonus = bonus.xp > 0 || bonus.coins > 0;\r\n const { usernameWidth, cardRef } = useUsernameWidth();\r\n const c = useRecordStyles({ usernameWidth, hasBonus });\r\n\r\n const [localSubmitting, setLocalSubmitting] =\r\n useState(false);\r\n const setSubmitting = (newSubmitting: SubmittingTarget) => {\r\n setLocalSubmitting(newSubmitting);\r\n setGlobalSubmitting(!!newSubmitting);\r\n };\r\n\r\n return (\r\n \r\n {\r\n openOtherUserPanel(bonus.fromUser.userId);\r\n }}\r\n >\r\n \r\n
{bonus.fromUser.name}
\r\n \r\n
\r\n
\r\n
\r\n
XP:
\r\n 0 ? c.bonusNumber : undefined}\r\n >\r\n {bonus.xp.toLocaleString()}\r\n
\r\n
\r\n {\r\n const { user } = getAppState();\r\n if (!user) {\r\n return;\r\n }\r\n setSubmitting(\"xp\");\r\n\r\n // Update remaining bonus XP\r\n const fetchResult = await fetchClaimBonusXp(\r\n user.userId,\r\n bonus.fromUser.userId,\r\n bonus.xp\r\n );\r\n if (!fetchResult) {\r\n alert(\"Failed! Something is wrong!\");\r\n setSubmitting(false);\r\n return;\r\n }\r\n\r\n // Show dialog and update user's XP data\r\n await addRegisteredUserXp(\r\n {\r\n xpToAdd: bonus.xp,\r\n topSmallMessage: null,\r\n boostRate: 1,\r\n },\r\n user\r\n );\r\n setSubmitting(false);\r\n }}\r\n >\r\n {localSubmitting === \"xp\" ? (\r\n \r\n ) : (\r\n \"Receive\"\r\n )}\r\n \r\n
\r\n\r\n
\r\n
\r\n
Coins:
\r\n 0 ? c.bonusNumber : undefined\r\n }\r\n >\r\n {bonus.coins.toLocaleString()}\r\n
\r\n
\r\n {\r\n const { user } = getAppState();\r\n if (!user) {\r\n return;\r\n }\r\n setSubmitting(\"coin\");\r\n\r\n // Update remaining bonus coins and user's coin data\r\n const fetchResult = await fetchClaimBonusCoins(\r\n user.userId,\r\n bonus.fromUser.userId,\r\n bonus.coins\r\n );\r\n if (!fetchResult) {\r\n alert(\"Failed! Something is wrong!\");\r\n setSubmitting(false);\r\n return;\r\n }\r\n\r\n // Show dialog\r\n changeAppState(\"addCoinsDialogState\", {\r\n open: true,\r\n title: \"You got coins!\",\r\n coins: bonus.coins,\r\n });\r\n setSubmitting(false);\r\n }}\r\n >\r\n {localSubmitting === \"coin\" ? (\r\n \r\n ) : (\r\n \"Receive\"\r\n )}\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\nconst recordCardPadding = 5;\r\nconst useRecordStyles = makeStyles<\r\n Theme,\r\n { usernameWidth: number; hasBonus: boolean }\r\n>(theme => ({\r\n card: ({ hasBonus }) => ({\r\n margin: \"0 5px\",\r\n display: \"flex\",\r\n padding: recordCardPadding,\r\n height: 75,\r\n justifyContent: \"space-between\",\r\n width: \"calc(100% - 10px)\",\r\n position: \"relative\",\r\n overflow: \"visible\",\r\n border: hasBonus\r\n ? `solid 3px ${theme.palette.success.main}`\r\n : undefined,\r\n }),\r\n avatarAndNameContainer: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 10,\r\n marginLeft: 5,\r\n cursor: \"pointer\",\r\n },\r\n username: ({ usernameWidth }) => ({\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n maxWidth: usernameWidth,\r\n transition: \"all 500ms\",\r\n }),\r\n bothBonusRow: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"stretch\",\r\n gap: 5,\r\n },\r\n eachBonusRow: {\r\n height: 30,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-end\",\r\n gap: 15,\r\n },\r\n bonusTypeAndNumber: {\r\n display: \"flex\",\r\n alignItems: \"baseline\",\r\n justifyContent: \"center\",\r\n gap: 5,\r\n },\r\n bonusNumber: {\r\n fontWeight: \"bold\",\r\n color: theme.palette.success.main,\r\n },\r\n receiveButton: {\r\n maxHeight: 27,\r\n minHeight: 27,\r\n fontSize: \"15px !important\",\r\n lineHeight: 1,\r\n width: 90,\r\n },\r\n}));\r\n\r\nfunction useUsernameWidth() {\r\n const cardRef = useRef(null);\r\n const [usernameWidth, setUsernameWidth] = useState(300);\r\n const { screenWidth, screenHeight } = useScreenSize();\r\n useEffect(() => {\r\n const timeoutId = setTimeout(() => {\r\n const cardEl = cardRef.current;\r\n if (!cardEl) {\r\n return;\r\n }\r\n const dif = cardEl.scrollWidth - cardEl.clientWidth;\r\n if (dif > 0) {\r\n setUsernameWidth(usernameWidth - dif - 2 * recordCardPadding);\r\n }\r\n }, 500);\r\n return () => {\r\n clearTimeout(timeoutId);\r\n };\r\n }, [screenWidth, screenHeight, usernameWidth]);\r\n return { usernameWidth, cardRef };\r\n}\r\n\r\nasync function fetchClaimBonusCoins(\r\n userId: number,\r\n invitedGuestUserId: number,\r\n claimedBonusCoins: number\r\n) {\r\n const formData = new FormData();\r\n formData.append(\"userId\", userId.toString());\r\n formData.append(\"invitedGuestUserId\", invitedGuestUserId.toString());\r\n formData.append(\"claimedBonusCoins\", claimedBonusCoins.toString());\r\n\r\n const result = await fetchPostFormData<\r\n FetchResult<{ invitationBonusList: InvitationBonus[]; user: User }>\r\n >(\"api/InvitationCard/ClaimBonusCoins\", formData);\r\n if (\"error\" in result) {\r\n return false;\r\n }\r\n changeAppState(\"invitationBonusList\", result.invitationBonusList);\r\n changeAppState(\"user\", result.user);\r\n return true;\r\n}\r\n\r\nasync function fetchClaimBonusXp(\r\n userId: number,\r\n invitedGuestUserId: number,\r\n claimedBonusXp: number\r\n) {\r\n const formData = new FormData();\r\n formData.append(\"userId\", userId.toString());\r\n formData.append(\"invitedGuestUserId\", invitedGuestUserId.toString());\r\n formData.append(\"claimedBonusXp\", claimedBonusXp.toString());\r\n\r\n const result = await fetchPostFormData<\r\n FetchResult<{ invitationBonusList: InvitationBonus[] }>\r\n >(\"api/InvitationCard/ClaimBonusXp\", formData);\r\n if (\"error\" in result) {\r\n return false;\r\n }\r\n changeAppState(\"invitationBonusList\", result.invitationBonusList);\r\n return true;\r\n}\r\n","import { fetchPost } from \"../../../../../../../../../common/util/fetch\";\r\nimport { UserForRanking } from \"../../../../../../../../shared/User/types\";\r\n\r\nexport async function fetchUsersForRanking(\r\n userIds: number[]\r\n): Promise {\r\n if (userIds.length === 0) {\r\n return [];\r\n }\r\n\r\n const usersForRanking = await fetchPost(\r\n \"api/User/GetUsersForRankingFromIds\",\r\n userIds\r\n );\r\n\r\n if (\"error\" in usersForRanking) {\r\n return [];\r\n }\r\n return usersForRanking;\r\n}\r\n","import Card from \"@material-ui/core/Card\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport SendIcon from \"@material-ui/icons/Send\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { changeAppState } from \"../../../../../../../../../../common/appState\";\r\nimport { spaceBetween } from \"../../../../../../../../../../common/util/Array/spaceBetween\";\r\nimport { fetchPost } from \"../../../../../../../../../../common/util/fetch\";\r\nimport { UnfriendIcon } from \"../../../../../../../../../../icon/UnfriendIcon\";\r\nimport { DarkButton } from \"../../../../../../../../../shared/Button/DarkButton\";\r\nimport { EllipsisLabel } from \"../../../../../../../../../shared/EllipsisLabel/EllipsisLabel\";\r\nimport { DarkPopoverMenu } from \"../../../../../../../../../shared/Popover/DarkPopoverMenu\";\r\nimport { openOtherUserPanel } from \"../../../../../../../../../shared/User/OtherUserPanel/functions\";\r\nimport {\r\n RelatedUser,\r\n User,\r\n UserForFriendList,\r\n UserForRanking,\r\n} from \"../../../../../../../../../shared/User/types\";\r\nimport { UserAvatar } from \"../../../../../../../../../shared/User/UserAvatar/UserAvatar\";\r\n\r\nexport function FriendRecord({\r\n friend,\r\n colorNumber,\r\n user,\r\n scrollableContainerEl,\r\n}: {\r\n friend: UserForFriendList;\r\n user: User;\r\n colorNumber: number;\r\n scrollableContainerEl: HTMLDivElement | null;\r\n}) {\r\n const c = useStyles();\r\n\r\n const openUserPanel = () => {\r\n openOtherUserPanel(friend.userId);\r\n };\r\n\r\n const [alreadyFetched, isAlreadyFetched] = useState(false);\r\n useEffect(() => {\r\n if (friend.isNewFriend && user && !alreadyFetched) {\r\n isAlreadyFetched(true);\r\n fetchMakeFriendOld(user.userId, friend.userId);\r\n }\r\n }, [friend, user]);\r\n\r\n return (\r\n \r\n {friend.isNewFriend && (\r\n New\r\n )}\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {\r\n changeAppState(\"messagePanelState\", {\r\n targetUserId: friend.userId,\r\n });\r\n }}\r\n >\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\nconst useStyles = makeStyles(theme => ({\r\n card: {\r\n margin: 5,\r\n display: \"flex\",\r\n padding: 5,\r\n height: 50,\r\n justifyContent: \"center\",\r\n width: \"calc(100% - 10px)\",\r\n position: \"relative\",\r\n overflow: \"visible\",\r\n },\r\n new: {\r\n position: \"absolute\",\r\n top: 0,\r\n left: -5,\r\n backgroundColor: theme.palette.secondary.main,\r\n color: \"white\",\r\n padding: \"0 5px\",\r\n transform: \"rotate(-35deg)\",\r\n zIndex: 1,\r\n fontSize: \"small\",\r\n },\r\n avatarContainer: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n marginLeft: 5,\r\n marginRight: 20,\r\n minWidth: 35,\r\n cursor: \"pointer\",\r\n },\r\n nameAndIcons: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-around\",\r\n width: \"calc(100% - 65px)\",\r\n height: \"100%\",\r\n },\r\n name: {\r\n width: \"100%\",\r\n paddingRight: 20,\r\n maxWidth: \"100%\",\r\n overflow: \"hidden\",\r\n cursor: \"pointer\",\r\n },\r\n icons: {\r\n width: 70,\r\n marginRight: 10,\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n height: \"100%\",\r\n alignItems: \"center\",\r\n },\r\n iconButton: {\r\n minWidth: 30,\r\n minHeight: 30,\r\n maxWidth: 30,\r\n maxHeight: 30,\r\n margin: 5,\r\n lineHeight: 1,\r\n },\r\n}));\r\n\r\nfunction UnfriendIconButton({\r\n className,\r\n containerEl,\r\n friend,\r\n user,\r\n}: {\r\n className: string;\r\n containerEl: HTMLDivElement | null;\r\n friend: UserForRanking;\r\n user: User;\r\n}) {\r\n const buttonRef = useRef(null);\r\n const [isPopoverOpen, setPopoverOpen] = useState(false);\r\n const [submitting, setSubmitting] = useState(false);\r\n\r\n return (\r\n <>\r\n {\r\n setPopoverOpen(!isPopoverOpen);\r\n }}\r\n >\r\n \r\n \r\n {\r\n setPopoverOpen(false);\r\n }}\r\n items={[\r\n {\r\n label: \"Unfriend\",\r\n icon: ,\r\n onClick: async () => {\r\n setSubmitting(true);\r\n await fetchUnfriend(user.userId, friend.userId);\r\n setSubmitting(false);\r\n },\r\n },\r\n ]}\r\n disabled={submitting}\r\n />\r\n \r\n );\r\n}\r\n\r\nasync function fetchUnfriend(myUserId: number, toUserId: number) {\r\n const relatedUsers = await fetchPost<\r\n { myUserId: number; toUserId: number },\r\n RelatedUser[]\r\n >(\"api/Friend/Unfriend\", { myUserId, toUserId });\r\n\r\n if (\"error\" in relatedUsers) {\r\n return;\r\n }\r\n changeAppState(\"relatedUsers\", relatedUsers);\r\n}\r\n\r\nasync function fetchMakeFriendOld(myUserId: number, friendUserId: number) {\r\n const relatedUsers = await fetchPost<\r\n { myUserId: number; friendUserId: number },\r\n RelatedUser[]\r\n >(\"api/Friend/MakeFriendOld\", { myUserId, friendUserId });\r\n\r\n if (\"error\" in relatedUsers) {\r\n return;\r\n }\r\n changeAppState(\"relatedUsers\", relatedUsers);\r\n}\r\n","import Collapse from \"@material-ui/core/Collapse\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { changeAppState } from \"../../../../../../../../../../common/appState\";\r\nimport ShurikenProgress from \"../../../../../../../../../shared/Animations/ShurikenProgress\";\r\nimport { PrimaryButton } from \"../../../../../../../../../shared/Button/PrimaryButton\";\r\nimport {\r\n RelatedUser,\r\n User,\r\n UserForFriendList,\r\n} from \"../../../../../../../../../shared/User/types\";\r\nimport { fetchUsersForRanking } from \"../fetchUsersForRanking\";\r\nimport { FriendRecord } from \"./FriendRecord\";\r\n\r\nlet newFriendIds: number[] = [];\r\n\r\nexport function FriendsTab({\r\n friends,\r\n user,\r\n}: {\r\n friends: RelatedUser[];\r\n user: User;\r\n}) {\r\n const [usersForFriendList, setUsersForFriendList] = useState<\r\n UserForFriendList[] | \"loading\"\r\n >(\"loading\");\r\n\r\n useEffect(() => {\r\n return () => {\r\n newFriendIds = [];\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n fetchUsersForRanking(friends.map(f => f.userId)).then(u => {\r\n const _newFriendIds = friends\r\n .filter(f => f.isNewFriend)\r\n .map(f => f.userId);\r\n if (_newFriendIds.length > 0) {\r\n // Even when \"isNewFriend\" disappears because of the fetch, the status will be kept in front-end.\r\n newFriendIds = _newFriendIds;\r\n }\r\n setUsersForFriendList(\r\n u\r\n .map(f => ({\r\n ...f,\r\n isNewFriend: newFriendIds.includes(f.userId),\r\n }))\r\n .sort((a, b) => {\r\n if (a.isNewFriend === b.isNewFriend) {\r\n return 0;\r\n }\r\n return a.isNewFriend ? -1 : 1;\r\n })\r\n );\r\n });\r\n }, [friends]);\r\n\r\n return ;\r\n}\r\n\r\nfunction FriendList({\r\n friends,\r\n user,\r\n}: {\r\n friends: UserForFriendList[] | \"loading\";\r\n user: User;\r\n}) {\r\n const c = useStyles();\r\n const scrollableContainerRef = useRef(null);\r\n\r\n const isLoading = friends === \"loading\";\r\n\r\n return (\r\n
\r\n {isLoading && (\r\n \r\n )}\r\n \r\n {!isLoading &&\r\n friends.map((friend, i) => (\r\n \r\n ))}\r\n {!isLoading && friends.length === 0 && (\r\n
\r\n {\r\n changeAppState(\"activeUsersPanelState\", {\r\n open: true,\r\n });\r\n }}\r\n >\r\n Find New Friends!\r\n \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 height: 308,\r\n maxHeight: 308,\r\n flex: 1,\r\n fontSize: \"large\",\r\n overflowY: \"auto\",\r\n overflowX: \"hidden\",\r\n position: \"relative\",\r\n },\r\n noData: {\r\n width: \"100%\",\r\n height: 305,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n color: theme.palette.grey[600],\r\n },\r\n}));\r\n","export const Tab = {\r\n friends: \"friends\",\r\n requests: \"requests\",\r\n} as const;\r\nexport type Tab = typeof Tab[keyof typeof Tab];\r\n","import Card from \"@material-ui/core/Card\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\nimport { useRef, useState } from \"react\";\r\nimport { changeAppState } from \"../../../../../../../../../../common/appState\";\r\nimport { fetchPost } from \"../../../../../../../../../../common/util/fetch\";\r\nimport { DarkButton } from \"../../../../../../../../../shared/Button/DarkButton\";\r\nimport { PrimaryButton } from \"../../../../../../../../../shared/Button/PrimaryButton\";\r\nimport { EllipsisLabel } from \"../../../../../../../../../shared/EllipsisLabel/EllipsisLabel\";\r\nimport { DarkPopoverMenu } from \"../../../../../../../../../shared/Popover/DarkPopoverMenu\";\r\nimport { openOtherUserPanel } from \"../../../../../../../../../shared/User/OtherUserPanel/functions\";\r\nimport {\r\n RelatedUser,\r\n User,\r\n UserForRanking,\r\n} from \"../../../../../../../../../shared/User/types\";\r\nimport { UserAvatar } from \"../../../../../../../../../shared/User/UserAvatar/UserAvatar\";\r\n\r\nexport function RequestRecord({\r\n friend,\r\n colorNumber,\r\n user,\r\n scrollableContainerEl,\r\n}: {\r\n friend: UserForRanking;\r\n user: User;\r\n colorNumber: number;\r\n scrollableContainerEl: HTMLDivElement | null;\r\n}) {\r\n const c = useStyles();\r\n\r\n const openUserPanel = () => {\r\n openOtherUserPanel(friend.userId);\r\n };\r\n\r\n const [submitting, setSubmitting] = useState(false);\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {\r\n setSubmitting(true);\r\n await fetchApprove(user.userId, friend.userId);\r\n setSubmitting(false);\r\n }}\r\n disabled={submitting}\r\n >\r\n Confirm\r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\nconst useStyles = makeStyles({\r\n card: {\r\n margin: 5,\r\n display: \"flex\",\r\n padding: 5,\r\n height: 50,\r\n justifyContent: \"center\",\r\n width: \"calc(100% - 10px)\",\r\n },\r\n avatarContainer: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n marginRight: 10,\r\n minWidth: 35,\r\n cursor: \"pointer\",\r\n },\r\n nameAndButtons: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-around\",\r\n width: \"calc(100% - 65px)\",\r\n height: \"100%\",\r\n },\r\n name: {\r\n width: \"100%\",\r\n paddingRight: 10,\r\n maxWidth: \"100%\",\r\n overflow: \"hidden\",\r\n cursor: \"pointer\",\r\n },\r\n buttons: {\r\n width: 96,\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n height: \"100%\",\r\n alignItems: \"center\",\r\n },\r\n iconButton: {\r\n minWidth: 30,\r\n minHeight: 30,\r\n maxWidth: 30,\r\n maxHeight: 30,\r\n margin: 5,\r\n lineHeight: 1,\r\n },\r\n messageButton: {\r\n minWidth: 66,\r\n minHeight: 30,\r\n maxWidth: 66,\r\n maxHeight: 30,\r\n fontSize: \"small\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n },\r\n});\r\n\r\nfunction DeleteIconButton({\r\n className,\r\n containerEl,\r\n friend,\r\n user,\r\n submitting,\r\n setSubmitting,\r\n}: {\r\n className: string;\r\n containerEl: HTMLDivElement | null;\r\n friend: UserForRanking;\r\n user: User;\r\n submitting: boolean;\r\n setSubmitting: (submitting: boolean) => void;\r\n}) {\r\n const buttonRef = useRef(null);\r\n const [isPopoverOpen, setPopoverOpen] = useState(false);\r\n\r\n return (\r\n <>\r\n {\r\n setPopoverOpen(!isPopoverOpen);\r\n }}\r\n >\r\n \r\n \r\n {\r\n setPopoverOpen(false);\r\n }}\r\n items={[\r\n {\r\n label: \"Delete Request\",\r\n icon: ,\r\n onClick: async () => {\r\n setSubmitting(true);\r\n await fetchDecline(user.userId, friend.userId);\r\n setSubmitting(false);\r\n },\r\n },\r\n ]}\r\n disabled={submitting}\r\n />\r\n \r\n );\r\n}\r\n\r\nasync function fetchApprove(myUserId: number, requesterUserId: number) {\r\n const result = await fetchPost<\r\n { myUserId: number; requesterUserId: number },\r\n {\r\n friendsLimit: \"ok\" | \"MyFriendsLimit\" | \"TheirFriendsLimit\";\r\n relatedUsers: RelatedUser[];\r\n }\r\n >(\"api/Friend/ApproveFriendRequest\", { myUserId, requesterUserId });\r\n\r\n if (\"error\" in result) {\r\n return;\r\n }\r\n changeAppState(\"relatedUsers\", result.relatedUsers);\r\n\r\n switch (result.friendsLimit) {\r\n case \"MyFriendsLimit\": {\r\n changeAppState(\"friendsLimitDialogState\", { type: \"myLimit\" });\r\n break;\r\n }\r\n case \"TheirFriendsLimit\": {\r\n changeAppState(\"friendsLimitDialogState\", {\r\n type: \"theirLimit\",\r\n targetUserId: requesterUserId,\r\n });\r\n break;\r\n }\r\n }\r\n}\r\n\r\nasync function fetchDecline(myUserId: number, requesterUserId: number) {\r\n const relatedUsers = await fetchPost<\r\n { myUserId: number; requesterUserId: number },\r\n RelatedUser[]\r\n >(\"api/Friend/DeclineFriendRequest\", { myUserId, requesterUserId });\r\n\r\n if (\"error\" in relatedUsers) {\r\n return;\r\n }\r\n changeAppState(\"relatedUsers\", relatedUsers);\r\n}\r\n","import Collapse from \"@material-ui/core/Collapse\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport ShurikenProgress from \"../../../../../../../../../shared/Animations/ShurikenProgress\";\r\nimport {\r\n RelatedUser,\r\n User,\r\n UserForRanking,\r\n} from \"../../../../../../../../../shared/User/types\";\r\nimport { Tab } from \"../../types\";\r\nimport { fetchUsersForRanking } from \"../fetchUsersForRanking\";\r\nimport { RequestRecord } from \"./RequestRecord\";\r\n\r\nexport function RequestsTab({\r\n requestedUsers,\r\n user,\r\n setCurrentTab,\r\n}: {\r\n requestedUsers: RelatedUser[];\r\n user: User;\r\n setCurrentTab: (tab: Tab) => void;\r\n}) {\r\n const [friendsForRanking, setFriendsForRanking] = useState<\r\n UserForRanking[] | \"loading\"\r\n >(\"loading\");\r\n\r\n const userIds = requestedUsers.map(f => f.userId);\r\n useEffect(() => {\r\n fetchUsersForRanking(userIds).then(u => {\r\n setFriendsForRanking(u);\r\n });\r\n }, [requestedUsers]);\r\n\r\n const _friendsForRanking =\r\n friendsForRanking === \"loading\"\r\n ? \"loading\"\r\n : friendsForRanking.filter(f => userIds.includes(f.userId)); // Filter to remove record immediately when it's approved\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction RequestList({\r\n requestedUsers,\r\n user,\r\n setCurrentTab,\r\n}: {\r\n requestedUsers: UserForRanking[] | \"loading\";\r\n user: User;\r\n setCurrentTab: (tab: Tab) => void;\r\n}) {\r\n const c = useStyles();\r\n const scrollableContainerRef = useRef(null);\r\n\r\n const isLoading = requestedUsers === \"loading\";\r\n\r\n const hasRequest = !isLoading && requestedUsers.length > 0;\r\n const [hadRequestOnce, setHadRequestOnce] = useState(false);\r\n useEffect(() => {\r\n if (isLoading) {\r\n return;\r\n }\r\n if (hasRequest) {\r\n setHadRequestOnce(true); // Prevent to change tab after the first render\r\n return;\r\n }\r\n if (!hadRequestOnce) {\r\n return;\r\n }\r\n // Change the tab after the last Friend Request is approved or deleted\r\n setCurrentTab(Tab.friends);\r\n }, [isLoading, hasRequest, setCurrentTab]);\r\n\r\n return (\r\n
\r\n {isLoading && (\r\n \r\n )}\r\n \r\n {!isLoading &&\r\n requestedUsers.map((friend, i) => (\r\n \r\n ))}\r\n {!isLoading && requestedUsers.length === 0 && (\r\n
No Data
\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 height: 308,\r\n maxHeight: 308,\r\n flex: 1,\r\n fontSize: \"large\",\r\n overflowY: \"auto\",\r\n overflowX: \"hidden\",\r\n position: \"relative\",\r\n },\r\n noData: {\r\n width: \"100%\",\r\n height: 305,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n color: theme.palette.grey[600],\r\n },\r\n}));\r\n","import { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport PersonAddIcon from \"@material-ui/icons/PersonAdd\";\r\nimport { changeAppState } from \"../../../../../../../../common/appState\";\r\nimport { SuccessButton } from \"../../../../../../../shared/Button/SuccessButton\";\r\n\r\nexport function FindFriendsButton({ noFriend }: { noFriend: boolean }) {\r\n const c = useStyles({ noFriend });\r\n return (\r\n
\r\n }\r\n onClick={() => {\r\n changeAppState(\"activeUsersPanelState\", { open: true });\r\n }}\r\n >\r\n Find new friends\r\n \r\n
\r\n );\r\n}\r\nconst useStyles = makeStyles({\r\n container: ({ noFriend }) => ({\r\n marginBottom: noFriend ? 0 : 5,\r\n marginTop: noFriend ? 0 : 10,\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n width: \"100%\",\r\n maxHeight: noFriend ? 0 : 30,\r\n transition: \"all 500ms\",\r\n }),\r\n button: ({ noFriend }) => ({\r\n maxHeight: noFriend ? 0 : 30,\r\n minHeight: noFriend ? 0 : 30,\r\n padding: noFriend ? 0 : \"6px 16px\",\r\n opacity: noFriend ? 0 : 1,\r\n fontSize: \"15px !important\",\r\n lineHeight: 1,\r\n }),\r\n});\r\n\r\n","import Box from \"@material-ui/core/Box\";\r\nimport Card from \"@material-ui/core/Card\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport MuiTab from \"@material-ui/core/Tab\";\r\nimport FriendIcon from \"@material-ui/icons/People\";\r\nimport TabContext from \"@material-ui/lab/TabContext\";\r\nimport TabList from \"@material-ui/lab/TabList\";\r\nimport TabPanel from \"@material-ui/lab/TabPanel\";\r\nimport { RefObject, useEffect, useMemo, useState } from \"react\";\r\nimport {\r\n getFriends,\r\n getRequestedUsers,\r\n useRelatedUsers,\r\n} from \"../../../../../../../../common/hooks/useRelatedUsers\";\r\nimport { AlertIcon } from \"../../../../../../../../icon/AlertIcon\";\r\nimport { RelatedUser, User } from \"../../../../../../../shared/User/types\";\r\nimport { InitialView } from \"../../../MyPageTop/types\";\r\nimport { OpenableCard } from \"../OpenableCard\";\r\nimport { FriendsTab } from \"./components/FriendsTab/FriendsTab\";\r\nimport { RequestsTab } from \"./components/RequestsTab/RequestsTab\";\r\nimport { FindFriendsButton } from \"./FindFriendsButton\";\r\nimport { Tab } from \"./types\";\r\n\r\nexport function FriendsCard({\r\n user,\r\n initialView,\r\n scrollableContainerRef,\r\n}: {\r\n user: User;\r\n initialView?: InitialView;\r\n scrollableContainerRef: RefObject;\r\n}) {\r\n const [open, setOpen] = useState(false);\r\n const { relatedUsers } = useRelatedUsers();\r\n const { friends, requestedUsers } = useMemo(\r\n () => ({\r\n ...getFriends(relatedUsers),\r\n ...getRequestedUsers(relatedUsers),\r\n }),\r\n [relatedUsers]\r\n );\r\n\r\n const [currentTab, setCurrentTab] = useState(Tab.friends);\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n if (requestedUsers.length > 0) {\r\n setCurrentTab(Tab.requests);\r\n }\r\n }, [open, relatedUsers.length > 0]); // Check relatedUsers' length to detect the user's login\r\n\r\n const c = useStyles();\r\n\r\n return (\r\n \r\n Friends:{\" \"}\r\n {friends.length}\r\n \r\n }\r\n icon={}\r\n saveKey=\"MyPageFriendsCard\"\r\n id=\"MyPageFriendsCard\"\r\n open={open}\r\n setOpen={setOpen}\r\n alwaysShowIcon\r\n alwaysShowTitle\r\n initiallyOpenedId={initialView}\r\n exclamationMark={requestedUsers.length > 0}\r\n scrollableContainerRef={scrollableContainerRef}\r\n >\r\n \r\n \r\n );\r\n}\r\nconst useStyles = makeStyles(theme => ({\r\n titleNumber: { color: theme.palette.success.dark },\r\n}));\r\n\r\nfunction TabsContainer({\r\n requestedUsers,\r\n friends,\r\n user,\r\n currentTab,\r\n setCurrentTab,\r\n}: {\r\n requestedUsers: RelatedUser[];\r\n friends: RelatedUser[];\r\n user: User;\r\n currentTab: Tab;\r\n setCurrentTab: (tab: Tab) => void;\r\n}) {\r\n const c = useTabsContainerStyles();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {\r\n setCurrentTab(newTab);\r\n }}\r\n aria-label=\"Friends\"\r\n centered\r\n textColor=\"primary\"\r\n indicatorColor=\"primary\"\r\n variant=\"fullWidth\"\r\n >\r\n \r\n 0 ? (\r\n \r\n ) : (\r\n \"Requests\"\r\n )\r\n }\r\n value={Tab.requests}\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\n );\r\n}\r\nconst useTabsContainerStyles = makeStyles(theme => ({\r\n container: {\r\n backgroundColor: theme.palette.grey[100],\r\n padding: 5,\r\n borderTopRightRadius: 0,\r\n borderTopLeftRadius: 0,\r\n },\r\n tab: { padding: 0 },\r\n}));\r\n\r\nfunction RequestTabLabelWithAlert() {\r\n const c = useRequestTabLabelStyles();\r\n return (\r\n
\r\n Requests\r\n \r\n
\r\n );\r\n}\r\nconst useRequestTabLabelStyles = makeStyles(theme => ({\r\n redTitleContainer: {\r\n color: theme.palette.secondary.main,\r\n fontWeight: \"bold\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n position: \"relative\",\r\n },\r\n alertIcon: {\r\n position: \"absolute\",\r\n right: -25,\r\n top: -1.5,\r\n },\r\n}));\r\n","import { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport KeyboardArrowRightIcon from \"@material-ui/icons/KeyboardArrowRight\";\r\nimport StorefrontIcon from \"@material-ui/icons/Storefront\";\r\nimport { changeAppState } from \"../../../../../../../../../common/appState\";\r\nimport { SuccessButton } from \"../../../../../../../../shared/Button/SuccessButton\";\r\n\r\nexport function ItemShopButton({ noItem }: { noItem: boolean }) {\r\n const c = useStyles({ noItem });\r\n return (\r\n
\r\n }\r\n endIcon={}\r\n onClick={() => {\r\n changeAppState(\"shopPanelState\", { open: true });\r\n }}\r\n >\r\n Item Shop\r\n \r\n
\r\n );\r\n}\r\nconst useStyles = makeStyles({\r\n container: ({ noItem }) => ({\r\n marginBottom: 10,\r\n marginTop: 5,\r\n display: \"flex\",\r\n justifyContent: noItem ? \"center\" : \"flex-end\",\r\n alignItems: \"center\",\r\n width: \"100%\",\r\n height: noItem ? 100 : undefined,\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 Card from \"@material-ui/core/Card\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { appsPublicImg } from \"../../../../../../../../../common/consts\";\r\nimport ShurikenProgress from \"../../../../../../../../shared/Animations/ShurikenProgress\";\r\nimport {\r\n PrimaryButton,\r\n PrimaryButtonProps,\r\n} from \"../../../../../../../../shared/Button/PrimaryButton\";\r\nimport { DarkPopoverMenu } from \"../../../../../../../../shared/Popover/DarkPopoverMenu\";\r\nimport { User } from \"../../../../../../../../shared/User/types\";\r\nimport { Item } from \"../items/Item\";\r\nimport { PossessedItem } from \"../items/types\";\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 isNew: _isNew,\r\n isAdded: _isAdded,\r\n num,\r\n possessedItems,\r\n isFocused,\r\n user,\r\n}: {\r\n item: Item;\r\n isNew: boolean;\r\n isAdded: boolean;\r\n num: number;\r\n possessedItems: PossessedItem[];\r\n isFocused: boolean;\r\n user: User;\r\n}) {\r\n const [isNew, setNew] = useState(false);\r\n useEffect(() => {\r\n if (_isNew) {\r\n setNew(true);\r\n }\r\n }, [_isNew]);\r\n\r\n const [isAdded, setAdded] = useState(false);\r\n useEffect(() => {\r\n if (_isAdded) {\r\n setAdded(true);\r\n }\r\n }, [_isAdded]);\r\n\r\n const c = useStyles({ isFocused });\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n
× {num}
\r\n {isAdded && !isNew && (\r\n Added\r\n )}\r\n
\r\n
\r\n
\r\n
{item.name}
\r\n {isNew && New}\r\n
{item.getExplanation(user)}
\r\n \r\n
\r\n
\r\n );\r\n}\r\nconst useStyles = makeStyles(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 added: {\r\n backgroundColor: theme.palette.secondary.main,\r\n color: \"white\",\r\n padding: \"0 5px\",\r\n fontSize: \"12px\",\r\n position: \"relative\",\r\n top: -1,\r\n },\r\n rightBlock: { padding: 5, position: \"relative\", width: \"100%\" },\r\n itemName: {\r\n fontWeight: \"bold\",\r\n fontSize: \"large\",\r\n marginBottom: 2,\r\n },\r\n new: {\r\n position: \"absolute\",\r\n top: 6,\r\n right: 3,\r\n backgroundColor: theme.palette.secondary.main,\r\n transform: \"rotate(20deg)\",\r\n color: \"white\",\r\n padding: \"0 5px\",\r\n fontSize: \"small\",\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}));\r\n\r\nfunction ItemUseButton({\r\n item,\r\n possessedItems,\r\n itemCount,\r\n}: {\r\n item: Item;\r\n possessedItems: PossessedItem[];\r\n itemCount: number;\r\n}) {\r\n const [submitting, setSubmitting] = useState(false);\r\n const c = useItemUseButtonStyles();\r\n const buttonRef = useRef(null);\r\n const containerRef = useRef(null);\r\n const [isMenuOpen, setMenuOpen] = useState(false);\r\n\r\n const useItems = async (count: number) => {\r\n setSubmitting(true);\r\n await item.use(\r\n possessedItems.map(({ item }) => item.key),\r\n count\r\n );\r\n setSubmitting(false);\r\n };\r\n\r\n const buttonProps: PrimaryButtonProps = {\r\n className: c.button,\r\n size: \"small\",\r\n onClick: () => {\r\n if (itemCount === 1 || item.shouldUseOneByOne) {\r\n useItems(1);\r\n return;\r\n }\r\n setMenuOpen(true);\r\n },\r\n disabled: submitting,\r\n children: submitting ? : \"Use\",\r\n ref: buttonRef,\r\n };\r\n const button = item.UseButton ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n return (\r\n
\r\n {button}\r\n {\r\n setMenuOpen(false);\r\n }}\r\n items={[\r\n {\r\n label: \"Use one\",\r\n onClick: () => {\r\n useItems(1);\r\n },\r\n },\r\n {\r\n label: \"Use all\",\r\n onClick: () => {\r\n useItems(itemCount);\r\n },\r\n },\r\n ]}\r\n disabled={submitting}\r\n />\r\n
\r\n );\r\n}\r\nconst useItemUseButtonStyles = makeStyles({\r\n button: {\r\n position: \"absolute\",\r\n bottom: 5,\r\n right: 5,\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","import Card from \"@material-ui/core/Card\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { orderByBoolean } from \"../../../../../../../../../common/util/Array/orderByBoolean\";\r\nimport { User } from \"../../../../../../../../shared/User/types\";\r\nimport { ItemKey, PossessedItem } from \"../items/types\";\r\nimport { ItemShopButton } from \"./ItemShopButton\";\r\nimport { Record } from \"./Record\";\r\n\r\nexport function ItemList({\r\n possessedItems,\r\n itemKeyToFocus,\r\n user,\r\n}: {\r\n possessedItems: PossessedItem[];\r\n itemKeyToFocus?: ItemKey;\r\n user: User;\r\n}) {\r\n const c = useStyles();\r\n const { fixedItemKeyToFocus } = useFixedItemKeyToFocus(itemKeyToFocus);\r\n\r\n return (\r\n \r\n \r\n\r\n {orderByBoolean(\r\n possessedItems,\r\n item => item.item.key === fixedItemKeyToFocus\r\n ).map(({ item, num, isNew, isAdded }) => (\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 overflowY: \"auto\",\r\n maxHeight: 308,\r\n borderTopRightRadius: 0,\r\n borderTopLeftRadius: 0,\r\n },\r\n}));\r\n\r\nfunction useFixedItemKeyToFocus(itemKeyToFocus?: ItemKey) {\r\n /**\r\n * After scrolling, itemKeyToFocus will be cleared. So, keep the fixed value.\r\n */\r\n const [fixedItemKeyToFocus, setFixedItemKeyToFocus] = useState<\r\n ItemKey | undefined\r\n >(undefined);\r\n\r\n useEffect(() => {\r\n if (!itemKeyToFocus) {\r\n return;\r\n }\r\n setFixedItemKeyToFocus(itemKeyToFocus);\r\n }, [itemKeyToFocus]);\r\n\r\n return { fixedItemKeyToFocus };\r\n}\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport BusinessCenterIcon from \"@material-ui/icons/BusinessCenter\";\r\nimport { RefObject, useEffect, useState } from \"react\";\r\nimport { useAppState } from \"../../../../../../../../common/appState\";\r\nimport { fetchPost } from \"../../../../../../../../common/util/fetch\";\r\nimport { User } from \"../../../../../../../shared/User/types\";\r\nimport { InitialView } from \"../../../MyPageTop/types\";\r\nimport { OpenableCard } from \"../OpenableCard\";\r\nimport { ItemList } from \"./ItemList/List\";\r\nimport { setItemsFromServerSide } from \"./items\";\r\nimport { ItemKey, PossessedItem_ServerSide } from \"./items/types\";\r\n\r\nconst cardId = \"MyPageItemsCard\";\r\n\r\nexport function ItemsCard({\r\n user,\r\n initialView,\r\n scrollableContainerRef,\r\n itemKeyToFocus,\r\n}: {\r\n user: User;\r\n initialView?: InitialView;\r\n scrollableContainerRef: RefObject;\r\n itemKeyToFocus?: ItemKey;\r\n}) {\r\n const [open, setOpen] = useState(false);\r\n const [possessedItems] = useAppState(\"items\");\r\n const { itemCount, exclamationMark } = possessedItems.reduce(\r\n (acc, item) => ({\r\n itemCount: acc.itemCount + item.num,\r\n exclamationMark: acc.exclamationMark || item.isNew || item.isAdded,\r\n }),\r\n { itemCount: 0, exclamationMark: false }\r\n );\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n if (!possessedItems.some(item => item.isNew || item.isAdded)) {\r\n return;\r\n }\r\n fetchItemSeen(\r\n user.userId,\r\n possessedItems.map(({ item }) => item.key)\r\n );\r\n }, [possessedItems, open, user]);\r\n\r\n const c = useStyles();\r\n\r\n return (\r\n \r\n Items: {itemCount}\r\n \r\n }\r\n icon={}\r\n saveKey={cardId}\r\n id={cardId}\r\n open={open}\r\n setOpen={setOpen}\r\n alwaysShowIcon\r\n alwaysShowTitle\r\n initiallyOpenedId={initialView}\r\n scrollableContainerRef={scrollableContainerRef}\r\n exclamationMark={exclamationMark}\r\n >\r\n \r\n \r\n );\r\n}\r\nconst useStyles = makeStyles(theme => ({\r\n titleNumber: { color: theme.palette.success.dark },\r\n}));\r\n\r\nasync function fetchItemSeen(userId: number, originalOrderedKeys: ItemKey[]) {\r\n const items = await fetchPost(\r\n \"api/Item/SetItemSeen\",\r\n userId\r\n );\r\n if (\"error\" in items) {\r\n return;\r\n }\r\n setItemsFromServerSide(items, originalOrderedKeys);\r\n}\r\n","import Card from \"@material-ui/core/Card\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { changeAppState } from \"../../../../../../../../common/appState\";\r\nimport { spaceBetween } from \"../../../../../../../../common/util/Array/spaceBetween\";\r\nimport { EllipsisLabel } from \"../../../../../../../shared/EllipsisLabel/EllipsisLabel\";\r\nimport { UserForMessageList } from \"../../../../../../../shared/User/types\";\r\nimport { UserAvatar } from \"../../../../../../../shared/User/UserAvatar/UserAvatar\";\r\n\r\nexport function MessagedUserRecord({\r\n messagedUser,\r\n colorNumber,\r\n}: {\r\n messagedUser: UserForMessageList;\r\n colorNumber: number;\r\n}) {\r\n const c = useStyles();\r\n\r\n const openMessagePanel = () => {\r\n changeAppState(\"messagePanelState\", {\r\n targetUserId: messagedUser.userId,\r\n targetUserIconColorNumber: colorNumber,\r\n });\r\n };\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {messagedUser.unreadMessageCount > 0 && (\r\n \r\n New\r\n \r\n )}\r\n \r\n {messagedUser.unreadMessageCount || \"\"}\r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\nconst useStyles = makeStyles(theme => ({\r\n card: {\r\n margin: 5,\r\n display: \"flex\",\r\n padding: 5,\r\n height: 50,\r\n justifyContent: \"center\",\r\n width: \"calc(100% - 10px)\",\r\n position: \"relative\",\r\n overflow: \"visible\",\r\n cursor: \"pointer\",\r\n },\r\n avatarContainer: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n marginLeft: 5,\r\n marginRight: 20,\r\n minWidth: 35,\r\n cursor: \"pointer\",\r\n },\r\n nameAndCount: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-around\",\r\n width: \"calc(100% - 65px)\",\r\n height: \"100%\",\r\n },\r\n name: {\r\n width: \"100%\",\r\n paddingRight: 20,\r\n maxWidth: \"100%\",\r\n overflow: \"hidden\",\r\n cursor: \"pointer\",\r\n },\r\n new: {\r\n position: \"absolute\",\r\n top: -10,\r\n right: -20,\r\n backgroundColor: theme.palette.secondary.main,\r\n color: \"white\",\r\n padding: \"0 5px\",\r\n transform: \"rotate(15deg)\",\r\n zIndex: 1,\r\n fontSize: \"small\",\r\n },\r\n unreadCount: {\r\n width: 70,\r\n marginRight: 10,\r\n display: \"flex\",\r\n justifyContent: \"flex-end\",\r\n height: \"100%\",\r\n alignItems: \"center\",\r\n color: theme.palette.secondary.main,\r\n position: \"relative\",\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 SendIcon from \"@material-ui/icons/Send\";\r\nimport { RefObject, useEffect, useMemo, useState } from \"react\";\r\nimport { useAppState } from \"../../../../../../../../common/appState\";\r\nimport { fetchPost } from \"../../../../../../../../common/util/fetch\";\r\nimport ShurikenProgress from \"../../../../../../../shared/Animations/ShurikenProgress\";\r\nimport {\r\n User,\r\n UserForMessageList,\r\n UserForRanking,\r\n} from \"../../../../../../../shared/User/types\";\r\nimport { InitialView } from \"../../../MyPageTop/types\";\r\nimport { OpenableCard } from \"../OpenableCard\";\r\nimport { MessagedUserRecord } from \"./MessageUserRecord\";\r\n\r\nexport function MessagesCard({\r\n user,\r\n initialView,\r\n scrollableContainerRef,\r\n}: {\r\n user: User;\r\n initialView?: InitialView;\r\n scrollableContainerRef: RefObject;\r\n}) {\r\n const [open, setOpen] = useState(false);\r\n const [unreadMessages] = useAppState(\"unreadMessages\");\r\n const [users, setUsers] = useState(\"loading\");\r\n const [isTemporallyData, setIsTemporallyData] = useState(false);\r\n\r\n const strUserIdsWhoSentUnreadMessages = useMemo(\r\n () =>\r\n Array.from(new Set(unreadMessages.map(m => m.fromUserId)))\r\n .sort()\r\n .join(\",\"),\r\n unreadMessages\r\n );\r\n\r\n const { userId } = user;\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n sFetchUsersWhoSentMessages(userId, setUsers, setIsTemporallyData);\r\n }, [userId, open, strUserIdsWhoSentUnreadMessages]);\r\n\r\n const c = useStyles();\r\n\r\n const usersForMessageList =\r\n users === \"loading\"\r\n ? \"loading\"\r\n : users\r\n .map(u => ({\r\n ...u,\r\n unreadMessageCount: unreadMessages.filter(\r\n m => m.fromUserId === u.userId\r\n ).length,\r\n }))\r\n .sort((a, b) => b.unreadMessageCount - a.unreadMessageCount);\r\n\r\n return (\r\n \r\n Messages\r\n {unreadMessages.length > 0 && (\r\n <>\r\n {\": \"}\r\n \r\n {unreadMessages.length}\r\n \r\n \r\n )}\r\n \r\n }\r\n icon={}\r\n saveKey=\"MyPageMessagesCard\"\r\n id=\"MyPageMessagesCard\"\r\n open={open}\r\n setOpen={setOpen}\r\n alwaysShowIcon\r\n alwaysShowTitle\r\n initiallyOpenedId={initialView}\r\n exclamationMark={unreadMessages.length > 0}\r\n scrollableContainerRef={scrollableContainerRef}\r\n >\r\n \r\n \r\n );\r\n}\r\nconst useStyles = makeStyles(theme => ({\r\n titleNumber: { color: theme.palette.secondary.main },\r\n}));\r\n\r\nconst usersWhoSentMessagesKey = \"usersWhoSentMessagesListKey\";\r\nasync function sFetchUsersWhoSentMessages(\r\n myUserId: number,\r\n setUsers: (users: UserForRanking[] | \"loading\") => void,\r\n setIsTemporallyData: (isTemporallyData: boolean) => void\r\n) {\r\n const savedData = localStorage.getItem(usersWhoSentMessagesKey);\r\n if (savedData) {\r\n setUsers(JSON.parse(savedData)); // 保存されたものがあれば、一旦ここでセットする。しかし、以下で最新情報の取得も継続する。\r\n setIsTemporallyData(true);\r\n }\r\n\r\n // ブロックしないように、Asyncの即時関数として実行\r\n (async () => {\r\n const usersForRanking = await fetchPost(\r\n \"api/Message/GetUsersWhoSentMessages\",\r\n myUserId\r\n );\r\n\r\n if (\"error\" in usersForRanking) {\r\n setUsers([]);\r\n setIsTemporallyData(false);\r\n return;\r\n }\r\n setUsers(usersForRanking);\r\n setIsTemporallyData(false);\r\n\r\n localStorage.setItem(\r\n usersWhoSentMessagesKey,\r\n JSON.stringify(usersForRanking)\r\n );\r\n })();\r\n}\r\n\r\nfunction MessagedUserList({\r\n messagedUsers,\r\n isTemporallyData,\r\n}: {\r\n messagedUsers: UserForMessageList[] | \"loading\";\r\n isTemporallyData: boolean;\r\n}) {\r\n const c = useListStyles();\r\n\r\n return (\r\n \r\n {messagedUsers === \"loading\" ? (\r\n \r\n ) : (\r\n <>\r\n \r\n \r\n \r\n {messagedUsers.map((messagedUser, i) => (\r\n \r\n ))}\r\n {messagedUsers.length === 0 && (\r\n
No Data
\r\n )}\r\n \r\n )}\r\n
\r\n );\r\n}\r\nconst useListStyles = makeStyles(theme => ({\r\n container: {\r\n backgroundColor: theme.palette.grey[100],\r\n height: 308,\r\n maxHeight: 308,\r\n flex: 1,\r\n fontSize: \"large\",\r\n overflowY: \"auto\",\r\n overflowX: \"hidden\",\r\n position: \"relative\",\r\n margin: 5,\r\n },\r\n noData: {\r\n width: \"100%\",\r\n height: 305,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n color: theme.palette.grey[600],\r\n },\r\n shuriken: { marginTop: 135 },\r\n shurikenInList: { margin: \"15px 0 10px\" },\r\n}));\r\n","import { Theme } from \"@material-ui/core/styles\";\r\nimport RunningIcon from \"@material-ui/icons/DirectionsRun\";\r\nimport { makeStyles } from \"@material-ui/styles\";\r\nimport { RefObject, useState } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { bindActionCreators } from \"redux\";\r\nimport { closeAllRightPanels } from \"../../../../../../../common/appState\";\r\nimport * as vocabStore from \"../../../../../../../store/VocabQuizStore\";\r\nimport { ApplicationState } from \"../../../../../../../store/configureStore\";\r\nimport { Link } from \"../../../../../../shared/Link/LinkWithYouTube\";\r\nimport { InitialView } from \"../../MyPageTop/types\";\r\nimport \"../../style.css\";\r\nimport { useProgress } from \"../../useProgress\";\r\nimport { OpenableCard } from \"./OpenableCard\";\r\n\r\ntype CardsOuterProps = {\r\n initialView?: InitialView;\r\n scrollableContainerRef: RefObject;\r\n};\r\ntype CardsInnerProps = CardsOuterProps &\r\n vocabStore.IVocabQuizState &\r\n vocabStore.ActionCreators;\r\n\r\nexport const ProgressCard = connect(\r\n (state: ApplicationState) => state.vocabQuiz,\r\n dispatch => bindActionCreators(vocabStore.actionCreators, dispatch)\r\n)(function ({\r\n loadAllGenres,\r\n allGenres,\r\n initialView,\r\n scrollableContainerRef,\r\n}: CardsInnerProps) {\r\n const {\r\n hiraganaProgress,\r\n katakanaProgress,\r\n vocabProgress,\r\n enToHiraganaProgress,\r\n enToKanjiProgress,\r\n kanjiProgress,\r\n actionGameProgress,\r\n grammarProgress,\r\n totalProgress,\r\n } = useProgress(loadAllGenres, allGenres);\r\n\r\n const tableContents: {\r\n name: string;\r\n link: string;\r\n progress: string;\r\n }[] = [\r\n {\r\n name: \"Hiragana Quiz:\",\r\n link: \"/hiragana-quiz\",\r\n progress: `${hiraganaProgress}%`,\r\n },\r\n {\r\n name: \"Katakana Quiz:\",\r\n link: \"/katakana-quiz\",\r\n progress: `${katakanaProgress}%`,\r\n },\r\n {\r\n name: \"Grammar Test:\",\r\n link: \"/grammar\",\r\n progress: `${grammarProgress}%`,\r\n },\r\n {\r\n name: \"Vocab Quiz:\",\r\n link: \"/vocabulary-quiz\",\r\n progress: `${vocabProgress}%`,\r\n },\r\n {\r\n name: \"English to Hiragana:\",\r\n link: \"/EnToHiragana-quiz\",\r\n progress: `${enToHiraganaProgress}%`,\r\n },\r\n {\r\n name: \"English to Kanji:\",\r\n link: \"/EnToKanji-quiz\",\r\n progress: `${enToKanjiProgress}%`,\r\n },\r\n {\r\n name: \"Kanji to Hiragana:\",\r\n link: \"/kanji-quiz\",\r\n progress: `${kanjiProgress}%`,\r\n },\r\n {\r\n name: \"Action Game:\",\r\n link: \"/ninja\",\r\n progress: `${actionGameProgress}/3`,\r\n },\r\n ];\r\n\r\n const [open, setOpen] = useState(false);\r\n\r\n const c = useStyles();\r\n\r\n return (\r\n \r\n Progress:{\" \"}\r\n {totalProgress}%\r\n \r\n }\r\n icon={}\r\n saveKey=\"MyPageProgressPercentageCard\"\r\n id=\"MyPageProgressPercentageCard\"\r\n open={open}\r\n setOpen={setOpen}\r\n initiallyOpenedId={initialView}\r\n scrollableContainerRef={scrollableContainerRef}\r\n alwaysShowIcon\r\n >\r\n
\r\n

{\"Your Progress\"}

\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n {tableContents.map(co => (\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
{\"Total:\"}\r\n {totalProgress}%\r\n
{co.name}\r\n \r\n {co.progress}\r\n \r\n
\r\n
\r\n \r\n );\r\n});\r\nconst useStyles = makeStyles(theme => ({\r\n container: {\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n marginBottom: 30,\r\n },\r\n titlePercentage: { color: theme.palette.success.dark },\r\n}));\r\n","import {\r\n changeAppState,\r\n getAppState,\r\n} from \"../../../../../../../../common/appState\";\r\nimport { fetchPost } from \"../../../../../../../../common/util/fetch\";\r\nimport { excludedAchievements } from \"../../../../../../../shared/User/OtherUserPanel/getUserStudyAchievements\";\r\nimport { User } from \"../../../../../../../shared/User/types\";\r\nimport { questsManager, setQuestState } from \"./quests/quests\";\r\nimport { TransitionFunc } from \"./quests/types\";\r\n\r\nexport async function claimRewardCoin(\r\n setSubmitting: (submitting: boolean) => void,\r\n quests: {\r\n questKey: string;\r\n questTitle: string;\r\n coins: number;\r\n transitionTarget: string | TransitionFunc;\r\n }[]\r\n) {\r\n const user = getAppState().user;\r\n if (!user) {\r\n return;\r\n }\r\n\r\n setSubmitting(true);\r\n changeAppState(\"addCoinsDialogState\", {\r\n open: true,\r\n title: quests.length === 1 ? \"You got a reward!\" : \"You got rewards!\",\r\n coins: quests.reduce((acc, val) => acc + val.coins, 0),\r\n });\r\n await fetchClaimRewardCoin(user.userId, quests);\r\n setSubmitting(false);\r\n}\r\n\r\nasync function fetchClaimRewardCoin(\r\n myUserId: number,\r\n quests: {\r\n questKey: string;\r\n questTitle: string;\r\n coins: number;\r\n transitionTarget: string | TransitionFunc;\r\n }[]\r\n) {\r\n const result = await fetchPost<\r\n {\r\n myUserId: number;\r\n quests: {\r\n questKey: string;\r\n questTitle: string;\r\n coins: number;\r\n transitionTarget: string;\r\n isStudyQuest: boolean;\r\n }[];\r\n },\r\n { user: User; claimedQuestKeys: string[] }\r\n >(\"api/Quest/ClaimRewardCoin\", {\r\n myUserId,\r\n quests: quests.map(quest => ({\r\n ...quest,\r\n transitionTarget:\r\n typeof quest.transitionTarget === \"string\"\r\n ? quest.transitionTarget\r\n : \"\",\r\n isStudyQuest:\r\n questsManager\r\n .getStudyQuests()\r\n .some(q => q.questKey === quest.questKey) &&\r\n !excludedAchievements.includes(quest.questKey),\r\n })),\r\n });\r\n\r\n if (\"error\" in result) {\r\n return;\r\n }\r\n changeAppState(\"user\", result.user);\r\n setQuestState(result.claimedQuestKeys);\r\n}\r\n","import Collapse from \"@material-ui/core/Collapse\";\nimport { Theme, makeStyles } from \"@material-ui/core/styles\";\nimport KeyboardArrowRightIcon from \"@material-ui/icons/KeyboardArrowRight\";\nimport MonetizationOnIcon from \"@material-ui/icons/MonetizationOn\";\nimport { SuccessButton } from \"../../../../../../../shared/Button/SuccessButton\";\nimport { claimRewardCoin } from \"./functions\";\nimport { ClearedQuest } from \"./quests/types\";\n\nexport const claimAllButtonKey = \"claimAllButtonKey\";\n\nexport function ClaimAllButton({\n submitting,\n setSubmitting,\n clearedQuests,\n}: {\n submitting: boolean;\n setSubmitting: (submitting: boolean) => void;\n clearedQuests: ClearedQuest[];\n}) {\n const rewardTargets = clearedQuests.filter(q => !q.claimed);\n const isShown = rewardTargets.length > 1;\n const c = useStyles({ isShown });\n\n return (\n \n }\n endIcon={}\n onClick={() => {\n if (!isShown || submitting) {\n return;\n }\n\n // Coin以外の報酬を実装する場合は、構造を再度考え直す必要がある\n claimRewardCoin(\n setSubmitting,\n rewardTargets.reverse().map(q => ({\n questKey: q.questKey,\n questTitle: q.title,\n coins: q.reward.value,\n transitionTarget: q.transitionTarget,\n }))\n );\n }}\n >\n Claim All Rewards\n \n \n );\n}\nconst useStyles = makeStyles({\n container: ({ isShown }) => ({\n marginBottom: isShown ? 7 : 0,\n paddingTop: isShown ? 5 : 0,\n paddingRight: 5,\n display: \"flex\",\n justifyContent: \"flex-end\",\n alignItems: \"center\",\n width: \"100%\",\n transition: \"all 500ms\",\n }),\n button: {\n maxHeight: 30,\n minHeight: 30,\n fontSize: \"15px !important\",\n lineHeight: 1,\n },\n});\n\n","import Card from \"@material-ui/core/Card\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport CheckCircleOutlineIcon from \"@material-ui/icons/CheckCircleOutline\";\r\nimport { MouseEventHandler, useEffect, useRef, useState } from \"react\";\r\nimport { changeAppState } from \"../../../../../../../../common/appState\";\r\nimport { relativeScroll } from \"../../../../../../../../common/util/Scroll/relativeScroll\";\r\nimport { PrimaryButton } from \"../../../../../../../shared/Button/PrimaryButton\";\r\nimport { SuccessButton } from \"../../../../../../../shared/Button/SuccessButton\";\r\nimport { Link } from \"../../../../../../../shared/Link/LinkWithYouTube\";\r\nimport { claimRewardCoin } from \"./functions\";\r\nimport { Quest, Reward, TransitionFunc } from \"./quests/types\";\r\n\r\nexport function QuestRecord({\r\n quest: { title, reward, transitionTarget, questKey },\r\n isOngoing,\r\n claimed,\r\n questKeyToScrollTo,\r\n scrollableElement,\r\n claimingAll,\r\n}: {\r\n quest: Quest;\r\n isOngoing?: boolean;\r\n claimed?: boolean;\r\n questKeyToScrollTo: string;\r\n scrollableElement: HTMLDivElement | null;\r\n claimingAll: boolean;\r\n}) {\r\n const c = useStyles({ isOngoing, claimed });\r\n const ref = useRef(null);\r\n\r\n const scrollToThisRecord = () => {\r\n if (!ref.current || !scrollableElement) {\r\n setTimeout(scrollToThisRecord, 200);\r\n return;\r\n }\r\n relativeScroll(scrollableElement, ref.current, 5);\r\n };\r\n\r\n useEffect(() => {\r\n if (questKeyToScrollTo !== questKey) {\r\n return;\r\n }\r\n scrollToThisRecord();\r\n }, [questKeyToScrollTo, questKey, scrollableElement]);\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
{title}
\r\n
\r\n Reward: {reward.value.toLocaleString()} {reward.type}\r\n {reward.type === \"coin\" && reward.value > 1 && \"s\"}\r\n
\r\n
\r\n
\r\n {isOngoing ? (\r\n typeof transitionTarget === \"string\" ? (\r\n \r\n {\r\n changeAppState(\"signInPanelState\", {\r\n type: \"close\",\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\n}\r\nconst useStyles = makeStyles(\r\n theme => ({\r\n card: ({ isOngoing, claimed }) => ({\r\n margin: 5,\r\n display: \"flex\",\r\n padding: 5,\r\n height: 50,\r\n justifyContent: \"center\",\r\n width: \"calc(100% - 10px)\",\r\n position: \"relative\",\r\n overflow: \"visible\",\r\n border: !isOngoing && !claimed ? \"solid\" : undefined,\r\n borderColor:\r\n !isOngoing && !claimed ? theme.palette.success.main : undefined,\r\n backgroundColor: claimed ? theme.palette.grey[200] : undefined,\r\n color: claimed ? theme.palette.grey[600] : undefined,\r\n }),\r\n checkContainer: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n marginLeft: 0,\r\n marginRight: 10,\r\n minWidth: 30,\r\n },\r\n checkIcon: ({ isOngoing }) => ({\r\n width: 30,\r\n height: 30,\r\n color: isOngoing\r\n ? theme.palette.grey[400]\r\n : theme.palette.success.main,\r\n }),\r\n labelsAndButton: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-around\",\r\n width: \"calc(100% - 40px)\",\r\n height: \"100%\",\r\n },\r\n titleAndReward: {\r\n width: \"100%\",\r\n paddingRight: 5,\r\n lineHight: 1.2,\r\n maxWidth: \"100%\",\r\n overflow: \"hidden\",\r\n },\r\n title: ({ claimed }) => ({\r\n fontWeight: !claimed ? \"bold\" : undefined,\r\n whiteSpace: \"nowrap\",\r\n maxWidth: \"100%\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n }),\r\n reward: {\r\n color: theme.palette.grey[600],\r\n fontSize: \"small\",\r\n },\r\n buttonContainer: {\r\n width: 70,\r\n display: \"flex\",\r\n justifyContent: \"flex-end\",\r\n height: \"100%\",\r\n alignItems: \"center\",\r\n position: \"relative\",\r\n },\r\n })\r\n);\r\n\r\nfunction StartButton({\r\n onClick,\r\n}: {\r\n onClick?: MouseEventHandler;\r\n}) {\r\n return (\r\n \r\n Start\r\n
\r\n );\r\n}\r\n\r\nfunction ClaimButton({\r\n claimed,\r\n questKey,\r\n questTitle,\r\n reward,\r\n transitionTarget,\r\n claimingAll,\r\n}: {\r\n claimed?: boolean;\r\n questKey: string;\r\n questTitle: string;\r\n reward: Reward;\r\n transitionTarget: string | TransitionFunc;\r\n claimingAll: boolean;\r\n}) {\r\n const [submitting, setSubmitting] = useState(false);\r\n return (\r\n {\r\n switch (reward.type) {\r\n case \"coin\": {\r\n await claimRewardCoin(setSubmitting, [\r\n {\r\n questKey,\r\n questTitle,\r\n coins: reward.value,\r\n transitionTarget,\r\n },\r\n ]);\r\n break;\r\n }\r\n case \"xp\": {\r\n // Implement if necessary\r\n break;\r\n }\r\n default: {\r\n const _exhaustiveCheck: never = reward.type;\r\n }\r\n }\r\n }}\r\n >\r\n Claim Reward\r\n \r\n );\r\n}\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport AssignmentTurnedInIcon from \"@material-ui/icons/AssignmentTurnedIn\";\r\nimport { RefObject, useEffect, useRef, useState } from \"react\";\r\nimport {\r\n getAppState,\r\n useAppState,\r\n} from \"../../../../../../../../common/appState\";\r\nimport { sleepAsync } from \"../../../../../../../../common/functions\";\r\nimport { InitialView } from \"../../../MyPageTop/types\";\r\nimport { OpenableCard } from \"../OpenableCard\";\r\nimport { ClaimAllButton } from \"./ClaimAllButton\";\r\nimport { QuestRecord } from \"./QuestRecord\";\r\nimport { ClearedQuest, Quest } from \"./quests/types\";\r\n\r\nconst cardId = \"MyPageQuestsCard\";\r\n\r\nexport function QuestsCard({\r\n initialView,\r\n scrollableContainerRef,\r\n}: {\r\n initialView?: InitialView;\r\n scrollableContainerRef: RefObject;\r\n}) {\r\n const [open, setOpen] = useState(false);\r\n const [{ clearedQuests, ongoingQuests, exclamationMark }] =\r\n useAppState(\"questState\");\r\n\r\n const c = useStyles();\r\n\r\n return (\r\n \r\n Quests:{\" \"}\r\n \r\n {clearedQuests.length + ongoingQuests.length}\r\n \r\n \r\n }\r\n icon={}\r\n saveKey={cardId}\r\n id={cardId}\r\n open={open}\r\n setOpen={setOpen}\r\n alwaysShowIcon\r\n alwaysShowTitle\r\n initiallyOpenedId={initialView}\r\n exclamationMark={exclamationMark}\r\n scrollableContainerRef={scrollableContainerRef}\r\n >\r\n \r\n \r\n );\r\n}\r\nconst useStyles = makeStyles(theme => ({\r\n titleNumber: { color: theme.palette.success.dark },\r\n}));\r\n\r\nfunction QuestList({\r\n ongoingQuests,\r\n clearedQuests,\r\n open,\r\n isInitialView,\r\n}: {\r\n ongoingQuests: Quest[];\r\n clearedQuests: ClearedQuest[];\r\n open: boolean;\r\n isInitialView: boolean;\r\n}) {\r\n const c = useListStyles();\r\n\r\n const { questKeyToScrollTo } = useQuestKeyToScroll(\r\n ongoingQuests,\r\n clearedQuests,\r\n open,\r\n isInitialView\r\n );\r\n const ref = useRef(null);\r\n const [claimingAll, setClaimingAll] = useState(false);\r\n\r\n return (\r\n <>\r\n \r\n\r\n
\r\n {ongoingQuests.map(quest => (\r\n \r\n ))}\r\n {clearedQuests.map(quest => (\r\n \r\n ))}\r\n {ongoingQuests.length + clearedQuests.length === 0 && (\r\n
No Data
\r\n )}\r\n
\r\n \r\n );\r\n}\r\nconst useListStyles = makeStyles(theme => ({\r\n container: {\r\n backgroundColor: theme.palette.grey[100],\r\n height: 308,\r\n maxHeight: 308,\r\n flex: 1,\r\n fontSize: \"large\",\r\n overflowY: \"auto\",\r\n overflowX: \"hidden\",\r\n position: \"relative\",\r\n },\r\n noData: {\r\n width: \"100%\",\r\n height: 305,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n color: theme.palette.grey[600],\r\n },\r\n}));\r\n\r\nfunction useQuestKeyToScroll(\r\n _ongoingQuests: Quest[],\r\n _clearedQuests: ClearedQuest[],\r\n open: boolean,\r\n isInitialView: boolean\r\n) {\r\n const [questKeyToScrollTo, setQuestKeyToScrollTo] = useState(\"\");\r\n\r\n const ongoingKeys = _ongoingQuests.map(q => q.questKey).join(\"_\");\r\n const claimedKeys = _clearedQuests\r\n .filter(q => q.claimed)\r\n .map(q => q.questKey)\r\n .join(\"_\");\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n (async () => {\r\n setQuestKeyToScrollTo(\"\"); // Reset to fire scroll\r\n await sleepAsync(300); // Wait for resetting\r\n\r\n const { clearedQuests, ongoingQuests } = getAppState().questState;\r\n\r\n const unclaimedQuestKey = clearedQuests.find(\r\n q => !q.claimed\r\n )?.questKey;\r\n if (unclaimedQuestKey) {\r\n setQuestKeyToScrollTo(unclaimedQuestKey);\r\n return;\r\n }\r\n if (ongoingQuests.length > 0) {\r\n setQuestKeyToScrollTo(ongoingQuests[0].questKey);\r\n }\r\n })();\r\n }, [open, isInitialView, ongoingKeys, claimedKeys]);\r\n\r\n return { questKeyToScrollTo };\r\n}\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport TrendingUpIcon from \"@material-ui/icons/TrendingUp\";\r\nimport { RefObject, useEffect, useState } from \"react\";\r\nimport { User, UserForRanking } from \"../../../../../../../shared/User/types\";\r\nimport { BasicRanking } from \"../../../../../../zApps/parts/Ranking/LevelRanking/BasicRanking/BasicRanking\";\r\nimport { InitialView } from \"../../../MyPageTop/types\";\r\nimport { OpenableCard } from \"../OpenableCard\";\r\n\r\nexport function RankingAroundMe({\r\n user: player,\r\n initialView,\r\n scrollableContainerRef,\r\n}: {\r\n user: User;\r\n initialView?: InitialView;\r\n scrollableContainerRef: RefObject;\r\n}) {\r\n const [users, setUsers] = useState([]);\r\n const [myRank, setMyRank] = useState(0);\r\n const [initialRank, setInitialRank] = useState(\r\n undefined\r\n );\r\n const [open, setOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n fetchUsersAroundMyRank(player.userId).then(\r\n ({ users: _users, myRank: _myRank }) => {\r\n let playerIndex = _users.findIndex(\r\n u => u.userId === player.userId\r\n );\r\n if (playerIndex < 0) {\r\n // If many players' XP is the same, there's a possibility that the array doesn't include the player.\r\n // Even when everyone's XP is the same, insert the player in the middle.\r\n _users.splice(10, 0, player).sort((a, b) => b.xp - a.xp);\r\n playerIndex = _users.findIndex(\r\n u => u.userId === player.userId\r\n );\r\n }\r\n setUsers(_users);\r\n setMyRank(_myRank);\r\n setInitialRank(_myRank - playerIndex);\r\n }\r\n );\r\n }, [player]);\r\n\r\n const c = useStyles();\r\n\r\n return (\r\n \r\n Ranking: {myRank}\r\n \r\n )\r\n }\r\n icon={}\r\n saveKey=\"MyPageUserRankingAroundMe\"\r\n id=\"MyPageUserRankingAroundMe\"\r\n open={open}\r\n setOpen={setOpen}\r\n alwaysShowIcon\r\n alwaysShowTitle\r\n initiallyOpenedId={initialView}\r\n scrollableContainerRef={scrollableContainerRef}\r\n >\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n );\r\n}\r\nconst useStyles = makeStyles(theme => ({\r\n container: {\r\n width: \"100%\",\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n },\r\n titleNumber: { color: theme.palette.success.dark },\r\n rankingWrapper: {\r\n width: \"100%\",\r\n },\r\n}));\r\n\r\nasync function fetchUsersAroundMyRank(\r\n userId: number\r\n): Promise<{ users: UserForRanking[]; myRank: number }> {\r\n const res = await fetch(`api/User/GetUsersAroundMyRank?userId=${userId}`);\r\n return res.json();\r\n}\r\n","import Card from \"@material-ui/core/Card\";\r\nimport Collapse from \"@material-ui/core/Collapse\";\r\nimport { lighten, makeStyles } from \"@material-ui/core/styles\";\r\nimport { useState } from \"react\";\r\nimport {\r\n changeAppState,\r\n useAppState,\r\n} from \"../../../../../../../../common/appState\";\r\nimport { splitByBoolean } from \"../../../../../../../../common/util/Array/orderByBoolean\";\r\nimport { PrimaryButton } from \"../../../../../../../shared/Button/PrimaryButton\";\r\n\r\nexport function PrivateLessonCard() {\r\n const c = useStyles();\r\n const [isShownMore, setShowMore] = useState(false);\r\n\r\n const [privateLessonInfo] = useAppState(\"privateLessonInfo\");\r\n if (!privateLessonInfo) {\r\n return null;\r\n }\r\n\r\n const [firstThree, restConsumptions] = splitByBoolean(\r\n privateLessonInfo.ticketConsumption,\r\n (arr, i) => i < 3\r\n );\r\n\r\n return (\r\n \r\n
\r\n Current Tickets: {privateLessonInfo.tickets}\r\n
\r\n {\r\n changeAppState(\"paymentPanelState\", { type: \"ticket\" });\r\n }}\r\n >\r\n Buy Tickets\r\n \r\n {privateLessonInfo.ticketConsumption.length > 0 && (\r\n \r\n {firstThree.map((c, i) => (\r\n
{c.memo}
\r\n ))}\r\n {restConsumptions.length > 0 && (\r\n <>\r\n \r\n {\r\n setShowMore(true);\r\n }}\r\n >\r\n Show more\r\n \r\n \r\n \r\n
\r\n {restConsumptions.map((c, i) => (\r\n
{c.memo}
\r\n ))}\r\n
\r\n
\r\n \r\n )}\r\n
\r\n )}\r\n
\r\n );\r\n}\r\nconst useStyles = makeStyles(theme => ({\r\n card: {\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n padding: 30,\r\n gap: 30,\r\n marginBottom: 30,\r\n backgroundColor: lighten(theme.palette.primary.light, 0.8),\r\n },\r\n currentTickets: {\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n fontSize: \"x-large\",\r\n fontWeight: \"bold\",\r\n },\r\n consumptionLogCard: {\r\n padding: 10,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"flex-start\",\r\n gap: 5,\r\n },\r\n showMore: {\r\n width: \"100%\",\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n color: theme.palette.primary.main,\r\n cursor: \"pointer\",\r\n position: \"relative\",\r\n bottom: 2,\r\n paddingTop: 10,\r\n },\r\n restLogs: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"flex-start\",\r\n gap: 5,\r\n marginTop: -5,\r\n },\r\n}));\r\n","import Card from \"@material-ui/core/Card\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport ForwardIcon from \"@material-ui/icons/Forward\";\r\nimport { useMemo } from \"react\";\r\nimport { useAppState } from \"../../../../../../../../common/appState\";\r\nimport { XpBooster } from \"../../../components/OpenableCards/ItemsCard/items/ItemClass/XpBooster/XpBooster\";\r\nimport { FormattedRemainingTime } from \"./FormattedRemainingTime\";\r\n\r\nexport function XpBoostTimer({ screenWidth }: { screenWidth: number }) {\r\n const c = useStyles({ isWide: screenWidth >= 500 });\r\n\r\n const [xpBoostRemainingSeconds] = useAppState(\"xpBoostRemainingSeconds\");\r\n const [lastUsedXpBooster] = useAppState(\"lastUsedXpBooster\");\r\n const boosterMessage = useMemo(\r\n () =>\r\n lastUsedXpBooster && new XpBooster(lastUsedXpBooster).boostMessage,\r\n [lastUsedXpBooster]\r\n );\r\n\r\n if (xpBoostRemainingSeconds <= 0 || !lastUsedXpBooster) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n
{boosterMessage}
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n );\r\n}\r\nconst useStyles = makeStyles(theme => ({\r\n container: {\r\n width: \"100%\",\r\n height: 80,\r\n borderRadius: 40,\r\n backgroundColor: theme.palette.secondary.main,\r\n color: \"white\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n margin: \"10px 0 15px\",\r\n animation: \"10s linear infinite ninjaCommentAnime\",\r\n },\r\n centerArea: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-around\",\r\n margin: -15,\r\n },\r\n message: ({ isWide }) => ({\r\n fontSize: isWide ? \"x-large\" : \"23px\",\r\n fontWeight: \"bold\",\r\n whiteSpace: \"nowrap\",\r\n }),\r\n icon: ({ isWide }) => ({\r\n color: theme.palette.secondary.main,\r\n backgroundColor: \"white\",\r\n transform: \"rotate(-90deg)\",\r\n width: isWide ? 70 : 40,\r\n height: isWide ? 70 : 40,\r\n borderRadius: \"50%\",\r\n margin: isWide ? 5 : 15,\r\n }),\r\n}));\r\n","import Container from \"@material-ui/core/Container\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { RefObject } from \"react\";\r\nimport { changeAppState } from \"../../../../../../common/appState\";\r\nimport { useScreenSize } from \"../../../../../../common/hooks/useScreenSize\";\r\nimport { useUser } from \"../../../../../../common/hooks/useUser\";\r\nimport { FullScreenShurikenProgress } from \"../../../../../shared/Animations/ShurikenProgress\";\r\nimport { DarkButton } from \"../../../../../shared/Button/DarkButton\";\r\nimport { GoogleAd } from \"../../../../../shared/GoogleAd\";\r\nimport { User } from \"../../../../../shared/User/types\";\r\nimport { useOpenState, useStyles } from \"../../SignUp/SignUp\";\r\nimport { SignInPanelState } from \"../../types\";\r\nimport { AvatarField } from \"../Fields/AvatarField\";\r\nimport { BioField } from \"../Fields/BioField\";\r\nimport { ElementToEmphasize } from \"../Fields/BioField/types\";\r\nimport { UsernameField } from \"../Fields/UsernameField\";\r\nimport { BonusCard } from \"../components/OpenableCards/BonusCard/BonusCard\";\r\nimport { FriendsCard } from \"../components/OpenableCards/FriendsCard/FriendsCard\";\r\nimport { ItemsCard } from \"../components/OpenableCards/ItemsCard/ItemsCard\";\r\nimport { MessagesCard } from \"../components/OpenableCards/MessagesCard/MessagesCard\";\r\nimport { ProgressCard } from \"../components/OpenableCards/ProgressCard\";\r\nimport { QuestsCard } from \"../components/OpenableCards/QuestsCard/QuestsCard\";\r\nimport { RankingAroundMe } from \"../components/OpenableCards/RankingAroundMe/RankingAroundMe\";\r\nimport { XpProgressArea } from \"../components/XpProgressBar\";\r\nimport \"../style.css\";\r\nimport { PrivateLessonCard } from \"./components/PrivateLesson/PrivateLessonCard\";\r\nimport { XpBoostTimer } from \"./components/XpBoostTimer/XpBoostTimer\";\r\nimport { logout } from \"./logout\";\r\nimport { InitialView } from \"./types\";\r\nimport { useScrollToMyPageItem } from \"./useScrollToMyPageItem\";\r\n\r\nexport function MyPageTop({\r\n chosen,\r\n panelClosed,\r\n panelState,\r\n scrollableContainerRef,\r\n}: {\r\n chosen: boolean;\r\n panelClosed: boolean;\r\n panelState: SignInPanelState;\r\n scrollableContainerRef: RefObject;\r\n}) {\r\n const { screenWidth } = useScreenSize();\r\n const { partiallyOpened, containerC } = useOpenState(\r\n chosen,\r\n panelClosed,\r\n screenWidth > 600 ? 25 : 10\r\n );\r\n if (!partiallyOpened) {\r\n return null;\r\n }\r\n\r\n return (\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: SignInPanelState;\r\n scrollableContainerRef: RefObject;\r\n}) {\r\n const classes = useStyles();\r\n const myPageClasses = useMyPageTopStyles();\r\n const { screenHeight, screenWidth } = useScreenSize();\r\n const { user } = useUser();\r\n\r\n if (!user) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n const { initialView, itemKeyToFocus, elementToEmphasize } =\r\n panelState.type === \"myPageTop\"\r\n ? {\r\n initialView: panelState.initialView,\r\n itemKeyToFocus:\r\n panelState.initialView === \"MyPageItemsCard\"\r\n ? panelState.itemKeyToFocus\r\n : undefined,\r\n elementToEmphasize:\r\n panelState.initialView === \"MyPageBio\"\r\n ? panelState.elementToEmphasize\r\n : undefined,\r\n }\r\n : {\r\n initialView: undefined,\r\n itemKeyToFocus: undefined,\r\n elementToEmphasize: undefined,\r\n };\r\n\r\n return (\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\n\r\n {user.sul < 4 && (\r\n \r\n Logout\r\n \r\n )}\r\n
\r\n );\r\n}\r\nconst useMyPageTopStyles = makeStyles({\r\n ad: {\r\n width: \"100%\",\r\n marginTop: 25,\r\n },\r\n});\r\n\r\nfunction ProfileCard({\r\n user,\r\n screenWidth,\r\n initialView,\r\n scrollableContainerRef,\r\n elementToEmphasize,\r\n}: {\r\n user: User;\r\n screenWidth: number;\r\n initialView?: InitialView;\r\n scrollableContainerRef: RefObject;\r\n elementToEmphasize?: ElementToEmphasize;\r\n}) {\r\n const c = useStatusCardStyles();\r\n\r\n const isProfileEditable = user.sul < 3;\r\n\r\n return (\r\n
\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n
\r\n );\r\n}\r\nconst useStatusCardStyles = makeStyles({\r\n card: {\r\n width: \"100%\",\r\n fontSize: \"large\",\r\n margin: \"0 0 5px\",\r\n padding: \"0 20px 20px\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n },\r\n});\r\n\r\nfunction LevelAndXp({\r\n user,\r\n screenWidth,\r\n initialView,\r\n scrollableContainerRef,\r\n}: {\r\n user: User;\r\n screenWidth: number;\r\n initialView?: InitialView;\r\n scrollableContainerRef: RefObject;\r\n}) {\r\n const { scrollTargetRef } = useScrollToMyPageItem({\r\n scrollableContainerRef,\r\n initialView,\r\n itemName: \"MyPageLevelAndXp\",\r\n });\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{\"Japanese Level:\"}{user.level}
\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nfunction onLogout() {\r\n if (!confirm(\"Do you really want to logout?\")) {\r\n return;\r\n }\r\n\r\n changeAppState(\"signInPanelState\", { type: \"signIn\" });\r\n\r\n logout();\r\n}\r\n","import Avatar from \"@material-ui/core/Avatar\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Checkbox from \"@material-ui/core/Checkbox\";\r\nimport Container from \"@material-ui/core/Container\";\r\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport LockOutlinedIcon from \"@material-ui/icons/LockOutlined\";\r\nimport { ReactNode, SyntheticEvent, useState } from \"react\";\r\nimport { changeAppState } from \"../../../../common/appState\";\r\nimport { useScreenSize } from \"../../../../common/hooks/useScreenSize\";\r\nimport { FetchResult } from \"../../../../types/fetch\";\r\nimport ShurikenProgress from \"../../../shared/Animations/ShurikenProgress\";\r\nimport { TextField } from \"../../../shared/Input/TextField\";\r\nimport { User } from \"../../../shared/User/types\";\r\nimport { loginSuccess } from \"./MyPage/loginSuccess\";\r\nimport { PasswordField } from \"./SignUp/PasswordField\";\r\nimport { useOpenState, useStyles } from \"./SignUp/SignUp\";\r\n\r\nexport function SignIn({\r\n chosen,\r\n panelClosed,\r\n email,\r\n password,\r\n setEmail,\r\n setPassword,\r\n}: {\r\n chosen: boolean;\r\n panelClosed: boolean;\r\n email: string;\r\n password: string;\r\n setEmail: (email: string) => void;\r\n setPassword: (password: string) => void;\r\n}) {\r\n const classes = useStyles();\r\n const { screenWidth } = useScreenSize();\r\n const [submissionError, setSubmissionError] = useState(null);\r\n const [rememberMe, setRememberMe] = useState(true);\r\n const [submitting, setSubmitting] = useState(false);\r\n\r\n const { partiallyOpened, containerC } = useOpenState(\r\n chosen,\r\n panelClosed,\r\n screenWidth > 600 ? 25 : 15\r\n );\r\n if (!partiallyOpened) {\r\n return null;\r\n }\r\n\r\n const onSubmit = async (ev: SyntheticEvent) => {\r\n ev.preventDefault();\r\n\r\n setSubmitting(true);\r\n const res = await fetch(\"api/Auth/Login\", {\r\n method: \"POST\",\r\n headers: {\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n credentials: \"include\",\r\n body: JSON.stringify({\r\n email,\r\n password,\r\n rememberMe,\r\n }),\r\n });\r\n const result: FetchResult = await res.json();\r\n\r\n if (!(\"error\" in result)) {\r\n await loginSuccess(result);\r\n setSubmitting(false);\r\n return;\r\n }\r\n\r\n setSubmissionError(getSubmissionError(result.error));\r\n setSubmitting(false);\r\n };\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n

Sign in

\r\n\r\n {submissionError && (\r\n
\r\n {submissionError}\r\n
\r\n )}\r\n\r\n
\r\n {\r\n setEmail(ev.target.value);\r\n setSubmissionError(null);\r\n }}\r\n value={email}\r\n />\r\n {\r\n setPassword(ev.target.value);\r\n setSubmissionError(null);\r\n }}\r\n password={password}\r\n />\r\n\r\n {\r\n setRememberMe(!rememberMe);\r\n }}\r\n />\r\n }\r\n label=\"Remember me\"\r\n />\r\n\r\n \r\n {submitting ? (\r\n \r\n ) : (\r\n \"Sign In\"\r\n )}\r\n \r\n\r\n \r\n \r\n {\r\n ev.preventDefault();\r\n changeAppState(\"signInPanelState\", {\r\n type: \"forgotPassword\",\r\n });\r\n }}\r\n >\r\n Forgot password?\r\n \r\n \r\n \r\n {\r\n ev.preventDefault();\r\n changeAppState(\"signInPanelState\", {\r\n type: \"signUp\",\r\n });\r\n }}\r\n >\r\n {\"Don't have an account? Sign Up\"}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nfunction getSubmissionError(error: string): ReactNode {\r\n if (error === \"emailNoMatch\") {\r\n return (\r\n \r\n Sorry, we can't find an account with this email address.\r\n
\r\n Please try again or{\" \"}\r\n {\r\n ev.preventDefault();\r\n changeAppState(\"signInPanelState\", { type: \"signUp\" });\r\n }}\r\n >\r\n create a new account\r\n \r\n .\r\n
\r\n );\r\n }\r\n if (error === \"passwordNoMatch\") {\r\n return (\r\n \r\n Incorrect password.\r\n
\r\n Please try again or you can{\" \"}\r\n {\r\n ev.preventDefault();\r\n changeAppState(\"signInPanelState\", {\r\n type: \"forgotPassword\",\r\n });\r\n }}\r\n >\r\n reset your password\r\n \r\n .\r\n
\r\n );\r\n }\r\n return error;\r\n}\r\n","import { RefObject, useEffect, useRef, useState } from \"react\";\r\nimport { changeAppState, useAppState } from \"../../../../common/appState\";\r\nimport { useDelayedState } from \"../../../../common/hooks/useDelayedState\";\r\nimport { RightPanel } from \"../../../shared/Panel/RightPanel\";\r\nimport { User } from \"../../../shared/User/types\";\r\nimport { ForgotPassword } from \"./ForgotPassword\";\r\nimport { decodeEmailForUrl } from \"./MyPage/components/OpenableCards/ItemsCard/items/ItemClass/InvitationCard/functions\";\r\nimport { ShareButton } from \"./MyPage/MyPageTop/components/ShareButton\";\r\nimport { MyPageTop } from \"./MyPage/MyPageTop/MyPageTop\";\r\nimport { SignIn } from \"./SignIn\";\r\nimport { SignUp } from \"./SignUp/SignUp\";\r\nimport { SignInPanelState } from \"./types\";\r\n\r\nexport const signInPanelWidth = 500;\r\nconst transitionMilliseconds = 1000;\r\n\r\nexport default function SignInPanel() {\r\n const [panelState, setIsPanelOpen] = useAppState(\"signInPanelState\");\r\n const { delayedState } = useDelayedState(\r\n panelState,\r\n state => state.type !== \"close\",\r\n transitionMilliseconds\r\n );\r\n const scrollableContainerRef = useRef(null);\r\n const isOpen = panelState.type !== \"close\";\r\n\r\n const [user] = useAppState(\"user\");\r\n\r\n return (\r\n {\r\n setIsPanelOpen({ type: \"close\" });\r\n }}\r\n panelWidth={signInPanelWidth}\r\n globalPanelState={panelState}\r\n transitionMilliseconds={transitionMilliseconds}\r\n scrollableContainerRef={scrollableContainerRef}\r\n topItem={\r\n delayedState.type === \"myPageTop\" ? (\r\n \r\n ) : undefined\r\n }\r\n >\r\n \r\n \r\n );\r\n}\r\n\r\nfunction PanelContent({\r\n panelState: { type },\r\n panelState,\r\n scrollableContainerRef,\r\n user,\r\n}: {\r\n panelState: SignInPanelState;\r\n scrollableContainerRef: RefObject;\r\n user?: User;\r\n}) {\r\n const encodedEmail =\r\n (panelState.type === \"signUp\" && panelState.encodedEmail) || \"\";\r\n const [email, setEmail] = useState(\r\n () => encodedEmail && decodeEmailForUrl(encodedEmail)\r\n );\r\n const [password, setPassword] = useState(\"\");\r\n\r\n useEffect(() => {\r\n if (type === \"signUp\" || type === \"signIn\") {\r\n if (user) {\r\n // If already logged in, open my page\r\n changeAppState(\"signInPanelState\", { type: \"myPageTop\" });\r\n }\r\n }\r\n }, [user, type]);\r\n\r\n const containerRef = useRef(null);\r\n useEffect(() => {\r\n if (type === \"close\") {\r\n return;\r\n }\r\n containerRef.current?.scrollIntoView(true);\r\n }, [type]);\r\n\r\n const panelClosed = type === \"close\";\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n","import IconButton from \"@material-ui/core/IconButton\";\r\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Visibility from \"@material-ui/icons/Visibility\";\r\nimport VisibilityOff from \"@material-ui/icons/VisibilityOff\";\r\nimport { ChangeEventHandler, useState } from \"react\";\r\nimport { TextField } from \"../../../../shared/Input/TextField\";\r\n\r\nexport function PasswordField({\r\n onChange,\r\n password,\r\n label = \"Password\",\r\n}: {\r\n onChange: ChangeEventHandler;\r\n password: string;\r\n label?: string;\r\n}) {\r\n const [visible, setVisible] = useState(false);\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n \r\n {\r\n setVisible(!visible);\r\n }}\r\n >\r\n {visible ? : }\r\n \r\n \r\n ),\r\n }}\r\n />\r\n
\r\n );\r\n}\r\n\r\nexport const useStyles = makeStyles(theme => ({\r\n passwordContainer: {\r\n width: \"100%\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n marginTop: 16,\r\n marginBottom: 8,\r\n },\r\n}));\r\n","export function submissionValidate(\r\n name: string,\r\n email: string,\r\n password: string\r\n): string | null {\r\n return (\r\n nameValidate(name) || emailValidate(email) || passwordValidate(password)\r\n );\r\n}\r\n\r\nexport function realTimeValidate(\r\n name: string,\r\n email: string,\r\n password: string\r\n): string | null {\r\n if (name) {\r\n const nameError = nameValidate(name);\r\n if (nameError) {\r\n return nameError;\r\n }\r\n }\r\n if (email) {\r\n const emailError = emailValidate(email);\r\n if (emailError) {\r\n return emailError;\r\n }\r\n }\r\n if (password) {\r\n const passwordError = passwordValidate(password);\r\n if (passwordError) {\r\n return passwordError;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nexport function nameValidate(name: string): string | null {\r\n if (name.length < 1 || name.length > 20) {\r\n return \"Your username must contain between 1 and 20 characters.\";\r\n }\r\n const lower = name.toLocaleLowerCase();\r\n if (lower.includes(\"lingual\") && lower.includes(\"ninja\")) {\r\n return \"This username is already taken. Please choose another name.\";\r\n }\r\n return null;\r\n}\r\n\r\nexport function emailValidate(email: string): string | null {\r\n if (!/^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$/.test(email)) {\r\n return \"Please enter a valid email address.\";\r\n }\r\n if (email.length > 50) {\r\n return \"Your email address must be less than 51 characters.\";\r\n }\r\n return null;\r\n}\r\n\r\nexport function passwordValidate(password: string): string | null {\r\n if (password.length < 8 || password.length > 60) {\r\n return \"Your password must contain between 8 and 60 characters.\";\r\n }\r\n\r\n if (!password.match(/([a-zA-Z])/) || !password.match(/([0-9])/)) {\r\n if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)) {\r\n // If the password includes one upper case and one lower case, it's ok\r\n return null;\r\n }\r\n return \"Your password must contain at least one number and one letter.\";\r\n }\r\n\r\n return null;\r\n}\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport \"../../../css/Terms.css\";\r\nimport { AuthorName } from \"../../shared/Author/Author\";\r\nimport Helmet from \"../../shared/Helmet\";\r\n\r\nexport default function Terms() {\r\n const c = useStyles();\r\n\r\n return (\r\n
\r\n \r\n
\r\n

\r\n Lingual Ninja{\" \"}\r\n Terms of Use\r\n

\r\n
\r\n
\r\n

The Ownership of Website

\r\n

\r\n This website is developed and owned by{\" \"}\r\n . When you want to use\r\n any quotes, images, or programs, you must get approval\r\n from the owner.\r\n

\r\n
\r\n

Responsibility

\r\n

\r\n If user experiences trouble including defects or bugs,\r\n the owner of this website can't be held liable. It will\r\n be user's responsibility.\r\n

\r\n
\r\n

Account Usage Restrictions

\r\n

\r\n In order to make Lingual Ninja an enjoyable experience\r\n for all users, functionality may be restricted for users\r\n who engage in the following actions:\r\n

    \r\n
  • \r\n If there is an act of causing trouble to other\r\n users or posting abusive language, that user's\r\n functions may be restricted.\r\n
  • \r\n
  • \r\n If the above actions or automated operations by\r\n programs or AI are detected, the account itself\r\n may be frozen.\r\n
  • \r\n
  • \r\n Any other acts of cheating or nuisance will be\r\n subject to the same penalties as above.\r\n
  • \r\n
\r\n Only users who agree with the above should create an\r\n account on this website.\r\n

\r\n
\r\n
\r\n
\r\n );\r\n}\r\nconst useStyles = makeStyles({\r\n titleLine: { whiteSpace: \"nowrap\" },\r\n ul: { marginTop: 10 },\r\n li: { marginBottom: 5 },\r\n});\r\n","import Card from \"@material-ui/core/Card\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { useEffect, useRef } from \"react\";\r\nimport { sleepAsync } from \"../../../../../../../common/functions\";\r\nimport { relativeScroll } from \"../../../../../../../common/util/Scroll/relativeScroll\";\r\nimport { EllipsisLabel } from \"../../../../../../shared/EllipsisLabel/EllipsisLabel\";\r\nimport { User, UserForRanking } from \"../../../../../../shared/User/types\";\r\nimport { UserAvatar } from \"../../../../../../shared/User/UserAvatar/UserAvatar\";\r\n\r\nexport function BasicRankingRecord({\r\n user,\r\n rank,\r\n isRankNumberHidden,\r\n player,\r\n scrollableContainer,\r\n collapseOpen,\r\n isMyself,\r\n}: {\r\n user: UserForRanking;\r\n rank: number;\r\n isRankNumberHidden: boolean;\r\n player?: User;\r\n scrollableContainer: HTMLDivElement | null;\r\n isMyself: boolean;\r\n collapseOpen: boolean;\r\n}) {\r\n const c = useStyles({ isMyself, isRankNumberHidden });\r\n const ref = useRef(null);\r\n\r\n useEffect(() => {\r\n if (isMyself && collapseOpen) {\r\n // Wait until Collapse opens\r\n sleepAsync(700).then(() => {\r\n if (!ref.current || !scrollableContainer) {\r\n return;\r\n }\r\n relativeScroll(scrollableContainer, ref.current, 4);\r\n });\r\n }\r\n }, [player, user, scrollableContainer, collapseOpen, rank]);\r\n\r\n return (\r\n \r\n
\r\n {!isRankNumberHidden &&
{rank}.
}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
Lv. {user.level}
\r\n
\r\n
\r\n );\r\n}\r\n\r\nconst useStyles = makeStyles<\r\n Theme,\r\n { isMyself: boolean; isRankNumberHidden: boolean }\r\n>(({ palette }) => ({\r\n card: ({ isMyself }) => ({\r\n margin: 5,\r\n display: \"flex\",\r\n padding: 5,\r\n height: 50,\r\n border: isMyself ? \"solid\" : undefined,\r\n fontWeight: isMyself ? \"bold\" : undefined,\r\n borderColor: isMyself ? palette.primary.main : undefined,\r\n }),\r\n rankAndAvatar: ({ isRankNumberHidden }) => ({\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n marginLeft: 10,\r\n marginRight: 20,\r\n minWidth: isRankNumberHidden ? undefined : 73,\r\n }),\r\n rank: { marginRight: 10 },\r\n nameAndLevel: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-around\",\r\n width: \"100%\",\r\n overflow: \"hidden\",\r\n },\r\n name: { flex: 3, overflow: \"hidden\", paddingRight: 20 },\r\n level: {\r\n flex: 1,\r\n textAlign: \"left\",\r\n marginRight: 10,\r\n whiteSpace: \"nowrap\",\r\n },\r\n}));\r\n","import Card from \"@material-ui/core/Card\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { BaseCSSProperties } from \"@material-ui/core/styles/withStyles\";\r\nimport { useRef, useState } from \"react\";\r\nimport { spaceBetween } from \"../../../../../../../common/util/Array/spaceBetween\";\r\nimport ShurikenProgress from \"../../../../../../shared/Animations/ShurikenProgress\";\r\nimport { User, UserForRanking } from \"../../../../../../shared/User/types\";\r\nimport { RankingRecordContainer } from \"../RankingRecordContainer\";\r\nimport { BasicRankingRecord } from \"./BasicRankingRecord\";\r\n\r\nconst initialRecordsToShow = 10;\r\n\r\nexport function BasicRanking({\r\n users,\r\n player,\r\n initialRank = 4,\r\n collapseOpen,\r\n style,\r\n className,\r\n setScrollableElement,\r\n loading,\r\n}: {\r\n users: UserForRanking[];\r\n player?: User;\r\n initialRank?: number | \"noRank\";\r\n collapseOpen: boolean;\r\n style?: BaseCSSProperties;\r\n className?: string;\r\n setScrollableElement?: (el: HTMLDivElement) => void;\r\n loading?: boolean;\r\n}) {\r\n const c = useStyles({ style });\r\n const scrollableContainerRef = useRef(null);\r\n const [recordsToShow, setRecordsToShow] = useState(initialRecordsToShow);\r\n\r\n return (\r\n {\r\n scrollableContainerRef.current = el;\r\n if (setScrollableElement) {\r\n setScrollableElement(el);\r\n }\r\n }}\r\n onScroll={event => {\r\n setRecordsToShow(\r\n initialRecordsToShow +\r\n Math.floor(\r\n (event.target as HTMLDivElement).scrollTop / 55\r\n )\r\n );\r\n }}\r\n >\r\n {users.map((user, i) => {\r\n const isMyself = user.userId === player?.userId;\r\n if (\r\n (i > recordsToShow ||\r\n i < recordsToShow - initialRecordsToShow * 1.5) &&\r\n !isMyself\r\n ) {\r\n // Placeholder for lazy loading\r\n return (\r\n
\r\n );\r\n }\r\n return (\r\n \r\n \r\n \r\n );\r\n })}\r\n {(users.length === 0 || loading) && (\r\n \r\n )}\r\n \r\n );\r\n}\r\nconst useStyles = makeStyles(theme => ({\r\n basicRankingCard: ({ style }) => ({\r\n margin: 5,\r\n backgroundColor: theme.palette.grey[100],\r\n minHeight: 335,\r\n maxHeight: 335,\r\n flex: 1,\r\n fontSize: \"large\",\r\n overflowY: \"scroll\",\r\n position: \"relative\",\r\n ...style,\r\n }),\r\n lazyPlaceHolder: { height: 50, margin: 5 },\r\n}));\r\n","import { openOtherUserPanel } from \"../../../../../shared/User/OtherUserPanel/functions\";\r\n\r\nexport function RankingRecordContainer({\r\n userId,\r\n children,\r\n}: {\r\n userId: number;\r\n children: JSX.Element;\r\n}) {\r\n return (\r\n {\r\n openOtherUserPanel(userId);\r\n }}\r\n className=\"hoverScale05 pointer\"\r\n >\r\n {children}\r\n
\r\n );\r\n}\r\n","import SvgIcon, { SvgIconProps } from \"@material-ui/core/SvgIcon\";\r\n\r\nexport function UnfriendIcon(props: SvgIconProps) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\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","orderByBoolean","fnc","splitByBoolean","_toArray","slice","flat","_ref3","reduce","acc","val","i","relativeScroll","_relativeScroll","scrollableEl","targetEl","offset","noSmooth","startFromBottom","timeToWait","targetTop","scrollableTop","dif","reachedTarget","reachedBottom","_args","undefined","checkReachedBottom","checkScrolling","getBoundingClientRect","top","pow","scrollTo","scrollTop","behavior","scrollHeight","ceil","offsetHeight","_x3","_x4","_checkScrolling","_callee2","previousScrollTop","_context2","DarkButton","forwardRef","ref","style","className","rest","_objectWithoutProperties","_excluded","c","useStyles","_jsx","Button","_objectSpread","spaceBetween","button","makeStyles","_ref2","palette","backgroundColor","grey","color","fontSize","CharacterComment","props","imgNumber","screenWidth","comment","commentStyle","imgStyle","containerRef","_jsxs","container","children","src","consts","alt","ninjaPic","width","CenterDialog","_ref$transitionMillis","transitionMilliseconds","darkLayerStyle","onClose","withoutCloseButton","globalDialogState","isChildrenUnmounted","openedOrder","usePanelAndDialogOpenOrder","useResultDialogStyles","transitionDuration","isContentShown","setIsContentShown","isCompletelyOpened","isOpenAnimationFinished","useOpenAnimationFinished","darkLayer","opacity1","opacity0","onClick","Card","card","ev","stopPropagation","variant","closeButton","CloseIcon","closeIcon","ShurikenProgress","size","height","position","left","display","justifyContent","alignItems","transitionProperty","zIndex","opacity","_ref4","maxWidth","maxHeight","borderRadius","minWidth","minHeight","success","main","light","lineHeight","marginLeft","marginTop","marginRight","padding","setRegisteredUserResultDialogState","changeAppState","addRegisteredUserXp","_addRegisteredUserXp","params","user","xpToAdd","_yield$fetchAddXp","newUser","levelUp","myRank","boostRate","fetchAddXp","userId","isLevelUp","initialState","onCloseCallBack","topSmallMessage","ResultXpDialogWrapper","_useAppState","useAppState","lazyState","setLazyState","ResultXpDialog_RegisteredUser","useRegisteredUserResultDialogStyles","loaded","useUser","xp","progressCard","level","XpProgressArea","rakingContainer","preventDefault","type","initialView","IconButton","arrowIconButton","ArrowForwardIcon","arrowIcon","theme","margin","flexDirection","secondary","marginBottom","paddingTop","paddingBottom","paddingLeft","paddingRight","bottom","transition","overflow","whiteSpace","transform","primary","fontWeight","cursor","_fetchAddXp","formData","res","FormData","append","toString","fetch","method","body","json","EllipsisLabel","title","placement","tooltipProps","textElementRef","useRef","trimmedTitle","setTrimmedTitle","useScreenSize","isOverflowed","current","scrollWidth","clientWidth","trim","Tooltip","disableHoverListener","disableTouchListener","disableFocusListener","div","textOverflow","GoogleAd","aside","TextField","onMouseDown","onFocus","inputProps","autoFocus","getInitialInputStyle","inputStyle","setInputStyle","MuiTextField","target","DarkPopoverMenu","anchorEl","containerEl","items","disabled","usePopoverStyles","Popover","classes","paper","anchorOrigin","vertical","horizontal","transformOrigin","elevation","map","item","startIcon","icon","_item$onClick","call","darkButton","topDarkButton","label","tail","borderBottom","borderBottomRightRadius","borderBottomLeftRadius","excludedAchievements","getUserStudyAchievements","achievements","questsManager","filter","q","questKey","currentMaxId","UploadCameraButton","submitting","setSubmitting","useUploadCameraStyles","labelStyle","id","useMemo","_Fragment","accept","input","onChange","files","file","error","validateImage","_fetchUpdateAvatar","fetchUpdateAvatar","htmlFor","cameraButton","component","CameraIcon","cameraIcon","_ref5","_ref6","_ref7","UserAvatar","colorNumber","icon300","avatarRef","avatarPath","Avatar","imgAvatar","replace","img","name","iconAvatar","PersonIcon","colors","boxShadow","objectFit","objectPosition","validImageContentTypes","getLinkText","url","linkText","domain","URL","hostname","lowestLevelDomain","split","lowerLinkText","toLocaleLowerCase","isWordInLinkTextIncludedInDomain","some","t","isPartOfDomainIncludedInLinkText","d","allowedCombination","ShareButton","ShareIcon","navigator","clipboard","writeText","Z_APPS_SHORT_URL","right","logout","_logout","shouldNotRemountMain","promise","headers","Accept","credentials","initializeAppState","clearLocalStorageData","useXpProgressStyles","xpProgress","setXpProgress","isStillValid","_getXpProgress","getXpProgress","x","width210","width0","necessaryXp","LinearProgress","value","linearProgress","useProgress","loadAllGenres","allGenres","kanaProgress","setKanaProgress","hiraganaProgress","setHiraganaProgress","_useState5","_useState6","katakanaProgress","setKatakanaProgress","_useState7","_useState8","vocabProgress","setVocabProgress","_useState9","_useState10","kanjiProgress","setKanjiProgress","_useState11","_useState12","enToHiraganaProgress","setEnToHiraganaProgress","_useState13","_useState14","enToKanjiProgress","setEnToKanjiProgress","_useState15","_useState16","vocabListProgress","setVocabListProgress","_useState17","_useState18","actionGameProgress","setActionGameProgress","_useState19","_useState20","grammarProgress","setGrammarProgress","hiraganaPercentage","getKanaPercentage","katakanaPercentage","p","_getVocabPercentage","allVocabGenres","_allVocabGenres$reduc","genreId","vocab","Number","kanji","enToHiragana","enToKanji","getVocabPercentage","sFetchAllGrammar","g","sum","getGrammarSaveKey","path","totalProgress","setItem","invisibleCharacters","String","fromCharCode","str","trimmed","substring","loginSuccess","_loginSuccess","mergeLocalStorageAndSavedUserData","TermOfUsePanel","RightPanel","panelWidth","Terms","SignUp","chosen","panelClosed","email","password","setEmail","setPassword","encodedEmail","signUpClasses","useSignUpStyles","setName","nameFromEmail","replaceAll","getUserNameFromEmail","nameToSend","submissionError","setSubmissionError","realTimeError","realTimeValidate","onSubmit","sError","submissionValidate","initialXp","getAppState","xpBeforeSignUp","getSubmissionError","_useOpenState","useOpenState","partiallyOpened","containerC","_useAbTestedComment","_useAbTest2","getAbTestedComment","useAbTestedComment","Container","signUpTitleContainer","avatar","LockOutlinedIcon","signUpTitle","min","signInPanelWidth","signUpComment","Collapse","in","timeout","errorContainer","form","required","fullWidth","autoComplete","helperText","UserNameFromEmailField","fixedEmailField","UserNameField","PasswordField","TermOfUse","term","SubmitButton","submit","Grid","spacing","sidePadding","showContent","setShowContent","useContainerStyles","getContentRight","useUserNameFromEmailFieldStyles","emailValidate","iconButton","PencilIcon","typography","_useAbTest","textAlign","bold","setSignInEmail","setOpen","ForgotPassword","mode","setMode","sendEmail","result","JSON","stringify","message","getEmailError","h2Title","explanation","xs","charComment","AvatarField","isProfileEditable","useAvatarFieldStyles","AddLinkIcon","SvgIcon","useScrollToMyPageItem","scrollableContainerRef","itemName","scrollTargetRef","scrollToThisArea","initiallyOpen","AddLinksDialog","isAddLinkDialogOpen","closeDialog","_ref$user","bioLinks","useAddLinksDialogStyles","setUrl","urlError","setUrlError","setTitle","titleError","setTitleError","isError","addLinkDialog","inputContainer","newUrl","getUrlError","placeholder","onBlur","errorText","newTitle","getTitleError","titleField","PrimaryButton","fetchUpdateBioLinks","test","_unused","checkInvalidUrl","l","_fetchUpdateBioLinks","fetchPost","BioLinks","linkContainer","linkCard","ATargetBlank","link","deleteIconButton","DeleteIcon","flexWrap","gap","BioField","elementToEmphasize","editMode","setEditMode","setAddLinkDialogOpen","field","EditField","PreviewField","bio","isAddLinkButtonEmphasized","setAddLinkButtonEmphasized","useBioFieldStyles","isUrlFull","sul","buttonsContainer","linksButton","sizeChangeAnime","viewAsButton","Visibility","openOtherUserPanel","animation","animationIterationCount","animationDelay","usePreviewFieldStyles","previewContainer","markdownContainerCard","Markdown","source","editButton","pencilIcon","setBio","useEditFieldStyles","editContainer","multiline","saveButton","_fetchUpdateBio","fetchUpdateBio","_ref8","_ref9","UsernameField","visibility","trimmedName","nameValidate","InputProps","endAdornment","InputAdornment","_fetchUpdateName","fetchUpdateName","SavingsIcon","OpenableCard","_ref$buttonMessage","buttonMessage","_saveKey","saveKey","alwaysShowIcon","alwaysShowTitle","initiallyOpenedId","_ref$collapseTimeout","collapseTimeout","isNotOpenable","exclamationMark","isTitleShown","setTitleShown","useOpenableCardStyles","isTitleExist","cardRef","scrollToThisCard","closeCollapse","openCollapse","isCardOpenClicked","setCardOpenClicked","onClickOpenCollapse","_callee3","_context3","previousStatus","completelyOpened","setCompletelyOpened","shouldScrollToThisCard","onEntered","signInPanelState","AlertIcon","closedContainer","collapse","onExiting","wrapper","collapseWrapper","InviteFriendsButton","hasNoData","MailIcon","endIcon","KeyboardArrowRightIcon","itemKeyToFocus","focusedItemKey","cardId","BonusCard","invitationBonusList","validBonusCount","b","coins","titleNumber","BonusList","dark","useListStyles","recordsContainer","bonus","BonusRecord","globalSubmitting","setGlobalSubmitting","fromUser","flex","overflowY","overflowX","noData","hasBonus","_useUsernameWidth","usernameWidth","setUsernameWidth","_useScreenSize","screenHeight","cardEl","recordCardPadding","useUsernameWidth","useRecordStyles","localSubmitting","setLocalSubmitting","newSubmitting","avatarAndNameContainer","username","bothBonusRow","eachBonusRow","bonusTypeAndNumber","bonusNumber","toLocaleString","SuccessButton","receiveButton","_getAppState","fetchClaimBonusXp","_getAppState2","fetchClaimBonusCoins","border","_fetchClaimBonusCoins","invitedGuestUserId","claimedBonusCoins","fetchPostFormData","_x5","_x6","_fetchClaimBonusXp","_callee4","claimedBonusXp","_context4","fetchUsersForRanking","_fetchUsersForRanking","userIds","usersForRanking","FriendRecord","friend","scrollableContainerEl","openUserPanel","alreadyFetched","isAlreadyFetched","isNewFriend","_fetchMakeFriendOld","fetchMakeFriendOld","new","avatarContainer","nameAndIcons","icons","targetUserId","SendIcon","UnfriendIconButton","buttonRef","isPopoverOpen","setPopoverOpen","UnfriendIcon","_onClick","fetchUnfriend","_fetchUnfriend","myUserId","toUserId","relatedUsers","friendUserId","newFriendIds","FriendsTab","friends","usersForFriendList","setUsersForFriendList","f","u","_newFriendIds","sort","a","FriendList","isLoading","Tab","requests","RequestRecord","nameAndButtons","buttons","messageButton","fetchApprove","DeleteIconButton","fetchDecline","_fetchApprove","requesterUserId","friendsLimit","_fetchDecline","RequestsTab","requestedUsers","setCurrentTab","friendsForRanking","setFriendsForRanking","_friendsForRanking","RequestList","hasRequest","hadRequestOnce","setHadRequestOnce","FindFriendsButton","noFriend","PersonAddIcon","FriendsCard","useRelatedUsers","_useMemo","getFriends","getRequestedUsers","currentTab","FriendIcon","TabsContainer","useTabsContainerStyles","TabContext","Box","sx","borderColor","TabList","newTab","centered","textColor","indicatorColor","MuiTab","RequestTabLabelWithAlert","TabPanel","root","tab","borderTopRightRadius","borderTopLeftRadius","useRequestTabLabelStyles","redTitleContainer","alertIcon","ItemShopButton","noItem","StorefrontIcon","Record","_isNew","isNew","_isAdded","isAdded","num","possessedItems","isFocused","setNew","setAdded","leftBlock","leftBlockInnerContainer","appsPublicImg","image","added","rightBlock","getExplanation","ItemUseButton","itemCount","useItemUseButtonStyles","isMenuOpen","setMenuOpen","useItems","count","use","buttonProps","shouldUseOneByOne","UseButton","ItemList","_useFixedItemKeyToFoc","fixedItemKeyToFocus","setFixedItemKeyToFocus","useFixedItemKeyToFocus","ItemsCard","_possessedItems$reduc","_fetchItemSeen","fetchItemSeen","BusinessCenterIcon","originalOrderedKeys","setItemsFromServerSide","MessagedUserRecord","messagedUser","targetUserIconColorNumber","nameAndCount","unreadCount","unreadMessageCount","MessagesCard","unreadMessages","users","setUsers","isTemporallyData","setIsTemporallyData","strUserIdsWhoSentUnreadMessages","Array","from","Set","m","fromUserId","join","_sFetchUsersWhoSentMessages","sFetchUsersWhoSentMessages","usersForMessageList","MessagedUserList","messagedUsers","usersWhoSentMessagesKey","savedData","parse","shuriken","shurikenInList","ProgressCard","connect","vocabQuiz","dispatch","bindActionCreators","vocabStore","_useProgress","tableContents","progress","titlePercentage","RunningIcon","co","Link","to","closeAllRightPanels","claimRewardCoin","_claimRewardCoin","quests","fetchClaimRewardCoin","_fetchClaimRewardCoin","quest","transitionTarget","isStudyQuest","setQuestState","claimedQuestKeys","ClaimAllButton","rewardTargets","clearedQuests","claimed","isShown","MonetizationOnIcon","reverse","questTitle","reward","QuestRecord","_ref$quest","isOngoing","questKeyToScrollTo","scrollableElement","claimingAll","scrollToThisRecord","checkContainer","CheckCircleOutlineIcon","checkIcon","labelsAndButton","titleAndReward","buttonContainer","StartButton","ClaimButton","lineHight","QuestsCard","_useAppState2$","ongoingQuests","AssignmentTurnedInIcon","QuestList","isInitialView","_useQuestKeyToScroll","_ongoingQuests","_clearedQuests","setQuestKeyToScrollTo","ongoingKeys","claimedKeys","_clearedQuests$find","_getAppState$questSta","unclaimedQuestKey","questState","useQuestKeyToScroll","setClaimingAll","RankingAroundMe","player","setMyRank","initialRank","setInitialRank","_fetchUsersAroundMyRank","fetchUsersAroundMyRank","_users","_myRank","playerIndex","findIndex","splice","TrendingUpIcon","rankingWrapper","BasicRanking","collapseOpen","PrivateLessonCard","isShownMore","setShowMore","privateLessonInfo","_splitByBoolean","ticketConsumption","_splitByBoolean2","firstThree","restConsumptions","currentTickets","tickets","consumptionLogCard","memo","showMore","restLogs","lighten","XpBoostTimer","isWide","xpBoostRemainingSeconds","_useAppState3","lastUsedXpBooster","boosterMessage","XpBooster","boostMessage","ForwardIcon","centerArea","FormattedRemainingTime","remainingSeconds","MyPageTop","panelState","Content","myPageClasses","useMyPageTopStyles","_useScreenSize2","FullScreenShurikenProgress","ProfileCard","ad","onLogout","useStatusCardStyles","LevelAndXp","confirm","SignIn","rememberMe","setRememberMe","FormControlLabel","control","Checkbox","checked","SignInPanel","_useAppState2","setIsPanelOpen","isOpen","panelName","globalPanelState","topItem","PanelContent","decodeEmailForUrl","_containerRef$current","scrollIntoView","_ref$label","visible","setVisible","passwordContainer","VisibilityOff","passwordValidate","nameError","emailError","passwordError","lower","match","Helmet","desc","titleLine","AuthorName","ul","li","BasicRankingRecord","rank","isRankNumberHidden","scrollableContainer","isMyself","rankAndAvatar","nameAndLevel","initialRecordsToShow","_ref$initialRank","setScrollableElement","loading","recordsToShow","setRecordsToShow","basicRankingCard","el","onScroll","event","lazyPlaceHolder","RankingRecordContainer"],"sourceRoot":""}