{"version":3,"file":"static/js/4133.8b24eec2.chunk.js","mappings":"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","sources":["common/hooks/useAbTest.ts","common/hooks/useDelayedState.ts","common/util/Array/getRandomItem.ts","common/util/Array/orderByBoolean.ts","common/util/Scroll/relativeScroll.ts","common/util/osCheck.ts","components/shared/Button/DarkButton.tsx","components/shared/Message/MessagePanel/components/fetchSetMuteStatus.ts","components/shared/Panel/Social/Panel/components/PostCard/LeftAvatarArea.tsx","components/shared/Panel/Social/Panel/components/PostCard/MutedPost.tsx","common/util/Object/keys.ts","components/shared/Panel/Social/Panel/hooks/useSyncCommentsStateWithBackgroundPanel.ts","common/util/Array/swap.ts","components/shared/Panel/Social/Panel/components/PostCard/RightContents/CommentArea/InputFieldArea.tsx","components/shared/Panel/Social/Panel/components/PostCard/RightContents/CommentArea/MutedComment.tsx","components/shared/Panel/Social/Panel/components/PostCard/RightContents/CommentArea/CommentCard/CommentLeftAvatarArea.tsx","components/shared/Panel/Social/Panel/components/PostCard/RightContents/UserNameAndTime.tsx","icon/MuteUserOutlinedIcon.tsx","components/shared/Panel/Social/Panel/components/PostCard/RightContents/CommentArea/CommentCard/CommentLowerButtonArea.tsx","common/util/User/checkUser.ts","components/shared/Panel/Social/Panel/components/PostCard/RightContents/CommentArea/CommentCard/functions.ts","components/shared/Panel/Social/Panel/components/PostCard/RightContents/CommentArea/CommentCard/CommentRightContents.tsx","components/shared/Panel/Social/Panel/components/PostCard/RightContents/CommentArea/CommentCard/index.tsx","components/shared/Panel/Social/Panel/components/PostCard/RightContents/CommentArea/index.tsx","components/shared/Panel/Social/Panel/components/PostCard/RightContents/LowerButtonArea.tsx","components/shared/Panel/Social/Panel/components/PostCard/RightContents/index.tsx","components/shared/Panel/Social/Panel/components/PostCard/index.tsx","components/shared/Panel/Social/Panel/components/UnreadCommentNotificationList.tsx","components/shared/Panel/Social/Panel/hooks/useSyncPostsStateWithBackgroundPanel.ts","components/shared/Panel/Social/Panel/index.tsx","components/shared/User/UserAvatar/UserAvatar.tsx","components/shared/User/UserAvatar/validateImage.ts"],"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 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","export const isAndroid = /android/i.test(navigator.userAgent);\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 { fetchPost } from \"../../../../../common/util/fetch\";\r\n\r\nexport async function fetchSetMuteStatus(\r\n fromUserId: number,\r\n targetUserId: number,\r\n muted: boolean\r\n): Promise {\r\n const result = await fetchPost<\r\n {\r\n fromUserId: number;\r\n targetUserId: number;\r\n muted: boolean;\r\n },\r\n boolean\r\n >(\"api/Message/SetMuteStatus\", { fromUserId, targetUserId, muted });\r\n if (typeof result === \"boolean\") {\r\n return result;\r\n }\r\n return false;\r\n}\r\n\r\n","import { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { RefObject, useEffect, useState } from \"react\";\r\nimport { sleepAsync } from \"../../../../../../../common/functions\";\r\nimport { openOtherUserPanel } from \"../../../../../User/OtherUserPanel/functions\";\r\nimport { UserForRanking } from \"../../../../../User/types\";\r\nimport { UserAvatar } from \"../../../../../User/UserAvatar/UserAvatar\";\r\nimport { UsersConnectionHeightList } from \"../../types\";\r\n\r\nexport function LeftAvatarArea({\r\n postedUser,\r\n avatarRef,\r\n usersConnectionHeightList,\r\n connectionTop,\r\n connectionLeft,\r\n connectionWidth,\r\n}: {\r\n postedUser?: UserForRanking;\r\n avatarRef: RefObject;\r\n usersConnectionHeightList: UsersConnectionHeightList;\r\n connectionTop: number;\r\n connectionLeft: number;\r\n connectionWidth: number;\r\n}) {\r\n const c = useStyles();\r\n return (\r\n
\r\n {\r\n ev.stopPropagation();\r\n if (!postedUser) {\r\n return;\r\n }\r\n openOtherUserPanel(postedUser.userId);\r\n }}\r\n className={postedUser ? \"pointer\" : undefined}\r\n avatarRef={avatarRef}\r\n />\r\n\r\n {Object.entries(usersConnectionHeightList).map(\r\n ([commentNo, height]) =>\r\n Number(commentNo) > 0 ? (\r\n \r\n ) : null\r\n )}\r\n
\r\n );\r\n}\r\nexport const postLeftAvatarAreaWidth = 53;\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: postLeftAvatarAreaWidth,\r\n minWidth: postLeftAvatarAreaWidth,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n});\r\n\r\nconst speed = 2;\r\nfunction UsersConnection({\r\n height,\r\n width,\r\n top,\r\n left,\r\n}: {\r\n height: number;\r\n width: number;\r\n top: number;\r\n left: number;\r\n}) {\r\n const [mounted, setMounted] = useState(false);\r\n const [afterMounted, setAfterMounted] = useState(false);\r\n\r\n const heightTime = Math.ceil(height * speed);\r\n const widthTime = Math.ceil(width * speed);\r\n useEffect(() => {\r\n setMounted(true);\r\n sleepAsync(heightTime + widthTime).then(() => {\r\n setAfterMounted(true);\r\n });\r\n }, [heightTime, widthTime]);\r\n\r\n const c = useUsersConnectionStyles({\r\n mounted,\r\n afterMounted,\r\n top,\r\n left,\r\n height,\r\n width,\r\n heightTime,\r\n widthTime,\r\n });\r\n\r\n return
;\r\n}\r\nconst useUsersConnectionStyles = makeStyles<\r\n Theme,\r\n {\r\n mounted: boolean;\r\n afterMounted: boolean;\r\n top: number;\r\n left: number;\r\n height: number;\r\n width: number;\r\n heightTime: number;\r\n widthTime: number;\r\n }\r\n>(theme => ({\r\n connection: ({\r\n mounted,\r\n afterMounted,\r\n top,\r\n left,\r\n height,\r\n width,\r\n heightTime,\r\n widthTime,\r\n }) => {\r\n const borderStyle = `solid 2px ${theme.palette.grey[400]}`;\r\n const size = mounted ? { height, width } : { height: 0, width: 0 };\r\n return {\r\n position: \"absolute\",\r\n top,\r\n left,\r\n ...size,\r\n transition: afterMounted\r\n ? undefined\r\n : `height ${heightTime}ms linear, width ${widthTime}ms linear ${heightTime}ms`,\r\n borderLeft: borderStyle,\r\n borderBottom: borderStyle,\r\n borderBottomLeftRadius: 20,\r\n };\r\n },\r\n}));\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { theme } from \"../../../../../../zApps/Layout\";\r\nimport { DarkButton } from \"../../../../../Button/DarkButton\";\r\nimport { fetchSetMuteStatus } from \"../../../../../Message/MessagePanel/components/fetchSetMuteStatus\";\r\nimport { Post } from \"../../types\";\r\n\r\nexport function MutedPost({\r\n userId,\r\n post,\r\n tmpMutedUserIds,\r\n setTmpMutedUserIds,\r\n}: {\r\n userId: number;\r\n post: Post;\r\n tmpMutedUserIds: number[];\r\n setTmpMutedUserIds: (ids: number[]) => void;\r\n}) {\r\n const c = useStyles();\r\n return (\r\n
\r\n
Muted user's post
\r\n {\r\n setTmpMutedUserIds(\r\n tmpMutedUserIds.filter(id => id !== post.userId)\r\n );\r\n fetchSetMuteStatus(userId, post.userId, false);\r\n }}\r\n className={c.undo}\r\n size=\"small\"\r\n >\r\n Undo\r\n \r\n
\r\n );\r\n}\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n backgroundColor: theme.palette.grey[300],\r\n margin: 5,\r\n padding: 10,\r\n },\r\n undo: {\r\n maxHeight: 30,\r\n minHeight: 30,\r\n fontSize: \"15px !important\",\r\n lineHeight: 1,\r\n },\r\n});\r\n","export function keys(obj: T): (keyof T)[] {\r\n return Object.keys(obj);\r\n}\r\n","import { useEffect, useRef } from \"react\";\r\nimport { keys } from \"../../../../../../common/util/Object/keys\";\r\nimport { OriginKey, Post, PostComment } from \"../types\";\r\n\r\nfunction getPostKey(postedUserId: number, postNo: number) {\r\n return `${postedUserId}-${postNo}`;\r\n}\r\n\r\nconst functionsToUpdateBackgroundComments: {\r\n [key in OriginKey]: {\r\n [postKey in string]?: (newComments: PostComment[]) => void;\r\n };\r\n} = { TopPage: {}, SocialPanel: {}, OtherUserPanel: {} };\r\n\r\nexport function useSyncCommentsStateWithBackgroundPanel(\r\n post: Post,\r\n originKey: OriginKey,\r\n setComments: (comments: PostComment[]) => void,\r\n comments: PostComment[]\r\n) {\r\n useEffect(() => {\r\n // set functionsToUpdateBackgroundComments\r\n const postKey = getPostKey(post.userId, post.postNo);\r\n functionsToUpdateBackgroundComments[originKey][postKey] =\r\n newComments => {\r\n if (newComments.length > 0) {\r\n setComments(newComments);\r\n }\r\n };\r\n return () => {\r\n delete functionsToUpdateBackgroundComments[originKey][postKey];\r\n };\r\n }, [originKey, post]);\r\n\r\n const currentDataContainer = useRef<{\r\n comments: PostComment[];\r\n originKey: OriginKey;\r\n post: Post;\r\n } | null>(null);\r\n currentDataContainer.current = { comments, originKey, post };\r\n useEffect(() => {\r\n return () => {\r\n // Sync data on unmount\r\n if (!currentDataContainer.current) {\r\n return;\r\n }\r\n const { comments, originKey, post } = currentDataContainer.current;\r\n keys(functionsToUpdateBackgroundComments).forEach(key => {\r\n if (key === originKey) {\r\n return;\r\n }\r\n functionsToUpdateBackgroundComments[key][\r\n getPostKey(post.userId, post.postNo)\r\n ]?.(comments);\r\n });\r\n };\r\n }, [currentDataContainer]);\r\n}\r\n","export function swap(\r\n originalArray: T[] | ReadonlyArray,\r\n index1: number,\r\n index2: number\r\n): T[] {\r\n return originalArray.map((element, i) => {\r\n if (i === index1) {\r\n return originalArray[index2];\r\n }\r\n if (i === index2) {\r\n return originalArray[index1];\r\n }\r\n return element;\r\n });\r\n}\r\n","import 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 TextField from \"@material-ui/core/TextField\";\r\nimport AddPhotoAlternateIcon from \"@material-ui/icons/AddPhotoAlternate\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\nimport ImageIcon from \"@material-ui/icons/Image\";\r\nimport ArrowLeftIcon from \"@material-ui/icons/KeyboardArrowLeft\";\r\nimport ArrowRightIcon from \"@material-ui/icons/KeyboardArrowRight\";\r\nimport SendIcon from \"@material-ui/icons/Send\";\r\nimport { RefObject, useEffect, useRef, useState } from \"react\";\r\nimport { sleepAsync } from \"../../../../../../../../../common/functions\";\r\nimport { useScreenSize } from \"../../../../../../../../../common/hooks/useScreenSize\";\r\nimport { swap } from \"../../../../../../../../../common/util/Array/swap\";\r\nimport { isAndroid } from \"../../../../../../../../../common/util/osCheck\";\r\nimport { PrimaryButton } from \"../../../../../../../Button/PrimaryButton\";\r\nimport { User } from \"../../../../../../../User/types\";\r\nimport { UserAvatar } from \"../../../../../../../User/UserAvatar/UserAvatar\";\r\nimport {\r\n validateImage,\r\n validImageContentTypes,\r\n} from \"../../../../../../../User/UserAvatar/validateImage\";\r\n\r\nexport type SocialInputReturn = undefined | \"shouldNotClearField\";\r\nexport function InputFieldArea({\r\n user,\r\n sendText,\r\n className,\r\n placeholder,\r\n disabled,\r\n onEdit,\r\n autoFocus,\r\n inputRef,\r\n}: {\r\n user?: User;\r\n sendText: (text: string, file: File[]) => Promise;\r\n className?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n onEdit?: () => void;\r\n autoFocus?: boolean;\r\n inputRef?: RefObject;\r\n}) {\r\n const { screenWidth } = useScreenSize();\r\n const isWide = screenWidth >= 768;\r\n\r\n const [text, setText] = useState(\"\");\r\n const [files, setFiles] = useState([]);\r\n\r\n const error = validate(text, files);\r\n\r\n const imageInputRef = useRef(null);\r\n\r\n const [isFocusedStyle, setIsFocusedStyle] = useState(\r\n !!autoFocus && isAndroid // autoFocusใ‚’ใ™ใ‚‹ใจใ‚ขใƒณใƒ‰ใƒญใ‚คใƒ‰ใงใ‚ฝใƒ•ใƒˆใ‚ฆใ‚งใ‚ขใ‚ญใƒผใƒœใƒผใƒ‰ใŒๅ‡บใฆใ—ใพใ†ๅ•้กŒใŒใ‚ใ‚‹ใŸใ‚ใ€ใ‚นใ‚ฟใ‚คใƒซใ ใ‘ๆœ€ๅˆใ‹ใ‚‰ใƒ•ใ‚ฉใƒผใ‚ซใ‚นใ—ใŸใ‚ˆใ†ใช่ฆ‹ใŸ็›ฎใซใ™ใ‚‹\r\n );\r\n\r\n const isSendButtonDisabled =\r\n (!text.trim() && files.length < 1) || !!error || !!disabled;\r\n const c = useCommentFieldStyles({\r\n isWide,\r\n isSendButtonDisabled,\r\n isPlaceholderLoaded: !!placeholder,\r\n isFocusedStyle,\r\n });\r\n\r\n const onEditContainer = useRef(() => {});\r\n if (onEdit) {\r\n onEditContainer.current = onEdit;\r\n }\r\n useEffect(() => {\r\n if (typeof onEditContainer.current === \"function\") {\r\n const intervalId = setInterval(() => {\r\n onEditContainer.current();\r\n }, 50);\r\n sleepAsync(1000).then(() => {\r\n clearInterval(intervalId);\r\n });\r\n }\r\n }, [onEditContainer, text, files]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n\r\n {\r\n setText(ev.target.value || \"\");\r\n }}\r\n inputProps={{\r\n className: c.input,\r\n ref: inputRef,\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 imageInputRef.current?.click();\r\n }}\r\n className={c.imageIconButton}\r\n >\r\n \r\n \r\n \r\n ),\r\n }}\r\n onBlur={() => {\r\n setIsFocusedStyle(false);\r\n }}\r\n />\r\n\r\n
\r\n {\r\n if (isSendButtonDisabled) {\r\n return;\r\n }\r\n const previousText = text;\r\n const previousFiles = files;\r\n\r\n const sendResult = sendText(text.trim(), files); // Send\r\n\r\n setText(\"\");\r\n setFiles([]);\r\n if (imageInputRef.current) {\r\n imageInputRef.current.value = \"\";\r\n }\r\n\r\n if ((await sendResult) === \"shouldNotClearField\") {\r\n setText(previousText);\r\n setFiles(previousFiles);\r\n }\r\n }}\r\n >\r\n \r\n \r\n
\r\n
\r\n\r\n {files.length > 0 && (\r\n
\r\n {files.map((file, index) => (\r\n
\r\n \r\n {\r\n setFiles(\r\n files.filter((f, i) => i !== index)\r\n );\r\n if (imageInputRef.current) {\r\n imageInputRef.current.value = \"\";\r\n }\r\n }}\r\n className={c.removeImageIconButton}\r\n >\r\n \r\n \r\n\r\n {index > 0 && (\r\n {\r\n setFiles(swap(files, index, index - 1));\r\n }}\r\n >\r\n \r\n \r\n )}\r\n {index < files.length - 1 && (\r\n {\r\n setFiles(swap(files, index, index + 1));\r\n }}\r\n >\r\n \r\n \r\n )}\r\n
\r\n ))}\r\n {\r\n imageInputRef.current?.click();\r\n }}\r\n >\r\n \r\n \r\n
\r\n )}\r\n {\r\n if (!target.files || !target.files[0]) {\r\n return;\r\n }\r\n const targetFiles = Array.from(target.files);\r\n const err = targetFiles.reduce(\r\n (acc, file) => {\r\n return acc || validateImage(file);\r\n },\r\n null\r\n );\r\n if (err) {\r\n alert(err);\r\n return;\r\n }\r\n setFiles([...files, ...targetFiles]);\r\n if (imageInputRef.current) {\r\n imageInputRef.current.value = \"\";\r\n }\r\n }}\r\n multiple\r\n />\r\n
\r\n );\r\n}\r\n\r\nconst sendButtonSize = 39;\r\nconst imageButtonSize = 30;\r\nconst useCommentFieldStyles = makeStyles<\r\n Theme,\r\n {\r\n isWide: boolean;\r\n isSendButtonDisabled: boolean;\r\n isPlaceholderLoaded: boolean;\r\n isFocusedStyle: boolean;\r\n }\r\n>(theme => ({\r\n container: {\r\n display: \"flex\",\r\n },\r\n input: ({ isWide, isPlaceholderLoaded }) => ({\r\n ...(isWide\r\n ? {\r\n paddingTop: 10,\r\n marginTop: -6,\r\n }\r\n : { paddingTop: 10, marginTop: -8 }),\r\n transition: \"all 500ms\",\r\n opacity: isPlaceholderLoaded ? 1 : 0,\r\n fontSize: 17, // To prevent iPhone from focusing by making this more than 16\r\n lineHeight: 1.3,\r\n }),\r\n textField: ({ isWide, isFocusedStyle }) => ({\r\n padding: 0,\r\n width: \"100%\",\r\n marginLeft: 10,\r\n marginTop: isWide ? 0 : 2,\r\n \"& div:before\": isFocusedStyle\r\n ? {\r\n borderBottom: `solid 2px ${theme.palette.primary.main}`,\r\n }\r\n : {},\r\n }),\r\n errorText: { color: theme.palette.secondary.main, fontWeight: \"bold\" },\r\n buttonContainer: ({ isSendButtonDisabled }) => ({\r\n width: isSendButtonDisabled ? 0 : sendButtonSize,\r\n minWidth: isSendButtonDisabled ? 0 : sendButtonSize,\r\n marginLeft: isSendButtonDisabled ? 10 : 0,\r\n overflow: \"hidden\",\r\n display: \"flex\",\r\n minHeight: \"100%\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n position: \"relative\",\r\n right: 2,\r\n transition: \"all 200ms\",\r\n marginBottom: 2,\r\n }),\r\n sendButton: {\r\n maxHeight: sendButtonSize,\r\n minHeight: sendButtonSize,\r\n maxWidth: sendButtonSize,\r\n minWidth: sendButtonSize,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n borderRadius: 4,\r\n },\r\n sendIcon: {\r\n height: 20,\r\n width: 20,\r\n color: \"white\",\r\n },\r\n inputAdornment: {\r\n marginRight: 5,\r\n paddingTop: 2,\r\n },\r\n imageIconButton: {\r\n maxHeight: imageButtonSize,\r\n minHeight: imageButtonSize,\r\n maxWidth: imageButtonSize,\r\n minWidth: imageButtonSize,\r\n },\r\n imageIcon: { width: 30, height: 30 },\r\n imageContainer: {\r\n position: \"relative\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n removeImageIconButton: {\r\n position: \"absolute\",\r\n right: 1,\r\n top: 1,\r\n width: 20,\r\n height: 20,\r\n backgroundColor: \"rgba(255,255,255,0.7)\",\r\n color: \"black\",\r\n },\r\n leftArrowButton: {\r\n position: \"absolute\",\r\n left: 1,\r\n bottom: 1,\r\n width: 20,\r\n height: 20,\r\n color: \"black\",\r\n backgroundColor: \"rgba(255,255,255,0.7)\",\r\n \"&:hover\": {\r\n backgroundColor: \"rgba(255,255,255,0.6)\",\r\n },\r\n },\r\n rightArrowButton: {\r\n position: \"absolute\",\r\n right: 1,\r\n bottom: 1,\r\n width: 20,\r\n height: 20,\r\n color: \"black\",\r\n backgroundColor: \"rgba(255,255,255,0.7)\",\r\n \"&:hover\": {\r\n backgroundColor: \"rgba(255,255,255,0.6)\",\r\n },\r\n },\r\n addPhotoButton: {\r\n width: 35,\r\n height: 35,\r\n margin: \"auto 25px auto 10px\",\r\n },\r\n addPhotoIcon: { width: 30, height: 30 },\r\n previewContainer: {\r\n marginLeft: 50,\r\n marginRight: 2,\r\n display: \"flex\",\r\n gap: 10,\r\n padding: 2,\r\n backgroundColor: theme.palette.grey[200],\r\n overflowX: \"auto\",\r\n },\r\n previewImage: {\r\n height: 100,\r\n objectFit: \"contain\",\r\n },\r\n}));\r\n\r\nconst maxTextLength = 300;\r\nconst maxUploadableFiles = 8; // If this value is changed, don't forget to change the length of ImageExtensions in DB tables.\r\nfunction validate(text: string, files: File[]) {\r\n if (text.length > maxTextLength) {\r\n return `Text must be less than or equal to ${maxTextLength} characters`;\r\n }\r\n if (files.length > maxUploadableFiles) {\r\n return `Sorry! You cannot select more than ${maxUploadableFiles} files!`;\r\n }\r\n return undefined;\r\n}\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { DarkButton } from \"../../../../../../../Button/DarkButton\";\r\nimport { fetchSetMuteStatus } from \"../../../../../../../Message/MessagePanel/components/fetchSetMuteStatus\";\r\nimport { PostComment } from \"../../../../types\";\r\n\r\nexport function MutedComment({\r\n userId,\r\n comment,\r\n tmpMutedUserIds,\r\n setTmpMutedUserIds,\r\n}: {\r\n userId: number;\r\n comment: PostComment;\r\n tmpMutedUserIds: number[];\r\n setTmpMutedUserIds: (ids: number[]) => void;\r\n}) {\r\n const c = useStyles();\r\n return (\r\n
\r\n
Muted user's post
\r\n {\r\n setTmpMutedUserIds(\r\n tmpMutedUserIds.filter(\r\n id => id !== comment.commentedUserId\r\n )\r\n );\r\n fetchSetMuteStatus(userId, comment.commentedUserId, false);\r\n }}\r\n className={c.undo}\r\n size=\"small\"\r\n >\r\n Undo\r\n \r\n
\r\n );\r\n}\r\nconst useStyles = makeStyles(theme => ({\r\n container: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n backgroundColor: theme.palette.grey[300],\r\n margin: 5,\r\n padding: 10,\r\n },\r\n undo: {\r\n maxHeight: 30,\r\n minHeight: 30,\r\n fontSize: \"15px !important\",\r\n lineHeight: 1,\r\n },\r\n}));\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { useEffect, useRef } from \"react\";\r\nimport { openOtherUserPanel } from \"../../../../../../../../User/OtherUserPanel/functions\";\r\nimport { UserForRanking } from \"../../../../../../../../User/types\";\r\nimport { UserAvatar } from \"../../../../../../../../User/UserAvatar/UserAvatar\";\r\nimport { ChangeCommenterAvatarElement } from \"../../../../../types\";\r\n\r\nexport function CommentLeftAvatarArea({\r\n postedUser,\r\n changeCommenterAvatarElement,\r\n commentNo,\r\n}: {\r\n postedUser?: UserForRanking;\r\n changeCommenterAvatarElement: ChangeCommenterAvatarElement;\r\n commentNo: number;\r\n}) {\r\n const c = useStyles();\r\n const avatarRef = useRef(null);\r\n useEffect(() => {\r\n const el = avatarRef.current;\r\n if (el) {\r\n changeCommenterAvatarElement(\"add\", commentNo, el);\r\n return () => {\r\n changeCommenterAvatarElement(\"remove\", commentNo);\r\n };\r\n }\r\n }, [commentNo]);\r\n return (\r\n
\r\n {\r\n ev.stopPropagation();\r\n if (!postedUser) {\r\n return;\r\n }\r\n openOtherUserPanel(postedUser.userId);\r\n }}\r\n className={postedUser ? \"pointer\" : undefined}\r\n avatarRef={avatarRef}\r\n />\r\n
\r\n );\r\n}\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: 60,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n});\r\n","import { Theme, makeStyles } from \"@material-ui/core/styles\";\r\nimport { UserForRanking } from \"../../../../../../User/types\";\r\n\r\nexport function UserNameAndTime({\r\n postedUser,\r\n minutesAgo,\r\n hideLevel,\r\n hideTime,\r\n}: {\r\n postedUser: UserForRanking;\r\n minutesAgo: number;\r\n hideLevel?: boolean;\r\n hideTime?: boolean;\r\n}) {\r\n const c = useStyles({ hideTime });\r\n return (\r\n
\r\n
\r\n {postedUser.name}\r\n {!hideLevel && (\r\n Lv. {postedUser?.level}\r\n )}\r\n
\r\n
{getSocialPostTime(minutesAgo)}
\r\n
\r\n );\r\n}\r\nconst useStyles = makeStyles(theme => ({\r\n container: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n },\r\n nameAndLevel: {\r\n borderBottom: \"solid\",\r\n borderBottomColor: theme.palette.grey[100],\r\n borderBottomWidth: 1,\r\n width: \"100%\",\r\n paddingBottom: 3,\r\n },\r\n name: {\r\n fontWeight: \"bold\",\r\n fontSize: 20,\r\n wordBreak: \"break-all\",\r\n marginRight: 10,\r\n },\r\n level: {\r\n color: theme.palette.grey[500],\r\n width: 40,\r\n fontWeight: \"normal\",\r\n fontSize: \"small\",\r\n marginRight: 20,\r\n whiteSpace: \"nowrap\",\r\n },\r\n time: ({ hideTime }) => ({\r\n opacity: hideTime ? 0 : 1,\r\n transition: \"all 2000ms\",\r\n color: theme.palette.grey[700],\r\n }),\r\n}));\r\n\r\nexport function getSocialPostTime(minutesAgo: number): string {\r\n if (minutesAgo < 1) {\r\n return \"now\";\r\n }\r\n const hour = Math.floor(minutesAgo / 60);\r\n if (hour < 1) {\r\n return `${minutesAgo}m`;\r\n }\r\n const day = Math.floor(minutesAgo / (60 * 24));\r\n if (day < 1) {\r\n return `${hour}h`;\r\n }\r\n if (day < 30) {\r\n return `${day}d`;\r\n }\r\n const formatter = new Intl.DateTimeFormat(undefined, {\r\n year: \"numeric\",\r\n month: \"2-digit\",\r\n day: \"2-digit\",\r\n });\r\n return formatter.format(new Date(Date.now() - minutesAgo * 60 * 1000));\r\n}\r\n","import SvgIcon, { SvgIconProps } from \"@material-ui/core/SvgIcon\";\r\n\r\nexport function MuteUserOutlinedIcon(props: SvgIconProps) {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport ChatBubbleOutlineIcon from \"@material-ui/icons/ChatBubbleOutline\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\nimport FavoriteIcon from \"@material-ui/icons/Favorite\";\r\nimport FavoriteBorderIcon from \"@material-ui/icons/FavoriteBorder\";\r\nimport { changeAppState } from \"../../../../../../../../../../common/appState\";\r\nimport { MuteUserOutlinedIcon } from \"../../../../../../../../../../icon/MuteUserOutlinedIcon\";\r\nimport { fetchSetMuteStatus } from \"../../../../../../../../Message/MessagePanel/components/fetchSetMuteStatus\";\r\nimport { User } from \"../../../../../../../../User/types\";\r\nimport { PostComment } from \"../../../../../types\";\r\n\r\nexport function CommentLowerButtonArea({\r\n comment,\r\n user,\r\n tmpMutedUserIds,\r\n setTmpMutedUserIds,\r\n isMyComment,\r\n hasOwnLike,\r\n deleteComment,\r\n likeComment,\r\n unlikeComment,\r\n likeCount,\r\n commentCount,\r\n}: {\r\n comment: PostComment;\r\n user?: User;\r\n tmpMutedUserIds: number[];\r\n setTmpMutedUserIds: (ids: number[]) => void;\r\n isMyComment: boolean;\r\n hasOwnLike: boolean;\r\n deleteComment: () => void;\r\n likeComment: () => void;\r\n unlikeComment: () => void;\r\n likeCount: number;\r\n commentCount: number;\r\n}) {\r\n const c = useCommentLowerButtonAreaStyles();\r\n return (\r\n
\r\n
\r\n \r\n {commentCount > 0 && commentCount.toLocaleString()}\r\n
\r\n\r\n \r\n\r\n {isMyComment ? (\r\n {\r\n ev.stopPropagation();\r\n deleteComment();\r\n }}\r\n >\r\n \r\n
\r\n ) : (\r\n {\r\n ev.stopPropagation();\r\n if (!user) {\r\n changeAppState(\"signInPanelState\", {\r\n type: \"signUp\",\r\n });\r\n return;\r\n }\r\n setTmpMutedUserIds(\r\n tmpMutedUserIds.concat(comment.commentedUserId)\r\n );\r\n fetchSetMuteStatus(\r\n user.userId,\r\n comment.commentedUserId,\r\n true\r\n );\r\n }}\r\n >\r\n \r\n
\r\n )}\r\n \r\n );\r\n}\r\nconst useCommentLowerButtonAreaStyles = makeStyles(theme => ({\r\n container: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n color: theme.palette.grey[700],\r\n fontSize: \"small\",\r\n paddingRight: 5,\r\n },\r\n comment: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n cursor: \"pointer\",\r\n },\r\n delete: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n cursor: \"pointer\",\r\n },\r\n mute: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n cursor: \"pointer\",\r\n },\r\n}));\r\n\r\nfunction LikeButton({\r\n hasOwnLike,\r\n likeComment,\r\n unlikeComment,\r\n likeCount,\r\n}: {\r\n hasOwnLike: boolean;\r\n likeComment: () => void;\r\n unlikeComment: () => void;\r\n likeCount: number;\r\n}) {\r\n const c = useLikeButtonStyles();\r\n return (\r\n {\r\n ev.stopPropagation();\r\n if (hasOwnLike) {\r\n unlikeComment();\r\n return;\r\n }\r\n likeComment();\r\n }}\r\n >\r\n {hasOwnLike ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {likeCount > 0 && likeCount.toLocaleString()}\r\n \r\n );\r\n}\r\nconst useLikeButtonStyles = makeStyles({\r\n container: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n cursor: \"pointer\",\r\n },\r\n favorite: { color: \"red\" },\r\n});\r\n","import { User } from \"../../../components/shared/User/types\";\r\nimport { changeAppState, getAppState } from \"../../appState\";\r\n\r\nexport function checkUser(): User | null {\r\n const { user } = getAppState();\r\n if (!user) {\r\n changeAppState(\"signInPanelState\", {\r\n type: \"signUp\",\r\n });\r\n return null;\r\n }\r\n return user;\r\n}\r\n\r\n","import {\r\n fetchPost,\r\n fetchPostFormData,\r\n} from \"../../../../../../../../../../common/util/fetch\";\r\nimport { checkUser } from \"../../../../../../../../../../common/util/User/checkUser\";\r\nimport { FetchResult } from \"../../../../../../../../../../types/fetch\";\r\nimport { shurikenProgressKey } from \"../../../../../../../../Markdown/ImageRender/SocialPostImage\";\r\nimport { User, UserForRanking } from \"../../../../../../../../User/types\";\r\nimport { Post, PostComment } from \"../../../../../types\";\r\nimport { SocialInputReturn } from \"../InputFieldArea\";\r\n\r\nasync function fetchLikeComment(\r\n userId: number,\r\n postNo: number,\r\n postedUserId: number,\r\n replyTargetUserId: number,\r\n replyTargetCommentNo: number\r\n): Promise<\r\n FetchResult<{\r\n comments: PostComment[];\r\n commentedUsers: UserForRanking[];\r\n }>\r\n> {\r\n return fetchPost<\r\n {\r\n userId: number;\r\n postNo: number;\r\n postedUserId: number;\r\n replyTargetUserId: number;\r\n replyTargetCommentNo: number;\r\n },\r\n {\r\n comments: PostComment[];\r\n commentedUsers: UserForRanking[];\r\n }\r\n >(\"api/PostComment/LikeComment\", {\r\n userId,\r\n postNo,\r\n postedUserId,\r\n replyTargetUserId,\r\n replyTargetCommentNo,\r\n });\r\n}\r\n\r\nasync function fetchDeleteComment(\r\n userId: number,\r\n postedUserId: number,\r\n postNo: number,\r\n commentNo: number\r\n): Promise {\r\n await fetchPost<\r\n {\r\n userId: number;\r\n postedUserId: number;\r\n postNo: number;\r\n commentNo: number;\r\n },\r\n {\r\n comments: PostComment[];\r\n commentedUsers: UserForRanking[];\r\n }\r\n >(\"api/PostComment/DeleteComment\", {\r\n userId,\r\n postedUserId,\r\n postNo,\r\n commentNo,\r\n });\r\n}\r\n\r\nasync function fetchUnlikeComment(\r\n userId: number,\r\n postedUserId: number,\r\n postNo: number,\r\n commentNo: number\r\n): Promise {\r\n await fetchPost<\r\n {\r\n userId: number;\r\n postedUserId: number;\r\n postNo: number;\r\n commentNo: number;\r\n },\r\n {\r\n comments: PostComment[];\r\n commentedUsers: UserForRanking[];\r\n }\r\n >(\"api/PostComment/UnlikeComment\", {\r\n userId,\r\n postedUserId,\r\n postNo,\r\n commentNo,\r\n });\r\n}\r\n\r\nfunction getTmpCommentLike(post: Post, user: User, comment: PostComment) {\r\n return {\r\n postedUserId: post.userId,\r\n postNo: post.postNo,\r\n commentNo: 0,\r\n commentedUserId: user.userId,\r\n minutesAgo: 0,\r\n text: \"\",\r\n isLike: true,\r\n isRead: false,\r\n replyTargetUserId: comment.commentedUserId,\r\n replyTargetCommentNo: comment.commentNo,\r\n isReplyTargetRead: false,\r\n deleted: false,\r\n };\r\n}\r\n\r\nexport const getDeleteComment =\r\n (\r\n post: Post,\r\n comment: PostComment,\r\n deleteComment: (\r\n targetComment: PostComment,\r\n deleteFromServerSie: () => Promise\r\n ) => Promise\r\n ) =>\r\n () => {\r\n const user = checkUser();\r\n if (!user) {\r\n return;\r\n }\r\n if (confirm(\"This comment will be deleted.\\nAre you sure?\")) {\r\n deleteComment(comment, async () => {\r\n await fetchDeleteComment(\r\n user.userId,\r\n post.userId,\r\n post.postNo,\r\n comment.commentNo\r\n );\r\n });\r\n }\r\n };\r\n\r\nexport const getLikeComment =\r\n (\r\n post: Post,\r\n comment: PostComment,\r\n comments: PostComment[],\r\n setComments: (comments: PostComment[]) => void,\r\n setCommentedUsers: (users: UserForRanking[]) => void,\r\n showReply: () => void\r\n ) =>\r\n () => {\r\n const user = checkUser();\r\n if (!user) {\r\n return;\r\n }\r\n showReply();\r\n setComments([getTmpCommentLike(post, user, comment), ...comments]);\r\n\r\n fetchLikeComment(\r\n user.userId,\r\n post.postNo,\r\n post.userId,\r\n comment.commentedUserId,\r\n comment.commentNo\r\n ).then(r => {\r\n if (\"error\" in r) {\r\n return;\r\n }\r\n setComments(r.comments);\r\n setCommentedUsers(r.commentedUsers);\r\n });\r\n };\r\n\r\nexport const getUnlikeComment =\r\n (\r\n post: Post,\r\n comment: PostComment,\r\n comments: PostComment[],\r\n deleteComment: (\r\n targetComment: PostComment,\r\n deleteFromServerSie: () => Promise\r\n ) => Promise\r\n ) =>\r\n () => {\r\n const user = checkUser();\r\n if (!user) {\r\n return;\r\n }\r\n const targetComment = comments.find(\r\n com =>\r\n com.replyTargetCommentNo === comment.commentNo &&\r\n com.isLike &&\r\n com.commentedUserId === user.userId\r\n );\r\n if (!targetComment || targetComment.commentNo < 1) {\r\n return;\r\n }\r\n deleteComment(targetComment, async () => {\r\n await fetchUnlikeComment(\r\n user.userId,\r\n post.userId,\r\n post.postNo,\r\n targetComment.commentNo\r\n );\r\n });\r\n };\r\n\r\nexport const checkUnreadComment = (\r\n com: PostComment,\r\n unreadCommentNos: number[],\r\n comments: PostComment[]\r\n): boolean => {\r\n if (unreadCommentNos.length < 1) {\r\n return false;\r\n }\r\n if (unreadCommentNos.includes(com.commentNo)) {\r\n return true;\r\n }\r\n return comments.some(\r\n co =>\r\n co.replyTargetCommentNo === com.commentNo &&\r\n checkUnreadComment(co, unreadCommentNos, comments)\r\n );\r\n};\r\n\r\nexport function getTmpComment(\r\n post: Post,\r\n commentedUserId: number,\r\n text: string,\r\n replyTargetUserId: number | null = null,\r\n replyTargetCommentNo: number | null = null,\r\n hasFile: boolean\r\n): PostComment {\r\n return {\r\n postedUserId: post.userId,\r\n postNo: post.postNo,\r\n commentNo: 0,\r\n commentedUserId,\r\n minutesAgo: 0,\r\n text: hasFile ? `${text}![shuriken](${shurikenProgressKey})` : text,\r\n isLike: false,\r\n isRead: false,\r\n replyTargetUserId,\r\n replyTargetCommentNo,\r\n isReplyTargetRead: false,\r\n deleted: false,\r\n };\r\n}\r\n\r\nexport async function registerImageComment(\r\n userId: number,\r\n postedUserId: number,\r\n postNo: number,\r\n text: string,\r\n files: File[],\r\n replyTargetUserId: number = 0,\r\n replyTargetCommentNo: number = 0\r\n) {\r\n const formData = new FormData();\r\n formData.append(\"userId\", userId.toString());\r\n formData.append(\"postedUserId\", postedUserId.toString());\r\n formData.append(\"postNo\", postNo.toString());\r\n formData.append(\"text\", text);\r\n for (let file of files) {\r\n formData.append(\"files\", file);\r\n }\r\n formData.append(\"replyTargetUserId\", replyTargetUserId.toString());\r\n formData.append(\"replyTargetCommentNo\", replyTargetCommentNo.toString());\r\n\r\n await fetchPostFormData(\"api/PostComment/AddImageComment\", formData);\r\n}\r\n\r\nexport async function fetchCommentToPost(\r\n userId: number,\r\n postedUserId: number,\r\n postNo: number,\r\n text: string\r\n): Promise {\r\n await fetchPost<\r\n {\r\n userId: number;\r\n postedUserId: number;\r\n postNo: number;\r\n text: string;\r\n },\r\n undefined\r\n >(\"api/PostComment/AddCommentToPost\", {\r\n userId,\r\n postedUserId,\r\n postNo,\r\n text,\r\n });\r\n}\r\n\r\nexport async function fetchCommentToComment(\r\n userId: number,\r\n postedUserId: number,\r\n postNo: number,\r\n text: string,\r\n replyTargetUserId: number = 0,\r\n replyTargetCommentNo: number = 0\r\n): Promise {\r\n await fetchPost<\r\n {\r\n userId: number;\r\n postedUserId: number;\r\n postNo: number;\r\n text: string;\r\n replyTargetUserId: number;\r\n replyTargetCommentNo: number;\r\n },\r\n undefined\r\n >(\"api/PostComment/AddCommentToComment\", {\r\n userId,\r\n postedUserId,\r\n postNo,\r\n text,\r\n replyTargetUserId,\r\n replyTargetCommentNo,\r\n });\r\n}\r\n\r\nexport const getSendText =\r\n (\r\n addTmpComment: (tmpComment: PostComment) => void,\r\n post: Post,\r\n addCommentCount: (count: number) => void,\r\n replyTargetComment?: PostComment\r\n ) =>\r\n async (text: string, files: File[]): Promise => {\r\n const user = checkUser();\r\n if (!user) {\r\n return \"shouldNotClearField\";\r\n }\r\n\r\n const hasFile = files.length > 0;\r\n\r\n addTmpComment(\r\n getTmpComment(\r\n post,\r\n user.userId,\r\n text,\r\n replyTargetComment?.commentedUserId,\r\n replyTargetComment?.commentNo,\r\n hasFile\r\n )\r\n );\r\n\r\n if (hasFile) {\r\n await registerImageComment(\r\n user.userId,\r\n post.userId,\r\n post.postNo,\r\n text,\r\n files,\r\n replyTargetComment?.commentedUserId,\r\n replyTargetComment?.commentNo\r\n );\r\n } else {\r\n if (replyTargetComment) {\r\n await fetchCommentToComment(\r\n user.userId,\r\n post.userId,\r\n post.postNo,\r\n text,\r\n replyTargetComment.commentedUserId,\r\n replyTargetComment.commentNo\r\n );\r\n } else {\r\n await fetchCommentToPost(\r\n user.userId,\r\n post.userId,\r\n post.postNo,\r\n text\r\n );\r\n }\r\n }\r\n addCommentCount(1);\r\n };\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { splitByBoolean } from \"../../../../../../../../../../common/util/Array/orderByBoolean\";\r\nimport ShurikenProgress from \"../../../../../../../../Animations/ShurikenProgress\";\r\nimport { Markdown } from \"../../../../../../../../Markdown\";\r\nimport { openOtherUserPanel } from \"../../../../../../../../User/OtherUserPanel/functions\";\r\nimport { User, UserForRanking } from \"../../../../../../../../User/types\";\r\nimport { Post, PostComment } from \"../../../../../types\";\r\nimport { UserNameAndTime } from \"../../UserNameAndTime\";\r\nimport { CommentLowerButtonArea } from \"./CommentLowerButtonArea\";\r\nimport {\r\n getDeleteComment,\r\n getLikeComment,\r\n getUnlikeComment,\r\n} from \"./functions\";\r\n\r\nexport function CommentRightContents({\r\n post,\r\n comment,\r\n user,\r\n tmpMutedUserIds,\r\n setTmpMutedUserIds,\r\n comments,\r\n setComments,\r\n setCommentedUsers,\r\n deleteComment,\r\n commentedUser,\r\n commentsAndLikesThisComment,\r\n showReply,\r\n replyTargetUser,\r\n}: {\r\n post: Post;\r\n comment: PostComment;\r\n user?: User;\r\n tmpMutedUserIds: number[];\r\n setTmpMutedUserIds: (ids: number[]) => void;\r\n comments: PostComment[];\r\n setComments: (comments: PostComment[]) => void;\r\n setCommentedUsers: (users: UserForRanking[]) => void;\r\n deleteComment: (\r\n targetComment: PostComment,\r\n deleteFromServerSie: () => Promise\r\n ) => Promise;\r\n commentedUser: UserForRanking;\r\n commentsAndLikesThisComment: PostComment[];\r\n showReply: () => void;\r\n replyTargetUser: UserForRanking | undefined;\r\n}) {\r\n const [likesToThisComment, commentsToThisComment] = splitByBoolean(\r\n commentsAndLikesThisComment,\r\n com => com.isLike\r\n );\r\n\r\n const isMyComment = comment.commentedUserId === user?.userId;\r\n const showLowerButtons = !comment.isLike;\r\n\r\n const c = useStyles();\r\n\r\n return (\r\n
\r\n \r\n\r\n {replyTargetUser && (\r\n {\r\n ev.stopPropagation();\r\n openOtherUserPanel(replyTargetUser.userId);\r\n }}\r\n >\r\n To: {replyTargetUser.name}\r\n \r\n )}\r\n\r\n \r\n {comment.text || comment.isLike ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n\r\n {showLowerButtons && (\r\n com.commentedUserId === user?.userId\r\n )}\r\n deleteComment={getDeleteComment(\r\n post,\r\n comment,\r\n deleteComment\r\n )}\r\n likeComment={getLikeComment(\r\n post,\r\n comment,\r\n comments,\r\n setComments,\r\n setCommentedUsers,\r\n showReply\r\n )}\r\n unlikeComment={getUnlikeComment(\r\n post,\r\n comment,\r\n comments,\r\n deleteComment\r\n )}\r\n likeCount={likesToThisComment.length}\r\n commentCount={commentsToThisComment.length}\r\n />\r\n )}\r\n \r\n );\r\n}\r\nconst useStyles = makeStyles(theme => ({\r\n container: { width: \"100%\" },\r\n markdownWithButtons: {\r\n marginBottom: 5,\r\n paddingBottom: 10,\r\n paddingTop: 10,\r\n borderBottom: `solid 1px ${theme.palette.grey[100]}`,\r\n },\r\n markdownWithoutButtons: {\r\n marginBottom: 5,\r\n paddingTop: 5,\r\n },\r\n replyTargetUser: { color: theme.palette.primary.main, cursor: \"pointer\" },\r\n}));\r\n","import Card from \"@material-ui/core/Card\";\r\nimport Collapse from \"@material-ui/core/Collapse\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { splitByBoolean } from \"../../../../../../../../../../common/util/Array/orderByBoolean\";\r\nimport { isAndroid } from \"../../../../../../../../../../common/util/osCheck\";\r\nimport { User, UserForRanking } from \"../../../../../../../../User/types\";\r\nimport {\r\n ChangeCommenterAvatarElement,\r\n OriginKey,\r\n Post,\r\n PostComment,\r\n} from \"../../../../../types\";\r\nimport { InputFieldArea } from \"../InputFieldArea\";\r\nimport { MutedComment } from \"../MutedComment\";\r\nimport { CommentLeftAvatarArea } from \"./CommentLeftAvatarArea\";\r\nimport { CommentRightContents } from \"./CommentRightContents\";\r\nimport { checkUnreadComment, getSendText } from \"./functions\";\r\n\r\nexport const collapseTimeout = 500;\r\nexport const collapseTimeStep = 10;\r\n\r\nexport function CommentCard({\r\n post,\r\n comment,\r\n user,\r\n tmpMutedUserIds,\r\n setTmpMutedUserIds,\r\n comments,\r\n setComments,\r\n setCommentedUsers,\r\n deleteComment,\r\n commentedUsers,\r\n changeCommenterAvatarElement,\r\n refreshUsersConnectionHeightList,\r\n unreadCommentNos,\r\n depth = 0,\r\n showOnlyUnreadComment,\r\n addTmpComment,\r\n addCommentCount,\r\n isLastCard,\r\n setShowOnlyUnreadComment,\r\n keepRefreshing,\r\n originKey,\r\n}: {\r\n post: Post;\r\n comment: PostComment;\r\n user?: User;\r\n tmpMutedUserIds: number[];\r\n setTmpMutedUserIds: (ids: number[]) => void;\r\n comments: PostComment[];\r\n setComments: (comments: PostComment[]) => void;\r\n setCommentedUsers: (users: UserForRanking[]) => void;\r\n deleteComment: (\r\n targetComment: PostComment,\r\n deleteFromServerSie: () => Promise\r\n ) => Promise;\r\n commentedUsers: UserForRanking[];\r\n changeCommenterAvatarElement: ChangeCommenterAvatarElement;\r\n refreshUsersConnectionHeightList: () => void;\r\n unreadCommentNos: number[];\r\n depth?: number;\r\n showOnlyUnreadComment: boolean;\r\n addTmpComment: (tmpComment: PostComment) => void;\r\n addCommentCount: (addedCount: number) => void;\r\n isLastCard?: boolean;\r\n setShowOnlyUnreadComment: (onlyUnread: boolean) => void;\r\n keepRefreshing: () => Promise;\r\n originKey: OriginKey;\r\n}) {\r\n const isUnread = unreadCommentNos.includes(comment.commentNo);\r\n\r\n const refreshContainer = useRef(() => {});\r\n refreshContainer.current = refreshUsersConnectionHeightList;\r\n useEffect(() => {\r\n if (typeof refreshContainer.current === \"function\") {\r\n const imgElements = Array.from(\r\n document.getElementsByClassName(\r\n `social-post-image-${comment.postedUserId}-${comment.postNo}-${comment.commentNo}`\r\n )\r\n );\r\n if (imgElements.length < 1) {\r\n return;\r\n }\r\n refreshContainer.current();\r\n imgElements.forEach(imgElement => {\r\n imgElement.addEventListener(\"load\", refreshContainer.current);\r\n });\r\n }\r\n }, [comment]);\r\n\r\n const commentsAndLikesToThisComment = comments.filter(\r\n com => com.replyTargetCommentNo === comment.commentNo\r\n );\r\n\r\n const [shouldShowReply, setShouldShowReply] = useState(\r\n commentsAndLikesToThisComment.some(com =>\r\n checkUnreadComment(com, unreadCommentNos, comments)\r\n )\r\n );\r\n\r\n const inputRef = useRef(null);\r\n const [isInputAreaHidden, setInputAreaHidden] = useState(\r\n unreadCommentNos.length > 0\r\n );\r\n\r\n const [\r\n unreadCommentsAndLikesToThisComment,\r\n readCommentsAndLikesToThisComment,\r\n ] = splitByBoolean(commentsAndLikesToThisComment, com =>\r\n checkUnreadComment(com, unreadCommentNos, comments)\r\n );\r\n const commentsAndLikesToShow = showOnlyUnreadComment\r\n ? unreadCommentsAndLikesToThisComment\r\n : unreadCommentsAndLikesToThisComment.concat(\r\n readCommentsAndLikesToThisComment\r\n );\r\n\r\n const c = useStyles({\r\n hasBorder: comment.commentNo < 1 || isUnread,\r\n depth,\r\n shouldShowReply,\r\n isLastCard,\r\n });\r\n\r\n const commentedUser = commentedUsers.find(\r\n u => u.userId === comment.commentedUserId\r\n );\r\n const replyTargetUser =\r\n (comment.replyTargetUserId &&\r\n commentedUsers.find(u => u.userId === comment.replyTargetUserId)) ||\r\n undefined;\r\n if (!commentedUser) {\r\n return null;\r\n }\r\n if (user && tmpMutedUserIds.includes(commentedUser.userId)) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n <>\r\n {\r\n if (comment.isLike) {\r\n return;\r\n }\r\n if (isInputAreaHidden) {\r\n setInputAreaHidden(false);\r\n setShouldShowReply(true);\r\n return;\r\n }\r\n if (shouldShowReply) {\r\n // When it's opened, just close it\r\n setShouldShowReply(false);\r\n return;\r\n }\r\n setShouldShowReply(true);\r\n }}\r\n >\r\n \r\n\r\n {\r\n setShouldShowReply(true);\r\n setShowOnlyUnreadComment(false);\r\n }}\r\n replyTargetUser={replyTargetUser}\r\n />\r\n \r\n\r\n {\r\n if (isAndroid) {\r\n return; // focusใ‚’ใ™ใ‚‹ใจใ‚ขใƒณใƒ‰ใƒญใ‚คใƒ‰ใงใฏใ‚ฝใƒ•ใƒˆใ‚ฆใ‚งใ‚ขใ‚ญใƒผใƒœใƒผใƒ‰ใŒๅ‡บใฆใ—ใพใ†ๅ•้กŒใŒใ‚ใ‚‹\r\n }\r\n inputRef.current?.focus();\r\n }}\r\n className={c.collapse}\r\n classes={{ root: c.collapseRoot }}\r\n >\r\n
\r\n {!comment.isLike && !isInputAreaHidden && (\r\n \r\n )}\r\n\r\n {commentsAndLikesToShow.map((com, i) => (\r\n \r\n ))}\r\n
\r\n \r\n \r\n );\r\n}\r\nconst useStyles = makeStyles<\r\n Theme,\r\n {\r\n hasBorder: boolean;\r\n depth: number;\r\n shouldShowReply: boolean;\r\n isLastCard?: boolean;\r\n }\r\n>(theme => ({\r\n card: ({ hasBorder }) => ({\r\n margin: \"5px 0 5px 5px\",\r\n display: \"flex\",\r\n padding: \"5px 7px 5px 5px\",\r\n border: hasBorder\r\n ? `solid 2px ${theme.palette.primary.light}`\r\n : undefined,\r\n transition: \"all 500ms\",\r\n }),\r\n inputField: {\r\n margin: \"10px 0px 15px 10px\",\r\n },\r\n collapse: ({ depth, shouldShowReply, isLastCard }) => ({\r\n backgroundColor: \"rgba(0,0,0,0.1)\",\r\n paddingLeft: depth < 5 ? 10 : undefined,\r\n marginLeft: 5,\r\n marginTop: shouldShowReply ? -5 : 0,\r\n marginBottom: shouldShowReply ? (isLastCard ? 5 : 30) : 0,\r\n paddingTop: shouldShowReply ? 3 : 0,\r\n transition: `all ${collapseTimeout}ms`,\r\n borderBottomLeftRadius: 8,\r\n }),\r\n collapseRoot: ({ depth }) => ({\r\n paddingBottom: depth < 5 ? 2 : undefined,\r\n }),\r\n collapseInner: {\r\n backgroundColor: \"white\",\r\n paddingTop: 5,\r\n paddingBottom: 1,\r\n transition: `all ${collapseTimeout}ms`,\r\n },\r\n}));\r\n\r\nexport function getCommentCardId(\r\n originKey: OriginKey,\r\n postedUserId: number,\r\n postNo: number,\r\n commentNo: number\r\n) {\r\n return `${originKey}-SocialCommentCard-${postedUserId}-${postNo}-${commentNo}`;\r\n}\r\n","import Collapse from \"@material-ui/core/Collapse\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { RefObject, useEffect, useRef, useState } from \"react\";\r\nimport { sleepAsync } from \"../../../../../../../../../common/functions\";\r\nimport { splitByBoolean } from \"../../../../../../../../../common/util/Array/orderByBoolean\";\r\nimport { isAndroid } from \"../../../../../../../../../common/util/osCheck\";\r\nimport ShurikenProgress from \"../../../../../../../Animations/ShurikenProgress\";\r\nimport { User, UserForRanking } from \"../../../../../../../User/types\";\r\nimport {\r\n ChangeCommenterAvatarElement,\r\n OriginKey,\r\n Post,\r\n PostComment,\r\n} from \"../../../../types\";\r\nimport { CommentCard, collapseTimeStep, collapseTimeout } from \"./CommentCard\";\r\nimport { checkUnreadComment, getSendText } from \"./CommentCard/functions\";\r\nimport { InputFieldArea } from \"./InputFieldArea\";\r\n\r\nexport function CommentArea({\r\n user,\r\n addCommentCount,\r\n post,\r\n tmpMutedUserIds,\r\n setTmpMutedUserIds,\r\n unreadCommentNos,\r\n isInputAreaHidden,\r\n changeCommenterAvatarElement,\r\n refreshUsersConnectionHeightList,\r\n comments,\r\n setComments,\r\n commentedUsers,\r\n setCommentedUsers,\r\n showOnlyUnreadComment,\r\n setShowOnlyUnreadComment,\r\n areUnreadCommentsRemoved,\r\n addTmpComment,\r\n scrollableContainerRef,\r\n originKey,\r\n}: {\r\n user?: User;\r\n addCommentCount: (addedCount: number) => void;\r\n post: Post;\r\n tmpMutedUserIds: number[];\r\n setTmpMutedUserIds: (ids: number[]) => void;\r\n unreadCommentNos: number[];\r\n isInputAreaHidden: boolean;\r\n changeCommenterAvatarElement: ChangeCommenterAvatarElement;\r\n refreshUsersConnectionHeightList: () => void;\r\n comments: PostComment[];\r\n setComments: (comments: PostComment[]) => void;\r\n commentedUsers: UserForRanking[];\r\n setCommentedUsers: (commentedUsers: UserForRanking[]) => void;\r\n showOnlyUnreadComment: boolean;\r\n setShowOnlyUnreadComment: (showOnlyUnreadComment: boolean) => void;\r\n areUnreadCommentsRemoved: boolean;\r\n addTmpComment: (tmpComment: PostComment) => void;\r\n scrollableContainerRef: RefObject;\r\n originKey: OriginKey;\r\n}) {\r\n const [loaded, setLoaded] = useState(false);\r\n\r\n const { userId: postedUserId, postNo, likeCount, commentCount } = post;\r\n const userId = user?.userId ?? 0;\r\n useEffect(() => {\r\n fetch(\r\n `api/PostComment/GetCommentsForPost?PostedUserId=${postedUserId}&PostNo=${postNo}&UserId=${userId}`\r\n )\r\n .then(p => p.json())\r\n .then(r => {\r\n setComments(r.comments);\r\n setCommentedUsers(r.commentedUsers);\r\n setLoaded(true);\r\n });\r\n }, [postedUserId, postNo, likeCount, commentCount, userId]);\r\n\r\n const c = useStyles();\r\n\r\n const [isCollapseOpen, setCollapseOpen] = useState(false);\r\n useEffect(() => {\r\n setCollapseOpen(true);\r\n }, []);\r\n\r\n const inputRef = useRef(null);\r\n\r\n /**\r\n * Calculate refreshUsersConnectionHeightList after scrolling\r\n */\r\n const timerIdRef = useRef(null); // For debounce\r\n useEffect(() => {\r\n if (!isCollapseOpen) {\r\n return; // No need to recalculate for hidden comments\r\n }\r\n const scrollableElement = scrollableContainerRef.current;\r\n if (!scrollableElement) {\r\n return;\r\n }\r\n const onScroll = () => {\r\n if (typeof timerIdRef.current === \"number\") {\r\n clearTimeout(timerIdRef.current); // Prevent to calculate too often\r\n }\r\n timerIdRef.current = window.setTimeout(() => {\r\n refreshUsersConnectionHeightList();\r\n }, 500);\r\n };\r\n scrollableElement.addEventListener(\"scroll\", onScroll);\r\n return () => {\r\n scrollableElement.removeEventListener(\"scroll\", onScroll);\r\n };\r\n }, [scrollableContainerRef.current, isCollapseOpen]);\r\n\r\n return (\r\n {\r\n if (isAndroid) {\r\n return; // focusใ‚’ใ™ใ‚‹ใจใ‚ขใƒณใƒ‰ใƒญใ‚คใƒ‰ใงใฏใ‚ฝใƒ•ใƒˆใ‚ฆใ‚งใ‚ขใ‚ญใƒผใƒœใƒผใƒ‰ใŒๅ‡บใฆใ—ใพใ†ๅ•้กŒใŒใ‚ใ‚‹\r\n }\r\n inputRef.current?.focus();\r\n }}\r\n >\r\n {\r\n ev.stopPropagation();\r\n }}\r\n >\r\n {!isInputAreaHidden && (\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 marginTop: 5,\r\n paddingRight: 5,\r\n borderTop: \"solid\",\r\n borderTopColor: theme.palette.grey[100],\r\n borderTopWidth: 1,\r\n },\r\n inputField: { marginTop: 10, marginBottom: 15 },\r\n}));\r\n\r\nfunction CommentList({\r\n comments,\r\n setComments,\r\n setCommentedUsers,\r\n post,\r\n loaded,\r\n commentedUsers,\r\n user,\r\n tmpMutedUserIds,\r\n setTmpMutedUserIds,\r\n addCommentCount,\r\n unreadCommentNos,\r\n showOnlyUnreadComment,\r\n setShowOnlyUnreadComment,\r\n changeCommenterAvatarElement,\r\n refreshUsersConnectionHeightList,\r\n addTmpComment,\r\n originKey,\r\n}: {\r\n comments: PostComment[];\r\n setComments: (comments: PostComment[]) => void;\r\n setCommentedUsers: (users: UserForRanking[]) => void;\r\n post: Post;\r\n loaded: boolean;\r\n commentedUsers: UserForRanking[];\r\n user?: User;\r\n tmpMutedUserIds: number[];\r\n setTmpMutedUserIds: (ids: number[]) => void;\r\n addCommentCount: (addedCount: number) => void;\r\n unreadCommentNos: number[];\r\n showOnlyUnreadComment: boolean;\r\n setShowOnlyUnreadComment: (onlyUnread: boolean) => void;\r\n changeCommenterAvatarElement: ChangeCommenterAvatarElement;\r\n refreshUsersConnectionHeightList: () => void;\r\n addTmpComment: (tmpComment: PostComment) => void;\r\n originKey: OriginKey;\r\n}) {\r\n const commentsToPost = comments.filter(com => !com.replyTargetCommentNo);\r\n\r\n const [unreadComments, readComments] = splitByBoolean(commentsToPost, com =>\r\n checkUnreadComment(com, unreadCommentNos, comments)\r\n );\r\n const commentsToShow = showOnlyUnreadComment\r\n ? unreadComments\r\n : unreadComments.concat(readComments);\r\n\r\n const c = useListStyles();\r\n\r\n const isNoComment = post.likeCount === 0 && post.commentCount === 0;\r\n if (!loaded && !isNoComment) {\r\n return ;\r\n }\r\n\r\n if (comments.length < 1) {\r\n return null;\r\n }\r\n\r\n const deleteComment = async (\r\n targetComment: PostComment,\r\n deleteFromServerSide: () => Promise\r\n ) => {\r\n setComments(\r\n comments.filter(com => com.commentNo !== targetComment.commentNo)\r\n );\r\n await deleteFromServerSide();\r\n\r\n if (!targetComment.isLike) {\r\n addCommentCount(-1); // Trigger fetch new value\r\n }\r\n };\r\n\r\n const keepRefreshing = async () => {\r\n for (let i = 0; i < collapseTimeout; i += collapseTimeStep) {\r\n await sleepAsync(collapseTimeStep);\r\n refreshUsersConnectionHeightList();\r\n }\r\n };\r\n\r\n return (\r\n
\r\n {commentsToShow.map(comment => {\r\n return (\r\n \r\n );\r\n })}\r\n\r\n {showOnlyUnreadComment &&\r\n comments.length !== commentsToShow.length && (\r\n {\r\n setShowOnlyUnreadComment(false);\r\n keepRefreshing();\r\n }}\r\n >\r\n Show more\r\n
\r\n )}\r\n \r\n );\r\n}\r\nconst useListStyles = makeStyles(theme => ({\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 },\r\n container: { marginRight: 5 },\r\n}));\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport ChatBubbleOutlineIcon from \"@material-ui/icons/ChatBubbleOutline\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\nimport FavoriteIcon from \"@material-ui/icons/Favorite\";\r\nimport FavoriteBorderIcon from \"@material-ui/icons/FavoriteBorder\";\r\nimport { useState } from \"react\";\r\nimport { checkUser } from \"../../../../../../../../common/util/User/checkUser\";\r\nimport { MuteUserOutlinedIcon } from \"../../../../../../../../icon/MuteUserOutlinedIcon\";\r\nimport { fetchSetMuteStatus } from \"../../../../../../Message/MessagePanel/components/fetchSetMuteStatus\";\r\nimport { Post } from \"../../../types\";\r\n\r\nexport function LowerButtonArea({\r\n post,\r\n userId,\r\n tmpMutedUserIds,\r\n setTmpMutedUserIds,\r\n isMyPost,\r\n deletePost,\r\n likePost,\r\n unlikePost,\r\n hideButtonTitle,\r\n}: {\r\n post: Post;\r\n userId: number;\r\n tmpMutedUserIds: number[];\r\n setTmpMutedUserIds: (ids: number[]) => void;\r\n isMyPost: boolean;\r\n deletePost: () => Promise;\r\n likePost: () => Promise;\r\n unlikePost: () => Promise;\r\n hideButtonTitle?: boolean;\r\n}) {\r\n const c = useStyles();\r\n const [submitting, setSubmitting] = useState(false);\r\n\r\n return (\r\n
\r\n
\r\n \r\n {post.commentCount > 0\r\n ? post.commentCount.toLocaleString()\r\n : !hideButtonTitle && \"Comment\"}\r\n
\r\n\r\n \r\n\r\n {isMyPost ? (\r\n {\r\n ev.stopPropagation();\r\n if (submitting || !checkUser()) {\r\n return;\r\n }\r\n setSubmitting(true);\r\n await deletePost();\r\n setSubmitting(false);\r\n }}\r\n >\r\n \r\n {!hideButtonTitle && \"Delete\"}\r\n
\r\n ) : (\r\n {\r\n ev.stopPropagation();\r\n if (submitting || !checkUser()) {\r\n return;\r\n }\r\n setSubmitting(true);\r\n setTmpMutedUserIds(tmpMutedUserIds.concat(post.userId));\r\n await fetchSetMuteStatus(userId, post.userId, true);\r\n setSubmitting(false);\r\n }}\r\n >\r\n \r\n {!hideButtonTitle && \"Mute\"}\r\n \r\n )}\r\n \r\n );\r\n}\r\nconst useStyles = makeStyles(theme => ({\r\n container: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n color: theme.palette.grey[700],\r\n fontSize: \"small\",\r\n paddingRight: 5,\r\n },\r\n comment: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n cursor: \"pointer\",\r\n },\r\n commentIcon: { marginRight: 5 },\r\n delete: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n cursor: \"pointer\",\r\n },\r\n deleteIcon: { marginRight: 5 },\r\n mute: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n cursor: \"pointer\",\r\n },\r\n muteIcon: { marginRight: 5 },\r\n}));\r\n\r\nfunction LikeButton({\r\n post: { likeCount, ownLike },\r\n likePost,\r\n unlikePost,\r\n hideButtonTitle,\r\n}: {\r\n post: Post;\r\n likePost: () => Promise;\r\n unlikePost: () => Promise;\r\n hideButtonTitle?: boolean;\r\n}) {\r\n const [submitting, setSubmitting] = useState(false);\r\n const c = useLikeStyles();\r\n\r\n return (\r\n {\r\n ev.stopPropagation();\r\n if (submitting || !checkUser()) {\r\n return;\r\n }\r\n\r\n setSubmitting(true);\r\n if (ownLike) {\r\n await unlikePost();\r\n } else {\r\n await likePost();\r\n }\r\n setSubmitting(false);\r\n }}\r\n >\r\n
\r\n {ownLike ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n {likeCount > 0\r\n ? likeCount.toLocaleString()\r\n : !hideButtonTitle && \"Like\"}\r\n \r\n );\r\n}\r\nconst useLikeStyles = makeStyles({\r\n like: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n cursor: \"pointer\",\r\n height: 22.5,\r\n },\r\n likedFavoriteIcon: { marginRight: 5, color: \"red\" },\r\n favoriteIcon: { marginRight: 5 },\r\n sizeChangeAnime: {\r\n animation: \"$sizeChange 1s\",\r\n animationIterationCount: \"infinite\",\r\n },\r\n \"@keyframes sizeChange\": {\r\n \"0%\": {\r\n transform: \"scale(1)\",\r\n },\r\n \"30%\": {\r\n transform: \"scale(1.2)\",\r\n },\r\n \"100%\": {\r\n transform: \"scale(1)\",\r\n },\r\n },\r\n});\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { RefObject, useState } from \"react\";\r\nimport { changeAppState } from \"../../../../../../../../common/appState\";\r\nimport ShurikenProgress from \"../../../../../../Animations/ShurikenProgress\";\r\nimport { Markdown } from \"../../../../../../Markdown\";\r\nimport { User, UserForRanking } from \"../../../../../../User/types\";\r\nimport { useSyncCommentsStateWithBackgroundPanel } from \"../../../hooks/useSyncCommentsStateWithBackgroundPanel\";\r\nimport {\r\n ChangeCommenterAvatarElement,\r\n OriginKey,\r\n Post,\r\n PostComment,\r\n} from \"../../../types\";\r\nimport { postLeftAvatarAreaWidth } from \"../LeftAvatarArea\";\r\nimport { CommentArea } from \"./CommentArea\";\r\nimport { LowerButtonArea } from \"./LowerButtonArea\";\r\nimport { UserNameAndTime } from \"./UserNameAndTime\";\r\n\r\nexport function RightContents({\r\n postedUser,\r\n post,\r\n userId,\r\n tmpMutedUserIds,\r\n setTmpMutedUserIds,\r\n isMyPost,\r\n deletePost,\r\n likePost,\r\n unlikePost,\r\n addCommentCount,\r\n user,\r\n isCommentShown,\r\n unreadCommentNos,\r\n isInputAreaHidden,\r\n hideLevel,\r\n hideButtonTitle,\r\n changeCommenterAvatarElement,\r\n refreshUsersConnectionHeightList,\r\n hideTime,\r\n scrollableContainerRef,\r\n originKey,\r\n}: {\r\n postedUser: UserForRanking;\r\n post: Post;\r\n userId: number;\r\n tmpMutedUserIds: number[];\r\n setTmpMutedUserIds: (ids: number[]) => void;\r\n isMyPost: boolean;\r\n deletePost: () => Promise;\r\n likePost: () => Promise;\r\n unlikePost: () => Promise;\r\n addCommentCount: (addedCount: number) => void;\r\n user?: User;\r\n isCommentShown: boolean;\r\n unreadCommentNos: number[];\r\n isInputAreaHidden: boolean;\r\n hideLevel?: boolean;\r\n hideButtonTitle?: boolean;\r\n changeCommenterAvatarElement: ChangeCommenterAvatarElement;\r\n refreshUsersConnectionHeightList: () => void;\r\n hideTime: boolean;\r\n scrollableContainerRef: RefObject;\r\n originKey: OriginKey;\r\n}) {\r\n const c = useStyles();\r\n\r\n const [comments, setComments] = useState([]);\r\n useSyncCommentsStateWithBackgroundPanel(\r\n post,\r\n originKey,\r\n setComments,\r\n comments\r\n ); // Sync data with other panel\r\n\r\n const [commentedUsers, setCommentedUsers] = useState([]);\r\n const [showOnlyUnreadComment, setShowOnlyUnreadComment] = useState(\r\n unreadCommentNos.length > 0\r\n );\r\n const [areUnreadCommentsRemoved, setUnreadCommentsRemoved] =\r\n useState(false);\r\n\r\n const addTmpComment = (tmpComment: PostComment) => {\r\n setUnreadCommentsRemoved(true);\r\n setShowOnlyUnreadComment(false);\r\n if (user && !commentedUsers.some(u => u.userId === userId)) {\r\n setCommentedUsers([...commentedUsers, user]);\r\n }\r\n setComments([tmpComment, ...comments]);\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 if (!user) {\r\n changeAppState(\"signInPanelState\", { type: \"signUp\" });\r\n return;\r\n }\r\n addTmpComment(getTmpLike(post, user.userId));\r\n await likePost();\r\n }}\r\n unlikePost={unlikePost}\r\n hideButtonTitle={hideButtonTitle}\r\n />\r\n\r\n {isCommentShown && (\r\n \r\n )}\r\n
\r\n );\r\n}\r\nconst useStyles = makeStyles(theme => ({\r\n container: { width: `calc(100% - ${postLeftAvatarAreaWidth}px)` },\r\n markdownContainer: {\r\n marginBottom: 5,\r\n paddingBottom: 10,\r\n paddingTop: 10,\r\n paddingRight: 5,\r\n borderBottom: \"solid\",\r\n borderBottomColor: theme.palette.grey[100],\r\n borderBottomWidth: 1,\r\n fontSize: 17,\r\n },\r\n}));\r\n\r\nfunction getTmpLike(post: Post, commentedUserId: number): PostComment {\r\n return {\r\n postedUserId: post.userId,\r\n postNo: post.postNo,\r\n commentNo: 0,\r\n commentedUserId,\r\n minutesAgo: 0,\r\n text: \"\",\r\n isLike: true,\r\n isRead: false,\r\n replyTargetUserId: null,\r\n replyTargetCommentNo: null,\r\n isReplyTargetRead: false,\r\n deleted: false,\r\n };\r\n}\r\n\r\nfunction PostedText({ text }: { text: string }) {\r\n if (!text) {\r\n return ;\r\n }\r\n if (/^Cleared the quest: \\*\\*Progress \\d0%\\*\\* ๐ŸŽ‰$/g.test(text)) {\r\n return (\r\n
\r\n {\"Cleared the quest: \"}\r\n {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n changeAppState(\"signInPanelState\", {\r\n type: \"myPageTop\",\r\n initialView: \"MyPageProgressPercentageCard\",\r\n });\r\n }}\r\n className=\"bold\"\r\n >\r\n {text\r\n .replace(\"Cleared the quest: **\", \"\")\r\n .replace(\"** ๐ŸŽ‰\", \"\")}\r\n \r\n {\" ๐ŸŽ‰\"}\r\n
\r\n );\r\n }\r\n return (\r\n \r\n );\r\n}\r\n","import Card from \"@material-ui/core/Card\";\r\nimport Collapse from \"@material-ui/core/Collapse\";\r\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport { RefObject, useEffect, useMemo, useRef, useState } from \"react\";\r\nimport { useScreenSize } from \"../../../../../../../common/hooks/useScreenSize\";\r\nimport { fetchPost } from \"../../../../../../../common/util/fetch\";\r\nimport { theme } from \"../../../../../../zApps/Layout\";\r\nimport { User, UserForRanking } from \"../../../../../User/types\";\r\nimport {\r\n CommenterAvatarElements,\r\n OriginKey,\r\n Post,\r\n UsersConnectionHeightList,\r\n} from \"../../types\";\r\nimport { LeftAvatarArea } from \"./LeftAvatarArea\";\r\nimport { MutedPost } from \"./MutedPost\";\r\nimport { RightContents } from \"./RightContents\";\r\n\r\nexport function PostCard({\r\n post,\r\n posts,\r\n setPosts,\r\n userId,\r\n tmpMutedUserIds,\r\n setTmpMutedUserIds,\r\n user,\r\n postedUsers,\r\n unreadCommentNos,\r\n hideLevel,\r\n hideButtonTitle,\r\n hideTime,\r\n scrollableContainerRef,\r\n originKey,\r\n}: {\r\n post: Post;\r\n posts: Post[];\r\n setPosts: (posts: Post[]) => void;\r\n userId: number;\r\n tmpMutedUserIds: number[];\r\n setTmpMutedUserIds: (ids: number[]) => void;\r\n user?: User;\r\n postedUsers: UserForRanking[];\r\n unreadCommentNos: number[];\r\n hideLevel?: boolean;\r\n hideButtonTitle?: boolean;\r\n hideTime: boolean;\r\n scrollableContainerRef: RefObject;\r\n originKey: OriginKey;\r\n}) {\r\n const [isCommentShown, setCommentShown] = useState(\r\n unreadCommentNos.length > 0\r\n );\r\n const [isInputAreaHidden, setInputAreaHidden] = useState(\r\n unreadCommentNos.length > 0\r\n );\r\n\r\n const {\r\n avatarRef,\r\n usersConnectionHeightList,\r\n refreshUsersConnectionHeightList,\r\n changeCommenterAvatarElement,\r\n connectionLineStyles,\r\n } = useUsersConnectionLines();\r\n\r\n const c = useStyles({ isBorderShown: post.postNo < 1 });\r\n\r\n const postedUser = postedUsers.find(u => u.userId === post.userId);\r\n if (!postedUser) {\r\n return null;\r\n }\r\n if (tmpMutedUserIds.includes(postedUser.userId)) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n const isMyPost = postedUser.userId === userId;\r\n\r\n const changePost = (newPostState: Partial) => {\r\n setPosts(\r\n posts.map(p =>\r\n p.userId === post.userId && p.postNo === post.postNo\r\n ? {\r\n ...p,\r\n ...newPostState,\r\n }\r\n : p\r\n )\r\n );\r\n };\r\n\r\n return (\r\n \r\n {\r\n if (isInputAreaHidden) {\r\n setInputAreaHidden(false);\r\n return;\r\n }\r\n setCommentShown(!isCommentShown);\r\n }}\r\n >\r\n \r\n\r\n {\r\n if (\r\n !confirm(\r\n \"This post will be deleted.\\nAre you sure?\"\r\n )\r\n ) {\r\n return;\r\n }\r\n changePost({\r\n deleted: true,\r\n });\r\n await fetchDeletePosts(userId, post.postNo);\r\n }}\r\n likePost={async () => {\r\n changePost({\r\n ownLike: true,\r\n likeCount: post.likeCount + 1,\r\n });\r\n await fetchLikePosts(userId, post.postNo, post.userId);\r\n refreshUsersConnectionHeightList();\r\n }}\r\n unlikePost={async () => {\r\n changePost({\r\n ownLike: false,\r\n likeCount: post.likeCount - 1,\r\n });\r\n await fetchUnlikePosts(\r\n userId,\r\n post.postNo,\r\n post.userId\r\n );\r\n refreshUsersConnectionHeightList();\r\n }}\r\n addCommentCount={(addedCount: number) => {\r\n changePost({\r\n commentCount: post.commentCount + addedCount,\r\n });\r\n refreshUsersConnectionHeightList();\r\n }}\r\n isCommentShown={isCommentShown}\r\n unreadCommentNos={unreadCommentNos}\r\n isInputAreaHidden={isInputAreaHidden}\r\n hideLevel={hideLevel}\r\n hideButtonTitle={hideButtonTitle}\r\n changeCommenterAvatarElement={changeCommenterAvatarElement}\r\n refreshUsersConnectionHeightList={\r\n refreshUsersConnectionHeightList\r\n }\r\n hideTime={hideTime}\r\n scrollableContainerRef={scrollableContainerRef}\r\n originKey={originKey}\r\n />\r\n \r\n \r\n );\r\n}\r\nconst useStyles = makeStyles({\r\n card: ({ isBorderShown }) => ({\r\n margin: 5,\r\n display: \"flex\",\r\n padding: \"5px 7px 5px 5px\",\r\n border: isBorderShown\r\n ? `solid 2px ${theme.palette.primary.light}`\r\n : undefined,\r\n transition: \"all 500ms\",\r\n position: \"relative\", // users connection lines\r\n }),\r\n});\r\n\r\nfunction useUsersConnectionLines() {\r\n let commenterAvatarElements = useMemo(\r\n () => ({}),\r\n []\r\n ); // Don't use useState in case when some comments appear simultaneously\r\n\r\n const avatarRef = useRef(null);\r\n\r\n const refreshUsersConnectionHeightList = () => {\r\n setUsersConnectionHeightList(\r\n getUsersConnectionHeightList(commenterAvatarElements, avatarRef)\r\n );\r\n };\r\n const changeCommenterAvatarElement = (\r\n type: \"add\" | \"remove\",\r\n commentNo: number,\r\n element?: HTMLDivElement\r\n ) => {\r\n if (type === \"remove\") {\r\n delete commenterAvatarElements[commentNo];\r\n } else {\r\n if (element) {\r\n commenterAvatarElements[commentNo] = element;\r\n }\r\n }\r\n refreshUsersConnectionHeightList();\r\n };\r\n\r\n const [usersConnectionHeightList, setUsersConnectionHeightList] =\r\n useState({});\r\n\r\n const { screenWidth } = useScreenSize();\r\n useEffect(() => {\r\n refreshUsersConnectionHeightList();\r\n }, [screenWidth]);\r\n\r\n const avatarEl = avatarRef.current;\r\n const avatarTop = avatarEl?.offsetTop ?? 0;\r\n const avatarHeight = avatarEl?.offsetHeight ?? 0;\r\n const avatarLeft = avatarEl?.offsetLeft ?? 0;\r\n const avatarWidth = avatarEl?.offsetWidth ?? 0;\r\n\r\n const connectionLineStyles = {\r\n connectionTop: avatarTop + avatarHeight,\r\n connectionLeft: avatarLeft + avatarWidth / 2 - 1.5,\r\n connectionWidth: (avatarRef.current?.offsetWidth ?? 0) / 2 + 27,\r\n };\r\n\r\n return {\r\n avatarRef,\r\n usersConnectionHeightList,\r\n refreshUsersConnectionHeightList,\r\n changeCommenterAvatarElement,\r\n connectionLineStyles,\r\n };\r\n}\r\n\r\nasync function fetchDeletePosts(userId: number, postNo: number): Promise {\r\n await fetchPost<\r\n {\r\n userId: number;\r\n postNo: number;\r\n },\r\n undefined\r\n >(\"api/Post/DeletePost\", { userId, postNo });\r\n}\r\n\r\nasync function fetchLikePosts(\r\n userId: number,\r\n postNo: number,\r\n postedUserId: number\r\n): Promise {\r\n await fetchPost<\r\n {\r\n userId: number;\r\n postNo: number;\r\n postedUserId: number;\r\n },\r\n undefined\r\n >(\"api/PostComment/LikePost\", { userId, postNo, postedUserId });\r\n}\r\n\r\nasync function fetchUnlikePosts(\r\n userId: number,\r\n postNo: number,\r\n postedUserId: number\r\n): Promise {\r\n await fetchPost<\r\n {\r\n userId: number;\r\n postNo: number;\r\n postedUserId: number;\r\n },\r\n undefined\r\n >(\"api/PostComment/UnlikePost\", { userId, postNo, postedUserId });\r\n}\r\n\r\nfunction getUsersConnectionHeightList(\r\n commenterAvatarElements: CommenterAvatarElements,\r\n avatarRef: RefObject\r\n): UsersConnectionHeightList {\r\n const avatarEl = avatarRef.current;\r\n return Object.fromEntries(\r\n Object.entries(commenterAvatarElements).map(co => [\r\n co[0],\r\n co[1].offsetTop -\r\n (avatarEl?.offsetTop ?? 0) -\r\n (avatarEl?.offsetHeight ?? 0) / 2,\r\n ])\r\n );\r\n}\r\n","import Card from \"@material-ui/core/Card\";\r\nimport Collapse from \"@material-ui/core/Collapse\";\r\nimport { Theme, makeStyles } from \"@material-ui/core/styles\";\r\nimport ArrowForwardIcon from \"@material-ui/icons/ArrowForwardIos\";\r\nimport NotificationsIcon from \"@material-ui/icons/Notifications\";\r\nimport { RefObject, useState } from \"react\";\r\nimport { sleepAsync } from \"../../../../../../common/functions\";\r\nimport { spaceBetween } from \"../../../../../../common/util/Array/spaceBetween\";\r\nimport { relativeScroll } from \"../../../../../../common/util/Scroll/relativeScroll\";\r\nimport { PrimaryButton } from \"../../../../Button/PrimaryButton\";\r\nimport { openOtherUserPanel } from \"../../../../User/OtherUserPanel/functions\";\r\nimport { UserAvatar } from \"../../../../User/UserAvatar/UserAvatar\";\r\nimport { OriginKey, UnreadComment } from \"../types\";\r\nimport { getCommentCardId } from \"./PostCard/RightContents/CommentArea/CommentCard\";\r\nimport { getSocialPostTime } from \"./PostCard/RightContents/UserNameAndTime\";\r\n\r\nconst transitionTime = 500;\r\n\r\nfunction getCommentKey(\r\n postedUserId: number,\r\n postNo: number,\r\n commentNo: number\r\n) {\r\n return `${postedUserId}-${postNo}-${commentNo}`;\r\n}\r\n\r\nexport function UnreadCommentNotificationList({\r\n fixedUnreadComments,\r\n scrollableContainerRef,\r\n loading,\r\n originKey,\r\n}: {\r\n fixedUnreadComments: UnreadComment[];\r\n scrollableContainerRef: RefObject;\r\n loading: boolean;\r\n originKey: OriginKey;\r\n}) {\r\n const [isOpen, setOpen] = useState(true);\r\n const [nonClickedRecordKeys, setNonClickedNotificationKeys] = useState(\r\n fixedUnreadComments.map(c =>\r\n getCommentKey(c.postedUserId, c.postNo, c.commentNo)\r\n )\r\n );\r\n const c = useStyles({ isOpen });\r\n\r\n return (\r\n 0}\r\n className={c.outsideCollapse}\r\n timeout={transitionTime}\r\n >\r\n \r\n {\r\n setOpen(!isOpen);\r\n }}\r\n >\r\n
\r\n \r\n
\r\n Notification\r\n 1\r\n ? \"opacity1\"\r\n : \"opacity0\",\r\n \"t500ms\"\r\n )}\r\n >\r\n s\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n \r\n
\r\n {[...fixedUnreadComments]\r\n .sort((a, b) => a.minutesAgo - b.minutesAgo)\r\n .map(\r\n ({\r\n postedUserId,\r\n postNo,\r\n commentNo,\r\n isLike,\r\n commentedUser,\r\n replyTargetCommentNo,\r\n minutesAgo,\r\n }) => {\r\n const notificationVerb =\r\n getUnreadCommentNotificationVerb(\r\n isLike,\r\n replyTargetCommentNo == null\r\n );\r\n\r\n const key = getCommentKey(\r\n postedUserId,\r\n postNo,\r\n commentNo\r\n );\r\n\r\n return (\r\n \r\n {\r\n ev.stopPropagation();\r\n\r\n const scrollableEl =\r\n scrollableContainerRef?.current;\r\n const scrollTargetEl =\r\n document.getElementById(\r\n getCommentCardId(\r\n originKey,\r\n postedUserId,\r\n postNo,\r\n commentNo\r\n )\r\n );\r\n if (\r\n !scrollableEl ||\r\n !scrollTargetEl\r\n ) {\r\n return;\r\n }\r\n setOpen(false);\r\n setNonClickedNotificationKeys(\r\n nonClickedRecordKeys.filter(\r\n recordKey =>\r\n recordKey !==\r\n key\r\n )\r\n );\r\n relativeScroll(\r\n scrollableEl,\r\n scrollTargetEl,\r\n (scrollableEl.offsetHeight -\r\n scrollTargetEl.offsetHeight) /\r\n 2\r\n );\r\n await sleepAsync(\r\n transitionTime\r\n );\r\n relativeScroll(\r\n scrollableEl,\r\n scrollTargetEl,\r\n (scrollableEl.offsetHeight -\r\n scrollTargetEl.offsetHeight) /\r\n 2\r\n );\r\n }}\r\n >\r\n \r\n {\r\n ev.stopPropagation();\r\n openOtherUserPanel(\r\n commentedUser.userId\r\n );\r\n }}\r\n className={\"pointer\"}\r\n />\r\n \r\n
\r\n \r\n {\r\n commentedUser.name\r\n }\r\n {\" \"}\r\n {notificationVerb}\r\n
\r\n
\r\n {getSocialPostTime(\r\n minutesAgo\r\n )}\r\n
\r\n
\r\n \r\n\r\n \r\n Check\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(theme => ({\r\n outsideCollapse: { flexShrink: 0 },\r\n container: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: 5,\r\n margin: 5,\r\n padding: 5,\r\n border: `solid 2px ${theme.palette.primary.light}`,\r\n },\r\n headerContainer: ({ isOpen }) => ({\r\n fontWeight: \"bold\",\r\n color: isOpen ? theme.palette.grey[700] : theme.palette.primary.main,\r\n fontSize: \"large\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n cursor: \"pointer\",\r\n paddingRight: 10,\r\n transition: `all ${transitionTime}ms`,\r\n }),\r\n notificationTitle: {\r\n display: \"flex\",\r\n gap: 5,\r\n padding: 5,\r\n alignItems: \"center\",\r\n },\r\n arrowIcon: ({ isOpen }) => ({\r\n width: 20,\r\n transform: isOpen ? \"rotate(90deg)\" : undefined,\r\n transition: `all ${transitionTime}ms`,\r\n }),\r\n listContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: 5,\r\n },\r\n recordCard: {\r\n width: \"100%\",\r\n border: `solid 2px ${theme.palette.primary.light}`,\r\n padding: 10,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n cursor: \"pointer\",\r\n },\r\n avatarAndText: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 10,\r\n },\r\n notificationTextArea: { marginRight: 5 },\r\n username: {\r\n fontWeight: \"bold\",\r\n },\r\n time: {\r\n color: theme.palette.grey[500],\r\n fontSize: \"small\",\r\n marginTop: 3,\r\n },\r\n checkButton: {\r\n maxHeight: 30,\r\n minHeight: 30,\r\n fontSize: \"15px !important\",\r\n lineHeight: 1,\r\n transition: \"all 500ms\",\r\n },\r\n}));\r\n\r\nfunction getUnreadCommentNotificationVerb(isLike: boolean, isToPost: boolean) {\r\n if (isLike) {\r\n if (isToPost) {\r\n return \"likes your post!\";\r\n }\r\n return \"likes your comment!\";\r\n }\r\n if (isToPost) {\r\n return \"commented on your post!\";\r\n }\r\n return \"replied to your comment!\";\r\n}\r\n","import { useEffect, useRef } from \"react\";\r\nimport { keys } from \"../../../../../../common/util/Object/keys\";\r\nimport { OriginKey, Post } from \"../types\";\r\n\r\nconst functionsToUpdateBackgroundPosts: {\r\n [key in OriginKey]?: (newPosts: Post[]) => void;\r\n} = {};\r\n\r\nexport function useSyncPostsStateWithBackgroundPanel(\r\n originKey: OriginKey,\r\n posts: Post[],\r\n setPosts: (posts: Post[]) => void\r\n) {\r\n useEffect(() => {\r\n // set functionsToUpdateBackgroundPosts\r\n functionsToUpdateBackgroundPosts[originKey] = newPosts => {\r\n if (newPosts.length > 0) {\r\n setPosts(\r\n posts.map(post => {\r\n const newPost = newPosts.find(\r\n newPost =>\r\n newPost.userId === post.userId &&\r\n newPost.postNo === post.postNo\r\n );\r\n return newPost ?? post;\r\n })\r\n );\r\n }\r\n };\r\n return () => {\r\n delete functionsToUpdateBackgroundPosts[originKey];\r\n };\r\n }, [originKey, posts]);\r\n\r\n const currentDataContainer = useRef<{\r\n posts: Post[];\r\n originKey: OriginKey;\r\n } | null>(null);\r\n currentDataContainer.current = { posts, originKey };\r\n\r\n useEffect(() => {\r\n return () => {\r\n // Sync data on unmount\r\n if (!currentDataContainer.current) {\r\n return;\r\n }\r\n const { posts, originKey } = currentDataContainer.current;\r\n keys(functionsToUpdateBackgroundPosts).forEach(key => {\r\n if (key === originKey) {\r\n return;\r\n }\r\n functionsToUpdateBackgroundPosts[key]?.(posts);\r\n });\r\n };\r\n }, [currentDataContainer]);\r\n}\r\n","import Card from \"@material-ui/core/Card\";\r\nimport Collapse from \"@material-ui/core/Collapse\";\r\nimport CachedIcon from \"@material-ui/icons/Cached\";\r\nimport { makeStyles } from \"@material-ui/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 { sleepAsync } from \"../../../../../common/functions\";\r\nimport { useAbTest } from \"../../../../../common/hooks/useAbTest\";\r\nimport { useDelayedState } from \"../../../../../common/hooks/useDelayedState\";\r\nimport { useUser } from \"../../../../../common/hooks/useUser\";\r\nimport { fetchPost, fetchPostFormData } from \"../../../../../common/util/fetch\";\r\nimport { FetchResult } from \"../../../../../types/fetch\";\r\nimport { RightPanel } from \"../../../../shared/Panel/RightPanel\";\r\nimport { theme } from \"../../../../zApps/Layout\";\r\nimport ShurikenProgress from \"../../../Animations/ShurikenProgress\";\r\nimport { shurikenProgressKey } from \"../../../Markdown/ImageRender/SocialPostImage\";\r\nimport { User, UserForRanking } from \"../../../User/types\";\r\nimport { PostCard } from \"./components/PostCard\";\r\nimport {\r\n InputFieldArea,\r\n SocialInputReturn,\r\n} from \"./components/PostCard/RightContents/CommentArea/InputFieldArea\";\r\nimport { UnreadCommentNotificationList } from \"./components/UnreadCommentNotificationList\";\r\nimport { useSyncPostsStateWithBackgroundPanel } from \"./hooks/useSyncPostsStateWithBackgroundPanel\";\r\nimport {\r\n FetchPostsResponse,\r\n OriginKey,\r\n Post,\r\n PostToShow,\r\n UnreadComment,\r\n} from \"./types\";\r\n\r\nconst transitionMilliseconds = 1000;\r\nexport const panelWidth = 500;\r\n\r\nconst SocialPanelOriginKey: OriginKey = \"SocialPanel\";\r\nexport default function SocialPanel() {\r\n const [panelState, setPanelState] = useAppState(\"socialPanelState\");\r\n const { delayedOpen } = useDelayedState(\r\n panelState,\r\n ({ open }) => open,\r\n transitionMilliseconds\r\n );\r\n\r\n const scrollableContainerRef = useRef(null);\r\n const c = usePanelStyles();\r\n\r\n const [posts, setPosts] = useState([]);\r\n\r\n const [minTime, setMinTime] = useState(\"\");\r\n const [postedUsers, setPostedUsers] = useState([]);\r\n const { user, isUserFetchDone } = useUser();\r\n const userId = user?.userId ?? 0;\r\n const [fixedUnreadComments, setFixedUnreadComments] = useState<\r\n UnreadComment[]\r\n >([]);\r\n\r\n return (\r\n {\r\n setPanelState({ open: false });\r\n }}\r\n panelWidth={panelWidth}\r\n globalPanelState={panelState}\r\n transitionMilliseconds={transitionMilliseconds}\r\n style={{ backgroundColor: theme.palette.grey[100] }}\r\n topItem={\r\n {\r\n setPosts([]);\r\n setMinTime(\"\");\r\n await sleepAsync(300); // Show loading animation once\r\n initialFetch(\r\n userId,\r\n setPosts,\r\n setMinTime,\r\n setPostedUsers\r\n );\r\n }}\r\n />\r\n }\r\n childrenContainerStyle={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n }}\r\n >\r\n {fixedUnreadComments.length > 0 && (\r\n \r\n )}\r\n\r\n
\r\n {delayedOpen && (\r\n \r\n )}\r\n
\r\n \r\n );\r\n}\r\nconst usePanelStyles = makeStyles({\r\n loadIcon: {\r\n position: \"absolute\",\r\n top: 7,\r\n right: 7,\r\n maxHeight: 27,\r\n minHeight: 27,\r\n maxWidth: 27,\r\n minWidth: 27,\r\n cursor: \"pointer\",\r\n },\r\n contentWrapper: { height: \"100%\", overflow: \"auto\" },\r\n});\r\n\r\ntype SavedInitialData = { posts: Post[]; postedUsers: UserForRanking[] };\r\nasync function initialFetch(\r\n userId: number,\r\n setPosts: (posts: Post[]) => void,\r\n setMinTime: (minTime: string) => void,\r\n setPostedUsers: (postedUsers: UserForRanking[]) => void,\r\n targetUserId?: number\r\n) {\r\n const saveKey = `social-posts-initial-fetch-${targetUserId ?? 0}`;\r\n const savedData = localStorage.getItem(saveKey);\r\n\r\n setMinTime(\"\");\r\n if (savedData) {\r\n const previousResult: SavedInitialData = JSON.parse(savedData);\r\n setPosts(previousResult.posts);\r\n setPostedUsers(previousResult.postedUsers);\r\n } else {\r\n setPosts([]);\r\n setPostedUsers([]);\r\n }\r\n\r\n const { unreadComments } = getAppState();\r\n const result = await fetchPosts(\"\", userId, unreadComments, targetUserId);\r\n if (!result || \"error\" in result) {\r\n return;\r\n }\r\n setPosts(result.posts);\r\n setMinTime(result.minTime);\r\n setPostedUsers(result.postedUsers);\r\n\r\n sleepAsync(1000).then(() => {\r\n if (result.posts.length <= 30) {\r\n const dataToSave: SavedInitialData = {\r\n posts: result.posts,\r\n postedUsers: result.postedUsers,\r\n };\r\n localStorage.setItem(saveKey, JSON.stringify(dataToSave));\r\n return;\r\n }\r\n\r\n // No need to save more than 30 posts because cost to render should be reduced\r\n const shortenPosts = result.posts.slice(0, 30);\r\n const shortenPostedUserIds = shortenPosts.map(p => p.userId);\r\n\r\n const shortenDataToSave: SavedInitialData = {\r\n posts: shortenPosts,\r\n postedUsers: result.postedUsers.filter(u =>\r\n shortenPostedUserIds.includes(u.userId)\r\n ),\r\n };\r\n localStorage.setItem(saveKey, JSON.stringify(shortenDataToSave));\r\n });\r\n}\r\n\r\nexport const finishedKey = \"finished\";\r\nexport function SocialContent({\r\n scrollableContainerRef,\r\n posts,\r\n setPosts,\r\n minTime,\r\n setMinTime,\r\n postedUsers,\r\n setPostedUsers,\r\n user,\r\n userId,\r\n isUserFetchDone,\r\n isPostInputHidden,\r\n targetUserId,\r\n scrollableSpanToFetch,\r\n hideLevel,\r\n hideButtonTitle,\r\n initialShurikenSize = 60,\r\n fixedUnreadComments,\r\n setFixedUnreadComments,\r\n shouldNotReadComments,\r\n originKey,\r\n}: {\r\n scrollableContainerRef: RefObject;\r\n posts: Post[];\r\n setPosts: (posts: Post[]) => void;\r\n minTime: string;\r\n setMinTime: (minTime: string) => void;\r\n postedUsers: UserForRanking[];\r\n setPostedUsers: (postedUsers: UserForRanking[]) => void;\r\n user?: User;\r\n userId: number;\r\n isUserFetchDone: boolean;\r\n isPostInputHidden?: boolean;\r\n targetUserId?: number;\r\n scrollableSpanToFetch: number;\r\n hideLevel?: boolean;\r\n hideButtonTitle?: boolean;\r\n initialShurikenSize?: number;\r\n fixedUnreadComments: UnreadComment[];\r\n setFixedUnreadComments: (unreadComments: UnreadComment[]) => void;\r\n shouldNotReadComments?: boolean;\r\n originKey: OriginKey;\r\n}) {\r\n useSyncPostsStateWithBackgroundPanel(originKey, posts, setPosts); // Sync data with other panel\r\n\r\n useEffect(() => {\r\n // Clean up when close panel\r\n return () => {\r\n setPosts([]);\r\n setMinTime(\"\");\r\n setPostedUsers([]);\r\n setFixedUnreadComments([]);\r\n };\r\n }, [setPosts, setMinTime, setPostedUsers, setFixedUnreadComments]);\r\n\r\n const isScrollFinished = minTime === finishedKey;\r\n const initialLoading = minTime === \"\";\r\n const [loadingByScroll, setLoadingByScroll] = useState(false);\r\n\r\n const [tmpMutedUserIds, setTmpMutedUserIds] = useState([]);\r\n\r\n useEffect(() => {\r\n if (!isUserFetchDone) {\r\n return;\r\n }\r\n initialFetch(\r\n userId,\r\n setPosts,\r\n setMinTime,\r\n setPostedUsers,\r\n targetUserId\r\n );\r\n }, [\r\n userId,\r\n setPosts,\r\n setMinTime,\r\n setPostedUsers,\r\n isUserFetchDone,\r\n targetUserId,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (shouldNotReadComments) {\r\n return;\r\n }\r\n const { unreadComments } = getAppState();\r\n setFixedUnreadComments(unreadComments);\r\n\r\n if (unreadComments.length > 0) {\r\n changeAppState(\"unreadComments\", []);\r\n fetch(`api/PostComment/ReadComments?UserId=${userId}`);\r\n }\r\n }, [userId, shouldNotReadComments]);\r\n\r\n useEffect(() => {\r\n const el = scrollableContainerRef?.current;\r\n if (!el) {\r\n return;\r\n }\r\n const onScroll = async () => {\r\n if (\r\n el.scrollHeight >\r\n el.offsetHeight + el.scrollTop + scrollableSpanToFetch\r\n ) {\r\n return; // Still scrollable more than scrollableSpanToFetch px\r\n }\r\n if (isScrollFinished) {\r\n return; // Already fetched all data\r\n }\r\n if (minTime === \"\") {\r\n return; // Scrolled before finishing the initial fetch\r\n }\r\n setLoadingByScroll(true);\r\n const result = await fetchPosts(minTime, userId, [], targetUserId);\r\n if (result == null) {\r\n return; // duplicated fetch\r\n }\r\n if (\"error\" in result) {\r\n setLoadingByScroll(false);\r\n return;\r\n }\r\n setPosts(posts.concat(result.posts));\r\n setMinTime(result.minTime);\r\n setPostedUsers(postedUsers.concat(result.postedUsers));\r\n setLoadingByScroll(false);\r\n };\r\n el.addEventListener(\"scroll\", onScroll);\r\n return () => {\r\n el.removeEventListener(\"scroll\", onScroll);\r\n };\r\n }, [\r\n scrollableContainerRef,\r\n minTime,\r\n posts,\r\n postedUsers,\r\n isScrollFinished,\r\n targetUserId,\r\n scrollableSpanToFetch,\r\n ]);\r\n\r\n const c = useContentStyles();\r\n\r\n const hasSubmittingPost = posts.some(p => p.postNo < 1);\r\n const isShowingLocallySavedPosts = minTime === \"\" && posts.length > 0;\r\n\r\n const [bottomOfVisibleArea, setBottomOfVisibleArea] =\r\n useState(screenExpectedHeight);\r\n useEffect(() => {\r\n const scrollableEl = scrollableContainerRef.current;\r\n if (!scrollableEl) {\r\n return;\r\n }\r\n const onScroll = () => {\r\n setBottomOfVisibleArea(\r\n scrollableEl.scrollTop + screenExpectedHeight\r\n );\r\n };\r\n scrollableEl.addEventListener(\"scroll\", onScroll);\r\n\r\n return () => {\r\n scrollableEl.removeEventListener(\"scroll\", onScroll);\r\n };\r\n }, [scrollableContainerRef]);\r\n\r\n return (\r\n
\r\n {!isPostInputHidden && (\r\n \r\n \r\n \r\n )}\r\n\r\n \r\n \r\n \r\n\r\n {posts.map((post, index) => {\r\n const unreadCommentNos = fixedUnreadComments\r\n .filter(\r\n comment =>\r\n comment.postedUserId === post.userId &&\r\n comment.postNo === post.postNo\r\n )\r\n .map(comment => comment.commentNo);\r\n\r\n if (unreadCommentNos.length < 1) {\r\n const topOfThisCard =\r\n (index + 1) * minimumPostCardHeight +\r\n inputFieldMinimumHeight;\r\n if (bottomOfVisibleArea < topOfThisCard) {\r\n /**\r\n * Virtual scroll\r\n */\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 {(initialLoading || loadingByScroll) && (\r\n \r\n )}\r\n
\r\n );\r\n}\r\nconst screenExpectedHeight = 2000;\r\nconst minimumPostCardHeight = 130;\r\nconst inputFieldMinimumHeight = 71;\r\nconst useContentStyles = makeStyles({\r\n unloadedShuriken: { margin: \"50px 0 40px\" },\r\n loadingShuriken: { margin: \"10px 0\" },\r\n container: {\r\n paddingTop: 1,\r\n textAlign: \"left\",\r\n },\r\n inputCard: { padding: \"10px 5px\", margin: 5 },\r\n dummyDivForVirtualScroll: { height: minimumPostCardHeight },\r\n});\r\n\r\nfunction PostInputField({\r\n posts,\r\n setPosts,\r\n postedUsers,\r\n setPostedUsers,\r\n user,\r\n userId,\r\n hasSubmittingPost,\r\n}: {\r\n posts: Post[];\r\n setPosts: (posts: Post[]) => void;\r\n postedUsers: UserForRanking[];\r\n setPostedUsers: (postedUsers: UserForRanking[]) => void;\r\n user?: User;\r\n userId: number;\r\n hasSubmittingPost: boolean;\r\n}) {\r\n const { abTestKey, abTestSuccess } = useAbTest({\r\n testName: \"SocialPostInput-placeholder\",\r\n keys: Object.keys(placeholders),\r\n });\r\n return (\r\n => {\r\n if (!user) {\r\n changeAppState(\"signInPanelState\", {\r\n type: \"signUp\",\r\n });\r\n return \"shouldNotClearField\";\r\n }\r\n if (hasSubmittingPost) {\r\n return \"shouldNotClearField\";\r\n }\r\n\r\n if (!postedUsers.some(u => u.userId === user.userId)) {\r\n setPostedUsers([...postedUsers, user]);\r\n }\r\n const hasFile = files.length > 0;\r\n const newPosts = [getTmpPost(userId, text, hasFile), ...posts];\r\n setPosts(newPosts);\r\n const newPost = hasFile\r\n ? await registerImagePost(userId, text, files)\r\n : await registerPost(userId, text);\r\n\r\n if (!newPost || \"error\" in newPost) {\r\n alert(\"Failed to post\");\r\n return \"shouldNotClearField\";\r\n }\r\n setPosts(newPosts.map(p => (p.postNo < 1 ? newPost : p)));\r\n abTestSuccess();\r\n }}\r\n placeholder={abTestKey && placeholders[Number(abTestKey)]}\r\n disabled={hasSubmittingPost}\r\n autoFocus\r\n />\r\n );\r\n}\r\nconst placeholders = [\r\n \"What did you learn from this website today?\",\r\n \"What is your favorite way to study Japanese?\",\r\n \"What are you planning to study tomorrow?\",\r\n \"What do you want to do in Japan?\",\r\n \"What will you do after mastering the Japanese language?\",\r\n \"Do you enjoy this website?\",\r\n \"Is this website helpful to you?\",\r\n \"What do you find most difficult when studying Japanese?\",\r\n \"Is the Japanese language difficult for you?\",\r\n \"What is your favorite Japanese food?\",\r\n \"How's your studying going?\",\r\n \"How are you today?\",\r\n \"Why are you learning Japanese?\",\r\n \"Post your favorite picture of Japan!\",\r\n \"Post anything you like!\",\r\n \"What is your favorite anime?\",\r\n \"ใ™ใใช ใ‚ขใƒ‹ใƒกใฏ ใชใ‚“ใงใ™ใ‹๏ผŸ\",\r\n \"ใ™ใใช ใƒžใƒณใ‚ฌใฏ ใชใ‚“ใงใ™ใ‹๏ผŸ\",\r\n \"ใ’ใ‚“ใ ใงใ™ใ‹๏ผŸ\",\r\n \"ใซใปใ‚“ใ”ใฏ ใŸใฎใ—ใ„ ใงใ™ใ‹๏ผŸ\",\r\n \"ใ™ใใช ใซใปใ‚“ใ”ใฏ ใชใ‚“ใงใ™ใ‹๏ผŸ\",\r\n \"ใ™ใใช ใซใปใ‚“ใฎ ใŸในใ‚‚ใฎใฏ ใชใ‚“ใงใ™ใ‹๏ผŸ\",\r\n \"Do you have questions about the Japanese language?\",\r\n \"You can ask questions about Japanese here!\",\r\n \"Do you have any questions?\",\r\n \"Do you have any questions about Japan?\",\r\n];\r\nfunction getTmpPost(userId: number, text: string, hasFile: boolean): Post {\r\n return {\r\n userId,\r\n postNo: 0,\r\n time: \"\",\r\n minutesAgo: 0,\r\n text: hasFile ? `${text}![shuriken](${shurikenProgressKey})` : text,\r\n isAutoPost: false,\r\n deleted: false,\r\n likeCount: 0,\r\n commentCount: 0,\r\n ownLike: false,\r\n imageExtensions: \"\",\r\n };\r\n}\r\n\r\nlet lastParam = \"\";\r\nasync function fetchPosts(\r\n minTime: string,\r\n userId: number,\r\n postsToShow: PostToShow[],\r\n targetUserId: number = 0\r\n): Promise {\r\n if (minTime !== \"\" && lastParam === minTime) {\r\n return null;\r\n }\r\n lastParam = minTime;\r\n\r\n return await fetchPost<\r\n {\r\n minTime: string;\r\n userId: number;\r\n postsToShow: PostToShow[];\r\n targetUserId: number;\r\n },\r\n FetchPostsResponse\r\n >(\"api/Post/GetPosts\", { minTime, userId, postsToShow, targetUserId });\r\n}\r\n\r\nasync function registerPost(\r\n userId: number,\r\n text: string\r\n): Promise> {\r\n return await fetchPost<\r\n {\r\n userId: number;\r\n text: string;\r\n },\r\n FetchResult\r\n >(\"api/Post/RegisterPost\", { userId, text });\r\n}\r\n\r\nasync function registerImagePost(\r\n userId: number,\r\n text: string,\r\n files: File[]\r\n): Promise> {\r\n const formData = new FormData();\r\n formData.append(\"userId\", userId.toString());\r\n formData.append(\"text\", text);\r\n for (let file of files) {\r\n formData.append(\"files\", file);\r\n }\r\n\r\n return await fetchPostFormData>(\r\n \"api/Post/PostImages\",\r\n formData\r\n );\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"],"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","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","isAndroid","test","navigator","userAgent","DarkButton","forwardRef","ref","style","className","rest","_objectWithoutProperties","_excluded","c","useStyles","_jsx","Button","_objectSpread","spaceBetween","button","makeStyles","_ref2","palette","backgroundColor","grey","color","fontSize","fetchSetMuteStatus","_fetchSetMuteStatus","fromUserId","targetUserId","muted","result","fetchPost","LeftAvatarArea","_postedUser$userId","postedUser","avatarRef","usersConnectionHeightList","connectionTop","connectionLeft","connectionWidth","_jsxs","container","children","UserAvatar","user","colorNumber","userId","size","onClick","ev","stopPropagation","openOtherUserPanel","Object","entries","map","commentNo","height","Number","UsersConnection","left","width","minWidth","display","flexDirection","speed","_ref4","mounted","setMounted","afterMounted","setAfterMounted","heightTime","widthTime","useUsersConnectionStyles","connection","theme","_ref5","borderStyle","position","transition","borderLeft","borderBottom","borderBottomLeftRadius","MutedPost","post","tmpMutedUserIds","setTmpMutedUserIds","filter","id","undo","alignItems","justifyContent","margin","padding","maxHeight","minHeight","lineHeight","obj","getPostKey","postedUserId","postNo","functionsToUpdateBackgroundComments","TopPage","SocialPanel","OtherUserPanel","swap","originalArray","index1","index2","element","InputFieldArea","_user$userId","sendText","placeholder","disabled","onEdit","autoFocus","inputRef","isWide","useScreenSize","screenWidth","text","setText","files","setFiles","error","maxTextLength","maxUploadableFiles","validate","imageInputRef","useRef","_useState5","_useState6","isFocusedStyle","setIsFocusedStyle","isSendButtonDisabled","trim","useCommentFieldStyles","isPlaceholderLoaded","onEditContainer","current","intervalId","setInterval","clearInterval","TextField","value","multiline","maxRows","fullWidth","textField","onChange","target","inputProps","input","helperText","errorText","InputProps","endAdornment","InputAdornment","inputAdornment","IconButton","_imageInputRef$curren","click","imageIconButton","ImageIcon","imageIcon","onBlur","buttonContainer","PrimaryButton","sendButton","previousText","previousFiles","sendResult","SendIcon","sendIcon","previewContainer","file","index","imageContainer","alt","previewImage","src","URL","createObjectURL","f","removeImageIconButton","CloseIcon","leftArrowButton","ArrowLeftIcon","rightArrowButton","ArrowRightIcon","addPhotoButton","_imageInputRef$curren2","AddPhotoAlternateIcon","addPhotoIcon","hidden","type","accept","validImageContentTypes","targetFiles","Array","from","err","validateImage","multiple","sendButtonSize","paddingTop","marginTop","opacity","marginLeft","primary","main","secondary","fontWeight","_ref6","overflow","right","marginBottom","maxWidth","borderRadius","marginRight","bottom","gap","overflowX","objectFit","MutedComment","comment","commentedUserId","CommentLeftAvatarArea","changeCommenterAvatarElement","el","UserNameAndTime","minutesAgo","hideLevel","hideTime","nameAndLevel","name","level","time","getSocialPostTime","borderBottomColor","borderBottomWidth","paddingBottom","wordBreak","whiteSpace","hour","day","Intl","DateTimeFormat","year","month","format","Date","now","MuteUserOutlinedIcon","props","SvgIcon","d","fill","CommentLowerButtonArea","isMyComment","hasOwnLike","deleteComment","likeComment","unlikeComment","likeCount","commentCount","useCommentLowerButtonAreaStyles","ChatBubbleOutlineIcon","toLocaleString","LikeButton","delete","DeleteIcon","mute","changeAppState","paddingRight","cursor","useLikeButtonStyles","FavoriteIcon","favorite","FavoriteBorderIcon","checkUser","getAppState","_fetchLikeComment","_callee4","replyTargetUserId","replyTargetCommentNo","_context4","fetchDeleteComment","_x6","_x7","_x8","_x9","_fetchDeleteComment","_callee5","_context5","fetchUnlikeComment","_x10","_x11","_x12","_x13","_fetchUnlikeComment","_callee6","_context6","getTmpCommentLike","isLike","isRead","isReplyTargetRead","deleted","getDeleteComment","confirm","getLikeComment","comments","setComments","setCommentedUsers","showReply","_x5","fetchLikeComment","r","commentedUsers","getUnlikeComment","targetComment","com","checkUnreadComment","unreadCommentNos","some","co","getTmpComment","hasFile","shurikenProgressKey","registerImageComment","_x14","_x15","_x16","_x17","_x18","_registerImageComment","_callee7","formData","_iterator","_step","_args7","_context7","FormData","append","toString","_createForOfIteratorHelper","s","n","done","e","fetchPostFormData","fetchCommentToPost","_x19","_x20","_x21","_x22","_fetchCommentToPost","_callee8","_context8","fetchCommentToComment","_x23","_x24","_x25","_x26","_fetchCommentToComment","_callee9","_args9","_context9","getSendText","addTmpComment","addCommentCount","replyTargetComment","_callee3","_context3","_x27","_x28","CommentRightContents","commentedUser","commentsAndLikesThisComment","replyTargetUser","_splitByBoolean","_splitByBoolean2","likesToThisComment","commentsToThisComment","showLowerButtons","markdownWithButtons","markdownWithoutButtons","Markdown","source","noParagraphMarginBottom","singleBreakLine","isSocialPost","isFontSmaller","ShurikenProgress","collapseTimeout","collapseTimeStep","CommentCard","refreshUsersConnectionHeightList","_ref$depth","depth","showOnlyUnreadComment","isLastCard","setShowOnlyUnreadComment","keepRefreshing","originKey","isUnread","refreshContainer","imgElements","document","getElementsByClassName","forEach","imgElement","addEventListener","commentsAndLikesToThisComment","shouldShowReply","setShouldShowReply","isInputAreaHidden","setInputAreaHidden","unreadCommentsAndLikesToThisComment","readCommentsAndLikesToThisComment","commentsAndLikesToShow","hasBorder","u","_Fragment","Card","getCommentCardId","card","elevation","Collapse","in","onExiting","onEntering","timeout","onEntered","_inputRef$current","focus","collapse","classes","root","collapseRoot","collapseInner","inputField","border","light","paddingLeft","CommentArea","areUnreadCommentsRemoved","scrollableContainerRef","loaded","setLoaded","fetch","p","json","isCollapseOpen","setCollapseOpen","timerIdRef","scrollableElement","onScroll","window","removeEventListener","CommentList","borderTop","borderTopColor","borderTopWidth","commentsToPost","unreadComments","readComments","commentsToShow","useListStyles","isNoComment","deleteFromServerSide","showMore","LowerButtonArea","isMyPost","deletePost","likePost","unlikePost","hideButtonTitle","submitting","setSubmitting","commentIcon","deleteIcon","muteIcon","_ref4$post","ownLike","useLikeStyles","like","sizeChangeAnime","likedFavoriteIcon","favoriteIcon","animation","animationIterationCount","transform","RightContents","isCommentShown","postKey","newComments","currentDataContainer","_currentDataContainer","_functionsToUpdateBac","_functionsToUpdateBac2","call","useSyncCommentsStateWithBackgroundPanel","_useState7","_useState8","setUnreadCommentsRemoved","tmpComment","markdownContainer","PostedText","getTmpLike","preventDefault","initialView","replace","PostCard","posts","setPosts","postedUsers","setCommentShown","_useUsersConnectionLi","_avatarEl$offsetTop","_avatarEl$offsetHeigh","_avatarEl$offsetLeft","_avatarEl$offsetWidth","_avatarRef$current$of","_avatarRef$current","commenterAvatarElements","useMemo","setUsersConnectionHeightList","avatarEl","fromEntries","_avatarEl$offsetTop2","_avatarEl$offsetHeigh2","offsetTop","getUsersConnectionHeightList","avatarTop","avatarHeight","avatarLeft","offsetLeft","avatarWidth","offsetWidth","connectionLineStyles","useUsersConnectionLines","isBorderShown","changePost","newPostState","fetchDeletePosts","fetchLikePosts","fetchUnlikePosts","addedCount","_fetchDeletePosts","_fetchLikePosts","_fetchUnlikePosts","transitionTime","getCommentKey","UnreadCommentNotificationList","fixedUnreadComments","loading","isOpen","setOpen","nonClickedRecordKeys","setNonClickedNotificationKeys","outsideCollapse","headerContainer","notificationTitle","NotificationsIcon","ArrowForwardIcon","arrowIcon","listContainer","sort","a","b","_commentedUser$userId","notificationVerb","isToPost","getUnreadCommentNotificationVerb","recordCard","scrollTargetEl","getElementById","recordKey","avatarAndText","notificationTextArea","username","checkButton","flexShrink","functionsToUpdateBackgroundPosts","transitionMilliseconds","panelWidth","SocialPanelOriginKey","_useAppState","useAppState","_useAppState2","panelState","setPanelState","usePanelStyles","minTime","setMinTime","setPostedUsers","_useUser","useUser","isUserFetchDone","setFixedUnreadComments","RightPanel","panelName","onClose","globalPanelState","topItem","CachedIcon","loadIcon","initialFetch","childrenContainerStyle","contentWrapper","SocialContent","scrollableSpanToFetch","_initialFetch","saveKey","savedData","previousResult","_getAppState2","JSON","parse","fetchPosts","dataToSave","setItem","stringify","shortenPosts","shortenPostedUserIds","shortenDataToSave","finishedKey","isPostInputHidden","_ref3$initialShuriken","initialShurikenSize","shouldNotReadComments","newPosts","newPost","useSyncPostsStateWithBackgroundPanel","isScrollFinished","initialLoading","_useState9","_useState10","loadingByScroll","setLoadingByScroll","_useState11","_useState12","useContentStyles","hasSubmittingPost","isShowingLocallySavedPosts","_useState13","screenExpectedHeight","_useState14","bottomOfVisibleArea","setBottomOfVisibleArea","inputCard","PostInputField","unloadedShuriken","minimumPostCardHeight","inputFieldMinimumHeight","dummyDivForVirtualScroll","loadingShuriken","textAlign","_useAbTest","placeholders","getTmpPost","registerImagePost","registerPost","isAutoPost","imageExtensions","lastParam","_fetchPosts","postsToShow","_args5","_registerPost","_registerImagePost","icon300","avatarPath","Avatar","imgAvatar","img","title","iconAvatar","PersonIcon","icon","colors","boxShadow","objectPosition"],"sourceRoot":""}