{"version":3,"file":"static/js/3693.8e9d1b4f.chunk.js","mappings":"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","sources":["client/game_checkIn/redux/modules/gameState.js","client/game_comment/redux/modules/gameState.js","client/game_orderReward/redux/modules/gameState.js","client/game_photoContest/redux/modules/gameState.js","client/utils/windowOnViewPromise.js","client/hooks/useInitAbortHelper.js","client/hooks/useInitPromo/getGameResultRecordsAndWinnerList.js","client/hooks/useInitPromo/getPromoInfoData.js","client/hooks/useInitPromo/getPeriodPlayMatchedInfo.js","client/hooks/useInitPromo/getPromoState.js","client/hooks/useInitPromo/handleQueryStringTest.js","client/hooks/useInitPromo/getLoginUserNonQualifyTypeAfterEntry.js","client/hooks/useInitPromo/useInitPromo.js","client/hooks/useInitPromo/userLoginState/getUserLoginStateAfterEntry.js","client/hooks/useInitPromo/userEntryState/getUserEntryState.js","client/hooks/useInitPromo/userLoginState/getLoginUserNonQualifyType.js","client/hooks/useInitPromo/userLoginState/getUserLoginState.js","client/hooks/useInitPromo/userLoginState/loginUser.js","client/hooks/useIsInitSuccessInfo.js","client/hooks/useUpdateWinnerData.js","client/redux/modules/appState.js","client/redux/modules/flags.js","client/redux/modules/lotteryParticipant.js","client/redux/modules/lotteryPrizes.js","client/redux/modules/lotteryTasks.js","client/redux/modules/mgmReferral.js","client/redux/modules/settingStyle.js","client/redux/modules/ugcMediaOfMember.js","client/redux/modules/userGameResultRecords.js","client/redux/modules/userWinnerPrize.js","client/redux/modules/promo.js","client/redux/modules/promoTasks.js","client/redux/modules/gameFormBased.js","client/redux/modules/settingPromo.js","client/redux/modules/settingPointSystems.js","client/redux/modules/settingGame.js","client/redux/modules/settingTheme.js","client/redux/modules/settingGameStyle.js","client/redux/modules/settingEntryValue.js","client/redux/modules/settingMGMReferral.js","client/redux/modules/settingPlan.js","client/redux/modules/signUpForm.js","client/redux/modules/zines.js","client/redux/modules/lotteryAdmin.js","client/redux/modules/lotteryInstant.js","client/redux/modules/partner.js","client/redux/modules/sponsor.js","client/redux/modules/pointSystem.js","client/redux/modules/mgmRelation.js","client/redux/staticReducer.js","client/game_checkIn/redux/reducer.js","client/game_photoContest/redux/reducer.js","client/game_comment/redux/reducer.js","client/game_orderReward/redux/reducer.js","client/redux/modules/relatedTwinsPromo.js","client/redux/gameReducer.js","client/redux/store.js","hooks/useRemoveAndRetrieveQs.js"],"sourcesContent":["const UPDATE_GAME_STATE = 'gameState/UPDATE_GAME_STATE';\n\nexport const defaultState = {\n    hasNewUnlockTaskPrize: false,\n    gameResultRecordsCount: 0,\n    hasLotteryTaskMappingEntryInited: false,\n    lotteryTaskMappingEntry: {}\n};\nconst reducer = (state = defaultState, action) => {\n    switch (action.type) {\n        case UPDATE_GAME_STATE:\n            return { ...state, ...action.payload };\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n\nexport function setHasNewUnlockTaskPrize(status) {\n    return {\n        type: UPDATE_GAME_STATE,\n        payload: {\n            hasNewUnlockTaskPrize: status\n        }\n    };\n}\n\nexport function updateGameResultRecordsCount() {\n    return (dispatch, getState) => {\n        const { userGameResultRecords } = getState();\n        dispatch({\n            type: UPDATE_GAME_STATE,\n            payload: {\n                gameResultRecordsCount: userGameResultRecords.length\n            }\n        });\n    };\n}\n\nexport function setLotteryTaskMappingEntryInited() {\n    return {\n        type: UPDATE_GAME_STATE,\n        payload: {\n            hasLotteryTaskMappingEntryInited: true\n        }\n    };\n}\n\nexport function setLotteryTaskMappingEntry(lotteryTaskMappingEntry) {\n    return {\n        type: UPDATE_GAME_STATE,\n        payload: {\n            lotteryTaskMappingEntry\n        }\n    };\n}\n","const UPDATE_SETTING_OPTIONS = 'gameState/UPDATE_SETTING_OPTIONS';\n\nexport const defaultState = {\n    settingOptions: {}\n};\nconst reducer = (state = defaultState, action) => {\n    switch (action.type) {\n        case UPDATE_SETTING_OPTIONS:\n            return { ...state, ...action.payload };\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n\nexport function updateSettingOptions(data) {\n    return {\n        type: UPDATE_SETTING_OPTIONS,\n        payload: {\n            settingOptions: data\n        }\n    };\n}\n","const UPDATE_VALIDATE_FAILED_ORDERS = 'gameState/UPDATE_VALIDATE_FAILED_ORDERS';\n\nexport const defaultState = {\n    validateFailedOrders: []\n};\nconst reducer = (state = defaultState, action) => {\n    switch (action.type) {\n        case UPDATE_VALIDATE_FAILED_ORDERS:\n            return { ...state, ...action.payload };\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n\nexport function updateValidateFailedOrders(data) {\n    return {\n        type: UPDATE_VALIDATE_FAILED_ORDERS,\n        payload: {\n            validateFailedOrders: data\n        }\n    };\n}\n","import { getContestUgcMediaAndVoteCount } from 'api/ugc';\n\nconst UPDATE_GAME_STATE = 'gameState/UPDATE_GAME_STATE';\n\nexport const defaultState = {\n    campaignVoteCount: 0,\n    campaignPortfolioCount: 0\n};\nconst reducer = (state = defaultState, action) => {\n    switch (action.type) {\n        case UPDATE_GAME_STATE:\n            return { ...state, ...action.payload };\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n\nexport function updateCampaignVoteCount() {\n    return async (dispatch, getState) => {\n        const {\n            promo: { id: promoId }\n        } = getState();\n        const {\n            payload: { counts, votes }\n        } = await getContestUgcMediaAndVoteCount(promoId);\n\n        dispatch({\n            type: UPDATE_GAME_STATE,\n            payload: {\n                campaignVoteCount: votes,\n                campaignPortfolioCount: counts\n            }\n        });\n    };\n}\n","export default function windowOnViewPromise() {\n    return new Promise(res => {\n        if (isDocVisible()) {\n            res(true);\n        } else {\n            document.addEventListener('visibilitychange', handler);\n        }\n        function handler() {\n            if (isDocVisible()) {\n                res(true);\n                document.removeEventListener('visibilitychange', handler);\n            }\n        }\n    });\n}\n\nfunction isDocVisible() {\n    return document.visibilityState === 'visible';\n}\n","import { useEffect, useRef } from 'react';\n\nimport windowOnViewPromise from 'client/utils/windowOnViewPromise';\n\nexport default function useInitAbortHelper() {\n    const helperRef = useRef({\n        isAborted: false,\n        checkIsDocOnViewing: () => windowOnViewPromise(),\n        async canContinue() {\n            return !this.isAborted && this.checkIsDocOnViewing();\n        }\n    });\n\n    useEffect(() => {\n        function handleUnload() {\n            helperRef.current.isAborted = true;\n            return null;\n        }\n        window.addEventListener('beforeunload', handleUnload);\n        return () => {\n            // eslint-disable-next-line react-hooks/exhaustive-deps\n            helperRef.current.isAborted = true;\n            window.removeEventListener('beforeunload', handleUnload);\n        };\n    }, []);\n\n    return helperRef;\n}\n","import { getUserWinnerList } from '../useUpdateWinnerData';\nimport { getEntriesListApi } from 'api/client';\n\nexport async function setGameResultRecordsAndWinnerList(\n    state,\n    mergeAndDispatchState = () => {},\n    isMgm = false\n) {\n    let userWinnerPrize = null;\n    const {\n        mgmRelation: { mgmReferral: { uuid: mgmPromoUUID } = {} } = {},\n        promo: { uuid: promoUUID }\n    } = state;\n\n    const { payload: { items: entries = [] } = {} } = await getEntriesListApi(\n        isMgm ? mgmPromoUUID : promoUUID\n    );\n\n    if (entries.length > 0) {\n        userWinnerPrize = await getUserWinnerList(isMgm ? mgmPromoUUID : promoUUID);\n    }\n\n    mergeAndDispatchState(\n        isMgm\n            ? {\n                  mgmReferral: {\n                      userGameResultRecords: entries,\n                      ...(Boolean(userWinnerPrize) ? { userWinnerPrize } : {})\n                  }\n              }\n            : {\n                  userGameResultRecords: entries,\n                  ...(Boolean(userWinnerPrize) ? { userWinnerPrize } : {})\n              }\n    );\n}\n","import { getPromoInfoApi, getPromoTaskListApi, getFormInfo } from 'api/client';\nimport { normalizePromoTasksList, normalizePromoLotteryList } from 'api/utils';\nimport { isJSONParsable, objFirstLevelJSONParse } from 'utils/objectManipulate';\nimport {\n    gameTypes,\n    checkIsGameHasPromoTask,\n    contestGetUgcLinkKey,\n    isContestGamesForUserPlayableUgc,\n    isPurePrizeGames\n} from 'config/promoGameTypes';\nimport { IS_UGC_FLOW } from 'config/envVariable';\nimport { fromEntries } from 'utils/core';\n\nexport default async function getPromoInfoData(promoUUID, exclude = []) {\n    const primaryPromoData = await getPromoInfoApi({\n        promoUUID\n    });\n    const result = await mappingPromoInfoApi2State(primaryPromoData, exclude);\n    return result;\n}\n\nconst mappingPromoInfoApi2State = async (apiData, exclude = []) => {\n    let data = {};\n    const filterNotNecessaryApiResponse = fromEntries(\n        Object.entries(apiData).filter(([apiKey]) => !exclude.includes(apiKey))\n    );\n\n    data = getPromoState(filterNotNecessaryApiResponse);\n    data = await getFormState(data);\n    data = await getPromoTasksState(data);\n    data = getLotteriesState(data);\n    data = getPrizeState(data);\n\n    if (!exclude.includes('pointPool')) {\n        data = getPromoPointPoolInfoState(data);\n    }\n\n    if (!exclude.includes('mgmRelation')) {\n        data = await getPromoMgmRelationState(data);\n    }\n    data = await getRelatedTwinsPromoState(data);\n\n    return data;\n};\n\nfunction getPromoState({ promotion, ...rest }) {\n    return {\n        partner: { ...promotion.partner, ...promotion.partnerSetting },\n        sponsor: { ...promotion.sponsor, ...promotion.sponsorSetting },\n        promo: promotion.promo,\n        promoState: {\n            isPurePrizeGame: isPurePrizeGames(promotion.promo.type)\n        },\n        settingPromo: promotion.promoSetting.Promotions,\n        settingPointSystems: promotion.promoSetting.PointSystems,\n        settingStyle: objFirstLevelJSONParse(promotion.promoSetting.Styles),\n        settingGame: objFirstLevelJSONParse(promotion.promoSetting.Games),\n        settingGameStyle: objFirstLevelJSONParse(promotion.promoSetting.GameStyles),\n        settingMGMReferral: objFirstLevelJSONParse(promotion.promoSetting.MGMReferral),\n        settingEntryValue: objFirstLevelJSONParse(promotion.promoSetting.EntryValues),\n        settingTheme: promotion.promoSetting.Themes,\n        settingPlan: promotion.planSetting,\n        signUpForm: promotion.promoSetting.SignUpForm,\n        zines: promotion.promoSetting.SignUpForm,\n        lotteryAdmin: promotion?.promoSetting?.LotteryAdmin ?? {},\n        lotteryInstant: promotion?.promoSetting?.LotteryInstant ?? {},\n        lotteryParticipant: promotion?.promoSetting?.LotteryParticipant ?? {},\n        lotteryTasks: promotion?.promoSetting?.LotteryTasks ?? {},\n        ...rest\n    };\n}\n\nfunction getPromoPointPoolInfoState(data) {\n    const { pointPool, ...rest } = data;\n\n    if (!Array.isArray(pointPool) && Object.keys(pointPool).length > 0) {\n        for (let pointPoolUuid in pointPool) {\n            pointPool[pointPoolUuid].settings = objFirstLevelJSONParse(\n                pointPool[pointPoolUuid].settings.Styles\n            );\n        }\n    }\n\n    return {\n        ...rest,\n        pointSystem: {\n            pointPoolInfos: pointPool\n        }\n    };\n}\n\nasync function getPromoMgmRelationState(data) {\n    const { mgmRelation } = data;\n    if (!Array.isArray(mgmRelation) && Object.keys(mgmRelation).length > 0) {\n        const { mgmReferral, mgmRole } = mgmRelation;\n        const isMGMGame = mgmRole === 'mgmShare' || mgmRole === 'mgmSelf';\n        if (Boolean(mgmReferral) && isMGMGame) {\n            const { uuid: mgmReferralPromoUUID } = mgmReferral;\n            const mgmReferralPromoInfoData = await getPromoInfoApi({\n                promoUUID: mgmReferralPromoUUID\n            });\n            const formattedMgmReferralPromoInfoData = await mappingPromoInfoApi2State(\n                mgmReferralPromoInfoData\n            );\n            return {\n                ...data,\n                mgmReferral: formattedMgmReferralPromoInfoData\n            };\n        }\n    }\n\n    return {\n        ...data,\n        mgmReferral: {}\n    };\n}\n\nasync function getPromoTasksState(data) {\n    const promo = data.promo;\n    if (!checkIsGameHasPromoTask(promo.type)) return data;\n\n    const { payload } = await getPromoTaskListApi({ promoUUID: promo.uuid });\n    return {\n        ...data,\n        promoTasks: await normalizePromoTasksList(payload)\n    };\n}\n\nfunction getLotteriesState(data) {\n    const {\n        lotteryAdmin,\n        lotteryInstant,\n        lotteryParticipant,\n        lotteryTasks: lotteryTasksData,\n        lotteries,\n        ...rest\n    } = data;\n\n    const lotteryState = normalizePromoLotteryList(lotteries);\n    const lotteryTasks = isJSONParsable(lotteryTasksData?.uuid)\n        ? JSON.parse(lotteryTasksData?.uuid)\n        : lotteryTasksData;\n    return {\n        ...rest,\n        lotteryAdmin: Boolean(lotteryAdmin?.uuid),\n        lotteryInstant: {\n            uuid: lotteryInstant?.uuid,\n            ...(lotteryState[lotteryInstant?.uuid] ?? {})\n        },\n        lotteryParticipant: {\n            uuid: lotteryParticipant?.uuid,\n            ...(lotteryState[lotteryParticipant?.uuid] ?? {})\n        },\n        lotteryTasks: Object.entries(lotteryTasks).reduce((obj, [lotteryUuid, taskCondition]) => {\n            obj[lotteryUuid] = {\n                taskCondition,\n                ...(lotteryState[lotteryUuid] ?? {})\n            };\n            return obj;\n        }, {})\n    };\n}\n\nfunction getPrizeState(data) {\n    const { lotteryPrizes, lotteryParticipant } = data;\n    if (lotteryParticipant?.uuid) {\n        return {\n            ...data,\n            lotteryPrizes\n        };\n    }\n\n    return {\n        ...data,\n        lotteryPrizes: {}\n    };\n}\n\nasync function getFormState(data) {\n    const formId = data?.settingGame?.formId;\n    const promoType = data.promo.type;\n    // [#86entxjdp] 空 formbased 模組強制不 create form\n    if (!formId || isPurePrizeGames(promoType) || promoType === gameTypes.SIGN_FORM) return data;\n\n    const {\n        payload: { pages = [], sections = [], fields = [], options = [], settings = {} } = {}\n    } = await getFormInfo({ formId });\n\n    return {\n        ...data,\n        gameFormBased: {\n            pages,\n            sections,\n            fields,\n            options,\n            settings\n        }\n    };\n}\n\nasync function getRelatedTwinsPromoState(primaryPromoData) {\n    const {\n        promo: { type: primaryGameType } = {},\n        settingPromo: primarySettingPromo = {}\n    } = primaryPromoData;\n\n    const {\n        [contestGetUgcLinkKey(primaryGameType, primarySettingPromo)]: relatedPromoUuid\n    } = primarySettingPromo;\n\n    const hasSecondaryPromo = Boolean(relatedPromoUuid);\n\n    if (!hasSecondaryPromo) {\n        return primaryPromoData;\n    }\n\n    let secondaryPromoData = await getPromoInfoApi({\n        promoUUID: relatedPromoUuid\n    });\n\n    secondaryPromoData = await mappingPromoInfoApi2State(secondaryPromoData);\n\n    // 有 hasUgcFlow + 有 ugcLinkKeys\n    if (isContestGamesForUserPlayableUgc(primaryGameType)) {\n        // style setting is saved in ugc module\n        primaryPromoData.settingStyle = secondaryPromoData.settingStyle;\n        // theme setting is saved in contest module\n        secondaryPromoData.settingTheme = primaryPromoData.settingTheme;\n        secondaryPromoData.settingPromo = {\n            language: primaryPromoData.settingPromo.language,\n            ...secondaryPromoData.settingPromo\n        };\n\n        if (IS_UGC_FLOW) {\n            const secondaryPromoWithoutPartnerAndSponsor = (() => {\n                const { partner, sponsor, ...rest } = secondaryPromoData;\n                return rest;\n            })();\n            return {\n                ...primaryPromoData,\n                relatedTwinsPromo: secondaryPromoWithoutPartnerAndSponsor\n            };\n        } else {\n            const primaryPromoWithoutPartnerAndSponsor = (() => {\n                const { partner, sponsor, ...rest } = primaryPromoData;\n                return rest;\n            })();\n            return {\n                ...secondaryPromoData,\n                relatedTwinsPromo: primaryPromoWithoutPartnerAndSponsor\n            };\n        }\n    }\n\n    // 無hasUgcFlow + 有 ugcLinkKeys\n    if (primaryGameType === gameTypes.CONTEST_ADMIN_UPLOAD) {\n        primaryPromoData.settingStyle = secondaryPromoData.settingStyle;\n        const secondaryPromoWithoutPartnerAndSponsor = (() => {\n            const { partner, sponsor, ...rest } = secondaryPromoData;\n            return rest;\n        })();\n        return {\n            ...primaryPromoData,\n            relatedTwinsPromo: secondaryPromoWithoutPartnerAndSponsor\n        };\n    }\n\n    return primaryPromoData;\n}\n","import { generatePeriodTimeMatchInfo } from 'editor/components/SideBar/Qualify/limitPlayTimes/periodPlay/utils';\n\nexport default function getPeriodPlayMatchedInfo({ periodPlayMode, periodTime, timezone }) {\n    const isPeriodPlayMode = Boolean(periodPlayMode) && Boolean(periodTime);\n\n    return {\n        isPeriodPlayMode,\n        matchedInfo: generatePeriodTimeMatchInfo(isPeriodPlayMode, {\n            timezone,\n            periodTimes: periodTime,\n            mode: periodPlayMode\n        })\n    };\n}\n","import { IS_IFRAME_MODE } from 'config/envVariable';\nimport { IS_OFFLINE, IS_END, IS_SUSPEND } from 'config/promoOnlineStatus';\nimport { loginTypes } from 'config/loginTypes';\nimport { gameRunningStatuses } from 'config/gameRunningStatuses';\nimport { reducePointModes } from 'config/enterpriseReducePointMode';\nimport { hasUtcDTStartInLocal, hasUtcDTEndInLocal } from 'utils/dateTime';\nimport getPeriodPlayMatchedInfo from 'client/hooks/useInitPromo/getPeriodPlayMatchedInfo';\nimport { getQsOfParentUrl } from 'client/utils/queryString';\n\nexport default function getPromoState(state, qs) {\n    const {\n        settingPromo: { periodPlayMode, periodTime, timezone }\n    } = state;\n    const { test_code, test_expired, parentUrl = '', scenes, mode } = qs;\n    const { utm_source, utm_medium, utm_campaign, utm_term, utm_content } = getUtmFromParentUrl(\n        parentUrl\n    );\n    const { status: gameRunningStatus, isTestMode = false } = getGameRunningStatus(state, {\n        hasTestQs: Boolean(test_code) && Boolean(test_expired),\n        hasPreviewQs: mode === 'preview'\n    });\n    return {\n        periodPlayMatchedInfo: getPeriodPlayMatchedInfo({\n            periodPlayMode,\n            periodTime,\n            timezone\n        }),\n        isTestMode,\n        enablePasscodeVerify: checkEnablePasscodeVerify(state),\n        gameRunningStatus,\n        reducePointMode: getReducePointMode(state),\n        parentUrl,\n        scenes,\n        utmFromParent: {\n            utm_source,\n            utm_medium,\n            utm_campaign,\n            utm_term,\n            utm_content\n        }\n    };\n}\n\nfunction getUtmFromParentUrl(parentUrl) {\n    const { utm_source, utm_medium, utm_campaign, utm_term, utm_content } = getQsOfParentUrl(\n        parentUrl\n    );\n    return { utm_source, utm_medium, utm_campaign, utm_term, utm_content };\n}\nfunction getGameRunningStatus(state, { hasTestQs, hasPreviewQs }) {\n    const {\n        promo: { status: promoStatus },\n        settingPromo: { startDate, endDate },\n        zines: { pageId } = {}\n    } = state;\n\n    if (IS_IFRAME_MODE && pageId !== undefined && hasPreviewQs) {\n        return { status: gameRunningStatuses.NOT_PUBLISH };\n    }\n    if (promoStatus === IS_OFFLINE) {\n        if (hasTestQs) {\n            return { status: gameRunningStatuses.RUNNING, isTestMode: true };\n        } else {\n            return { status: gameRunningStatuses.NOT_PUBLISH };\n        }\n    } else if (promoStatus === IS_SUSPEND) {\n        return { status: gameRunningStatuses.SUSPEND };\n    } else if (promoStatus === IS_END || hasUtcDTEndInLocal(endDate)) {\n        return { status: gameRunningStatuses.END };\n    } else {\n        if (!hasUtcDTStartInLocal(startDate)) {\n            return { status: gameRunningStatuses.BEFORE };\n        } else {\n            return { status: gameRunningStatuses.RUNNING };\n        }\n    }\n}\nfunction getReducePointMode(state) {\n    const {\n        settingPromo: {\n            loginMethod,\n            enableKkpoint,\n            kkpointAmount,\n            transactionWithdraw,\n            transactionWithdrawQuantity\n        },\n        settingPointSystems = {}\n    } = state;\n\n    // 企業(會員點數)\n    if (loginMethod === loginTypes.ENTERPRISELOGIN) {\n        if (Boolean(enableKkpoint) && kkpointAmount !== undefined) {\n            return reducePointModes.KK_BOX;\n        } else if (Boolean(transactionWithdraw) && transactionWithdrawQuantity !== undefined) {\n            return reducePointModes.GENERAL;\n        }\n    }\n    // FEVER(活動點數)\n    if (\n        loginMethod === loginTypes.FACEBOOKLOGIN ||\n        loginMethod === loginTypes.LINELOGIN ||\n        loginMethod === loginTypes.ENTERPRISELOGIN\n    ) {\n        const shouldReducePromoPointForJoinPromo =\n            Boolean(settingPointSystems?.qualifyWithdrawUuid) &&\n            transactionWithdrawQuantity !== undefined;\n\n        if (shouldReducePromoPointForJoinPromo) {\n            return reducePointModes.POINT_SYSTEMS;\n        }\n    }\n    return '';\n}\nfunction checkEnablePasscodeVerify(state) {\n    const {\n        settingPromo: { enableQualificationPasscode }\n    } = state;\n    return Boolean(enableQualificationPasscode);\n}\n","import { validateTestCodeAPI } from 'api/client';\nimport { CLIENT_API_FEVER_HOST } from 'config/envVariable';\nimport { IS_OFFLINE } from 'config/promoOnlineStatus';\nimport * as clientErrTypes from 'config/clientErrorTypes';\nimport { generateApiErrObj } from 'client/hooks/useClientErrorHandler';\n\nimport useRemoveAndRetrieveQs from 'hooks/useRemoveAndRetrieveQs';\n\nexport function useRemoveUnnecessaryQueryStr() {\n    const qsHandler = useRemoveAndRetrieveQs();\n    return state => {\n        const {\n            promo: { status: promoStatus }\n        } = state;\n        let shouldRemoveQsKey = ['tryliff'];\n        if (promoStatus !== IS_OFFLINE) {\n            shouldRemoveQsKey.push('test_code', 'test_expired');\n        }\n        return qsHandler(shouldRemoveQsKey);\n    };\n}\nexport async function validateTestCode(state, { test_code, test_expired } = {}) {\n    const {\n        sponsor: { id: sponsorId }\n    } = state;\n\n    if (Boolean(sponsorId) && Boolean(test_code) && Boolean(test_expired)) {\n        const validateResp = await validateTestCodeAPI({\n            host: CLIENT_API_FEVER_HOST,\n            sponsorId,\n            testCode: test_code,\n            testExpired: test_expired\n        });\n        const { httpStatus, payload } = validateResp;\n        if (httpStatus !== 200) {\n            throw generateApiErrObj(validateResp);\n        } else if ((payload ?? [])[0] !== true) {\n            throw generateApiErrObj(validateResp, clientErrTypes.INVALID_TEST_CODE);\n        }\n    }\n}\n","import { notQualifiedTypes } from 'config/notQualifiedTypes';\nimport { submitReferralCodeApi } from 'api/client';\nimport Cookies from 'js-cookie';\n\nexport default async function getLoginUserNonQualifyTypeAfterEntry(state) {\n    const {\n        promo: { uuid: promoUuid } = {},\n        promoState: { referralCode },\n        userEntryState: {\n            currentEntryUUID: entryUuid,\n            isNeedEnterReferralCode,\n            hasReferralCodeInput\n        } = {},\n        userGameResultRecords = [],\n        settingMGMReferral: { enableReferralCodeRequired } = {}\n    } = state;\n\n    const submitReferralCode = async () => {\n        const emptyState = {\n            promoState: {\n                referralCode: ''\n            }\n        };\n\n        if (referralCode && promoUuid && entryUuid) {\n            Cookies.remove('ref_code');\n            try {\n                const submitResp = await submitReferralCodeApi({\n                    promoUuid,\n                    entryUuid,\n                    referralCode\n                });\n                if (submitResp.httpStatus === 200) {\n                    return {\n                        userEntryState: {\n                            hasReferralCodeInput: true,\n                            isNeedEnterReferralCode: false,\n                            isCanEnterReferralCode: false\n                        },\n                        ...emptyState\n                    };\n                } else {\n                    return {\n                        ...emptyState,\n                        ...(enableReferralCodeRequired\n                            ? {\n                                  userLoginState: {\n                                      notQualifiedType:\n                                          notQualifiedTypes.QUALIFICATION.SUBMIT_REFERRAL_CODE\n                                  }\n                              }\n                            : {})\n                    };\n                }\n            } catch (err) {\n                return {\n                    ...emptyState,\n                    ...(enableReferralCodeRequired\n                        ? {\n                              userLoginState: {\n                                  notQualifiedType:\n                                      notQualifiedTypes.QUALIFICATION.SUBMIT_REFERRAL_CODE\n                              }\n                          }\n                        : {})\n                };\n            }\n        } else {\n            return {\n                ...(enableReferralCodeRequired\n                    ? {\n                          userLoginState: {\n                              notQualifiedType: notQualifiedTypes.QUALIFICATION.SUBMIT_REFERRAL_CODE\n                          }\n                      }\n                    : {})\n            };\n        }\n    };\n\n    if (referralCode && userGameResultRecords.length === 0) {\n        if (hasReferralCodeInput) {\n            return {\n                promoState: {\n                    referralCode: ''\n                }\n            };\n        }\n        const res = await submitReferralCode();\n        if (Boolean(res)) return res;\n    } else if (isNeedEnterReferralCode) {\n        return {\n            promoState: {\n                referralCode: ''\n            },\n            userLoginState: {\n                notQualifiedType: notQualifiedTypes.QUALIFICATION.SUBMIT_REFERRAL_CODE\n            }\n        };\n    }\n\n    return {};\n}\n","import { useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport _merge from 'lodash/merge';\nimport querystring from 'query-string';\nimport { IS_IFRAME_MODE } from 'config/envVariable';\nimport { setI18nLanguage } from 'locale/i18n';\nimport * as clientErrTypes from 'config/clientErrorTypes';\nimport { initTagManager } from 'client/utils/tracking';\nimport store from 'client/redux/store';\nimport { initAppState } from 'client/redux/store';\nimport { setInited, setErrorOnInit, setUserStateInited } from 'client/redux/modules/flags';\nimport { setLoginId } from 'client/redux/modules/userLoginState';\nimport {\n    useRemoveUnnecessaryQueryStr,\n    validateTestCode\n} from 'client/hooks/useInitPromo/handleQueryStringTest';\nimport getPromoInfoData from 'client/hooks/useInitPromo/getPromoInfoData';\nimport getPromoState from 'client/hooks/useInitPromo/getPromoState';\nimport getUserLoginState from 'client/hooks/useInitPromo/userLoginState/getUserLoginState';\nimport getUserLoginStateAfterEntry from 'client/hooks/useInitPromo/userLoginState/getUserLoginStateAfterEntry';\nimport getUserEntryState from 'client/hooks/useInitPromo/userEntryState/getUserEntryState';\nimport { errorActionHandler } from 'client/hooks/useClientErrorHandler';\nimport useHistoryPathPush from 'client/hooks/useHistoryPathPush';\nimport useInitAbortHelper from 'client/hooks/useInitAbortHelper';\nimport { getLoginUserInfo } from 'client/utils/login';\nimport { getLocalStorage, deleteLocalStorage } from 'utils/localStorage';\nimport { checkReferralCodeApi, trackCampaignClick } from 'api/client';\nimport Cookies from 'js-cookie';\nimport getMgmFlags from 'utils/getMgmFlags';\nimport { setGameResultRecordsAndWinnerList } from './getGameResultRecordsAndWinnerList';\nimport { useLocation } from 'react-router-dom/cjs/react-router-dom.min';\n\nfunction useInitPromo(paramsPromoUUID, paramsPromoId) {\n    const dispatch = useDispatch();\n    const history = useHistoryPathPush();\n    const location = useLocation();\n    const removeUnnecessaryQueryStr = useRemoveUnnecessaryQueryStr();\n    const abortHelper = useInitAbortHelper();\n    function toFirstPage() {\n        history.push({ pathname: `/${paramsPromoUUID}/${paramsPromoId}/join` });\n    }\n    function toNotFound() {\n        history.push({ pathname: `/notfound` });\n    }\n    async function initPromo(recaptchaToken) {\n        if (isNotValidPromoUUID(paramsPromoUUID)) return toNotFound();\n\n        if (!Boolean(location?.pathname?.match(joinRegex))) toFirstPage();\n\n        let state = {};\n\n        function mergeAndDispatchState(source) {\n            state = _merge({}, state, source);\n            dispatch(initAppState(source));\n        }\n\n        try {\n            const promoInfo = await getPromoInfoData(paramsPromoUUID);\n            const hasRelatedTwinsPromo = promoInfo.relatedTwinsPromo !== undefined;\n            const gameType = promoInfo.promo.type;\n\n            const { isMgmShare, isMgmMission, isMgmSelf } = getMgmFlags(promoInfo?.mgmRelation);\n            mergeAndDispatchState({\n                flags: { isMgmShare, isMgmMission, isMgmSelf }\n            });\n\n            store.injectGameReducer(gameType, hasRelatedTwinsPromo, isMgmSelf);\n            await setupPromoApp(promoInfo);\n            mergeAndDispatchState(promoInfo);\n\n            const { rest: qs, retrieved } = removeUnnecessaryQueryStr(state);\n            mergeAndDispatchState({\n                appState: { hasTryLiff: Boolean(retrieved.tryliff) }\n            });\n\n            retrieveStateFromLocalStorage(mergeAndDispatchState);\n\n            const promoState = getPromoState(state, qs);\n\n            mergeAndDispatchState({ promoState });\n            dispatch(setInited());\n\n            const { pcode = '' } = querystring.parse(window.location.search);\n            // story-mention 機器人 在 IG 聊天室 發帶有 pcode 的 promo link 給 user,User 點擊 link 的次數需要被追蹤\n            if (\n                promoState?.enablePasscodeVerify &&\n                promoInfo?.settingPromo?.enableCampaignToolPasscode &&\n                pcode\n            ) {\n                await trackCampaignClick({ pcode });\n            }\n\n            await iframeModeBodyLazyInViewResolver();\n\n            await validateTestCode(state, qs);\n            // 取得邀請碼\n            await setReferralCode(state, mergeAndDispatchState);\n\n            const userLoginState = await getUserLoginState(state, gameType);\n            mergeAndDispatchState({ userLoginState });\n            if (userLoginState.isLogin) {\n                await setGameResultRecordsAndWinnerList(state, mergeAndDispatchState);\n                if (!userLoginState?.currentLoginID) {\n                    const loginUserInfo = await getLoginUserInfo(state?.settingPromo?.loginMethod);\n                    dispatch(setLoginId(loginUserInfo?.id));\n                } else {\n                    dispatch(setLoginId(userLoginState?.currentLoginID));\n                }\n                if (\n                    state?.mgmRelation?.mgmRole === 'mgmShare' ||\n                    state?.mgmRelation?.mgmRole === 'mgmSelf'\n                ) {\n                    await setGameResultRecordsAndWinnerList(state, mergeAndDispatchState, true);\n                }\n\n                const userEntryState = await getUserEntryState({\n                    state,\n                    dispatch,\n                    abortHelper,\n                    recaptchaToken,\n                    enableQualificationPasscode:\n                        promoInfo?.settingPromo?.enableQualificationPasscode,\n                    enableReCaptcha: promoInfo?.settingPromo?.enableReCaptcha\n                });\n                mergeAndDispatchState({ userEntryState });\n                // 登入後且跑過 Entry 流程後的檢查\n                await getUserLoginStateAfterEntry(state, mergeAndDispatchState);\n            } else {\n                mergeAndDispatchState({ userEntryState: { shouldHideUserStateLoading: true } });\n            }\n\n            await store.initGameReducer(gameType);\n            await store.initMgmSelfReducer(isMgmSelf);\n\n            dispatch(setUserStateInited());\n        } catch (error) {\n            if (await abortHelper.current.canContinue()) {\n                handleInitError({\n                    error,\n                    dispatch,\n                    toNotFound,\n                    isTestMode: state?.promoState?.isTestMode\n                });\n            }\n        }\n    }\n    useEffect(() => {\n        initPromo();\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n    return recaptchaToken => initPromo(recaptchaToken);\n}\n\nexport default useInitPromo;\n\nexport const joinRegex = /\\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\/[0-9]+\\/join/gm;\n\nexport function handleInitError({ dispatch, error, toNotFound = () => {}, isTestMode }) {\n    dispatch(setErrorOnInit());\n    if (error.extraInfo?.errType === clientErrTypes.NOT_FOUND) {\n        toNotFound();\n    } else {\n        errorActionHandler(error, { dispatch, isTestMode });\n    }\n}\nexport async function setupPromoApp(state) {\n    const {\n        settingPromo: { language }\n    } = state;\n\n    setSiteTitle(state);\n    setSiteFavicon(state);\n    document.documentElement.setAttribute('lang', language);\n    await setI18nLanguage({ lang: language });\n    initTagManager(state);\n}\nexport function setSiteTitle(state) {\n    const {\n        settingPromo: { metaTitle },\n        promo: { name }\n    } = state;\n    document.title = metaTitle || name;\n}\nexport function setSiteFavicon(state) {\n    const {\n        sponsor: { favIconUrl }\n    } = state;\n    const selectorFavicon = document.querySelector(\"link[rel='shortcut icon']\");\n    if (selectorFavicon !== null && Boolean(favIconUrl)) {\n        selectorFavicon.href = favIconUrl;\n    }\n}\nfunction iframeModeBodyLazyInViewResolver() {\n    return new Promise(res => {\n        if (IS_IFRAME_MODE && window.IntersectionObserver) {\n            const observer = new IntersectionObserver(entries => {\n                entries.forEach(entry => {\n                    if (entry.target === document.body && entry.isIntersecting) {\n                        observer.unobserve(document.body);\n                        res(true);\n                    }\n                });\n            });\n\n            observer.observe(document.body);\n        } else {\n            res(true);\n        }\n    });\n}\nfunction isNotValidPromoUUID(promoUUID) {\n    return /^\\d+$/.test(promoUUID);\n}\nexport function retrieveStateFromLocalStorage(mergeAndDispatchState) {\n    //確認是不是第一次通過loginsever\n    const isFirstPassLoginSever = getLocalStorage({ key: 'isfirstPassLoginSever' });\n    deleteLocalStorage({ key: 'isfirstPassLoginSever' });\n\n    mergeAndDispatchState({\n        promoState: { isfirstPassLoginSever: Boolean(isFirstPassLoginSever) }\n    });\n}\n\nexport async function setReferralCode(state, mergeAndDispatchState) {\n    // 檢查邀請碼並存入 promoState\n    const {\n        promo: { uuid: promoUuid },\n        flags: { isMgmMission, isMgmSelf },\n        promoState: { utmFromParent: { utm_content: parentReferralCodeByUrl = '' } = {} } = {}\n    } = state;\n\n    if (!isMgmMission && !isMgmSelf) return;\n\n    const { utm_content: promoReferralCodeByUrl = '' } = querystring.parse(window.location.search);\n    const referralCodeByUrl = parentReferralCodeByUrl || promoReferralCodeByUrl;\n    const referralCodeByCookie = Cookies.get('ref_code');\n\n    let isUrlCodeValid = false;\n    if (Boolean(referralCodeByUrl)) {\n        try {\n            const resp = await checkReferralCodeApi({\n                promoUuid,\n                referralCode: referralCodeByUrl\n            });\n            if (resp.httpStatus === 200) {\n                isUrlCodeValid = true;\n                Cookies.set('ref_code', referralCodeByUrl);\n                mergeAndDispatchState({\n                    promoState: {\n                        referralCode: referralCodeByUrl\n                    }\n                });\n            } else {\n                mergeAndDispatchState({\n                    promoState: {\n                        referralCode: ''\n                    }\n                });\n            }\n        } catch (err) {\n            mergeAndDispatchState({\n                promoState: {\n                    referralCode: ''\n                }\n            });\n        }\n    }\n\n    if (!isUrlCodeValid && Boolean(referralCodeByCookie)) {\n        // URL 檢查不通過且 Cookie 有設定過\n        try {\n            const resp = await checkReferralCodeApi({\n                promoUuid,\n                referralCode: referralCodeByCookie\n            });\n            if (resp.httpStatus === 200) {\n                Cookies.set('ref_code', referralCodeByCookie);\n                mergeAndDispatchState({\n                    promoState: {\n                        referralCode: referralCodeByCookie\n                    }\n                });\n            } else {\n                Cookies.remove('ref_code');\n                mergeAndDispatchState({\n                    promoState: {\n                        referralCode: ''\n                    }\n                });\n            }\n        } catch (err) {\n            Cookies.remove('ref_code');\n            mergeAndDispatchState({\n                promoState: {\n                    referralCode: ''\n                }\n            });\n        }\n    }\n}\n","import { gameRunningStatuses } from 'config/gameRunningStatuses';\nimport getLoginUserNonQualifyTypeAfterEntry from '../getLoginUserNonQualifyTypeAfterEntry';\nimport { size } from 'lodash';\n\nexport default async function getUserLoginStateAfterEntry(state, mergeAndDispatchState) {\n    const {\n        userLoginState: { isLogin, notQualifiedType, notQualifiedErrInfo },\n        promoState: {\n            gameRunningStatus,\n            periodPlayMatchedInfo: { matchedInfo: { match: isInPlayTimePeriod } = {} } = {}\n        }\n    } = state;\n\n    const isPromoPlayableOnTime =\n        gameRunningStatus === gameRunningStatuses.RUNNING && isInPlayTimePeriod;\n    const resp =\n        isLogin && isPromoPlayableOnTime ? await getLoginUserNonQualifyTypeAfterEntry(state) : {};\n\n    mergeAndDispatchState(!notQualifiedType && !Boolean(size(notQualifiedErrInfo)) ? resp : {});\n}\n","import { gameRunningStatuses } from 'config/gameRunningStatuses';\nimport {\n    getUserGameEntry,\n    getUserLatestEntry,\n    checkShouldGetNextEntry,\n    overwriteEntryAction,\n    getEntryQualificationInfo\n} from 'client/hooks/useInitPromo/userEntryState/getUserEntry';\n\nexport default async function getUserEntryState({\n    state,\n    dispatch,\n    abortHelper,\n    recaptchaToken,\n    enableQualificationPasscode,\n    enableReCaptcha\n}) {\n    const {\n        promoState: {\n            periodPlayMatchedInfo: { matchedInfo: { match: isInPlayTimePeriod } = {} } = {},\n            gameRunningStatus\n        }\n    } = state;\n    const isPromoPlayableOnTime =\n        gameRunningStatus === gameRunningStatuses.RUNNING && isInPlayTimePeriod;\n    async function canContinueFlow() {\n        return isPromoPlayableOnTime && (await abortHelper.current.canContinue());\n    }\n\n    let latestEntry = await getUserLatestEntry({ state });\n    if (await canContinueFlow()) {\n        const shouldGetNextEntry = checkShouldGetNextEntry({\n            state,\n            latestEntry\n        });\n\n        // 啟用 reCaptcha 時,若有啟用通關序號,reCaptcha 會在通關序號時驗證,反之,會在 create entry 驗證\n        const isReCaptchaPass =\n            (Boolean(enableReCaptcha) && !enableQualificationPasscode && Boolean(recaptchaToken)) ||\n            (Boolean(enableReCaptcha) && Boolean(enableQualificationPasscode)) ||\n            !enableReCaptcha;\n\n        // 需要產生新的 entry\n        if (shouldGetNextEntry) {\n            if (isReCaptchaPass) {\n                const {\n                    entry: gameEntry,\n                    createEntryNotQualifiedType = '',\n                    hasPromoSuspended: hasPromoSuspendedWhenGetEntries\n                } = await getUserGameEntry({\n                    dispatch,\n                    state,\n                    latestEntry,\n                    recaptchaToken\n                });\n                const { entryId, entryUuid = '', ...restEntryProps } = gameEntry;\n                return {\n                    ...restEntryProps,\n                    ...(hasPromoSuspendedWhenGetEntries\n                        ? {}\n                        : await getEntryQualificationInfo({\n                              state,\n                              entry: gameEntry\n                          })),\n                    createEntryNotQualifiedType,\n                    currentEntryId: entryId,\n                    currentEntryUUID: entryUuid,\n                    shouldGetNextEntry: false\n                };\n            } else return { shouldGetNextEntry: true };\n        } else {\n            // 新的 entry 已建立,但還沒結束這ㄧ回合\n            const { entryId, entryUuid = '', ...restEntryProps } = latestEntry;\n            return {\n                ...restEntryProps,\n                ...(await getEntryQualificationInfo({\n                    state,\n                    entry: latestEntry\n                })),\n                currentEntryId: entryId,\n                currentEntryUUID: entryUuid\n            };\n        }\n    } else {\n        // 當有 game result 且略過填表時,活動不可玩時,略過填表和配獎\n        const { entryId, entryUuid = '', ...restEntryProps } = overwriteEntryAction(latestEntry);\n        return {\n            ...restEntryProps,\n            currentEntryId: entryId,\n            currentEntryUUID: entryUuid\n        };\n    }\n}\n","import { loginTypes } from 'config/loginTypes';\nimport { notQualifiedTypes } from 'config/notQualifiedTypes';\nimport { verifyKKboxMemberQualify, verifyLineFriend, verityMemberQualification } from 'api/client';\nimport {\n    isErrOfCyberbizEcLimit,\n    isErrOfApiNameListLimit,\n    isErrOfEnterpriseBindLine,\n    isErrOfNewRegisterMemberLimit,\n    isErrOfMemberTier\n} from 'client/utils/errorObjectChecker';\n\n// 透過 promo setting 判斷是否需要進行登入者資格檢查\nexport default async function getLoginUserNonQualifyType(state) {\n    const {\n        promo: { uuid: promoUUID },\n        settingPromo: {\n            loginMethod,\n            // ageLimitMax,\n            // ageLimitMin,\n            // birthdayLimit,\n            friendLimit,\n            enableQualificationMemberCyberbiz,\n            enableQualificationRestrictedList,\n            enableQualificationRegistrationDate,\n            enableQualificationMemberTier,\n            qualificationMemberAccountLinkPlatform\n        },\n        partner: { thirdPartyQualificationMemberLevelPlatform = '' }\n        // userGameResultRecords = []\n    } = state;\n\n    // const facebookVerify =\n    //     loginMethod === loginTypes.FACEBOOKLOGIN && (ageLimitMax || ageLimitMin || birthdayLimit);\n    const shouldCheckLineFriend = loginMethod === loginTypes.LINELOGIN && friendLimit === 1;\n    if (shouldCheckLineFriend) {\n        const { payload: isFriendShip } = await verifyLineFriend(promoUUID);\n        if (!isFriendShip) {\n            return { notQualifiedType: notQualifiedTypes.LINE.FRIEND };\n        }\n    }\n\n    const shouldCheckIsCyberbizECMember =\n        loginMethod === loginTypes.ENTERPRISELOGIN && Boolean(enableQualificationMemberCyberbiz);\n    const shouldCheckApiNameListLimit =\n        loginMethod === loginTypes.ENTERPRISELOGIN && Boolean(enableQualificationRestrictedList);\n    const shouldCheckEnterpriseBindLine =\n        loginMethod === loginTypes.LINELOGIN && Boolean(qualificationMemberAccountLinkPlatform);\n    const shouldCheckApiNewRegisterMemberLimit = Boolean(enableQualificationRegistrationDate);\n    const shouldCheckIsNeedVerifyMemberQualification =\n        (loginMethod === loginTypes.ENTERPRISELOGIN || loginMethod === loginTypes.LINELOGIN) &&\n        Boolean(enableQualificationMemberTier) &&\n        thirdPartyQualificationMemberLevelPlatform !== 'kkbox';\n\n    if (\n        [\n            shouldCheckIsCyberbizECMember,\n            shouldCheckApiNameListLimit,\n            shouldCheckEnterpriseBindLine,\n            shouldCheckApiNewRegisterMemberLimit,\n            shouldCheckIsNeedVerifyMemberQualification\n        ].some(e => e)\n    ) {\n        const resp = await verityMemberQualification(promoUUID);\n\n        const { notQualifiedType, notQualifiedErrInfo } = getNotQualifiedType(resp);\n        if (notQualifiedType) {\n            return { notQualifiedType, notQualifiedErrInfo };\n        }\n    }\n\n    const shouldCheckKKBoxMember =\n        loginMethod === loginTypes.ENTERPRISELOGIN &&\n        Boolean(thirdPartyQualificationMemberLevelPlatform) &&\n        thirdPartyQualificationMemberLevelPlatform === 'kkbox';\n\n    if (shouldCheckKKBoxMember) {\n        const { httpStatus } = await verifyKKboxMemberQualify(promoUUID);\n        if (httpStatus === 402 || httpStatus === 400 || httpStatus === 404) {\n            return {\n                notQualifiedType: notQualifiedTypes.ENTERPRISE.MEMBER_KKBOX\n            };\n        }\n    }\n\n    return { notQualifiedType: '' };\n}\n\nconst checkMemberQualifyList = [\n    { checker: isErrOfCyberbizEcLimit, type: notQualifiedTypes.ENTERPRISE.CYBERBIZ_EC_MEMBER },\n    { checker: isErrOfApiNameListLimit, type: notQualifiedTypes.QUALIFICATION.NAME_LIST_API },\n    {\n        checker: isErrOfEnterpriseBindLine,\n        errInfoRetrieve: resp => ({\n            redirectUrl: resp.payload?.data?.redirectUrl || null\n        }),\n        type: notQualifiedTypes.LINE.ENTERPRISE_MEMBER_BIND\n    },\n    {\n        checker: isErrOfNewRegisterMemberLimit,\n        type: notQualifiedTypes.QUALIFICATION.NEW_REGISTER_MEMBER\n    },\n    {\n        checker: isErrOfMemberTier,\n        type: notQualifiedTypes.QUALIFICATION.MEMBER_TIER\n    }\n];\n\n// 拿 verifyMemberQualification 的 response 判斷不符合資格的類型\nfunction getNotQualifiedType(resp) {\n    let notQualifiedType = '';\n    let notQualifiedErrInfo = {};\n    for (const { checker, type, errInfoRetrieve } of checkMemberQualifyList) {\n        if (checker(resp)) {\n            notQualifiedType = type;\n            if (typeof errInfoRetrieve === 'function') {\n                notQualifiedErrInfo = errInfoRetrieve(resp);\n            }\n            break;\n        }\n    }\n    return { notQualifiedType, notQualifiedErrInfo };\n}\n","import loginUser from 'client/hooks/useInitPromo/userLoginState/loginUser';\nimport getLoginUserNonQualifyType from 'client/hooks/useInitPromo/userLoginState/getLoginUserNonQualifyType';\nimport { gameTypes } from 'config/promoGameTypes';\nimport { gameRunningStatuses } from 'config/gameRunningStatuses';\n\n// 未發佈、未開始都不做登入\nconst omitLoginGameStatuses = new Set([\n    gameRunningStatuses.NOT_PUBLISH,\n    gameRunningStatuses.BEFORE\n]);\n\nexport default async function getUserLoginState(state, gameType) {\n    const {\n        settingPromo: { loginMethod },\n        sponsor,\n        partner,\n        promoState: {\n            gameRunningStatus,\n            periodPlayMatchedInfo: { matchedInfo: { match: isInPlayTimePeriod } = {} } = {}\n        }\n    } = state;\n    const noNeedLogin =\n        omitLoginGameStatuses.has(gameRunningStatus) || gameType === gameTypes.CONTEST_ADMIN_UPLOAD;\n\n    const isLogin = noNeedLogin\n        ? false\n        : await loginUser(loginMethod, {\n              partner,\n              sponsor\n          });\n\n    const isPromoPlayableOnTime =\n        gameRunningStatus === gameRunningStatuses.RUNNING && isInPlayTimePeriod;\n    const { notQualifiedType = '', notQualifiedErrInfo = {} } =\n        isLogin && isPromoPlayableOnTime ? await getLoginUserNonQualifyType(state) : {};\n\n    return { isLogin, notQualifiedType, notQualifiedErrInfo };\n}\n","import { loginTypes, loginTypesForApi } from 'config/loginTypes';\nimport tokenManager from 'client/utils/tokenManager';\nimport { retrieveLineConfig } from 'utils/manipulatePartnerSponsor';\nimport { generateApiErrObj } from 'client/hooks/useClientErrorHandler';\n\nexport default async function loginUser(loginMethod, { partner, sponsor }) {\n    // 需要先 init login type 以使用對應的方法 get token\n    initTokenLoginType(loginMethod, { partner, sponsor });\n\n    let { token: accessToken, errorResp } = await tokenManager.getAccessToken();\n\n    // 如果沒有 access_token 並且是不登入活動,嘗試 init login token 後再重新取得 access token\n    if (loginMethod === loginTypes.ANONYMOUSLOGIN) {\n        if (errorResp) {\n            await tokenManager.generateLoginToken();\n            ({ token: accessToken, errorResp } = await tokenManager.getAccessToken());\n            if (errorResp) {\n                throw generateApiErrObj(errorResp);\n            }\n        }\n    }\n\n    const isLogin = Boolean(accessToken);\n    return isLogin;\n}\n\nfunction initTokenLoginType(loginMethod, { partner, sponsor }) {\n    const loginCredential = retrieveCredentialByLoginType({\n        loginType: loginMethod,\n        partner,\n        sponsor\n    });\n    tokenManager.init(loginCredential);\n}\n\nfunction retrieveCredentialByLoginType({ loginType, partner, sponsor }) {\n    switch (loginType) {\n        case loginTypes.ANONYMOUSLOGIN:\n            return { login_type: loginTypesForApi.ANONYMOUS };\n        case loginTypes.FACEBOOKLOGIN:\n            return {\n                login_type: loginTypesForApi.FACEBOOK,\n                app_id: sponsor.facebookLoginAppId || partner.facebookLoginAppId\n            };\n        case loginTypes.LINELOGIN:\n            return {\n                login_type: loginTypesForApi.LINE,\n                app_id: retrieveLineConfig({ partner, sponsor }).lineLoginAppId\n            };\n        case loginTypes.ENTERPRISELOGIN:\n        case loginTypes.DEPRECATED_CODE_VALIDATION_LOGIN:\n            const app_id =\n                partner['91appLoginAppId'] ||\n                sponsor.enterpriseLoginAppId ||\n                sponsor.enterpriseLiteLoginAppId ||\n                sponsor.enterpriseCodeValidationLoginAppId ||\n                partner.enterpriseLoginAppId ||\n                partner.enterpriseLiteLoginAppId ||\n                partner.enterpriseCodeValidationLoginAppId;\n            return { login_type: loginTypesForApi.ENTERPRISE, app_id };\n        case loginTypes.INSTAGRAM:\n            return { login_type: loginTypesForApi.INSTAGRAM };\n        default:\n            return {};\n    }\n}\n","import { useSelector } from 'react-redux';\n\nexport default function useIsInitSuccessInfo() {\n    const { hasInited, hasUserStateInited, hasErrorOnInit } = useSelector(s => s.flags);\n    const success = hasInited && hasUserStateInited && !hasErrorOnInit;\n    return success;\n}\n","import { useState, useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport _orderBy from 'lodash/orderBy';\n\nimport { getPrizeListApi } from 'api/client';\nimport { prizeTypes } from 'config/promoPrizeTypes';\nimport { setUserWinnerPrize } from 'client/redux/modules/userWinnerPrize';\nimport { setMGMReferral } from 'client/redux/modules/mgmReferral';\n\nimport useIsInitSuccessInfo from 'client/hooks/useIsInitSuccessInfo';\nimport useClientErrorHandler from 'client/hooks/useClientErrorHandler';\n\nexport default function useUpdateWinnerData() {\n    const dispatch = useDispatch();\n    const errHandler = useClientErrorHandler();\n    const isInitSuccess = useIsInitSuccessInfo();\n    const { uuid: promoUUID } = useSelector(s => s.promo);\n    const { isLogin } = useSelector(s => s.userLoginState);\n    const { hasUserWinnerPrizeListReady, isMgmShare, isMgmSelf } = useSelector(s => s.flags);\n    const { mgmReferral: { uuid: mgmPromoUUID } = {} } = useSelector(s => s.mgmRelation);\n    const [isFetching, setIsFetching] = useState(true);\n\n    useEffect(() => {\n        async function get() {\n            try {\n                if (!hasUserWinnerPrizeListReady) {\n                    await getPrizeList();\n                }\n            } catch (err) {\n                errHandler({ err });\n            } finally {\n                setIsFetching(false);\n            }\n        }\n        if (isInitSuccess && isLogin) {\n            get();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [isInitSuccess, isLogin, hasUserWinnerPrizeListReady]);\n\n    async function getPrizeList() {\n        const winnerLists = await getUserWinnerList(promoUUID);\n        dispatch(setUserWinnerPrize(winnerLists));\n        if (isMgmShare || isMgmSelf) {\n            const winnerLists = await getUserWinnerList(mgmPromoUUID);\n            dispatch(setMGMReferral({ userWinnerPrize: winnerLists }));\n        }\n    }\n\n    return { isFetching };\n}\n\nexport async function getUserWinnerList(promoUUID) {\n    const {\n        payload: { winners = [], winnerQualify = [] }\n    } = await getPrizeListApi(promoUUID);\n    const { winnerPrizes, thankPrizes } = splitThanksPrize(sortPrize(winners));\n    return {\n        winnerPrizes,\n        thankPrizes,\n        unOpenWinnerPrize: winnerQualify\n    };\n}\nfunction sortPrize(prizes = []) {\n    return _orderBy(prizes, ['entryId'], ['desc']);\n}\nfunction splitThanksPrize(winners = []) {\n    return winners.reduce(\n        (obj, winner) => {\n            if (winner.prize.type === prizeTypes.THANKYOU) {\n                obj.thankPrizes.push(winner);\n            } else {\n                obj.winnerPrizes.push(winner);\n            }\n            return obj;\n        },\n        { winnerPrizes: [], thankPrizes: [] }\n    );\n}\n","const defaultState = {\n    isSmallScreenApp: false,\n    hasTryLiff: false,\n    isZinesEmbedded: false,\n    isWidgetEmbedded: false\n};\n\nconst UPDATE_APP_STATE = 'appState/UPDATE_APP_STATE';\n\nconst reducer = (state = defaultState, action) => {\n    switch (action.type) {\n        case UPDATE_APP_STATE:\n            return { ...state, ...action.payload };\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n\nexport function setIsSmallScreenApp(status) {\n    return {\n        type: UPDATE_APP_STATE,\n        payload: { isSmallScreenApp: status }\n    };\n}\n\nexport function setIsZinesEmbedded() {\n    return {\n        type: UPDATE_APP_STATE,\n        payload: { isZinesEmbedded: true }\n    };\n}\n\n// 偵測 promo 是否被放在 onsite message 的 widget iframe 中\nexport function setIsWidgetEmbedded() {\n    return {\n        type: UPDATE_APP_STATE,\n        payload: { isWidgetEmbedded: true }\n    };\n}\n","import { UPDATE_USER_WINNER_PRIZE } from 'client/redux/modules/userWinnerPrize';\n\nconst UPDATE_FLAGS = 'flags/UPDATE_FLAGS';\nconst UPDATE_PARTICIPANT_PRIZE_POPUP = 'flags/UPDATE_PARTICIPANT_PRIZE_POPUP';\n\nexport const PICK_PRIZE_CUSTOM_PRIZE_UUID = 'PICK_PRIZE_CUSTOM_PRIZE_UUID';\n\nconst defaultState = {\n    hasInited: false,\n    hasErrorOnInit: false,\n    hasUserStateInited: false,\n    // true: 已經拿到最新的 winner 資料,不用打API更新已配獎獎項名單\n    hasUserWinnerPrizeListReady: true,\n    isPrizeListOpen: false,\n    // 領獎 Popup 資料,prizeUUID 用來打 API 拿到 prize info,entryUUID 用來當作跳轉到 Prize 頁的網址參數\n    participantPrizePopup: {\n        isNoGetPrize: false,\n        entryUUID: '',\n        prizeUUID: ''\n    },\n    // 若當純獎模組被當成獎項,配獎時前往 Lottery 頁面時,animatingLotteries會被賦予值去記錄現在正在執行什麼動畫\n    animatingLotteries: {\n        type: '',\n        uuid: '',\n        animationSettings: {}\n    },\n    // 是否為再次參加\n    isReJoin: false,\n    isMgmShare: false,\n    isMgmMission: false,\n    isMgmSelf: false\n};\nconst reducer = (state = defaultState, action) => {\n    switch (action.type) {\n        case UPDATE_USER_WINNER_PRIZE: {\n            return { ...state, hasUserWinnerPrizeListReady: true };\n        }\n        case UPDATE_PARTICIPANT_PRIZE_POPUP: {\n            return {\n                ...state,\n                participantPrizePopup: { ...state.participantPrizePopup, ...action.payload }\n            };\n        }\n        case UPDATE_FLAGS:\n            return { ...state, ...action.payload };\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n\n// 需要更新 Winner 名單,整理哪些 Prize 已經開獎 (userWinnerPrize.winnerPrize),哪些尚未開獎 (userWinnerPrize.unOpenWinnerPrize)\nexport function setShouldUpdateUserWinnerList() {\n    return {\n        type: UPDATE_FLAGS,\n        payload: {\n            hasUserWinnerPrizeListReady: false\n        }\n    };\n}\n\n// 跳出恭喜領獎成功的 Popup 會用到 (Ex: 簽到成功)\nexport function setParticipantWinnerPopup({\n    prizeUUID = '',\n    entryUUID = '',\n    isNoGetPrize = false\n} = {}) {\n    return {\n        type: UPDATE_PARTICIPANT_PRIZE_POPUP,\n        payload: {\n            prizeUUID,\n            entryUUID,\n            isNoGetPrize: isNoGetPrize\n        }\n    };\n}\n\nexport function clearParticipantWinnerPopup() {\n    return {\n        type: UPDATE_PARTICIPANT_PRIZE_POPUP,\n        payload: {\n            prizeUUID: '',\n            entryUUID: '',\n            isNoGetPrize: false\n        }\n    };\n}\n\nexport function setAnimatingLotteries(animatingLotteries) {\n    return {\n        type: UPDATE_FLAGS,\n        payload: {\n            animatingLotteries\n        }\n    };\n}\n\nexport function setInited() {\n    return {\n        type: UPDATE_FLAGS,\n        payload: { hasInited: true }\n    };\n}\n\nexport function setUserStateInited() {\n    return {\n        type: UPDATE_FLAGS,\n        payload: { hasUserStateInited: true }\n    };\n}\n\nexport function setErrorOnInit() {\n    return {\n        type: UPDATE_FLAGS,\n        payload: { hasErrorOnInit: true }\n    };\n}\n\nexport function togglePrizeList(status) {\n    return {\n        type: UPDATE_FLAGS,\n        payload: { isPrizeListOpen: status }\n    };\n}\n\nexport function setReJoin(status) {\n    return {\n        type: UPDATE_FLAGS,\n        payload: { isReJoin: status }\n    };\n}\n","import _cloneDeep from 'lodash/cloneDeep';\n\nimport { getPromoLotteries, getRemainPrizeAPI } from 'api/client';\nimport { UPDATE_TASK_PRIZE } from 'client/redux/modules/lotteryTasks';\nimport { lotteryRestShowTypes } from 'config/promoLotteryTypes';\nimport { setMGMReferral } from 'client/redux/modules/mgmReferral';\nconst UPDATE_PARTICIPANT = 'UPDATE_PARTICIPANT';\n\nconst reducer = (state = {}, action) => {\n    switch (action.type) {\n        case UPDATE_PARTICIPANT:\n            return { ...state, ...action.payload };\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n\nexport function updateParticipantRemainderFromApi() {\n    return async (dispatch, getState) => {\n        const {\n            promo: { uuid: promoUUID },\n            lotteryParticipant: { uuid: lotteryUUID, showRest, prizeLimited },\n            flags: { isMgmShare, isMgmSelf },\n            mgmReferral: {\n                lotteryParticipant: { uuid: mgmLotteryUUID, mgmShowRest, mgmPrizeLimited } = {}\n            },\n            mgmRelation: { mgmMission: { uuid: mgmPromoUUID } = {} }\n        } = getState();\n        const currentLotteryUUID = Boolean(isMgmShare || isMgmSelf) ? mgmLotteryUUID : lotteryUUID;\n        const currentShowRest = Boolean(isMgmShare || isMgmSelf) ? mgmShowRest : showRest;\n        const currentPrizeLimited = Boolean(isMgmShare || isMgmSelf)\n            ? mgmPrizeLimited\n            : prizeLimited;\n        const currentPromoUUID = Boolean(isMgmShare || isMgmSelf) ? mgmPromoUUID : promoUUID;\n        if (\n            Boolean(currentLotteryUUID) &&\n            currentShowRest === lotteryRestShowTypes.SHOW_REMAIN_AMOUNT &&\n            currentPrizeLimited\n        ) {\n            const {\n                payload: { quantity: remainder }\n            } = await getRemainPrizeAPI(currentPromoUUID, currentLotteryUUID);\n            dispatch(updateParticipantRemainder(remainder));\n        }\n    };\n}\n\nexport function updateParticipantRemainder(remainder = 0) {\n    return {\n        type: UPDATE_PARTICIPANT,\n        payload: {\n            remainder\n        }\n    };\n}\n\n// 更新所有獎品剩餘數量 (只有用在好禮自由選 結束領取 或 一鍵全領 時)\nexport function updateAllLotteryRemainder(isUseNormalEntry = true) {\n    return async (dispatch, getState) => {\n        try {\n            const {\n                lotteryParticipant: { uuid: lotteryParticipantUUID },\n                lotteryTasks,\n                promo: { uuid: promoUUID },\n                flags: { isMgmShare, isMgmSelf },\n                mgmRelation: { mgmReferral: { uuid: mgmPromoUUID } = {} },\n                mgmReferral: {\n                    lotteryParticipant: { uuid: mgmLotteryUUID } = {},\n                    lotteryTasks: mgmLotteryTasks = {}\n                }\n            } = getState();\n            const currentLotteryUUID =\n                Boolean(isMgmShare) || (Boolean(isMgmSelf) && !isUseNormalEntry)\n                    ? mgmLotteryUUID\n                    : lotteryParticipantUUID;\n            const currentLotteryTasks =\n                Boolean(isMgmShare) || (Boolean(isMgmSelf) && !isUseNormalEntry)\n                    ? mgmLotteryTasks\n                    : lotteryTasks;\n            const currentPromoUUID =\n                Boolean(isMgmShare) || (Boolean(isMgmSelf) && !isUseNormalEntry)\n                    ? mgmPromoUUID\n                    : promoUUID;\n            const { payload } = await getPromoLotteries(currentPromoUUID);\n            const lotteryParticipant = payload.find(\n                ({ lottery: { uuid } }) => uuid === currentLotteryUUID\n            );\n\n            if (lotteryParticipant) {\n                const { prizeRemainder: remainder } = lotteryParticipant;\n                dispatch({\n                    type: UPDATE_PARTICIPANT,\n                    payload: {\n                        remainder\n                    }\n                });\n            }\n\n            const lotteryTasksRespond = payload.filter(({ lotterySetting: { Tasks } }) =>\n                Boolean(Tasks)\n            );\n            const lotteryTasksCloned = _cloneDeep(currentLotteryTasks);\n            lotteryTasksRespond.forEach(({ lottery: { uuid }, prizeRemainder }) => {\n                if (lotteryTasksCloned[uuid]) {\n                    lotteryTasksCloned[uuid].remainder = prizeRemainder;\n                }\n            });\n\n            if (isUseNormalEntry) {\n                dispatch({\n                    type: UPDATE_TASK_PRIZE,\n                    payload: lotteryTasksCloned\n                });\n            } else {\n                dispatch(\n                    setMGMReferral({\n                        lotteryTasks: lotteryTasksCloned\n                    })\n                );\n            }\n        } catch (err) {\n            console.log(err);\n            return;\n        }\n    };\n}\n","import { getLotteryPrizes } from 'api/client';\n\nconst UPDATE_LOTTERY_PRIZE = 'lotteryPrizes/UPDATE_LOTTERY_PRIZE';\n\nconst reducer = (state = {}, action) => {\n    switch (action.type) {\n        case UPDATE_LOTTERY_PRIZE:\n            return { ...state, ...action.payload };\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n\nexport function setLotteryPrize(payload) {\n    return {\n        type: UPDATE_LOTTERY_PRIZE,\n        payload\n    };\n}\n\nexport function lazyGetLotteryPrizeList({ lotteryUUID }) {\n    return async (dispatch, getState) => {\n        const {\n            promo: { uuid: promoUUID },\n            lotteryPrizes\n        } = getState();\n\n        if (Array.isArray(lotteryPrizes[lotteryUUID])) {\n            return lotteryPrizes[lotteryUUID];\n        } else {\n            const { payload: prizes } = await getLotteryPrizes(promoUUID, lotteryUUID);\n            dispatch(setLotteryPrize({ [lotteryUUID]: prizes }));\n\n            return prizes;\n        }\n    };\n}\n","export const UPDATE_TASK_PRIZE = 'UPDATE_TASK_PRIZE';\n\nconst reducer = (state = {}, action) => {\n    switch (action.type) {\n        case UPDATE_TASK_PRIZE:\n            return { ...state, ...action.payload };\n\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n","import { getLotteryPrizes } from 'api/client';\nimport { getCurrentUtcDTStr } from 'utils/dateTime';\nimport { getEntriesListApi } from 'api/client';\nimport _orderBy from 'lodash/orderBy';\nexport const UPDATE_MGM_REFERRAL = 'UPDATE_MGM_REFERRAL';\nexport const UPDATE_MGM_REFERRAL_LOTTERY_PRIZES = 'UPDATE_MGM_REFERRAL_LOTTERY_PRIZES';\n\nconst initialState = {\n    userWinnerPrize: {\n        winnerPrizes: [],\n        thankPrizes: [],\n        unOpenWinnerPrize: []\n    },\n    userGameResultRecords: [],\n    lotteryAdmin: false,\n    lotteryInstant: {},\n    lotteryParticipant: {},\n    lotteryTasks: {},\n    lotteryPrizes: {}\n};\n\nconst reducer = (state = initialState, action = {}) => {\n    switch (action.type) {\n        case UPDATE_MGM_REFERRAL:\n            return { ...state, ...action.payload };\n        case UPDATE_MGM_REFERRAL_LOTTERY_PRIZES:\n            return {\n                ...state,\n                ...{ lotteryPrizes: { ...state.lotteryPrizes, ...action.payload } }\n            };\n        default:\n            return state;\n    }\n};\n\nexport function setMGMReferral(payload) {\n    return {\n        type: UPDATE_MGM_REFERRAL,\n        payload\n    };\n}\nexport function setMGMReferralLotteryPrizes(payload) {\n    return {\n        type: UPDATE_MGM_REFERRAL_LOTTERY_PRIZES,\n        payload\n    };\n}\n\nexport default reducer;\n\nexport function lazyGetMGMtLotteryPrizeList({ lotteryUUID }) {\n    return async (dispatch, getState) => {\n        const {\n            mgmReferral: { lotteryPrizes } = {},\n            mgmRelation: { mgmReferral: { uuid: mgmPromoUUID } } = {}\n        } = getState();\n\n        if (Array.isArray(lotteryPrizes[lotteryUUID])) {\n            return lotteryPrizes[lotteryUUID];\n        } else {\n            const { payload: prizes } = await getLotteryPrizes(mgmPromoUUID, lotteryUUID);\n            dispatch(\n                setMGMReferralLotteryPrizes({\n                    [lotteryUUID]: prizes\n                })\n            );\n\n            return prizes;\n        }\n    };\n}\n\nexport const entryFlowKeys = {\n    SIGN_UP_FORM: 'formSignUp',\n    LOTTERY_PARTICIPANT: 'lotteryParticipant'\n};\nexport function updateFlowOfMGMEntryRecord({ entryUUID, key }) {\n    return (dispatch, getState) => {\n        const {\n            mgmReferral: { userGameResultRecords = [] }\n        } = getState();\n        dispatch(\n            setMGMReferral({\n                userGameResultRecords: userGameResultRecords.map(r =>\n                    r.uuid === entryUUID\n                        ? { ...r, flow: { ...r.flow, [key]: getCurrentUtcDTStr() } }\n                        : r\n                )\n            })\n        );\n    };\n}\n\nexport function updateMGMGameResultRecords() {\n    return async (dispatch, getState) => {\n        const { mgmRelation: { mgmReferral: { uuid: mgmPromoUUID } } = {} } = getState();\n        const {\n            payload: { items: entries = [] }\n        } = await getEntriesListApi(mgmPromoUUID);\n\n        dispatch(\n            setMGMReferral({\n                userGameResultRecords: _orderBy(entries, ['id'])\n            })\n        );\n        return entries;\n    };\n}\n","import { updateReduxObjKeyHandleDelete } from 'utils/objectManipulate';\n\nexport const UPDATE_SETTING_STYLE = 'UPDATE_SETTING_STYLE';\nexport const REPLACE_SETTING_STYLE = 'REPLACE_SETTING_STYLE';\n\nconst reducer = (state = {}, action) => {\n    switch (action.type) {\n        case REPLACE_SETTING_STYLE:\n            return action.payload;\n        case UPDATE_SETTING_STYLE: {\n            return updateReduxObjKeyHandleDelete(state, action.payload, action.updateAction);\n        }\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n\nexport function updateSettingStyle(payload) {\n    return {\n        type: UPDATE_SETTING_STYLE,\n        payload\n    };\n}\n","import shortid from 'shortid';\n\nconst SET_MEDIA_MAPPING = `@ugcMediaOfMember/SET_MEDIA_MAPPING`;\n\nconst defaultState = {\n    entryIdsMapMediaList: {},\n    mediaListByMapId: {}\n};\n\nconst reducer = (state = defaultState, action) => {\n    switch (action.type) {\n        case SET_MEDIA_MAPPING: {\n            const medias = action.payload ?? [];\n            const memberHash = shortid.generate();\n            const entryIdsMapMediaList = medias.reduce((obj, { serialNo }) => {\n                obj[serialNo] = memberHash;\n                return obj;\n            }, {});\n            return {\n                ...state,\n                entryIdsMapMediaList: { ...state.entryIdsMapMediaList, ...entryIdsMapMediaList },\n                mediaListByMapId: { ...state.mediaListByMapId, [memberHash]: medias }\n            };\n        }\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n\nexport function setMediaMapping(medias) {\n    return {\n        type: SET_MEDIA_MAPPING,\n        payload: medias\n    };\n}\n","import _orderBy from 'lodash/orderBy';\nimport { getEntriesListApi } from 'api/client';\nimport { getCurrentUtcDTStr } from 'utils/dateTime';\n\nconst defaultState = [];\n\nconst UPDATE_RECORD_STATE = 'userGameResultRecords/UPDATE_RECORD_STATE';\n\nconst reducer = (state = defaultState, action) => {\n    switch (action.type) {\n        case UPDATE_RECORD_STATE:\n            return action.payload;\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n\nexport function updateGameResultRecords() {\n    return async (dispatch, getState) => {\n        const {\n            promo: { uuid: promoUUID }\n        } = getState();\n        const {\n            payload: { items: entries = [] }\n        } = await getEntriesListApi(promoUUID);\n\n        dispatch({\n            type: UPDATE_RECORD_STATE,\n            payload: _orderBy(entries, ['id'])\n        });\n        return entries;\n    };\n}\n\nexport const entryFlowKeys = {\n    SIGN_UP_FORM: 'formSignUp',\n    LOTTERY_PARTICIPANT: 'lotteryParticipant',\n    LOTTERY_INSTANT: 'lotteryInstant'\n};\nexport function updateFlowOfEntryRecord({ entryUUID, key }) {\n    return (dispatch, getState) => {\n        const { userGameResultRecords = [] } = getState();\n        dispatch({\n            type: UPDATE_RECORD_STATE,\n            payload: userGameResultRecords.map(r =>\n                r.uuid === entryUUID\n                    ? { ...r, flow: { ...r.flow, [key]: getCurrentUtcDTStr() } }\n                    : r\n            )\n        });\n    };\n}\n","const defaultState = {\n    winnerPrizes: [],\n    thankPrizes: [],\n    unOpenWinnerPrize: []\n};\n\nexport const UPDATE_USER_WINNER_PRIZE = 'userWinnerPrize/UPDATE_USER_WINNER_PRIZE';\n\nconst reducer = (state = defaultState, action) => {\n    switch (action.type) {\n        case UPDATE_USER_WINNER_PRIZE:\n            return { ...state, ...action.payload };\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n\nexport function setUserWinnerPrize({ winnerPrizes, thankPrizes, unOpenWinnerPrize }) {\n    return {\n        type: UPDATE_USER_WINNER_PRIZE,\n        payload: {\n            winnerPrizes,\n            thankPrizes,\n            unOpenWinnerPrize\n        }\n    };\n}\n","const reducer = (state = {}, action) => {\n    switch (action.type) {\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n","const defaultState = {\n    allUUIDs: [],\n    byUUIDs: {},\n    settingsByUUIDS: {},\n    optionsByUUIDS: {}\n};\n\nconst reducer = (state = defaultState, action) => {\n    switch (action.type) {\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n","const defaultState = {\n    pages: [],\n    sections: [],\n    fields: [],\n    options: [],\n    settings: {}\n};\n\nconst reducer = (state = defaultState, action) => {\n    switch (action.type) {\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n","const reducer = (state = {}, action) => {\n    switch (action.type) {\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n","const reducer = (state = {}, action) => {\n    switch (action.type) {\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n","const reducer = (state = {}, action) => {\n    switch (action.type) {\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n","const reducer = (state = {}, action) => {\n    switch (action.type) {\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n","const reducer = (state = {}, action) => {\n    switch (action.type) {\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n","const reducer = (state = {}, action) => {\n    switch (action.type) {\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n","import { updateReduxObjKeyHandleDelete } from 'utils/objectManipulate';\nexport const UPDATE_SETTING_MGM_REFERRAL = 'UPDATE_SETTING_MGM_REFERRAL';\n\nconst reducer = (state = {}, action) => {\n    switch (action.type) {\n        case UPDATE_SETTING_MGM_REFERRAL: {\n            return updateReduxObjKeyHandleDelete(state, action.payload, action.updateAction);\n        }\n        default:\n            return state;\n    }\n};\n\nexport function updateSettingMGMReferral(payload) {\n    return {\n        type: UPDATE_SETTING_MGM_REFERRAL,\n        payload\n    };\n}\n\nexport default reducer;\n","const reducer = (state = {}, action) => {\n    switch (action.type) {\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n","const reducer = (state = {}, action) => {\n    switch (action.type) {\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n","const reducer = (state = {}, action) => {\n    switch (action.type) {\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n","const reducer = (state = false, action) => {\n    switch (action.type) {\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n","const UPDATE_INSTANT = 'UPDATE_INSTANT';\n\nconst reducer = (state = {}, action) => {\n    switch (action.type) {\n        case UPDATE_INSTANT:\n            return { ...state, ...action.payload };\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n","const reducer = (state = {}, action) => {\n    switch (action.type) {\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n","const reducer = (state = {}, action) => {\n    switch (action.type) {\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n","const defaultState = {\n    pointPoolInfos: {}\n};\n\nconst reducer = (state = defaultState, action) => {\n    switch (action.type) {\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n","export const UPDATE_MGM_RELATION = 'UPDATE_MGM_RELATION';\n\nconst initialState = {};\n\nconst reducer = (state = initialState, action = {}) => {\n    switch (action.type) {\n        case UPDATE_MGM_RELATION:\n            return { ...state, ...action.payload };\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n","import { IS_UGC_FLOW } from 'config/envVariable';\n\nimport promo from './modules/promo';\nimport promoTasks from './modules/promoTasks';\nimport gameFormBased from './modules/gameFormBased';\nimport settingPromo from './modules/settingPromo';\nimport settingPointSystems from './modules/settingPointSystems';\nimport settingStyle from './modules/settingStyle';\nimport settingGame from './modules/settingGame';\nimport settingTheme from './modules/settingTheme';\nimport settingGameStyle from './modules/settingGameStyle';\nimport settingEntryValue from './modules/settingEntryValue';\nimport settingMGMReferral from './modules/settingMGMReferral';\nimport settingPlan from './modules/settingPlan';\nimport signUpForm from './modules/signUpForm';\nimport zines from './modules/zines';\nimport lotteryAdmin from './modules/lotteryAdmin';\nimport lotteryInstant from './modules/lotteryInstant';\nimport lotteryParticipant from './modules/lotteryParticipant';\nimport lotteryTasks from './modules/lotteryTasks';\nimport lotteryPrizes from './modules/lotteryPrizes';\nimport flags from './modules/flags';\nimport flagsUgc from './modules/flagsUgc';\nimport ugcCollections from './modules/ugcCollections';\nimport ugcMediaOfMember from './modules/ugcMediaOfMember';\nimport appState from './modules/appState';\nimport promoState from './modules/promoState';\nimport userEntryState from './modules/userEntryState';\nimport userGameResultRecords from './modules/userGameResultRecords';\nimport userLoginState from './modules/userLoginState';\nimport userWinnerPrize from './modules/userWinnerPrize';\nimport purePrizeState from './modules/purePrizeState';\nimport systemErrorDialog from './modules/systemErrorDialog';\nimport partner from './modules/partner';\nimport sponsor from './modules/sponsor';\nimport pointSystem from './modules/pointSystem';\nimport mgmRelation from './modules/mgmRelation';\nimport mgmReferral from './modules/mgmReferral';\n\nexport const staticReducers = {\n    partner,\n    sponsor,\n    promo,\n    promoTasks,\n    gameFormBased,\n    settingPromo,\n    settingPointSystems,\n    settingStyle,\n    settingGame,\n    settingGameStyle,\n    settingMGMReferral,\n    settingEntryValue,\n    settingTheme,\n    settingPlan,\n    signUpForm,\n    zines,\n    lotteryAdmin,\n    lotteryInstant,\n    lotteryParticipant,\n    lotteryTasks,\n    lotteryPrizes,\n    appState,\n    promoState,\n    userLoginState,\n    userEntryState,\n    userGameResultRecords,\n    userWinnerPrize,\n    purePrizeState,\n    systemErrorDialog,\n    flags,\n    pointSystem,\n    mgmRelation,\n    mgmReferral,\n    ...(IS_UGC_FLOW ? { flagsUgc, ugcCollections, ugcMediaOfMember } : {})\n};\n","import gameState, {\n    updateGameResultRecordsCount\n} from 'client/game_checkIn/redux/modules/gameState';\n\nexport default {\n    gameState\n};\n\nexport function init(dispatch) {\n    return dispatch(updateGameResultRecordsCount());\n}\n","import gameState, {\n    updateCampaignVoteCount\n} from 'client/game_photoContest/redux/modules/gameState';\n\nexport default {\n    gameState\n};\n\nexport function init(dispatch) {\n    return dispatch(updateCampaignVoteCount());\n}\n","import gameState from 'client/game_comment/redux/modules/gameState';\n\nexport default {\n    gameState\n};\n","import gameState from 'client/game_orderReward/redux/modules/gameState';\n\nexport default {\n    gameState\n};\n","const reducer = (state = {}, action) => {\n    switch (action.type) {\n        default:\n            return state;\n    }\n};\n\nexport default reducer;\n","import { gameTypes, isContestGamesWithSecondaryUgc } from 'config/promoGameTypes';\nimport checkInReducer, { init as initCheckIn } from 'client/game_checkIn/redux/reducer';\nimport contestReducer, { init as initContest } from 'client/game_photoContest/redux/reducer';\nimport commentReducer from 'client/game_comment/redux/reducer';\nimport orderRewardReducer from 'client/game_orderReward/redux/reducer';\nimport relatedTwinsPromo from 'client/redux/modules/relatedTwinsPromo';\nimport { defaultState as checkInDefaultState } from 'client/game_checkIn/redux/modules/gameState';\nimport { defaultState as contestDefaultState } from 'client/game_photoContest/redux/modules/gameState';\nimport { defaultState as commentDefaultState } from 'client/game_comment/redux/modules/gameState';\nimport { defaultState as orderRewardDefaultState } from 'client/game_orderReward/redux/modules/gameState';\n\nexport function getGameReducer(gameType, hasRelatedTwinsPromo, isMgmSelf) {\n    let reducer = {};\n    if (hasRelatedTwinsPromo) {\n        reducer = { ...reducer, relatedTwinsPromo };\n    }\n    const game = getCustomGameReducerByGameType(gameType);\n    const mgm = getCustomGameReducerByMgmSelf(isMgmSelf);\n    const gameReducer = game.reducer;\n    const mgmReducer = mgm.reducer;\n    const gameDefaultState = game.defaultState;\n    const mgmDefaultState = mgm.defaultState;\n\n    if (gameReducer && mgmReducer) {\n        reducer = {\n            ...reducer,\n            ...{\n                gameState: combineReducers([gameReducer, mgmReducer], {\n                    ...gameDefaultState,\n                    ...mgmDefaultState\n                })\n            }\n        };\n    } else if (gameReducer) {\n        reducer = { ...reducer, ...gameReducer };\n    } else if (mgmReducer) {\n        reducer = { ...reducer, ...mgmReducer };\n    }\n\n    return reducer;\n}\n\nfunction combineReducers(props = [], defaultState = {}) {\n    return function (state = { ...defaultState }, action) {\n        let nextState = { ...state };\n\n        props.forEach(reducer => {\n            nextState = {\n                ...nextState,\n                ...reducer.gameState(nextState, action)\n            };\n        });\n\n        return nextState;\n    };\n}\n\nexport async function initGameReducer(gameType, dispatch) {\n    const init = getCustomGameReducerByGameType(gameType).init;\n    if (typeof init === 'function') {\n        return init(dispatch);\n    }\n}\n\nexport async function initMgmSelfReducer(dispatch, isMgmSelf) {\n    const initMgmSelf = getCustomGameReducerByMgmSelf(isMgmSelf).init;\n    if (typeof initMgmSelf === 'function') {\n        return initMgmSelf(dispatch);\n    }\n}\n\nfunction getCustomGameReducerByGameType(gameType) {\n    switch (true) {\n        case gameType === gameTypes.COMMENT:\n            return { reducer: commentReducer, defaultState: commentDefaultState };\n        case gameType === gameTypes.ORDER_REWARD:\n            return { reducer: orderRewardReducer, defaultState: orderRewardDefaultState };\n        case gameType === gameTypes.CHECK_IN:\n        case gameType === gameTypes.CHALLENGE_PHOTO_FRAME_COMPOSITE:\n        case gameType === gameTypes.MGM_SHARE:\n        case gameType === gameTypes.MULTI_CHALLENGE:\n            return {\n                reducer: checkInReducer,\n                init: initCheckIn,\n                defaultState: checkInDefaultState\n            };\n        case isContestGamesWithSecondaryUgc(gameType):\n            return {\n                reducer: contestReducer,\n                init: initContest,\n                defaultState: contestDefaultState\n            };\n        default:\n            return {};\n    }\n}\n\nfunction getCustomGameReducerByMgmSelf(isMgmSelf) {\n    if (isMgmSelf) {\n        return { reducer: checkInReducer, init: initCheckIn, defaultState: checkInDefaultState };\n    }\n    return {};\n}\n","import { compose, createStore, applyMiddleware, combineReducers } from 'redux';\nimport thunk from 'redux-thunk';\nimport _merge from 'lodash/merge';\n\nimport { staticReducers } from 'client/redux/staticReducer';\nimport { getGameReducer, initGameReducer, initMgmSelfReducer } from 'client/redux/gameReducer';\n\nconst INIT_PROMO = 'store/init_promo';\nexport function initAppState(initData) {\n    return {\n        type: INIT_PROMO,\n        payload: {\n            initData\n        }\n    };\n}\n\nfunction createReducer(asyncReducers = {}) {\n    const reducers = combineReducers({ ...staticReducers, ...asyncReducers });\n    return (state, action) => {\n        if (action.type === INIT_PROMO) {\n            state = _merge({}, state, action.payload.initData);\n        }\n        return reducers(state, action);\n    };\n}\n\nfunction configureStore() {\n    const composeEnhancer = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\n    const store = createStore(createReducer(), composeEnhancer(applyMiddleware(thunk)));\n\n    store.injectGameReducer = (...args) => {\n        return store.replaceReducer(createReducer(getGameReducer(...args)));\n    };\n    store.initGameReducer = gameType =>\n        initGameReducer(gameType, (...args) => store.dispatch(...args));\n\n    store.initMgmSelfReducer = isMgmSelf =>\n        initMgmSelfReducer((...args) => store.dispatch(...args), isMgmSelf);\n\n    return store;\n}\n\nexport default configureStore();\n","import { useHistory } from 'react-router-dom';\nimport queryString from 'query-string';\n\nimport { qsParseNoArray } from 'client/utils/queryString';\n\nexport default function useRemoveAndRetrieveQs() {\n    const history = useHistory();\n\n    return (qsArray = []) => {\n        const qsObj = qsParseNoArray(window.location.search);\n        const { rest, retrieved } = Object.entries(qsObj).reduce(\n            (obj, [key, val]) => {\n                if (qsArray.includes(key)) {\n                    obj.retrieved[key] = val;\n                } else {\n                    obj.rest[key] = val;\n                }\n                return obj;\n            },\n            { retrieved: {}, rest: {} }\n        );\n        if (Object.keys(retrieved).length > 0) {\n            const qs = queryString.stringify(rest);\n            history.replace(`${history.location.pathname}${qs ? `?${qs}` : ''}`);\n        }\n        return { rest, retrieved };\n    };\n}\n"],"names":["UPDATE_GAME_STATE","defaultState","hasNewUnlockTaskPrize","gameResultRecordsCount","hasLotteryTaskMappingEntryInited","lotteryTaskMappingEntry","state","arguments","length","undefined","action","type","payload","setHasNewUnlockTaskPrize","status","updateGameResultRecordsCount","dispatch","getState","userGameResultRecords","setLotteryTaskMappingEntryInited","setLotteryTaskMappingEntry","UPDATE_SETTING_OPTIONS","settingOptions","updateSettingOptions","data","UPDATE_VALIDATE_FAILED_ORDERS","validateFailedOrders","updateValidateFailedOrders","campaignVoteCount","campaignPortfolioCount","updateCampaignVoteCount","async","promo","id","promoId","counts","votes","getContestUgcMediaAndVoteCount","isDocVisible","document","visibilityState","useInitAbortHelper","helperRef","useRef","isAborted","checkIsDocOnViewing","Promise","res","addEventListener","handler","removeEventListener","canContinue","this","useEffect","handleUnload","current","window","setGameResultRecordsAndWinnerList","mergeAndDispatchState","isMgm","userWinnerPrize","mgmRelation","mgmReferral","uuid","mgmPromoUUID","promoUUID","items","entries","getEntriesListApi","getUserWinnerList","Boolean","getPromoInfoData","exclude","primaryPromoData","getPromoInfoApi","mappingPromoInfoApi2State","apiData","_ref2","_promotion$promoSetti","_promotion$promoSetti2","_promotion$promoSetti3","_promotion$promoSetti4","_promotion$promoSetti5","_promotion$promoSetti6","_promotion$promoSetti7","_promotion$promoSetti8","promotion","rest","partner","partnerSetting","sponsor","sponsorSetting","promoState","isPurePrizeGame","isPurePrizeGames","settingPromo","promoSetting","Promotions","settingPointSystems","PointSystems","settingStyle","objFirstLevelJSONParse","Styles","settingGame","Games","settingGameStyle","GameStyles","settingMGMReferral","MGMReferral","settingEntryValue","EntryValues","settingTheme","Themes","settingPlan","planSetting","signUpForm","SignUpForm","zines","lotteryAdmin","LotteryAdmin","lotteryInstant","LotteryInstant","lotteryParticipant","LotteryParticipant","lotteryTasks","LotteryTasks","getPromoState","fromEntries","Object","filter","_ref","apiKey","includes","_data$settingGame","formId","promoType","gameTypes","SIGN_FORM","pages","sections","fields","options","settings","getFormInfo","gameFormBased","getFormState","checkIsGameHasPromoTask","getPromoTaskListApi","promoTasks","normalizePromoTasksList","getPromoTasksState","_lotteryState$lottery","_lotteryState$lottery2","lotteryTasksData","lotteries","lotteryState","normalizePromoLotteryList","isJSONParsable","JSON","parse","reduce","obj","_ref3","_lotteryState$lottery3","lotteryUuid","taskCondition","getLotteriesState","lotteryPrizes","getPrizeState","pointPool","Array","isArray","keys","pointPoolUuid","pointSystem","pointPoolInfos","getPromoPointPoolInfoState","mgmRole","isMGMGame","mgmReferralPromoUUID","mgmReferralPromoInfoData","formattedMgmReferralPromoInfoData","getPromoMgmRelationState","primaryGameType","primarySettingPromo","contestGetUgcLinkKey","relatedPromoUuid","secondaryPromoData","isContestGamesForUserPlayableUgc","language","IS_UGC_FLOW","secondaryPromoWithoutPartnerAndSponsor","relatedTwinsPromo","primaryPromoWithoutPartnerAndSponsor","CONTEST_ADMIN_UPLOAD","getRelatedTwinsPromoState","getPeriodPlayMatchedInfo","periodPlayMode","periodTime","timezone","isPeriodPlayMode","matchedInfo","generatePeriodTimeMatchInfo","periodTimes","mode","qs","test_code","test_expired","parentUrl","scenes","utm_source","utm_medium","utm_campaign","utm_term","utm_content","getQsOfParentUrl","getUtmFromParentUrl","gameRunningStatus","isTestMode","hasTestQs","hasPreviewQs","promoStatus","startDate","endDate","pageId","IS_IFRAME_MODE","gameRunningStatuses","NOT_PUBLISH","IS_OFFLINE","RUNNING","IS_SUSPEND","SUSPEND","IS_END","hasUtcDTEndInLocal","END","hasUtcDTStartInLocal","BEFORE","getGameRunningStatus","periodPlayMatchedInfo","enablePasscodeVerify","checkEnablePasscodeVerify","reducePointMode","getReducePointMode","utmFromParent","loginMethod","enableKkpoint","kkpointAmount","transactionWithdraw","transactionWithdrawQuantity","loginTypes","ENTERPRISELOGIN","reducePointModes","KK_BOX","GENERAL","FACEBOOKLOGIN","LINELOGIN","qualifyWithdrawUuid","POINT_SYSTEMS","enableQualificationPasscode","useRemoveUnnecessaryQueryStr","qsHandler","useRemoveAndRetrieveQs","shouldRemoveQsKey","push","validateTestCode","sponsorId","validateResp","validateTestCodeAPI","host","CLIENT_API_FEVER_HOST","testCode","testExpired","httpStatus","generateApiErrObj","clientErrTypes","getLoginUserNonQualifyTypeAfterEntry","promoUuid","referralCode","userEntryState","currentEntryUUID","entryUuid","isNeedEnterReferralCode","hasReferralCodeInput","enableReferralCodeRequired","emptyState","userLoginState","notQualifiedType","notQualifiedTypes","QUALIFICATION","SUBMIT_REFERRAL_CODE","Cookies","submitReferralCodeApi","isCanEnterReferralCode","err","submitReferralCode","paramsPromoUUID","paramsPromoId","useDispatch","history","useHistoryPathPush","location","useLocation","removeUnnecessaryQueryStr","abortHelper","toNotFound","pathname","initPromo","recaptchaToken","_location$pathname","test","match","joinRegex","concat","source","_merge","initAppState","_promoInfo$settingPro","promoInfo","hasRelatedTwinsPromo","gameType","isMgmShare","isMgmMission","isMgmSelf","getMgmFlags","flags","store","injectGameReducer","setupPromoApp","retrieved","appState","hasTryLiff","tryliff","retrieveStateFromLocalStorage","setInited","pcode","querystring","search","enableCampaignToolPasscode","trackCampaignClick","IntersectionObserver","observer","forEach","entry","target","body","isIntersecting","unobserve","observe","parentReferralCodeByUrl","promoReferralCodeByUrl","referralCodeByUrl","referralCodeByCookie","isUrlCodeValid","checkReferralCodeApi","setReferralCode","getUserLoginState","isLogin","_state2","_state3","_promoInfo$settingPro2","_promoInfo$settingPro3","currentLoginID","setLoginId","_state","loginUserInfo","getLoginUserInfo","getUserEntryState","enableReCaptcha","notQualifiedErrInfo","isInPlayTimePeriod","isPromoPlayableOnTime","resp","size","getUserLoginStateAfterEntry","shouldHideUserStateLoading","initGameReducer","initMgmSelfReducer","setUserStateInited","error","_state4","handleInitError","_error$extraInfo","setErrorOnInit","extraInfo","errType","errorActionHandler","metaTitle","name","title","setSiteTitle","setSiteFavicon","documentElement","setAttribute","setI18nLanguage","lang","initTagManager","favIconUrl","selectorFavicon","querySelector","href","isFirstPassLoginSever","getLocalStorage","key","deleteLocalStorage","isfirstPassLoginSever","latestEntry","getUserLatestEntry","canContinueFlow","shouldGetNextEntry","checkShouldGetNextEntry","isReCaptchaPass","gameEntry","createEntryNotQualifiedType","hasPromoSuspended","hasPromoSuspendedWhenGetEntries","getUserGameEntry","entryId","restEntryProps","getEntryQualificationInfo","currentEntryId","overwriteEntryAction","getLoginUserNonQualifyType","friendLimit","enableQualificationMemberCyberbiz","enableQualificationRestrictedList","enableQualificationRegistrationDate","enableQualificationMemberTier","qualificationMemberAccountLinkPlatform","thirdPartyQualificationMemberLevelPlatform","isFriendShip","verifyLineFriend","LINE","FRIEND","some","e","verityMemberQualification","checker","errInfoRetrieve","checkMemberQualifyList","getNotQualifiedType","verifyKKboxMemberQualify","ENTERPRISE","MEMBER_KKBOX","isErrOfCyberbizEcLimit","CYBERBIZ_EC_MEMBER","isErrOfApiNameListLimit","NAME_LIST_API","isErrOfEnterpriseBindLine","_resp$payload","redirectUrl","ENTERPRISE_MEMBER_BIND","isErrOfNewRegisterMemberLimit","NEW_REGISTER_MEMBER","isErrOfMemberTier","MEMBER_TIER","omitLoginGameStatuses","Set","has","loginUser","loginCredential","loginType","ANONYMOUSLOGIN","login_type","loginTypesForApi","ANONYMOUS","FACEBOOK","app_id","facebookLoginAppId","retrieveLineConfig","lineLoginAppId","DEPRECATED_CODE_VALIDATION_LOGIN","enterpriseLoginAppId","enterpriseLiteLoginAppId","enterpriseCodeValidationLoginAppId","INSTAGRAM","retrieveCredentialByLoginType","tokenManager","init","initTokenLoginType","token","accessToken","errorResp","getAccessToken","generateLoginToken","useIsInitSuccessInfo","hasInited","hasUserStateInited","hasErrorOnInit","useSelector","s","useUpdateWinnerData","errHandler","useClientErrorHandler","isInitSuccess","hasUserWinnerPrizeListReady","isFetching","setIsFetching","useState","winnerLists","setUserWinnerPrize","setMGMReferral","getPrizeList","get","winners","winnerQualify","getPrizeListApi","winnerPrizes","thankPrizes","winner","prize","prizeTypes","THANKYOU","splitThanksPrize","prizes","_orderBy","sortPrize","unOpenWinnerPrize","isSmallScreenApp","isZinesEmbedded","isWidgetEmbedded","UPDATE_APP_STATE","setIsSmallScreenApp","setIsZinesEmbedded","setIsWidgetEmbedded","UPDATE_FLAGS","UPDATE_PARTICIPANT_PRIZE_POPUP","PICK_PRIZE_CUSTOM_PRIZE_UUID","isPrizeListOpen","participantPrizePopup","isNoGetPrize","entryUUID","prizeUUID","animatingLotteries","animationSettings","isReJoin","UPDATE_USER_WINNER_PRIZE","setShouldUpdateUserWinnerList","setParticipantWinnerPopup","clearParticipantWinnerPopup","setAnimatingLotteries","togglePrizeList","setReJoin","UPDATE_PARTICIPANT","updateParticipantRemainderFromApi","lotteryUUID","showRest","prizeLimited","mgmLotteryUUID","mgmShowRest","mgmPrizeLimited","mgmMission","currentLotteryUUID","currentShowRest","currentPrizeLimited","currentPromoUUID","lotteryRestShowTypes","SHOW_REMAIN_AMOUNT","quantity","remainder","getRemainPrizeAPI","updateParticipantRemainder","updateAllLotteryRemainder","isUseNormalEntry","lotteryParticipantUUID","mgmLotteryTasks","currentLotteryTasks","getPromoLotteries","find","lottery","prizeRemainder","lotteryTasksRespond","lotterySetting","Tasks","lotteryTasksCloned","_cloneDeep","UPDATE_TASK_PRIZE","console","log","UPDATE_LOTTERY_PRIZE","setLotteryPrize","lazyGetLotteryPrizeList","getLotteryPrizes","UPDATE_MGM_REFERRAL","UPDATE_MGM_REFERRAL_LOTTERY_PRIZES","initialState","lazyGetMGMtLotteryPrizeList","updateFlowOfMGMEntryRecord","map","r","flow","getCurrentUtcDTStr","updateMGMGameResultRecords","UPDATE_SETTING_STYLE","updateReduxObjKeyHandleDelete","updateAction","updateSettingStyle","SET_MEDIA_MAPPING","entryIdsMapMediaList","mediaListByMapId","_action$payload","medias","memberHash","shortid","serialNo","setMediaMapping","UPDATE_RECORD_STATE","updateGameResultRecords","entryFlowKeys","SIGN_UP_FORM","LOTTERY_PARTICIPANT","LOTTERY_INSTANT","updateFlowOfEntryRecord","allUUIDs","byUUIDs","settingsByUUIDS","optionsByUUIDS","UPDATE_SETTING_MGM_REFERRAL","staticReducers","purePrizeState","systemErrorDialog","flagsUgc","ugcCollections","ugcMediaOfMember","gameState","combineReducers","props","nextState","reducer","getCustomGameReducerByGameType","COMMENT","commentReducer","commentDefaultState","ORDER_REWARD","orderRewardReducer","orderRewardDefaultState","CHECK_IN","CHALLENGE_PHOTO_FRAME_COMPOSITE","MGM_SHARE","MULTI_CHALLENGE","checkInReducer","initCheckIn","checkInDefaultState","isContestGamesWithSecondaryUgc","contestReducer","initContest","contestDefaultState","getCustomGameReducerByMgmSelf","INIT_PROMO","initData","createReducer","asyncReducers","reducers","composeEnhancer","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","createStore","applyMiddleware","thunk","replaceReducer","game","mgm","gameReducer","mgmReducer","gameDefaultState","mgmDefaultState","getGameReducer","initMgmSelf","useHistory","qsArray","qsObj","qsParseNoArray","val","queryString","stringify","replace"],"sourceRoot":""}