{"version":3,"file":"static/chunks/2574-187a390200e4c9eb.js","mappings":"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","sources":["webpack://_N_E/./src/components/commons/popup/container/BottomSheetContainer.tsx","webpack://_N_E/./src/components/commons/popup/container/NovelPopupContainer.tsx","webpack://_N_E/./src/components/main/common/label/BandLabel.tsx","webpack://_N_E/./src/components/main/home/homeStory/userHistoryMorePopup/UserHistoryStoryMorePopupInner.tsx","webpack://_N_E/./src/components/main/home/homeStory/userHistoryMorePopup/UserHistoryStoryMorePopup.tsx","webpack://_N_E/./src/operations/mutations/story/__generated__/removeUserStoryHistory.generated.ts","webpack://_N_E/./src/operations/mutations/story/removeUserStoryHistory.ts","webpack://_N_E/./src/components/main/common/storyItem/SmallStoryItem.tsx","webpack://_N_E/./src/components/main/common/storyItem/link/StoryItemLink.tsx","webpack://_N_E/./src/components/main/common/title/StoryItemTitle.tsx","webpack://_N_E/./src/hooks/useInfiniteScroll.ts","webpack://_N_E/./src/operations/queries/home/__generated__/useUserHistoryList.generated.ts"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { css } from '@emotion/react';\nimport theme from '@styles/theme';\nimport { NavCloseBtn } from 'public/assets';\nimport Portal from '@components/commons/portal/Portal';\n\ninterface IBottomSheetContainer {\n title?: string;\n isCloseButtonClick?: boolean;\n children: JSX.Element[] | JSX.Element;\n isTitleHasUnderline?: boolean;\n hasCloseButton?: boolean;\n onClose?: () => void;\n marginTop?: number;\n contentHeight?: number;\n hasBottomSheetOverflowY?: boolean;\n}\n\nconst BottomSheetContainer = ({\n title,\n children,\n isCloseButtonClick,\n isTitleHasUnderline = true,\n hasCloseButton,\n onClose,\n contentHeight,\n marginTop,\n hasBottomSheetOverflowY = true,\n}: IBottomSheetContainer) => {\n useEffect(() => {\n document.body.style.overflow = 'hidden';\n return () => {\n document.body.style.overflow = '';\n };\n }, []);\n\n return (\n \n \n
\n \n
\n {title &&
{title}
}\n {hasCloseButton && (\n \n )}\n
\n {isTitleHasUnderline &&
}\n
{children}
\n
\n
\n
\n );\n};\n\nconst container = ({\n marginTop = 0,\n contentHeight = 230,\n hasBottomSheetOverflowY = true,\n}: {\n marginTop?: number;\n contentHeight?: number;\n hasBottomSheetOverflowY?: boolean;\n}) => css`\n width: 100%;\n height: 100vh;\n position: fixed;\n top: 0;\n left: 0;\n overflow: hidden;\n display: flex;\n justify-content: center;\n align-items: center;\n font-family: 'Apple SD Gothic Neo';\n font-style: normal;\n z-index: 20;\n\n .bg {\n width: 100%;\n height: 100%;\n background-color: ${theme.colors.gray900};\n opacity: 0.7;\n }\n\n .bottom-sheet-wrapper {\n position: fixed;\n overflow: hidden;\n width: 100%;\n max-width: 800px;\n bottom: 0;\n background-color: ${theme.colors.white};\n display: flex;\n flex-direction: column;\n align-items: center;\n border-top-left-radius: 1em;\n border-top-right-radius: 1em;\n padding: 1.25em;\n overflow-y: ${hasBottomSheetOverflowY ? 'scroll' : 'hidden'};\n\n ${marginTop && `top: ${marginTop}px;`};\n\n .title-wrapper {\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n .title {\n ${theme.font.header.navigation}\n display: flex;\n width: 100%;\n }\n\n .icon {\n cursor: pointer;\n }\n }\n\n .horizontal-bar {\n height: 0.0625em;\n width: 100%;\n background-color: ${theme.colors.gray200};\n }\n\n .content {\n width: 100%;\n display: flex;\n flex-direction: column;\n }\n }\n\n .up {\n animation: up 500ms ease-in-out;\n }\n\n .down {\n animation: down 500ms ease-in-out;\n }\n\n .fadeIn {\n animation: fadeIn 500ms ease-in-out;\n }\n\n .fadeOut {\n animation: fadeOut 500ms ease-in-out;\n }\n\n @keyframes fadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 0.7;\n }\n }\n\n @keyframes fadeOut {\n 0% {\n opacity: 0.7;\n }\n 100% {\n opacity: 0;\n }\n }\n\n @keyframes up {\n 0% {\n transform: translateY(${contentHeight}px);\n }\n 100% {\n transform: translateY(0);\n }\n }\n\n @keyframes down {\n 0% {\n transform: translateY(0);\n }\n 100% {\n transform: translateY(${contentHeight}px);\n }\n }\n`;\n\nexport default BottomSheetContainer;\n","import React, { ReactNode, useEffect } from 'react';\nimport { css } from '@emotion/react';\nimport theme from '@styles/theme';\nimport Portal from '@components/commons/portal/Portal';\nimport { NavCloseBtn } from 'public/assets';\nimport { checkDevice } from '@/common/utils';\n\ninterface INovelPopupContainer {\n children: ReactNode;\n title: string;\n hasCloseButton?: boolean;\n onClose?: () => void;\n}\n\nconst NovelPopupContainer = ({\n title,\n children,\n hasCloseButton,\n onClose,\n}: INovelPopupContainer) => {\n useEffect(() => {\n document.body.style.overflow = 'hidden';\n return () => {\n document.body.style.overflow = '';\n };\n }, []);\n\n return (\n \n
\n
\n
\n

{title}

\n {hasCloseButton && (\n \n )}\n
\n\n
{children}
\n
\n \n );\n};\n\nconst backDrop = css`\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n min-height: 100%;\n background: ${theme.colors.gray900};\n opacity: 0.6;\n overflow: hidden;\n z-index: 20;\n`;\n\nconst container = ({ device }: { device: DEVICE }) => css`\n position: fixed;\n top: 50%;\n left: 50%;\n width: 19.5rem;\n transform: translate(-50%, -50%);\n padding: 1.25rem 1.25rem;\n background: ${theme.colors.white};\n border-radius: 0.75rem;\n max-width: 23.4375rem;\n z-index: 29;\n\n .title-wrapper {\n width: 100%;\n display: flex;\n justify-content: space-between;\n }\n\n .title {\n margin-bottom: 1rem;\n font: ${theme.font.header.headline1};\n color: ${theme.colors.gray900};\n text-align: center;\n margin-top: 0.625rem;\n }\n\n .title-small {\n color: ${theme.colors.gray900};\n font-weight: 700;\n font-size: 1.125rem;\n line-height: 1.5625rem;\n letter-spacing: -0.3px;\n }\n\n .icon {\n cursor: pointer;\n }\n\n @media (max-width: ${theme.devices.mobile}) {\n width: 100%;\n max-width: 19.5rem;\n }\n`;\n\nexport default NovelPopupContainer;\n","import React, { useEffect, useState } from 'react';\nimport { css } from '@emotion/react';\nimport theme from '@styles/theme';\nimport { STORAGE_KEY } from '@/common/values';\n\ninterface IBandLabel {\n text: string;\n color?: string;\n backgroundColor?: string;\n borderColor?: string;\n}\n\n// 홈화면 작품 아이템 띠지형태의 라벨 컴포넌트\nconst BandLabel = ({\n text,\n color,\n backgroundColor,\n borderColor,\n}: IBandLabel) => {\n const [userLanguage, setUserLanguage] = useState('');\n\n useEffect(() => {\n const storageInfo = localStorage.getItem(STORAGE_KEY.USER_PROPERTIES);\n const parsedStorageInfo = storageInfo && JSON.parse(storageInfo);\n\n setUserLanguage(parsedStorageInfo?.language);\n }, []);\n\n if (userLanguage === 'en_US') {\n return <>;\n }\n\n return (\n
\n
{text}
\n
\n );\n};\n\nconst wrapper = ({\n color,\n backgroundColor,\n borderColor,\n}: {\n color?: string;\n backgroundColor?: string;\n borderColor?: string;\n}) => css`\n position: relative;\n display: flex;\n align-items: flex-start;\n margin-right: 0.25rem;\n .band {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 1.25rem;\n padding: 0px 0.25rem;\n background: ${backgroundColor ?? theme.colors.white};\n color: ${color ?? theme.colors.primary500};\n ${borderColor && `border: 1.5px solid ${borderColor};`}\n border-radius: 0.25rem;\n font-size: 0.5625rem;\n font-weight: 700;\n }\n`;\n\nexport default BandLabel;\n","import React from 'react';\nimport { css } from '@emotion/react';\nimport theme from '@styles/theme';\nimport { Button } from '@/components/commons';\nimport useTranslation from 'next-translate/useTranslation';\n\ninterface IUserHistoryStoryMorePopupInner {\n onClickStoryDetailButton: () => void;\n onClickDeleteButton: () => void;\n}\n\nexport const UserHistoryStoryMorePopupInner = ({\n onClickStoryDetailButton,\n onClickDeleteButton,\n}: IUserHistoryStoryMorePopupInner) => {\n const { t } = useTranslation();\n\n return (\n
\n

{t('history_popup_description_delete_info')}

\n
\n \n \n
\n
\n );\n};\n\nconst container = css`\n display: flex;\n flex-direction: column;\n padding-top: 0.5rem;\n\n .info-text {\n color: ${theme.colors.gray600};\n ${theme.font.body.body2}\n }\n\n .button-container {\n padding-top: 1.25rem;\n display: flex;\n gap: 0.625rem;\n }\n`;\n\nconst buttonStyle = css`\n width: 100%;\n height: 3em;\n font-size: 1em;\n font-weight: 500;\n cursor: pointer;\n background-color: ${theme.colors.gray300};\n color: ${theme.colors.gray800};\n border-radius: 0.375rem;\n`;\n\nconst secondButtonStyle = css`\n width: 100%;\n height: 3em;\n font-size: 1em;\n font-weight: 500;\n cursor: pointer;\n`;\n","import React, { useEffect, useState } from 'react';\nimport { checkDevice } from '@common/utils';\n\nimport BottomSheetContainer from '@components/commons/popup/container/BottomSheetContainer';\nimport NovelPopupContainer from '@components/commons/popup/container/NovelPopupContainer';\nimport { UserHistoryStoryMorePopupInner } from './UserHistoryStoryMorePopupInner';\n\ninterface IUserHistoryStoryMorePopup {\n isShow: boolean;\n storyName: string;\n onClickStoryDetailButton: () => void;\n onClickDeleteButton: () => void;\n onClose: () => void;\n}\n\nexport const UserHistoryStoryMorePopup = ({\n storyName,\n isShow,\n onClickStoryDetailButton,\n onClickDeleteButton,\n onClose,\n}: IUserHistoryStoryMorePopup) => {\n const [device, setDevice] = useState();\n\n useEffect(() => {\n setDevice(checkDevice());\n }, []);\n\n if (!isShow) {\n return null;\n }\n\n if (device === 'PC') {\n return (\n \n \n \n );\n }\n\n return (\n \n \n \n );\n};\n","import * as Types from '../../../../baseType';\n\nimport { gql } from '@apollo/client';\nimport * as Apollo from '@apollo/client';\nconst defaultOptions = {} as const;\nexport type RemoveUserHistoryMutationVariables = Types.Exact<{\n userStoryHistoryId: Types.Scalars['Int'];\n}>;\n\n\nexport type RemoveUserHistoryMutation = { __typename?: 'Mutation', removeUserStoryHistory: { __typename?: 'OkResponse', ok: number } };\n\n\nexport const RemoveUserHistoryDocument = gql`\n mutation RemoveUserHistory($userStoryHistoryId: Int!) {\n removeUserStoryHistory(data: {id: $userStoryHistoryId}) {\n ok\n }\n}\n `;\nexport type RemoveUserHistoryMutationFn = Apollo.MutationFunction;\n\n/**\n * __useRemoveUserHistoryMutation__\n *\n * To run a mutation, you first call `useRemoveUserHistoryMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useRemoveUserHistoryMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [removeUserHistoryMutation, { data, loading, error }] = useRemoveUserHistoryMutation({\n * variables: {\n * userStoryHistoryId: // value for 'userStoryHistoryId'\n * },\n * });\n */\nexport function useRemoveUserHistoryMutation(baseOptions?: Apollo.MutationHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return Apollo.useMutation(RemoveUserHistoryDocument, options);\n }\nexport type RemoveUserHistoryMutationHookResult = ReturnType;\nexport type RemoveUserHistoryMutationResult = Apollo.MutationResult;\nexport type RemoveUserHistoryMutationOptions = Apollo.BaseMutationOptions;","import { gql } from '@apollo/client';\nimport {\n useRemoveUserHistoryMutation as useMutation,\n RemoveUserHistoryMutationOptions,\n} from './__generated__/removeUserStoryHistory.generated';\nimport { UserHistoryListDocument } from '@/operations/queries/home/__generated__/useUserHistoryList.generated';\n\nexport const REMOVE_USER_HISTORY = gql`\n mutation RemoveUserHistory($userStoryHistoryId: Int!) {\n removeUserStoryHistory(data: { id: $userStoryHistoryId }) {\n ok\n }\n }\n`;\n\nexport const useRemoveUserHistory = (\n options?: RemoveUserHistoryMutationOptions,\n) => {\n const [mutate] = useMutation({\n ...options,\n update(cache, _, { variables }) {\n const currentStoryId = variables?.userStoryHistoryId;\n cache.evict({ id: `UserStoryHistory:${currentStoryId}` });\n },\n refetchQueries: [\n {\n query: UserHistoryListDocument,\n },\n ],\n awaitRefetchQueries: true,\n });\n\n return { mutate };\n};\n","import React, { useState } from 'react';\nimport { useAppDispatch } from '@store/hooks';\nimport useTranslation from 'next-translate/useTranslation';\nimport { NewStoryItemFragment } from '@operations/queries/home/__generated__/useNewStoryList.generated';\nimport { GenreStoryItemFragment } from '@/operations/queries/home/__generated__/useGetHomeTabGenreStoryList.generated';\nimport { SpOriginalDtoFragment } from '@operations/queries/home/__generated__/useSPOriginalStoryList.generated';\nimport { getStatusText, getLabelText } from '@common/utils';\nimport { HOME_TAB_TYPE } from '@customTypes/home';\nimport {\n setCurrentStoryLabelText,\n setPreviousSection,\n} from '@slices/eventSlice';\nimport { Section } from '@customTypes/event';\nimport theme from '@styles/theme';\nimport { css } from '@emotion/react';\nimport { AdultLabelIcon, MoreLabelIcon } from 'public/assets';\n\nimport StoryItemTitle from '../title/StoryItemTitle';\nimport StoryItemLink from './link/StoryItemLink';\nimport BandLabel from '../label/BandLabel';\nimport SPImage from '@components/commons/image/SPImage';\nimport {\n StoryHorizontalCoverDtoFragment,\n StoryVerticalCoverDtoFragment,\n} from '@/operations/fragments/__generated__/home.generated';\nimport { Story_Play_Type } from '@/baseType';\nimport { SearchSourceDtoFragment } from '@/operations/queries/home/__generated__/useSearchStory.generated';\nimport { UserHistoryStoryMorePopup } from '../../home/homeStory/userHistoryMorePopup/UserHistoryStoryMorePopup';\nimport { useRemoveUserHistory } from '@/operations/mutations/story/removeUserStoryHistory';\nimport { useRouter } from 'next/router';\n\ninterface ISmallStoryItem {\n index: number;\n data:\n | NewStoryItemFragment\n | SpOriginalDtoFragment\n | GenreStoryItemFragment\n | StoryVerticalCoverDtoFragment\n | SearchSourceDtoFragment\n | StoryHorizontalCoverDtoFragment;\n hasTitle?: boolean;\n section?: Section;\n showInteractiveBanner?: boolean;\n showStoryGameBanner?: boolean;\n hasMoreIcon?: boolean;\n userHistoryId?: number;\n}\n\nconst SmallStoryItem = ({\n data,\n section,\n hasTitle,\n index,\n showInteractiveBanner,\n showStoryGameBanner,\n hasMoreIcon,\n userHistoryId,\n}: ISmallStoryItem) => {\n const { t } = useTranslation();\n const dispatch = useAppDispatch();\n const router = useRouter();\n const [isMorePopupOpen, setIsMorePopupOpen] = useState(false);\n\n const { mutate: removeUserHistory } = useRemoveUserHistory();\n\n const setEventParams = () => {\n dispatch(\n setCurrentStoryLabelText(\n getLabelText({\n currentHomeTab: HOME_TAB_TYPE.Home,\n isFinished: data.isFinished,\n isOnHiatus: data.onHiatus,\n isUp: data.isUp,\n }),\n ),\n );\n section && dispatch(setPreviousSection(section));\n };\n\n const handleMoreIconClick = (e: any) => {\n e.preventDefault();\n setIsMorePopupOpen(true);\n };\n\n const handleDeleteButtonFromUserHistoryPopupClick = () => {\n userHistoryId &&\n removeUserHistory({\n variables: { userStoryHistoryId: userHistoryId },\n });\n setIsMorePopupOpen(false);\n };\n\n const handleStoryDetailButtonFromUserHistoryPopupClick = () => {\n setIsMorePopupOpen(false);\n router.push(`/story/${data.storyId}`);\n };\n\n return (\n \n \n
\n \n {hasMoreIcon && (\n
\n \n
\n )}\n {data.isAdult && (\n
\n \n
\n )}\n {showInteractiveBanner && (\n
\n \n
\n )}\n {showStoryGameBanner && (\n
\n \n
\n )}\n
\n <>\n {hasTitle && (\n \n )}\n \n \n setIsMorePopupOpen(false)}\n onClickStoryDetailButton={\n handleStoryDetailButtonFromUserHistoryPopupClick\n }\n onClickDeleteButton={handleDeleteButtonFromUserHistoryPopupClick}\n />\n
\n );\n};\n\nconst wrapper = ({ hasMoreIcon }: { hasMoreIcon?: boolean }) => css`\n display: flex;\n flex-direction: column;\n width: 7.5rem;\n text-align: left;\n cursor: pointer;\n\n .thumbnail {\n position: relative;\n width: 7.5rem;\n height: 11.375rem;\n\n img {\n border-radius: 0.22em;\n image-rendering: auto;\n }\n }\n\n .more-icon {\n position: absolute;\n top: 0.375rem;\n right: 0.375rem;\n }\n\n .adult-sign {\n position: absolute;\n top: ${hasMoreIcon ? '1.625rem' : '0.375rem'};\n right: 0.175rem;\n }\n\n .label-wrapper {\n display: flex;\n align-items: center;\n padding: 0.25rem;\n }\n\n @media screen and (max-width: ${theme.devices.mobile}) {\n width: 6.875rem;\n\n .thumbnail {\n width: 6.875rem;\n height: 10.375rem;\n }\n }\n`;\n\nexport default SmallStoryItem;\n","import React from 'react';\nimport Link from 'next/link';\nimport { useRouter } from 'next/router';\nimport { useQuery } from '@apollo/client';\nimport { GET_USER } from '@api/user';\nimport { GetUser } from '@customTypes/user';\nimport { getAdultCheckType } from '@common/utils';\nimport { STORAGE_KEY } from '@/common/values';\n\ninterface IStoryItemLink {\n children: JSX.Element[] | JSX.Element;\n storyId: number;\n isAdult?: boolean;\n setEventParams?: () => void;\n}\n\n// story item 클릭 시 성인작품 여부에 따라 로그인페이지, 또는 성인인증 페이지로 라우팅시켜주는 link component\nconst StoryItemLink = ({\n storyId,\n children,\n isAdult,\n setEventParams,\n}: IStoryItemLink) => {\n const router = useRouter();\n const { data: userData } = useQuery(GET_USER, {\n fetchPolicy: 'network-only',\n });\n\n const type: 'pass' | 'auth' | 'adult' = getAdultCheckType({\n isAdultType: !!isAdult,\n userData: userData,\n });\n\n if (type === 'auth') {\n const handleStoryItemClick = () => {\n setEventParams && setEventParams();\n\n const redirectInfo = JSON.stringify({\n redirectUrl: `/story/${storyId}`,\n createdAt: new Date(),\n });\n localStorage.setItem(STORAGE_KEY.REDIRECT_INFO, redirectInfo);\n };\n\n return (\n \n {children}\n \n );\n } else if (type === 'adult') {\n return (\n \n {children}\n \n );\n } else {\n return (\n \n {children}\n \n );\n }\n};\n\nexport default StoryItemLink;\n","import React from 'react';\nimport { css } from '@emotion/react';\nimport theme from '@styles/theme';\nimport { AdultLabelIcon, HomeTabTitleUpIcon } from 'public/assets';\n\ninterface IStoryItemTitle {\n title?: string;\n subTitle?: string | null;\n author?: string | null;\n isShowUp?: boolean;\n isShowAdultIcon?: boolean;\n}\n\nconst StoryItemTitle = ({\n title,\n subTitle,\n author,\n isShowUp,\n isShowAdultIcon = false,\n}: IStoryItemTitle) => {\n return (\n
\n
\n {isShowUp && (\n \n \n \n )}\n {isShowAdultIcon && (\n \n )}\n

