{"version":3,"file":"static/chunks/pages/home/storygame-78478805ba617c5d.js","mappings":"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","sources":["webpack://_N_E/./src/lib/common-react/utils/checkDevice.ts","webpack://_N_E/./src/lib/common-react/utils/environment.ts","webpack://_N_E/./src/operations/queries/home/__generated__/useGetAllStoryGameTabs.generated.ts","webpack://_N_E/./src/operations/queries/home/__generated__/useGetAllStoryGameSectionViews.generated.ts","webpack://_N_E/./src/operations/queries/home/useGetAllStoryGameSectionViews.ts","webpack://_N_E/./src/lib/common-react/assets/svgs/ArrowCircleLeftIcon.tsx","webpack://_N_E/./src/lib/common-react/assets/svgs/ArrowCircleRightIcon.tsx","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/common/list/Carousel.tsx","webpack://_N_E/./src/lib/common-react/assets/svgs/AdultIcon.tsx","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/common/item/CarouselItem.tsx","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/CarouselComponent.tsx","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/common/item/CarouselRankItem.tsx","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/CarouselRankComponent.tsx","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/common/item/StoryItemTitleWithRanking.tsx","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/RankingListComponent.tsx","webpack://_N_E/./src/lib/common-react/assets/svgs/StorygamePlayCircleIcon.tsx","webpack://_N_E/./src/lib/common-react/assets/svgs/StorygamePlayIcon.tsx","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/common/item/SlideBannerItem.tsx","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/common/list/SlideBannerList.tsx","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/SliderComponent.tsx","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/EmptyComponent.tsx","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/StoryGameSectionComponent.tsx","webpack://_N_E/./src/operations/queries/home/__generated__/useCreateExposedSectionStory.generated.ts","webpack://_N_E/./src/components/storyGame/homeContainer/StoryGameMainHomeContainer.tsx","webpack://_N_E/./src/pages/home/storygame.tsx","webpack://_N_E/./src/provider/PlayTypeProvider.tsx","webpack://_N_E/?bb73","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/CarouselComponent.module.scss","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/CarouselRankComponent.module.scss","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/EmptyComponent.module.scss","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/RankingListComponent.module.scss","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/SliderComponent.module.scss","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/common/item/CarouselItem.module.scss","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/common/item/CarouselRankItem.module.scss","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/common/item/SlideBannerItem.module.scss","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/common/item/StoryItemTitleWithRanking.module.scss","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/common/list/Carousel.module.scss","webpack://_N_E/./src/lib/common-react/components/storyGameHomeTab/common/list/SlideBannerList.module.scss"],"sourcesContent":["type DEVICE = 'PC' | 'ANDROID' | 'IOS'\n\nexport const checkDevice = (): DEVICE => {\n if (typeof window === 'undefined') return 'PC'\n\n const ua = navigator.userAgent.toLowerCase()\n\n if (ua.includes('android')) {\n return 'ANDROID'\n } else if (ua.includes('iphone') || ua.includes('ipad')) {\n return 'IOS'\n }\n\n return 'PC'\n}\n","import { checkDevice } from './checkDevice'\n\n//\n// Browser\n//\nexport const CAN_USE_DOM: boolean =\n typeof window !== 'undefined' &&\n typeof window.document !== 'undefined' &&\n typeof window.document.createElement !== 'undefined'\n\nexport const IS_SAFARI: boolean =\n CAN_USE_DOM && /Version\\/[\\d.]+.*Safari/.test(navigator.userAgent)\n\nexport const IS_CHROME: boolean =\n CAN_USE_DOM && /^(?=.*Chrome).*/i.test(navigator.userAgent)\n\n//\n// OS\n//\n\n// iPad 에서 사용하는 특정 속성 확인 (iPadOs 13 이상)\nconst _IS_IPAD_NEW =\n CAN_USE_DOM &&\n navigator.maxTouchPoints &&\n navigator.maxTouchPoints > 2 &&\n /MacIntel/.test(navigator.platform)\n// User-Agent 확인 (iPadOS 13 미만)\nconst _IS_IPAD_OLD = CAN_USE_DOM && /iPad/.test(navigator.userAgent)\n// 터치 이벤트 지원 확인\nconst _HAS_TOUCH_SUPPORT =\n CAN_USE_DOM && ('ontouchstart' in window || navigator.maxTouchPoints > 0)\n\nexport const IS_IPAD: boolean =\n CAN_USE_DOM && (_IS_IPAD_NEW || _IS_IPAD_OLD) && _HAS_TOUCH_SUPPORT\n\n// 지금은 사용 X, 추후 사용되면 주석 해제\n// export const IS_ANDROID_TABLET: boolean =\n// CAN_USE_DOM &&\n// /android/i.test(navigator.userAgent) &&\n// !/mobile/i.test(navigator.userAgent) &&\n// _HAS_TOUCH_SUPPORT\n// export const IS_ANDROID_OR_IPAD_TABLET = IS_IPAD || IS_ANDROID_TABLET\n\nexport const IS_ANDROID: boolean =\n CAN_USE_DOM && /Android/.test(navigator.userAgent)\n\n//\n// OS + Browser\n//\n\nexport const IS_IOS_SAFARI: boolean =\n CAN_USE_DOM && checkDevice() === 'IOS' && IS_SAFARI\n\nexport const IS_IPAD_SAFARI: boolean = CAN_USE_DOM && IS_IPAD && IS_SAFARI\nexport const IS_IPAD_CHROME: boolean = CAN_USE_DOM && IS_IPAD && IS_CHROME\n\nexport const IS_ANDROID_CHROME: boolean = CAN_USE_DOM && IS_ANDROID && IS_CHROME\n","import * as Types from '../../../../baseType';\n\nimport { gql } from '@apollo/client';\nimport * as Apollo from '@apollo/client';\nconst defaultOptions = {} as const;\nexport type GetAllStoryGameTabsQueryVariables = Types.Exact<{ [key: string]: never; }>;\n\n\nexport type GetAllStoryGameTabsQuery = { __typename?: 'Query', getAllStorygameTabs: Array<{ __typename?: 'StorygameTab', storygameTabId: number, displayTitle: string, titleLokaliseKey: string, type: Types.StorygameTabType, genre?: string | null }> };\n\n\nexport const GetAllStoryGameTabsDocument = gql`\n query getAllStoryGameTabs {\n getAllStorygameTabs {\n storygameTabId\n displayTitle\n titleLokaliseKey\n type\n genre\n }\n}\n `;\n\n/**\n * __useGetAllStoryGameTabsQuery__\n *\n * To run a query within a React component, call `useGetAllStoryGameTabsQuery` and pass it any options that fit your needs.\n * When your component renders, `useGetAllStoryGameTabsQuery` 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 } = useGetAllStoryGameTabsQuery({\n * variables: {\n * },\n * });\n */\nexport function useGetAllStoryGameTabsQuery(baseOptions?: Apollo.QueryHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return Apollo.useQuery(GetAllStoryGameTabsDocument, options);\n }\nexport function useGetAllStoryGameTabsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return Apollo.useLazyQuery(GetAllStoryGameTabsDocument, options);\n }\nexport type GetAllStoryGameTabsQueryHookResult = ReturnType;\nexport type GetAllStoryGameTabsLazyQueryHookResult = ReturnType;\nexport type GetAllStoryGameTabsQueryResult = Apollo.QueryResult;","import * as Types from '../../../../baseType';\n\nimport { gql } from '@apollo/client';\nimport * as Apollo from '@apollo/client';\nconst defaultOptions = {} as const;\nexport type StoryGameSectionViewFragment = { __typename?: 'StorygameSectionView', sectionTitle?: string | null, sectionId: number, showReleaseDate: boolean, hasViewMore: boolean, isTestSection: boolean, uiType: Types.StorygameSectionUiType, sectionData: string, sectionType?: Types.StorygameSectionType | null };\n\nexport type GetAllStoryGameSectionViewsQueryVariables = Types.Exact<{\n data: Types.GetAllStorygameSectionViewsInput;\n}>;\n\n\nexport type GetAllStoryGameSectionViewsQuery = { __typename?: 'Query', getAllStorygameSectionViews: Array<{ __typename?: 'StorygameSectionView', sectionTitle?: string | null, sectionId: number, showReleaseDate: boolean, hasViewMore: boolean, isTestSection: boolean, uiType: Types.StorygameSectionUiType, sectionData: string, sectionType?: Types.StorygameSectionType | null }> };\n\nexport const StoryGameSectionViewFragmentDoc = gql`\n fragment StoryGameSectionView on StorygameSectionView {\n sectionTitle\n sectionId\n showReleaseDate\n hasViewMore\n isTestSection\n uiType\n sectionData\n sectionType\n}\n `;\nexport const GetAllStoryGameSectionViewsDocument = gql`\n query getAllStoryGameSectionViews($data: GetAllStorygameSectionViewsInput!) {\n getAllStorygameSectionViews(data: $data) {\n ...StoryGameSectionView\n }\n}\n ${StoryGameSectionViewFragmentDoc}`;\n\n/**\n * __useGetAllStoryGameSectionViewsQuery__\n *\n * To run a query within a React component, call `useGetAllStoryGameSectionViewsQuery` and pass it any options that fit your needs.\n * When your component renders, `useGetAllStoryGameSectionViewsQuery` 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 } = useGetAllStoryGameSectionViewsQuery({\n * variables: {\n * data: // value for 'data'\n * },\n * });\n */\nexport function useGetAllStoryGameSectionViewsQuery(baseOptions: Apollo.QueryHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return Apollo.useQuery(GetAllStoryGameSectionViewsDocument, options);\n }\nexport function useGetAllStoryGameSectionViewsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return Apollo.useLazyQuery(GetAllStoryGameSectionViewsDocument, options);\n }\nexport type GetAllStoryGameSectionViewsQueryHookResult = ReturnType;\nexport type GetAllStoryGameSectionViewsLazyQueryHookResult = ReturnType;\nexport type GetAllStoryGameSectionViewsQueryResult = Apollo.QueryResult;","import { gql, QueryHookOptions } from '@apollo/client';\nimport {\n useGetAllStoryGameSectionViewsQuery as useQuery,\n GetAllStoryGameSectionViewsQueryVariables,\n GetAllStoryGameSectionViewsQuery,\n} from './__generated__/useGetAllStoryGameSectionViews.generated';\nimport { getFormattedStoryGameSectionViewData } from '@/lib/common-react/services/storyGame';\n\nexport const STORY_GAME_SECTION_VIEW = gql`\n fragment StoryGameSectionView on StorygameSectionView {\n sectionTitle\n sectionId\n showReleaseDate\n hasViewMore\n isTestSection\n uiType\n sectionData\n sectionType\n }\n`;\n\nexport const ALL_STORY_GAME_SECTION_VIEWS = gql`\n query getAllStoryGameSectionViews($data: GetAllStorygameSectionViewsInput!) {\n getAllStorygameSectionViews(data: $data) {\n ...StoryGameSectionView\n }\n }\n ${STORY_GAME_SECTION_VIEW}\n`;\n\nexport const useGetAllStoryGameSectionViewsQuery = (\n options: QueryHookOptions<\n GetAllStoryGameSectionViewsQuery,\n GetAllStoryGameSectionViewsQueryVariables\n >,\n) => {\n const { data, loading, refetch } = useQuery(options);\n\n const formattedData = data && getFormattedStoryGameSectionViewData(data);\n\n return { data: formattedData, loading, refetch };\n};\n","import React, { SVGProps } from 'react'\n\nexport const ArrowCircleLeftIcon = ({ ...props }: SVGProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import React, { SVGProps } from 'react'\n\nexport const ArrowCircleRightIcon = ({ ...props }: SVGProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport styles from './Carousel.module.scss'\nimport { ArrowCircleLeftIcon } from '../../../../assets/svgs/ArrowCircleLeftIcon'\nimport { ArrowCircleRightIcon } from '../../../../assets/svgs/ArrowCircleRightIcon'\n\ninterface ICarousel {\n children: JSX.Element[] | JSX.Element\n}\n\nexport const Carousel = ({ children }: ICarousel) => {\n const carouselItemsRef = useRef(null)\n const [isScroll, setIsScroll] = useState(false)\n const [isShowLastItem, setIsShowLastItem] = useState(false)\n\n const handlePrevButtonClick = () => {\n if (carouselItemsRef.current) {\n carouselItemsRef.current.scrollLeft -=\n carouselItemsRef.current.clientWidth\n }\n }\n\n const handleNextButtonClick = () => {\n if (carouselItemsRef.current) {\n carouselItemsRef.current.scrollLeft +=\n carouselItemsRef.current.clientWidth\n }\n }\n\n useEffect(() => {\n if (!carouselItemsRef.current) return\n\n const observer = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n if (\n entry.isIntersecting &&\n carouselItemsRef.current &&\n entry.target instanceof HTMLElement\n ) {\n // 리스트의 마지막 아이템이 화면에 보여지면 next arrow 아이콘을 숨깁니다\n carouselItemsRef.current.lastChild === entry.target\n ? setIsShowLastItem(true)\n : setIsShowLastItem(false)\n }\n\n // 리스트가 스크롤되면 prev arrow 아이콘을 보여줍니다\n if ((carouselItemsRef.current?.scrollLeft || 0) > 0) {\n setIsScroll(true)\n } else {\n setIsScroll(false)\n }\n })\n },\n {\n threshold: 1,\n }\n )\n\n // 아이템 각각에 옵저버 부착\n carouselItemsRef.current.childNodes.forEach(node =>\n observer.observe(node as Element)\n )\n\n return () => {\n observer.disconnect()\n }\n }, [])\n\n return (\n
\n {isScroll && (\n \n )}\n {!isShowLastItem && (\n \n )}\n
\n {children}\n
\n
\n )\n}\n","import React, { SVGProps } from 'react'\n\nexport const AdultIcon = ({ ...props }: SVGProps) => {\n return (\n \n \n \n )\n}\n","import React, { useEffect } from 'react'\nimport styles from './CarouselItem.module.scss'\nimport {\n CAROUSEL_SIZES,\n CarouselSizes,\n Story,\n} from '../../../../types/storyGame'\nimport { AdultIcon } from '../../../../assets/svgs/AdultIcon'\nimport { t } from '../../../../utils/translate'\n\ninterface ICarouselItem {\n story: Story\n showProgress?: boolean\n size?: CarouselSizes\n onClickStoryItem: ({\n storyId,\n storyName,\n storyBundleId,\n url,\n }: {\n storyId?: number\n storyName?: string\n storyBundleId?: number\n url?: string\n }) => void\n onStoryItemExposed: ({\n storyId,\n storyName,\n storyBundleId,\n }: {\n storyId?: number\n storyName?: string\n storyBundleId?: number\n }) => void\n}\n\nexport const CarouselItem = ({\n story,\n showProgress,\n size = CAROUSEL_SIZES.Large,\n onClickStoryItem,\n onStoryItemExposed,\n}: ICarouselItem) => {\n const storyItemRef = React.useRef(null)\n\n useEffect(() => {\n if (!storyItemRef.current) return\n const observer = new IntersectionObserver(entries => {\n entries.forEach(\n entry => {\n if (entry.isIntersecting && story.bannerType !== 'Link') {\n onStoryItemExposed({\n storyId: story.storyId,\n storyName: story.title,\n storyBundleId: story.bundleId,\n })\n }\n },\n {\n threshold: 1,\n }\n )\n })\n\n observer.observe(storyItemRef.current)\n return () => observer.disconnect()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n // progress 의 범위가 벗어나는 것을 방지합니다.\n const chapterProgress = Math.max(0, Math.min(100, story.chapterProgress ?? 0))\n return (\n \n onClickStoryItem({\n storyId: story.storyId,\n url: story.url,\n storyName: story.title,\n storyBundleId: story.bundleId,\n })\n }\n ref={storyItemRef}\n >\n
\n {story?.mainImageLink && (\n \n )}\n
\n
\n {story.isAdult && (\n
\n \n
\n )}\n

{story?.title}

\n
\n {story?.subTitle &&

{story?.subTitle}

}\n {story?.description && (\n {story?.description}\n )}\n {showProgress && (\n <>\n
\n \n {t('storygame_screen_label_progress', { value: chapterProgress })}\n \n
\n
\n
\n \n
\n \n )}\n
\n )\n}\n","import React from 'react'\nimport styles from './CarouselComponent.module.scss'\nimport { CAROUSEL_SIZES, CarouselSizes, Story } from '../../types/storyGame'\nimport { Carousel } from './common/list/Carousel'\nimport { CarouselItem } from './common/item/CarouselItem'\nimport { t } from '../../utils/translate'\nimport { replaceJosaWithValue } from '../../utils/replaceJosaWithValue'\n\ninterface ICarouselComponent {\n sectionTitle?: string\n recommendedTargetText?: string\n storyList?: Story[]\n showProgress?: boolean\n size?: CarouselSizes\n hasViewMore?: boolean\n onClickStoryItem: ({\n storyId,\n storyName,\n storyBundleId,\n url,\n }: {\n storyId?: number\n storyName?: string\n storyBundleId?: number\n url?: string\n }) => void\n onClickViewMore?: () => void\n onStoryItemExposed: ({\n storyId,\n storyName,\n storyBundleId,\n }: {\n storyId?: number\n storyName?: string\n storyBundleId?: number\n }) => void\n}\n\n// {{value}}, {{ value }}, {{ value}} 등의 형태로 들어오는 경우를 모두 대응하기 위한 정규식\nconst VALUE_REGEX = /({{\\s*value\\s*}})/g\n\n// 캐로셀형 섹션 UI\nexport const CarouselComponent = ({\n sectionTitle,\n recommendedTargetText,\n storyList,\n showProgress,\n size = CAROUSEL_SIZES.Large,\n hasViewMore,\n onClickStoryItem,\n onClickViewMore,\n onStoryItemExposed,\n}: ICarouselComponent) => {\n const titleParts = replaceJosaWithValue({\n message: sectionTitle || '',\n value: recommendedTargetText,\n })?.split(VALUE_REGEX)\n\n return (\n \n
\n

\n {titleParts?.map((part, index) =>\n VALUE_REGEX.test(part) ? (\n \n {recommendedTargetText}\n \n ) : (\n {part}\n )\n )}\n

\n {hasViewMore && (\n
\n {t('storygame_detail_screen_label_view_more')}\n
\n )}\n
\n \n <>\n {storyList?.map((story, index) => (\n \n ))}\n \n \n \n )\n}\n","import React, { useEffect } from 'react'\nimport styles from './CarouselRankItem.module.scss'\nimport { Story } from '../../../../types/storyGame'\nimport { AdultIcon } from '../../../../assets/svgs/AdultIcon'\n\ninterface ICarouselRankItem {\n story: Story\n onClickStoryItem: ({\n storyId,\n storyName,\n storyBundleId,\n }: {\n storyId?: number\n storyName?: string\n storyBundleId?: number\n }) => void\n onStoryItemExposed: ({\n storyId,\n storyName,\n storyBundleId,\n }: {\n storyId?: number\n storyName?: string\n storyBundleId?: number\n }) => void\n}\n\nexport const CarouselRankItem = ({\n story,\n onClickStoryItem,\n onStoryItemExposed,\n}: ICarouselRankItem) => {\n const storyItemRef = React.useRef(null)\n\n useEffect(() => {\n if (!storyItemRef.current) return\n const observer = new IntersectionObserver(entries => {\n entries.forEach(\n entry => {\n if (entry.isIntersecting) {\n onStoryItemExposed({\n storyId: story.storyId,\n storyName: story.title,\n storyBundleId: story.bundleId,\n })\n }\n },\n {\n threshold: 1,\n }\n )\n })\n\n observer.observe(storyItemRef.current)\n return () => observer.disconnect()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return (\n \n onClickStoryItem({\n storyId: story.storyId,\n storyName: story.title,\n storyBundleId: story.bundleId,\n })\n }\n ref={storyItemRef}\n >\n
\n \n
\n
\n {story?.ranking || 0}\n

\n {story.isAdult && }\n {story?.title}\n

\n
\n \n )\n}\n","import React from 'react'\nimport styles from './CarouselRankComponent.module.scss'\nimport { Story } from '../../types/storyGame'\nimport { Carousel } from './common/list/Carousel'\nimport { CarouselRankItem } from './common/item/CarouselRankItem'\nimport { t } from '../../utils/translate'\n\ninterface ICarouselRankComponent {\n sectionTitle?: string\n storyList?: Story[]\n hasViewMore?: boolean\n onClickStoryItem: ({\n storyId,\n storyName,\n storyBundleId,\n }: {\n storyId?: number\n storyName?: string\n storyBundleId?: number\n }) => void\n onClickViewMore: () => void\n onStoryItemExposed: ({\n storyId,\n storyName,\n storyBundleId,\n }: {\n storyId?: number\n storyName?: string\n storyBundleId?: number\n }) => void\n}\n\n// 순위 캐로셀형 섹션 UI\nexport const CarouselRankComponent = ({\n sectionTitle,\n storyList,\n hasViewMore,\n onClickStoryItem,\n onClickViewMore,\n onStoryItemExposed,\n}: ICarouselRankComponent) => {\n return (\n \n
\n
{sectionTitle}
\n {hasViewMore && (\n
\n {t('storygame_detail_screen_label_view_more')}\n
\n )}\n
\n \n <>\n {storyList?.map(story => (\n \n ))}\n \n \n \n )\n}\n","import React from 'react'\nimport styles from './StoryItemTitleWithRanking.module.scss'\nimport { AdultIcon } from '../../../../assets/svgs/AdultIcon'\n\ninterface IStoryItemTitleWithRanking {\n title?: string\n subTitle?: string | null\n ranking: number\n isAdult: boolean\n}\n\nexport const StoryItemTitleWithRanking = ({\n title,\n subTitle,\n ranking,\n isAdult,\n}: IStoryItemTitleWithRanking) => {\n return (\n
\n
{ranking}
\n
\n

\n {isAdult && (\n
\n \n
\n )}\n
{title}
\n

\n

{subTitle}

\n
\n
\n )\n}\n","import React, { useEffect, useRef } from 'react'\nimport { Story } from '../../types/storyGame'\nimport styles from './RankingListComponent.module.scss'\nimport { StoryItemTitleWithRanking } from './common/item/StoryItemTitleWithRanking'\nimport { t } from '../../utils/translate'\n\ninterface IRankingListComponent {\n list?: {\n title?: string\n hasViewMore: boolean\n storyList?: Story[]\n }[]\n onClickStoryItem: ({\n storyId,\n storyName,\n storyBundleId,\n sectionName,\n }: {\n storyId?: number\n storyName?: string\n storyBundleId?: number\n sectionName?: string\n }) => void\n sectionTitle?: string\n onClickViewMore: ({ sectionColumn }: { sectionColumn: number }) => void\n onStoryItemExposed: ({\n storyId,\n storyName,\n storyBundleId,\n sectionName,\n }: {\n storyId?: number\n storyName?: string\n storyBundleId?: number\n sectionName?: string\n }) => void\n}\n\nconst RankingItem = ({\n story,\n onClickStoryItem,\n onStoryItemExposed,\n}: {\n story: Story\n onClickStoryItem: ({\n storyId,\n storyName,\n storyBundleId,\n }: {\n storyId?: number\n storyName?: string\n storyBundleId?: number\n }) => void\n onStoryItemExposed: ({\n storyId,\n storyName,\n storyBundleId,\n }: {\n storyId?: number\n storyName?: string\n storyBundleId?: number\n }) => void\n}) => {\n const storyItemRef = React.useRef(null)\n\n useEffect(() => {\n if (!storyItemRef.current) return\n const observer = new IntersectionObserver(entries => {\n entries.forEach(\n entry => {\n if (entry.isIntersecting) {\n onStoryItemExposed({\n storyId: story.storyId,\n storyName: story.title,\n storyBundleId: story.bundleId,\n })\n }\n },\n {\n threshold: 1,\n }\n )\n })\n\n observer.observe(storyItemRef.current)\n return () => observer.disconnect()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return (\n \n onClickStoryItem({\n storyId: story.storyId,\n storyName: story.title,\n storyBundleId: story.bundleId,\n })\n }\n ref={storyItemRef}\n >\n {story.title}\n \n \n )\n}\n\nconst RankingList = ({\n list,\n index,\n onClickViewMore,\n onClickStoryItem,\n onStoryItemExposed,\n}: {\n list?: {\n title?: string\n hasViewMore: boolean\n storyList?: Story[]\n }\n index: number\n onClickViewMore: ({ sectionColumn }: { sectionColumn: number }) => void\n onClickStoryItem: ({\n storyId,\n storyName,\n storyBundleId,\n }: {\n storyId?: number\n storyName?: string\n storyBundleId?: number\n }) => void\n onStoryItemExposed: ({\n storyId,\n storyName,\n storyBundleId,\n sectionName,\n }: {\n storyId?: number\n storyName?: string\n storyBundleId?: number\n sectionName?: string\n }) => void\n}) => {\n return (\n \n
\n
{list?.title}
\n onClickViewMore({ sectionColumn: index })}\n >\n {t('storygame_detail_screen_label_view_more')}\n
\n \n {list?.storyList?.map(story => (\n \n onStoryItemExposed({\n sectionName: list.title,\n ...args,\n })\n }\n />\n ))}\n \n )\n}\n\n// 순위 리스트형 섹션 UI\nexport const RankingListComponent = ({\n list,\n onClickStoryItem,\n onClickViewMore,\n onStoryItemExposed,\n}: IRankingListComponent) => {\n const scrollContainerRef = useRef(null)\n\n useEffect(() => {\n const rankingListLength = list?.length || 0\n\n scrollContainerRef.current?.style.setProperty(\n '--scrollWidthForMobile',\n `calc(100% * ${rankingListLength} - 2.5rem * ${rankingListLength})`\n )\n }, [list])\n\n return (\n
\n
\n {list?.map((rankingList, index) => (\n {\n onClickStoryItem({\n sectionName: rankingList.title,\n ...args,\n })\n }}\n onStoryItemExposed={onStoryItemExposed}\n />\n ))}\n
\n
\n )\n}\n","import React, { SVGProps } from 'react'\n\nexport const StorygamePlayCircleIcon = ({\n ...props\n}: SVGProps) => {\n return (\n \n \n \n \n \n \n )\n}\n","import React, { SVGProps } from 'react'\n\nexport const StorygamePlayIcon = ({ ...props }: SVGProps) => {\n return (\n \n \n \n \n \n )\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport styles from './SlideBannerItem.module.scss'\nimport { StorygamePlayCircleIcon } from '../../../../assets/svgs/StorygamePlayCircleIcon'\nimport { StorygamePlayIcon } from '../../../../assets/svgs/StorygamePlayIcon'\nimport { Story } from '../../../../types/storyGame'\nimport { checkDevice } from '../../../../utils/checkDevice'\n\ninterface ISlideBannerItem {\n data: Story\n onClickStoryItem: ({\n storyId,\n storyName,\n storyBundleId,\n url,\n }: {\n storyId?: number\n storyName?: string\n storyBundleId?: number\n url?: string\n }) => void\n onStoryItemExposed: ({\n storyId,\n storyName,\n storyBundleId,\n }: {\n storyId?: number\n storyName?: string\n storyBundleId?: number\n }) => void\n}\n\nconst EmptyMediaItem = {\n storyPreviewId: 0,\n link: '',\n fileType: 'Image',\n}\n\nexport const SlideBannerItem = ({\n data,\n onClickStoryItem,\n onStoryItemExposed,\n}: ISlideBannerItem) => {\n const [currentPreview, setCurrentMedia] = useState(data.previews?.[0])\n const [showPlayIcon, setShowPlayIcon] = useState(true)\n const videoRef = useRef(null)\n\n const storyItemRef = React.useRef(null)\n\n useEffect(() => {\n if (!storyItemRef.current) return\n const observer = new IntersectionObserver(entries => {\n entries.forEach(\n entry => {\n if (entry.isIntersecting && data.bannerType !== 'Link') {\n onStoryItemExposed({\n storyId: data.storyId,\n storyName: data.title,\n storyBundleId: data.bundleId,\n })\n }\n },\n {\n threshold: 1,\n }\n )\n })\n\n observer.observe(storyItemRef.current)\n return () => observer.disconnect()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n useEffect(() => {\n if (currentPreview?.fileType === 'Video') {\n if (checkDevice() === 'PC') {\n videoRef.current?.play()\n }\n // 브라우저 정책으로 페이지 초기 진입 시 자동재생이 동작하지 않는 경우가 있음.\n if (!videoRef.current?.paused) {\n // 위 `videoRef.current?.play()` 코드를 통해 정상적으로 동영상이 실행된 경우에는 play아이콘 숨기기\n setShowPlayIcon(false)\n } else {\n // 위 `videoRef.current?.play()` 코드가 실행되었음에도 동영상 재생에 실패한 경우에는 play아이콘 보여주기\n setShowPlayIcon(true)\n }\n }\n }, [currentPreview])\n\n const handleVideoClick = () => {\n if (videoRef.current?.paused) {\n videoRef.current?.play()\n setShowPlayIcon(false)\n } else {\n videoRef.current?.pause()\n setShowPlayIcon(true)\n }\n }\n\n const previewListWithEmptyItem =\n (data.previews?.length || 0) >= 3\n ? data.previews\n : [...(data.previews || []), ...new Array(3).fill(EmptyMediaItem)]\n\n return (\n
\n \n onClickStoryItem({\n storyId: data.storyId,\n url: data.url,\n storyName: data.title,\n storyBundleId: data.bundleId,\n })\n }\n >\n {currentPreview?.fileType === 'Video' && showPlayIcon && (\n
\n \n
\n )}\n {currentPreview?.fileType === 'Image' ? (\n \"\"\n ) : (\n \n )}\n {data.bannerType === 'Link' && (\n \"\"\n )}\n
\n \n \n onClickStoryItem({ storyId: data.storyId, url: data.url })\n }\n >\n
{data.title}
\n
{data?.subTitle}
\n
{data.description}
\n \n {data.bannerType === 'Link' ? (\n onClickStoryItem({ url: data.url })}\n >\n {data.buttonName}\n \n ) : (\n
\n {previewListWithEmptyItem?.slice(0, 3).map((media, index) => {\n return (\n setCurrentMedia(media)}\n >\n {media.fileType === 'Video' && (\n \n )}\n {media.fileType === 'Image' ? (\n <>{media.link && \"preview\"}\n ) : (\n
\n )\n })}\n \n )}\n \n \n )\n}\n","import React, { useRef, useState } from 'react'\nimport styles from './SlideBannerList.module.scss'\nimport { Story } from '../../../../types/storyGame'\nimport { SlideBannerItem } from '../item/SlideBannerItem'\nimport { ArrowCircleLeftIcon } from '../../../../assets/svgs/ArrowCircleLeftIcon'\nimport { ArrowCircleRightIcon } from '../../../../assets/svgs/ArrowCircleRightIcon'\n\ninterface ISlideBannerList {\n sectionTitle?: string\n storyList?: Story[]\n onClickStoryItem: ({\n storyId,\n storyName,\n storyBundleId,\n url,\n }: {\n storyId?: number\n storyName?: string\n storyBundleId?: number\n url?: string\n }) => void\n onStoryItemExposed: ({\n storyId,\n storyName,\n storyBundleId,\n }: {\n storyId?: number\n storyName?: string\n storyBundleId?: number\n }) => void\n}\n\nexport const SlideBannerList = ({\n storyList,\n sectionTitle,\n onClickStoryItem,\n onStoryItemExposed,\n}: ISlideBannerList) => {\n const carouselRef = useRef(null)\n const [currentIndex, setCurrentIndex] = useState(1)\n\n const handleArrowButtonClick = (direction: 'left' | 'right') => {\n const sliderLength = storyList?.length || 0\n let index = currentIndex\n\n index =\n direction === 'left'\n ? index === 1\n ? sliderLength\n : index - 1\n : index === sliderLength\n ? 1\n : index + 1\n setCurrentIndex(index)\n\n carouselRef.current?.style.setProperty(\n 'transform',\n `translateX(-${\n ((index - 1) * carouselRef.current.clientWidth) / sliderLength\n }px)`\n )\n }\n\n return (\n
\n
\n
{sectionTitle}
\n {/* eslint-disable-next-line jsx-a11y/role-has-required-aria-props */}\n
\n {storyList && (\n \n {storyList.map((story, index) => (\n \n ))}\n
\n )}\n
\n {currentIndex > 1 && (\n handleArrowButtonClick('left')}\n >\n \n
\n )}\n {currentIndex < (storyList?.length || 0) && (\n handleArrowButtonClick('right')}\n >\n \n \n )}\n \n \n )\n}\n","import React from 'react'\nimport styles from './SliderComponent.module.scss'\nimport { CarouselComponent } from './CarouselComponent'\nimport { CAROUSEL_SIZES, Story } from '../../types/storyGame'\nimport { SlideBannerList } from './common/list/SlideBannerList'\n\ninterface ISliderComponent {\n sectionTitle?: string\n storyList?: Story[]\n onClickStoryItem: ({\n storyId,\n storyName,\n storyBundleId,\n url,\n }: {\n storyId?: number\n storyName?: string\n storyBundleId?: number\n url?: string\n }) => void\n onStoryItemExposed: ({\n storyId,\n storyName,\n storyBundleId,\n }: {\n storyId?: number\n storyName?: string\n storyBundleId?: number\n }) => void\n}\n\n// 슬라이더형 섹션 UI\nexport const SliderComponent = ({\n storyList,\n sectionTitle,\n onClickStoryItem,\n onStoryItemExposed,\n}: ISliderComponent) => {\n return (\n \n
\n \n
\n
\n \n
\n \n )\n}\n","import React from 'react'\nimport styles from './EmptyComponent.module.scss'\nimport { t } from '../../utils/translate'\n\nexport const EmptyComponent = () => {\n return (\n
\n \n {t('storygame_tab_screen_title_coming_soon')}\n \n \n {t('storygame_tab_screen_description_coming_soon')}\n \n
\n )\n}\n","import React from 'react'\nimport {\n CAROUSEL_SIZES,\n Section,\n STORY_GAME_SECTION_UI_TYPE,\n} from '../../types/storyGame'\nimport { CarouselComponent } from './CarouselComponent'\nimport { CarouselRankComponent } from './CarouselRankComponent'\nimport { RankingListComponent } from './RankingListComponent'\nimport { SliderComponent } from './SliderComponent'\nimport { EmptyComponent } from './EmptyComponent'\n\nexport const StoryGameSectionComponent = ({\n data,\n onClickStoryItem = () => {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n },\n onClickViewMore = () => {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n },\n onStoryItemExposed = () => {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n },\n}: {\n data?: Section[]\n onClickStoryItem?: ({\n storyId,\n url,\n sectionId,\n isTestSection,\n sectionName,\n sectionIndex,\n storyName,\n storyBundleId,\n }: {\n storyId?: number\n url?: string\n sectionId?: number\n isTestSection?: boolean\n sectionName?: string\n sectionIndex?: number\n storyName?: string\n storyBundleId?: number\n }) => void\n onClickViewMore?: ({\n sectionId,\n sectionColumn,\n sectionIndex,\n tagName,\n }: {\n sectionId?: number\n sectionColumn?: number\n sectionIndex?: number\n tagName?: string\n }) => void\n onStoryItemExposed?: ({\n storyId,\n sectionId,\n isTestSection,\n sectionName,\n sectionIndex,\n storyName,\n storyBundleId,\n }: {\n storyId?: number\n sectionId?: number\n isTestSection: boolean\n sectionName?: string\n sectionIndex?: number\n storyName?: string\n storyBundleId?: number\n }) => void\n}) => {\n const isEmptyTab =\n !data?.length ||\n data?.every(\n section =>\n section.storyList?.length === 0 ||\n (section.sectionList &&\n section.sectionList.every(section => section.storyList?.length === 0))\n )\n\n return (\n <>\n {!isEmptyTab ? (\n data?.map((section, index) => {\n if (\n section.storyList?.length === 0 ||\n (section.sectionList &&\n section.sectionList.every(\n section => section.storyList?.length === 0\n ))\n ) {\n return null\n }\n\n if (section.uiType === STORY_GAME_SECTION_UI_TYPE.Slider) {\n return (\n {\n onClickStoryItem({\n sectionId: section.sectionId,\n isTestSection: section.isTestSection,\n sectionName: section.title,\n sectionIndex: index,\n ...args,\n })\n }}\n onStoryItemExposed={args => {\n onStoryItemExposed({\n sectionId: section.sectionId,\n isTestSection: section.isTestSection,\n sectionName: section.title,\n sectionIndex: index,\n ...args,\n })\n }}\n />\n )\n }\n\n if (section.uiType === STORY_GAME_SECTION_UI_TYPE.CarouselSmall) {\n return (\n \n onClickStoryItem({\n sectionId: section.sectionId,\n isTestSection: section.isTestSection,\n sectionName: section.title,\n sectionIndex: index,\n ...args,\n })\n }\n onClickViewMore={() =>\n onClickViewMore({\n sectionId: section.sectionId,\n sectionIndex: index,\n tagName: section.recommendedTargetText,\n })\n }\n onStoryItemExposed={args =>\n onStoryItemExposed({\n sectionId: section.sectionId,\n isTestSection: section.isTestSection,\n sectionName: section.title,\n sectionIndex: index,\n ...args,\n })\n }\n />\n )\n }\n\n if (section.uiType === STORY_GAME_SECTION_UI_TYPE.CarouselMedium) {\n return (\n \n onClickStoryItem({\n sectionId: section.sectionId,\n isTestSection: section.isTestSection,\n sectionName: section.title,\n sectionIndex: index,\n ...args,\n })\n }\n onClickViewMore={() =>\n onClickViewMore({\n sectionId: section.sectionId,\n sectionIndex: index,\n tagName: section.recommendedTargetText,\n })\n }\n onStoryItemExposed={args =>\n onStoryItemExposed({\n sectionId: section.sectionId,\n isTestSection: section.isTestSection,\n sectionName: section.title,\n sectionIndex: index,\n ...args,\n })\n }\n />\n )\n }\n\n if (section.uiType === STORY_GAME_SECTION_UI_TYPE.CarouselLarge) {\n return (\n \n onClickStoryItem({\n sectionId: section.sectionId,\n isTestSection: section.isTestSection,\n sectionName: section.title,\n sectionIndex: index,\n ...args,\n })\n }\n onClickViewMore={() =>\n onClickViewMore({\n sectionId: section.sectionId,\n sectionIndex: index,\n tagName: section.recommendedTargetText,\n })\n }\n onStoryItemExposed={args =>\n onStoryItemExposed({\n sectionId: section.sectionId,\n isTestSection: section.isTestSection,\n sectionName: section.title,\n sectionIndex: index,\n ...args,\n })\n }\n />\n )\n }\n\n if (section.uiType === STORY_GAME_SECTION_UI_TYPE.CarouselProgress) {\n return (\n \n onClickStoryItem({\n sectionId: section.sectionId,\n isTestSection: section.isTestSection,\n sectionName: section.title,\n sectionIndex: index,\n ...args,\n })\n }\n onClickViewMore={() =>\n onClickViewMore({\n sectionId: section.sectionId,\n sectionIndex: index,\n })\n }\n onStoryItemExposed={args =>\n onStoryItemExposed({\n sectionId: section.sectionId,\n isTestSection: section.isTestSection,\n sectionName: section.title,\n sectionIndex: index,\n ...args,\n })\n }\n />\n )\n }\n\n if (section.uiType === STORY_GAME_SECTION_UI_TYPE.RankList) {\n return (\n {\n onClickStoryItem({\n sectionId: section.sectionId,\n isTestSection: section.isTestSection,\n sectionIndex: index,\n ...args,\n })\n }}\n onClickViewMore={({ sectionColumn }) => {\n onClickViewMore({\n sectionId: section.sectionId,\n sectionIndex: index,\n sectionColumn,\n })\n }}\n onStoryItemExposed={args =>\n onStoryItemExposed({\n sectionId: section.sectionId,\n isTestSection: section.isTestSection,\n sectionIndex: index,\n ...args,\n })\n }\n />\n )\n }\n\n if (section.uiType === STORY_GAME_SECTION_UI_TYPE.CarouselRank) {\n return (\n {\n onClickStoryItem({\n sectionId: section.sectionId,\n isTestSection: section.isTestSection,\n sectionName: section.title,\n sectionIndex: index,\n ...args,\n })\n }}\n onClickViewMore={() =>\n onClickViewMore({\n sectionId: section.sectionId,\n sectionIndex: index,\n })\n }\n onStoryItemExposed={args =>\n onStoryItemExposed({\n sectionId: section.sectionId,\n isTestSection: section.isTestSection,\n sectionName: section.title,\n sectionIndex: index,\n ...args,\n })\n }\n />\n )\n }\n })\n ) : (\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 CreateExposedSectionStoryMutationVariables = Types.Exact<{\n data: Types.ExposedSectionStoryCreationInput;\n}>;\n\n\nexport type CreateExposedSectionStoryMutation = { __typename?: 'Mutation', createExposedSectionStory: { __typename?: 'OkResponse', ok: number } };\n\n\nexport const CreateExposedSectionStoryDocument = gql`\n mutation createExposedSectionStory($data: ExposedSectionStoryCreationInput!) {\n createExposedSectionStory(data: $data) {\n ok\n }\n}\n `;\nexport type CreateExposedSectionStoryMutationFn = Apollo.MutationFunction;\n\n/**\n * __useCreateExposedSectionStoryMutation__\n *\n * To run a mutation, you first call `useCreateExposedSectionStoryMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useCreateExposedSectionStoryMutation` 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 [createExposedSectionStoryMutation, { data, loading, error }] = useCreateExposedSectionStoryMutation({\n * variables: {\n * data: // value for 'data'\n * },\n * });\n */\nexport function useCreateExposedSectionStoryMutation(baseOptions?: Apollo.MutationHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return Apollo.useMutation(CreateExposedSectionStoryDocument, options);\n }\nexport type CreateExposedSectionStoryMutationHookResult = ReturnType;\nexport type CreateExposedSectionStoryMutationResult = Apollo.MutationResult;\nexport type CreateExposedSectionStoryMutationOptions = Apollo.BaseMutationOptions;","import { STORAGE_KEY } from '@common/values';\nimport { CAN_USE_DOM } from '@lib/common-react/utils/environment';\nimport React, { useCallback, useEffect, useRef } from 'react';\nimport 'slick-carousel/slick/slick.css';\nimport 'slick-carousel/slick/slick-theme.css';\nimport { SPLoading } from '@/components/commons';\nimport { useGetAllStoryGameSectionViewsQuery } from '@/operations/queries/home/useGetAllStoryGameSectionViews';\nimport { StoryGameSectionComponent } from '@/lib/common-react/components/storyGameHomeTab/StoryGameSectionComponent';\nimport { useRouter } from 'next/router';\nimport {\n getRawLocalStorageValueArrayByPrefix,\n isMobileDevice,\n safeJSONStringify,\n} from '@/common/utils';\nimport {\n goPageForApp,\n goExternalPageForApp,\n goStoryGameDetailsForApp,\n onLogEventForApp,\n} from '@/lib/webview';\nimport { logEventParams } from '@/customTypes/webview';\nimport { useCreateExposedSectionStoryMutation } from '@/operations/queries/home/__generated__/useCreateExposedSectionStory.generated';\nimport {\n touchStorygameThumbnail,\n viewStorygameThumbnail,\n} from '@/lib/eventManager';\n\ninterface IStoryGameMainHomeContainer {\n tabId: number;\n}\nconst StoryGameMainHomeContainer = ({ tabId }: IStoryGameMainHomeContainer) => {\n const router = useRouter();\n const { data, loading, refetch } = useGetAllStoryGameSectionViewsQuery({\n variables: {\n data: {\n tabId: tabId,\n },\n },\n });\n const [createExposedSectionStory] = useCreateExposedSectionStoryMutation();\n const thumbnailEventParams = useRef(undefined);\n /**\n * 현재 플레이 중인 스토리들과 이전 플레이중인 스토리들을 비교하여 업데이트 여부를 확인하고,\n * 업데이트가 된 상태라면 refetch 를 호출하여 최신 탭 데이터를 가져옵니다.\n */\n const checkAndUpdatePlayingStories = useCallback(() => {\n if (!CAN_USE_DOM) {\n return;\n }\n\n const currentPlayingStories =\n safeJSONStringify(\n getRawLocalStorageValueArrayByPrefix(STORAGE_KEY.CURRENT_PLAY),\n ) ?? '[]';\n const prevPlayingStories = sessionStorage.getItem(\n STORAGE_KEY.STORY_GAME_TAB.PREV_PLAYING_STORIES,\n );\n\n if (!prevPlayingStories) {\n sessionStorage.setItem(\n STORAGE_KEY.STORY_GAME_TAB.PREV_PLAYING_STORIES,\n currentPlayingStories,\n );\n return;\n }\n\n const hasUpdate = currentPlayingStories !== prevPlayingStories;\n\n if (hasUpdate) {\n sessionStorage.setItem(\n STORAGE_KEY.STORY_GAME_TAB.PREV_PLAYING_STORIES,\n currentPlayingStories,\n );\n refetch();\n }\n thumbnailEventParams.current = [];\n }, [refetch]);\n\n // 해당 페이지에 다시 진입시에 플레이중인 스토리들이 업데이트 되어있다면 refetch를 합니다.\n // 진행형 섹션의 최신 데이터를 참조하기 위해서\n useEffect(() => {\n const carouselProgressSection = data?.find(\n (section) => section.uiType === 'CarouselProgress',\n );\n\n if (!carouselProgressSection) {\n return;\n }\n\n checkAndUpdatePlayingStories();\n }, [checkAndUpdatePlayingStories, data]);\n\n useEffect(() => {\n window.requestThumbnailEvent = requestThumbnailEvent;\n\n return () => {\n delete window.requestThumbnailEvent;\n };\n }, []);\n\n const requestThumbnailEvent = () => {\n thumbnailEventParams.current &&\n thumbnailEventParams.current.forEach((params) => {\n onLogEventForApp('view_storygame_thumbnail', params);\n });\n };\n\n const handleStoryItemClick = ({\n storyId,\n url,\n sectionId,\n isTestSection,\n sectionName,\n sectionIndex,\n storyName,\n storyBundleId,\n }: {\n storyId?: number;\n url?: string;\n sectionId?: number;\n isTestSection?: boolean;\n sectionName?: string;\n sectionIndex?: number;\n storyName?: string;\n storyBundleId?: number;\n }) => {\n if (storyId) {\n if (isMobileDevice()) {\n onLogEventForApp('touch_storygame_thumbnail', {\n section_name: sectionName || '',\n section_index: (sectionIndex || 0) + 1,\n story_name: storyName || '',\n story_id: storyId || '',\n story_bundle_id: storyBundleId || '',\n play_type: 'storygame',\n });\n goStoryGameDetailsForApp({\n storyId: storyId,\n ...(isTestSection &&\n sectionId && { queryParams: `testSectionId=${sectionId}` }),\n });\n } else {\n touchStorygameThumbnail({\n sectionName: sectionName || '',\n sectionIndex: (sectionIndex || 0) + 1,\n storyName: storyName || '',\n storyId: storyId?.toString() || '',\n storyBundleId: storyBundleId?.toString() || '',\n });\n router.push({\n pathname: `/story/${storyId}`,\n query: {\n ...(isTestSection && sectionId && { testSectionId: sectionId }),\n },\n });\n }\n }\n if (url) {\n isMobileDevice()\n ? goExternalPageForApp({ link: url })\n : window.open(url, '_blank');\n }\n };\n\n const handleViewMoreClick = ({\n sectionId,\n sectionColumn,\n sectionIndex,\n tagName,\n }: {\n sectionId?: number;\n sectionColumn?: number;\n sectionIndex?: number;\n tagName?: string;\n }) => {\n const viewMoreUrl = `/more/storygame?sectionId=${sectionId}&tabId=${tabId}§ionIndex=${\n (Number(sectionIndex) || 0) + 1\n }${sectionColumn !== undefined ? `§ionColumn=${sectionColumn}` : ''}${\n tagName !== undefined ? `&tagName=${tagName}` : ''\n }`;\n\n tabId &&\n sectionId &&\n (isMobileDevice()\n ? goPageForApp({\n link: `${window.location.origin}/${\n router.locale ?? 'ko'\n }${viewMoreUrl}`,\n })\n : router.push(viewMoreUrl));\n };\n\n const handleStoryItemExposed = ({\n storyId,\n sectionId,\n isTestSection,\n sectionName,\n sectionIndex,\n storyName,\n storyBundleId,\n }: {\n storyId?: number;\n sectionId?: number;\n isTestSection: boolean;\n sectionName?: string;\n sectionIndex?: number;\n storyName?: string;\n storyBundleId?: number;\n }) => {\n if (isMobileDevice()) {\n const eventParams = {\n section_name: sectionName || '',\n section_index: (sectionIndex || 0) + 1, // index는 1부터 시작\n story_name: storyName || '',\n story_id: storyId || '',\n story_bundle_id: storyBundleId || '',\n play_type: 'storygame',\n };\n onLogEventForApp('view_storygame_thumbnail', eventParams);\n if (!Array.isArray(thumbnailEventParams.current)) {\n thumbnailEventParams.current = []; // hoook으로 초기화가 안됨\n }\n thumbnailEventParams.current.push(eventParams);\n } else {\n viewStorygameThumbnail({\n sectionName: sectionName || '',\n sectionIndex: (sectionIndex || 0) + 1, // index는 1부터 시작\n storyName: storyName || '',\n storyId: storyId?.toString() || '',\n storyBundleId: storyBundleId?.toString() || '',\n });\n }\n\n if (isTestSection && storyId && sectionId) {\n createExposedSectionStory({\n variables: {\n data: {\n storygameId: storyId,\n storygameSectionId: sectionId,\n },\n },\n });\n }\n };\n\n return (\n <>\n {loading ? (\n \n ) : (\n \n )}\n \n );\n};\n\nexport default StoryGameMainHomeContainer;\n","\n// @ts-ignore\n import __i18nConfig from '@next-translate-root/i18n'\n// @ts-ignore\n import __loadNamespaces from 'next-translate/loadNamespaces'\n// @ts-ignore\n \nimport { SPHeaderCategoryList } from '@lib/common-react/components/header/SPHeaderCategoryList';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { css } from '@emotion/react';\nimport theme from '@styles/theme';\nimport 'slick-carousel/slick/slick.css';\nimport 'slick-carousel/slick/slick-theme.css';\nimport PlayTypeProvider from '@/provider/PlayTypeProvider';\nimport { Story_Play_Type, Story_Sorting, StorygameTabType } from '@/baseType';\n\nimport { GetServerSideProps } from 'next';\nimport { SPHeader } from '@/lib/common-react/components/header/SPHeader';\nimport {\n STORY_PLAY_TAB_TYPES,\n StoryPlayTabType,\n} from '@/lib/common-react/types/storyGame';\nimport { useRouter } from 'next/router';\nimport { touchSearchTab } from '@/lib/googleAnalytics';\nimport { getCurrentWeekType, isMobileDevice, isAndroid } from '@/common/utils';\nimport { useGetAllStoryGameTabsQuery } from '@/operations/queries/home/__generated__/useGetAllStoryGameTabs.generated';\nimport StoryGameMainHomeContainer from '@/components/storyGame/homeContainer/StoryGameMainHomeContainer';\nimport {\n goSearchForApp,\n goStoreForApp,\n goNotificationsForApp,\n onLogEventForApp,\n} from '@/lib/webview';\nimport { logEventParams } from '@/customTypes/webview';\nimport { useGetTopHeaderTabs } from '@/hooks/useGetTopHeaderTabs';\nimport { viewSubTab, viewStorygameTab } from '@/lib/eventManager';\nimport { useAppDispatch, useAppSelector } from '@/store/hooks';\nimport { setPreviousStoryGameTabTitle } from '@/slices/eventSlice';\nimport useTranslation from 'next-translate/useTranslation';\nimport { useGetUserQuery } from '@/operations/queries/user/__generated__/getUser.generated';\n\nconst StoryGamePage = () => {\n const { t } = useTranslation();\n const router = useRouter();\n const { type, genre, tabId } = router.query;\n const { data: tabData } = useGetAllStoryGameTabsQuery();\n const { topHeaderTabs } = useGetTopHeaderTabs();\n const subTabEventParams = useRef(undefined);\n const [categoryList, setCategoryList] = useState<\n {\n id: number;\n title: string;\n type: StorygameTabType;\n genre: string | null | undefined;\n }[]\n >();\n const { data: userData } = useGetUserQuery();\n\n useEffect(() => {\n if (isMobileDevice()) {\n isAndroid() && onLogEventForApp('view_storygame_tab');\n } else {\n viewStorygameTab();\n }\n\n window.requestSubTabEvent = requestSubTabEvent;\n\n return () => {\n delete window.requestSubTabEvent;\n };\n }, []);\n\n const requestSubTabEvent = () => {\n subTabEventParams.current &&\n onLogEventForApp('view_sub_tab', subTabEventParams.current);\n };\n\n useEffect(() => {\n const defaultTab = tabData?.getAllStorygameTabs[0];\n\n if (!type || !tabId) {\n router.push({\n pathname: router.pathname,\n query: {\n tabId: defaultTab?.storygameTabId,\n type: defaultTab?.type,\n ...(defaultTab?.genre && { genre: defaultTab?.genre }),\n },\n });\n }\n }, [type, router, tabData?.getAllStorygameTabs, tabId]);\n\n useEffect(() => {\n if (!tabData || !userData?.getUser) return;\n\n const isAdult: boolean =\n userData?.getUser?.certificatedAt &&\n !userData?.getUser.isExpiredCertification;\n\n setCategoryList(\n tabData?.getAllStorygameTabs\n .filter((tab) =>\n isAndroid()\n ? tab.type === StorygameTabType.Nsfw\n ? isAdult\n : true\n : true,\n )\n .map((tab) => {\n return {\n id: tab.storygameTabId,\n title: t(tab.titleLokaliseKey),\n type: tab.type,\n genre: tab.genre,\n };\n }),\n );\n }, [userData, tabData]);\n\n const handleTabClick = ({ type }: { type: StoryPlayTabType }) => {\n switch (type) {\n case STORY_PLAY_TAB_TYPES.interactive:\n router.push('/interactive');\n break;\n case STORY_PLAY_TAB_TYPES.storyGame:\n router.push('/home/storygame');\n break;\n case STORY_PLAY_TAB_TYPES.webNovel:\n router.push('/webnovel');\n break;\n case STORY_PLAY_TAB_TYPES.challenge:\n router.push(\n '/challenge?genre=TOTAL&sorting=RECOMMENDED&showFilter=true',\n );\n break;\n default:\n break;\n }\n };\n const dispatch = useAppDispatch();\n const previousStoryGameTabTitle = useAppSelector(\n (state) => state.event.previousStoryGameTabTitle,\n );\n\n useEffect(() => {\n if (!categoryList || !type) return;\n\n const currentTabIndex = categoryList.findIndex(\n (item) => item.type === type && (genre ? item.genre === genre : true),\n );\n const currentTabTitle =\n currentTabIndex >= 0 && categoryList?.[currentTabIndex]?.title;\n\n if (previousStoryGameTabTitle !== currentTabTitle) {\n if (isMobileDevice()) {\n const eventParams = {\n prev_tab: previousStoryGameTabTitle || '',\n tab: currentTabTitle || '',\n index: currentTabIndex + 1, // index는 1부터 시작\n main_tab: 'storygame',\n };\n onLogEventForApp('view_sub_tab', eventParams);\n subTabEventParams.current = eventParams;\n } else {\n viewSubTab({\n prevTab: previousStoryGameTabTitle || '',\n tab: currentTabTitle || '',\n index: currentTabIndex + 1, // index는 1부터 시작\n });\n }\n }\n }, [categoryList, type, genre]);\n\n const handleCategoryClick = ({\n tabId,\n type,\n genre,\n prevType,\n prevGenre,\n }: {\n tabId?: number;\n type: string; // Genre | Recommended | HOME | WEEK_DAY | ADULT\n genre?: string | null;\n prevType?: string;\n prevGenre?: string | null;\n }) => {\n if (router.pathname.includes('/storygame')) {\n const prevTabTitle = categoryList\n ?.filter((item) => item.type === prevType)\n .find((item) => item.genre === prevGenre)?.title;\n\n dispatch(setPreviousStoryGameTabTitle(prevTabTitle || ''));\n\n router.push({\n pathname: router.pathname,\n query: {\n tabId,\n type,\n ...(genre && { genre }),\n },\n });\n return;\n }\n\n router.push({\n pathname: router.pathname,\n query: {\n tab: type,\n ...(type === 'WEEK_DAY' && {\n week: getCurrentWeekType(),\n sorting: Story_Sorting.DailyRankAsc,\n genre: 'TOTAL',\n }),\n },\n });\n };\n\n const handleMainLogoIconClick = () => {\n router.push('/home/storygame');\n };\n\n const handleStoreIconClick = () => {\n isMobileDevice()\n ? goStoreForApp({ tabType: 'coin' })\n : router.push('/store');\n };\n\n const handleProfileIconClick = () => {\n router.push('/more');\n };\n\n const handleSearchIconClick = () => {\n isMobileDevice() ? goSearchForApp() : router.push('/search');\n touchSearchTab();\n };\n\n const handleNotificationIconClick = () => {\n isMobileDevice() ? goNotificationsForApp() : router.push('/notification');\n };\n\n return (\n \n
\n \n
\n
\n \n
\n {tabId && (\n \n )}\n
\n
\n
\n
\n
\n );\n};\n\nconst container = css`\n width: 100%;\n max-width: calc(${theme.maxWidthV2} + 3rem);\n display: flex;\n align-items: center;\n flex-direction: column;\n\n .story-game-contents-wrap {\n width: 100vw;\n container-name: story-game-home-tab-container;\n container-type: inline-size;\n min-height: 4.125rem;\n\n .story-game-contents {\n width: 100%;\n max-width: calc(${theme.maxWidthV2} + 3rem);\n margin-left: auto;\n margin-right: auto;\n\n .main-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n margin-top: -1.5rem;\n min-height: calc(100vh - 6.75rem);\n }\n }\n }\n`;\n\n const _getServerSideProps: GetServerSideProps = async () => {\n return {\n props: {\n playType: Story_Play_Type.Storygame,\n },\n };\n};\n\nexport default StoryGamePage;\n\n\n// @ts-ignore\n export async function getServerSideProps(ctx) {\n// @ts-ignore\n let res = _getServerSideProps(ctx)\n// @ts-ignore\n if(typeof res.then === 'function') res = await res\n// @ts-ignore\n return {\n// @ts-ignore\n \n// @ts-ignore\n ...res,\n// @ts-ignore\n props: {\n// @ts-ignore\n ...(res.props || {}),\n// @ts-ignore\n ...(await __loadNamespaces({\n// @ts-ignore\n ...ctx,\n// @ts-ignore\n pathname: '/home/storygame',\n// @ts-ignore\n loaderName: 'getServerSideProps',\n// @ts-ignore\n ...__i18nConfig,\n// @ts-ignore\n loadLocaleFrom: (l, n) => import(`@next-translate-root/locales/${l}/${n}`).then(m => m.default),\n// @ts-ignore\n }))\n// @ts-ignore\n }\n// @ts-ignore\n }\n// @ts-ignore\n }\n// @ts-ignore\n ","/* eslint-disable react/prop-types */\nimport React, { createContext, useContext } from 'react';\nimport { Story_Play_Type } from '@/baseType';\n\ninterface IPlayTypeContext {\n playType?: Story_Play_Type;\n}\n\ninterface IPlayTypeProvider {\n children: JSX.Element | Array;\n playType?: Story_Play_Type;\n}\n\nconst initialState = {};\n\nconst PlayTypeContext = createContext(initialState);\n\nconst PlayTypeProvider = ({ children, playType }: IPlayTypeProvider) => {\n return (\n \n {children}\n \n );\n};\n\nexport const usePlayTypeContext = () => {\n const state = useContext(PlayTypeContext);\n if (!state) throw new Error('PlayTypeContext is undefined!');\n return state;\n};\n\nexport default PlayTypeProvider;\n","\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/home/storygame\",\n function () {\n return require(\"private-next-pages/home/storygame.tsx\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/home/storygame\"])\n });\n }\n ","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"CarouselComponent_container__JQNF6\",\"sectionHeader\":\"CarouselComponent_sectionHeader__Ly8V4\",\"sectionTitle\":\"CarouselComponent_sectionTitle__PBxHy\",\"point\":\"CarouselComponent_point__tTHY7\",\"viewMoreButton\":\"CarouselComponent_viewMoreButton__iOwKy\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"CarouselRankComponent_container__tO5ab\",\"sectionHeader\":\"CarouselRankComponent_sectionHeader__ZS1Rl\",\"sectionTitle\":\"CarouselRankComponent_sectionTitle__r9blv\",\"viewMoreButton\":\"CarouselRankComponent_viewMoreButton__1LxLI\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"EmptyComponent_container__stnhu\",\"title\":\"EmptyComponent_title__VduPh\",\"description\":\"EmptyComponent_description__4O1UP\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"RankingListComponent_container__O1Yso\",\"scrollContainer\":\"RankingListComponent_scrollContainer__gbT86\",\"storyList\":\"RankingListComponent_storyList__5gt9l\",\"rankingListHeader\":\"RankingListComponent_rankingListHeader__lUxS2\",\"rankingListTitle\":\"RankingListComponent_rankingListTitle__vQInF\",\"viewMoreButton\":\"RankingListComponent_viewMoreButton__0mhG2\",\"storyItemWrapper\":\"RankingListComponent_storyItemWrapper__XEVxf\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"SliderComponent_container___cSt5\",\"pcOnly\":\"SliderComponent_pcOnly__l6ONN\",\"mobileOnly\":\"SliderComponent_mobileOnly__KrgZ8\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"CarouselItem_container__fBg0m\",\"large\":\"CarouselItem_large__5x3Xo\",\"medium\":\"CarouselItem_medium__FJsva\",\"small\":\"CarouselItem_small__qKsJD\",\"imageWrapper\":\"CarouselItem_imageWrapper__Q809X\",\"image\":\"CarouselItem_image___kfWY\",\"titleWrapper\":\"CarouselItem_titleWrapper__fy3_g\",\"adultIcon\":\"CarouselItem_adultIcon__HFAKe\",\"title\":\"CarouselItem_title__tNDB7\",\"subTitle\":\"CarouselItem_subTitle__0vByD\",\"description\":\"CarouselItem_description__Pn66B\",\"progressLabelWrapper\":\"CarouselItem_progressLabelWrapper__8qo2R\",\"progressLabel\":\"CarouselItem_progressLabel__ela9H\",\"active\":\"CarouselItem_active__Fuwyd\",\"verticalLine\":\"CarouselItem_verticalLine__MbWk8\",\"progressWrapper\":\"CarouselItem_progressWrapper__UP9n5\",\"progressBackground\":\"CarouselItem_progressBackground__fGFI9\",\"progressBar\":\"CarouselItem_progressBar__c_stp\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"CarouselRankItem_container__clAe4\",\"imageWrapper\":\"CarouselRankItem_imageWrapper__gMnk_\",\"image\":\"CarouselRankItem_image__xM74g\",\"rankTitleWrapper\":\"CarouselRankItem_rankTitleWrapper__vfVEj\",\"rank\":\"CarouselRankItem_rank__ulfCh\",\"titleWrapper\":\"CarouselRankItem_titleWrapper__knuHl\",\"title\":\"CarouselRankItem_title__eWoXW\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"storyContainer\":\"SlideBannerItem_storyContainer__lJWO9\",\"mainMediaWrapper\":\"SlideBannerItem_mainMediaWrapper__fM_yg\",\"contentWrapper\":\"SlideBannerItem_contentWrapper__YMQHo\",\"infoWrapper\":\"SlideBannerItem_infoWrapper__euP_I\",\"playerIconWrapper\":\"SlideBannerItem_playerIconWrapper__lc4u8\",\"linkButton\":\"SlideBannerItem_linkButton__1v2O8\",\"title\":\"SlideBannerItem_title__gsdO5\",\"subTitle\":\"SlideBannerItem_subTitle__vIOHM\",\"description\":\"SlideBannerItem_description__NdcGs\",\"center\":\"SlideBannerItem_center__LqKl3\",\"mediaContainer\":\"SlideBannerItem_mediaContainer__fIAyC\",\"previewMediaWrapper\":\"SlideBannerItem_previewMediaWrapper__JoMH_\",\"thumbnailPlayIcon\":\"SlideBannerItem_thumbnailPlayIcon__HteAN\",\"selected\":\"SlideBannerItem_selected__5mr0t\",\"imageWrapper\":\"SlideBannerItem_imageWrapper__EPjJh\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"StoryItemTitleWithRanking_container__eBFPy\",\"ranking\":\"StoryItemTitleWithRanking_ranking__ohld_\",\"contentWrapper\":\"StoryItemTitleWithRanking_contentWrapper__o0bhv\",\"titleWrapper\":\"StoryItemTitleWithRanking_titleWrapper__wJLcx\",\"title\":\"StoryItemTitleWithRanking_title__temYG\",\"subTitle\":\"StoryItemTitleWithRanking_subTitle__0Qto2\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"Carousel_container__KPoSy\",\"prevBtn\":\"Carousel_prevBtn__0lF2a\",\"nextBtn\":\"Carousel_nextBtn__RrLLU\",\"carouselItems\":\"Carousel_carouselItems__KysOg\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"carouselOuter\":\"SlideBannerList_carouselOuter__o1E3i\",\"carouselList\":\"SlideBannerList_carouselList__1iOlY\",\"container\":\"SlideBannerList_container__9Ir5i\",\"sectionTitle\":\"SlideBannerList_sectionTitle___9H4s\",\"storyCarouselArrow\":\"SlideBannerList_storyCarouselArrow__2qWV_\",\"left\":\"SlideBannerList_left__gSsQf\",\"right\":\"SlideBannerList_right__6WLHu\"};"],"names":["checkDevice","ua","navigator","userAgent","toLowerCase","includes","CAN_USE_DOM","window","document","createElement","IS_SAFARI","test","IS_CHROME","_IS_IPAD_NEW","maxTouchPoints","platform","_IS_IPAD_OLD","_HAS_TOUCH_SUPPORT","IS_IPAD","IS_ANDROID","IS_IOS_SAFARI","IS_IPAD_SAFARI","IS_IPAD_CHROME","IS_ANDROID_CHROME","defaultOptions","GetAllStoryGameTabsDocument","gql","useGetAllStoryGameTabsQuery","baseOptions","options","Apollo","StoryGameSectionViewFragmentDoc","GetAllStoryGameSectionViewsDocument","STORY_GAME_SECTION_VIEW","useGetAllStoryGameSectionViewsQuery","useQuery","data","loading","refetch","getFormattedStoryGameSectionViewData","ArrowCircleLeftIcon","props","xmlns","width","height","viewBox","fill","filter","cx","cy","r","fillOpacity","d","stroke","strokeWidth","strokeLinecap","strokeLinejoin","id","x","y","filterUnits","colorInterpolationFilters","floodOpacity","result","in","stdDeviation","in2","operator","mode","ArrowCircleRightIcon","Carousel","children","carouselItemsRef","useRef","useState","isScroll","setIsScroll","isShowLastItem","setIsShowLastItem","useEffect","current","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","target","HTMLElement","lastChild","scrollLeft","threshold","childNodes","node","observe","disconnect","className","styles","onClick","clientWidth","ref","AdultIcon","fillRule","clipRule","CarouselItem","story","showProgress","size","CAROUSEL_SIZES","onClickStoryItem","onStoryItemExposed","storyItemRef","React","bannerType","storyId","storyName","title","storyBundleId","bundleId","chapterProgress","Math","max","min","url","mainImageLink","src","alt","isAdult","subTitle","description","t","value","style","VALUE_REGEX","CarouselComponent","sectionTitle","recommendedTargetText","storyList","hasViewMore","onClickViewMore","titleParts","replaceJosaWithValue","message","split","map","part","index","key","CarouselRankItem","ranking","CarouselRankComponent","StoryItemTitleWithRanking","RankingItem","RankingList","list","sectionColumn","args","sectionName","RankingListComponent","scrollContainerRef","rankingListLength","length","setProperty","rankingList","StorygamePlayCircleIcon","StorygamePlayIcon","EmptyMediaItem","storyPreviewId","link","fileType","SlideBannerItem","previews","currentPreview","setCurrentMedia","showPlayIcon","setShowPlayIcon","videoRef","play","paused","handleVideoClick","pause","previewListWithEmptyItem","Array","onClickCapture","buttonName","slice","media","SlideBannerList","carouselRef","currentIndex","setCurrentIndex","handleArrowButtonClick","direction","sliderLength","role","SliderComponent","EmptyComponent","StoryGameSectionComponent","isEmptyTab","every","section","sectionList","uiType","STORY_GAME_SECTION_UI_TYPE","String","sectionId","isTestSection","sectionIndex","tagName","CreateExposedSectionStoryDocument","tabId","router","useRouter","variables","useCreateExposedSectionStoryMutation","createExposedSectionStory","thumbnailEventParams","undefined","checkAndUpdatePlayingStories","useCallback","currentPlayingStories","safeJSONStringify","getRawLocalStorageValueArrayByPrefix","STORAGE_KEY","prevPlayingStories","sessionStorage","getItem","setItem","find","requestThumbnailEvent","params","onLogEventForApp","isMobileDevice","section_name","section_index","story_name","story_id","story_bundle_id","play_type","goStoryGameDetailsForApp","queryParams","touchStorygameThumbnail","toString","push","pathname","query","testSectionId","goExternalPageForApp","open","viewMoreUrl","Number","goPageForApp","location","origin","locale","eventParams","isArray","viewStorygameThumbnail","storygameId","storygameSectionId","container","css","theme","useTranslation","type","genre","tabData","topHeaderTabs","useGetTopHeaderTabs","subTabEventParams","categoryList","setCategoryList","userData","useGetUserQuery","isAndroid","viewStorygameTab","requestSubTabEvent","defaultTab","getAllStorygameTabs","storygameTabId","getUser","certificatedAt","isExpiredCertification","tab","StorygameTabType","titleLokaliseKey","dispatch","useAppDispatch","previousStoryGameTabTitle","useAppSelector","state","event","currentTabIndex","findIndex","item","currentTabTitle","prev_tab","main_tab","viewSubTab","prevTab","PlayTypeProvider","playType","Story_Play_Type","SPHeader","tabList","currentTabType","STORY_PLAY_TAB_TYPES","actions","onLogoClick","onTabClick","onStoreIconClick","goStoreForApp","tabType","onSearchIconClick","goSearchForApp","touchSearchTab","onProfileIconClick","onNotificationIconClick","goNotificationsForApp","isDarkTheme","maxWidth","SPHeaderCategoryList","currentCategoryType","currentCategoryGenre","onCategoryClick","prevType","prevGenre","prevTabTitle","setPreviousStoryGameTabTitle","week","getCurrentWeekType","sorting","Story_Sorting","initialState","PlayTypeContext","createContext","usePlayTypeContext","useContext","Error","Provider","__NEXT_P","module","exports"],"sourceRoot":""}