{title}

\n
\n
\n {author &&

{author}

}\n {subTitle &&

{subTitle}

}\n
\n
\n );\n};\n\nconst container = css`\n margin: 0.6875em 0.125em;\n\n .title-wrapper {\n display: flex;\n\n .adult-icon {\n flex-shrink: 0;\n }\n\n svg {\n margin-right: 0.25rem;\n }\n }\n\n .title {\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 1;\n -webkit-box-orient: vertical;\n word-wrap: break-word;\n height: 1.25rem;\n white-space: normal;\n color: ${theme.colors.gray900};\n ${theme.font.header.subhead2}\n }\n\n .author {\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 1;\n -webkit-box-orient: vertical;\n word-wrap: break-word;\n white-space: normal;\n ${theme.font.body.body1};\n color: ${theme.colors.primary300};\n }\n\n .sub-title {\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 1;\n -webkit-box-orient: vertical;\n word-wrap: break-word;\n height: 1rem;\n white-space: normal;\n ${theme.font.body.body1}\n color: ${theme.colors.gray600};\n }\n`;\n\nexport default StoryItemTitle;\n","import { useRef, useState, useEffect, useCallback, RefObject } from 'react';\n\nconst useInfiniteScroll = (target: RefObject) => {\n const observerRef = useRef();\n const [intersecting, setIntersecting] = useState(false);\n\n const getObserver = useCallback(() => {\n if (!observerRef.current) {\n observerRef.current = new IntersectionObserver((entries) =>\n setIntersecting(entries.some((entry) => entry.isIntersecting)),\n );\n }\n return observerRef.current;\n }, [observerRef.current]);\n\n useEffect(() => {\n if (target.current) getObserver().observe(target.current);\n\n return () => {\n getObserver().disconnect();\n };\n }, [target.current]);\n\n return intersecting;\n};\n\nexport default useInfiniteScroll;\n","import * as Types from '../../../../baseType';\n\nimport { gql } from '@apollo/client';\nimport { StoryHorizontalCoverDtoFragmentDoc } from '../../../fragments/__generated__/home.generated';\nimport * as Apollo from '@apollo/client';\nconst defaultOptions = {} as const;\nexport type UserHistoryListQueryVariables = Types.Exact<{\n page?: Types.InputMaybe;\n playType?: Types.InputMaybe;\n}>;\n\n\nexport type UserHistoryListQuery = { __typename?: 'Query', listUserStoryHistoryV3: { __typename?: 'ListableUserStoryHistory', totalCount: number, page: number, pageSize: number, list: Array<{ __typename?: 'UserStoryHistory', userStoryHistoryId: number, story: { __typename?: 'Story', storyId: number, name: string, oneLineDesc: string, authorName: string, numViews: number, numLikes: number, numComment: number, onHiatus: boolean, isFinished: boolean, isUp: boolean, isAdult: boolean, isTimeLeapFree: boolean, playType: Types.Story_Play_Type, mainImageFile?: { __typename?: 'File', link: string } | null, genreKey?: { __typename?: 'StoryGenre', text: { __typename?: 'LocalizeKey', key: string, ko_KR: string } } | null } }> } };\n\n\nexport const UserHistoryListDocument = gql`\n query UserHistoryList($page: Int, $playType: STORY_PLAY_TYPE) {\n listUserStoryHistoryV3(data: {page: $page, pageSize: 6, playType: $playType}) {\n totalCount\n page\n pageSize\n list {\n userStoryHistoryId\n story {\n ...StoryHorizontalCoverDto\n }\n }\n }\n}\n ${StoryHorizontalCoverDtoFragmentDoc}`;\n\n/**\n * __useUserHistoryListQuery__\n *\n * To run a query within a React component, call `useUserHistoryListQuery` and pass it any options that fit your needs.\n * When your component renders, `useUserHistoryListQuery` returns an object from Apollo Client that contains loading, error, and data properties\n * you can use to render your UI.\n *\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\n *\n * @example\n * const { data, loading, error } = useUserHistoryListQuery({\n * variables: {\n * page: // value for 'page'\n * playType: // value for 'playType'\n * },\n * });\n */\nexport function useUserHistoryListQuery(baseOptions?: Apollo.QueryHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return Apollo.useQuery(UserHistoryListDocument, options);\n }\nexport function useUserHistoryListLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return Apollo.useLazyQuery(UserHistoryListDocument, options);\n }\nexport type UserHistoryListQueryHookResult = ReturnType;\nexport type UserHistoryListLazyQueryHookResult = ReturnType;\nexport type UserHistoryListQueryResult = Apollo.QueryResult;"],"names":["container","marginTop","contentHeight","hasBottomSheetOverflowY","css","theme","title","children","isCloseButtonClick","isTitleHasUnderline","hasCloseButton","onClose","useEffect","document","body","style","overflow","className","onClick","width","height","fill","backDrop","device","checkDevice","wrapper","color","backgroundColor","borderColor","text","useState","userLanguage","setUserLanguage","storageInfo","localStorage","getItem","STORAGE_KEY","parsedStorageInfo","JSON","parse","language","UserHistoryStoryMorePopupInner","onClickStoryDetailButton","onClickDeleteButton","t","useTranslation","customCSS","buttonStyle","isFill","secondButtonStyle","UserHistoryStoryMorePopup","storyName","isShow","setDevice","NovelPopupContainer","BottomSheetContainer","defaultOptions","RemoveUserHistoryDocument","gql","useRemoveUserHistory","options","baseOptions","Apollo","useMutation","update","cache","_","variables","currentStoryId","userStoryHistoryId","evict","id","refetchQueries","query","UserHistoryListDocument","awaitRefetchQueries","mutate","hasMoreIcon","data","section","hasTitle","index","showInteractiveBanner","showStoryGameBanner","userHistoryId","dispatch","useAppDispatch","router","useRouter","isMorePopupOpen","setIsMorePopupOpen","removeUserHistory","name","storyId","getLabelText","currentHomeTab","HOME_TAB_TYPE","isFinished","isOnHiatus","onHiatus","isUp","getStatusText","playType","Story_Play_Type","StoryItemLink","isAdult","setEventParams","setCurrentStoryLabelText","setPreviousSection","SPImage","src","mainImageFile","link","layout","alt","e","preventDefault","BandLabel","StoryItemTitle","subTitle","genreKey","key","authorName","isShowUp","push","userData","useQuery","GET_USER","fetchPolicy","type","getAdultCheckType","isAdultType","href","pathname","url","redirectInfo","stringify","redirectUrl","createdAt","Date","setItem","backUrl","author","isShowAdultIcon","target","observerRef","useRef","intersecting","setIntersecting","getObserver","useCallback","current","IntersectionObserver","entries","some","entry","isIntersecting","observe","disconnect","StoryHorizontalCoverDtoFragmentDoc","useUserHistoryListQuery"],"sourceRoot":""}