{"version":3,"sources":["store/actions/actionTypes.js","store/reducers/appReducer.js","store/reducers/adminReducer.js","store/reducers/rootReducer.js","redux.js","hoc/authentication.js","utils/constant.js","utils/KeyCodeUtils.js","utils/LanguageUtils.js","assets/images/Round.png","assets/images/SpinIcon.png","services/API.js","axios.js","components/PopUp/PopUp.js","containers/Home/Home.js","containers/App.js","serviceWorker.js","hoc/IntlProviderWrapper.js","index.js"],"names":["actionTypes","Object","freeze","APP_START_UP_COMPLETE","SET_CONTENT_OF_CONFIRM_MODAL","ADMIN_LOGIN_SUCCESS","ADMIN_LOGIN_FAIL","PROCESS_LOGOUT","ADD_USER_SUCCESS","initialState","started","language","systemMenuPath","contentOfConfirmModal","isOpen","messageId","handleFunc","dataFunc","appReducer","state","action","type","isLoggedIn","adminInfo","persistCommonConfig","storage","stateReconciler","autoMergeLevel2","adminPersistConfig","key","whitelist","history","createBrowserHistory","basename","process","REACT_APP_ROUTER_BASE_NAME","reduxStateSyncConfig","rootReducer","combineReducers","router","connectRouter","admin","persistReducer","adminReducer","user","userReducer","app","middleware","routerMiddleware","thunkMiddleware","createStateSyncMiddleware","composeEnhancers","compose","reduxStore","createStore","applyMiddleware","persistor","dispatch","persistStore","locationHelper","locationHelperBuilder","userIsNotAuthenticated","connectedRouterRedirect","authenticatedSelector","window","localStorage","getItem","Date","getTime","wrapperDisplayName","redirectPath","ownProps","getRedirectQueryParam","allowRedirectBack","path","KeyCodeUtils","e","UP","DOWN","TAB","ENTER","E","ESCAPE","flattenMessages","nestedMessages","prefix","keys","reduce","messages","value","prefixedKey","assign","messages_vi","messages_en","LanguageUtils","lang","instance","axios","create","baseURL","withCredentials","interceptors","response","use","error","status","console","log","GetListPrize","token","a","MemberHeader","headers","Authorization","post","REACT_APP_CRM_InstanceURL","GetChances","GenerateAndRedeemPrizeWon","PopUp","openProfilePage","location","href","this","props","statusMessage","className","item","onClick","chances","Component","Home","componentDidMount","query","URLSearchParams","search","tokenLocal","get","domain","URL","hostname","setState","API","listPrize","popUpLoginState","data","result","codes","totalAvailableChances","handleClick","checkSpin","prize","message","includes","PopUpState","PopUpStatus","random","findIndex","x","customCode","handleSpin","rewardPrize","Name","name","countnameAni","rewardCampaignHistory","code","undefined","timeInfo","descriptionInfo","rotateStart","countNameAni","memberCardNo","description","emptyRewards","btnSpin","React","createRef","bind","wheel","styleSheets","document","length","removeRule","cssRules","rotate","nameAni","keyFrames","insertRule","current","style","animationName","animationTimingFunction","animationDuration","transform","setTimeout","ref","src","SpinRound","alt","map","index","splitIndex","idx","subfix","indexOf","substring","trim","voucher","SpinIcon","connect","App","handlePersistorState","getState","bootstrapped","onBeforeLift","Promise","resolve","then","catch","exact","component","Boolean","match","getFlattenedMessages","IntlProviderWrapper","children","locale","defaultLocale","ReactDOM","render","store","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.805acb1b.chunk.js","sourcesContent":["const actionTypes = Object.freeze({\r\n //app\r\n APP_START_UP_COMPLETE: 'APP_START_UP_COMPLETE',\r\n SET_CONTENT_OF_CONFIRM_MODAL: 'SET_CONTENT_OF_CONFIRM_MODAL',\r\n\r\n //admin\r\n ADMIN_LOGIN_SUCCESS: 'ADMIN_LOGIN_SUCCESS',\r\n ADMIN_LOGIN_FAIL: 'ADMIN_LOGIN_FAIL',\r\n PROCESS_LOGOUT: 'PROCESS_LOGOUT',\r\n\r\n //user\r\n ADD_USER_SUCCESS: 'ADD_USER_SUCCESS',\r\n})\r\n\r\nexport default actionTypes;","import actionTypes from '../actions/actionTypes';\r\n\r\nconst initContentOfConfirmModal = {\r\n isOpen: false,\r\n messageId: \"\",\r\n handleFunc: null,\r\n dataFunc: null\r\n}\r\n\r\nconst initialState = {\r\n started: true,\r\n language: 'vi',\r\n systemMenuPath: '/system/user-manage',\r\n contentOfConfirmModal: {\r\n ...initContentOfConfirmModal\r\n }\r\n}\r\n\r\nconst appReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case actionTypes.APP_START_UP_COMPLETE: \r\n return {\r\n ...state,\r\n started: true\r\n }\r\n case actionTypes.SET_CONTENT_OF_CONFIRM_MODAL: \r\n return {\r\n ...state,\r\n contentOfConfirmModal: {\r\n ...state.contentOfConfirmModal,\r\n ...action.contentOfConfirmModal\r\n }\r\n }\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nexport default appReducer;","import actionTypes from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n isLoggedIn: false,\r\n adminInfo: null\r\n}\r\n\r\nconst appReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case actionTypes.ADMIN_LOGIN_SUCCESS:\r\n return {\r\n ...state,\r\n isLoggedIn: true,\r\n adminInfo: action.adminInfo\r\n }\r\n case actionTypes.ADMIN_LOGIN_FAIL:\r\n return {\r\n ...state,\r\n isLoggedIn: false,\r\n adminInfo: null\r\n }\r\n case actionTypes.PROCESS_LOGOUT:\r\n return {\r\n ...state,\r\n isLoggedIn: false,\r\n adminInfo: null\r\n }\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nexport default appReducer;","import {combineReducers} from 'redux';\r\nimport { connectRouter } from 'connected-react-router';\r\n\r\nimport appReducer from \"./appReducer\";\r\nimport adminReducer from \"./adminReducer\";\r\nimport userReducer from \"./userReducer\";\r\n\r\nimport autoMergeLevel2 from 'redux-persist/lib/stateReconciler/autoMergeLevel2';\r\nimport storage from 'redux-persist/lib/storage';\r\nimport { persistReducer } from 'redux-persist';\r\n\r\nconst persistCommonConfig = {\r\n storage: storage,\r\n stateReconciler: autoMergeLevel2,\r\n};\r\n\r\nconst adminPersistConfig = {\r\n ...persistCommonConfig,\r\n key: 'admin',\r\n whitelist: ['isLoggedIn', 'adminInfo']\r\n};\r\n\r\nexport default (history) => combineReducers({\r\n router: connectRouter(history),\r\n admin: persistReducer(adminPersistConfig, adminReducer),\r\n user: userReducer,\r\n app: appReducer\r\n})","import { logger } from \"redux-logger\";\r\nimport thunkMiddleware from \"redux-thunk\";\r\nimport { routerMiddleware } from 'connected-react-router';\r\nimport { createBrowserHistory } from 'history';\r\n\r\nimport { createStore, applyMiddleware, compose } from 'redux';\r\nimport { createStateSyncMiddleware } from 'redux-state-sync';\r\nimport { persistStore } from 'redux-persist';\r\n\r\nimport createRootReducer from './store/reducers/rootReducer';\r\nimport actionTypes from './store/actions/actionTypes';\r\n\r\nconst environment = process.env.NODE_ENV || \"development\";\r\nlet isDevelopment = environment === \"development\";\r\n\r\n//hide redux logs\r\nisDevelopment = false;\r\n\r\n\r\nexport const history = createBrowserHistory({ basename: process.env.REACT_APP_ROUTER_BASE_NAME });\r\n\r\nconst reduxStateSyncConfig = {\r\n whitelist: [\r\n actionTypes.APP_START_UP_COMPLETE,\r\n ]\r\n}\r\n\r\nconst rootReducer = createRootReducer(history);\r\nconst middleware = [\r\n routerMiddleware(history),\r\n thunkMiddleware,\r\n createStateSyncMiddleware(reduxStateSyncConfig),\r\n]\r\nif (isDevelopment) middleware.push(logger);\r\n\r\nconst composeEnhancers = (isDevelopment && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : compose;\r\n\r\nconst reduxStore = createStore(\r\n rootReducer,\r\n composeEnhancers(applyMiddleware(...middleware)),\r\n)\r\n\r\nexport const dispatch = reduxStore.dispatch;\r\n\r\nexport const persistor = persistStore(reduxStore);\r\n\r\nexport default reduxStore;","import locationHelperBuilder from \"redux-auth-wrapper/history4/locationHelper\";\r\nimport { connectedRouterRedirect } from \"redux-auth-wrapper/history4/redirect\";\r\n\r\nconst locationHelper = locationHelperBuilder({});\r\n\r\nexport const userIsAuthenticated = connectedRouterRedirect({\r\n authenticatedSelector: state => state.admin.isLoggedIn && (window.localStorage.getItem('tokenCreatedDate') && (new Date().getTime() - window.localStorage.getItem('tokenCreatedDate'))/1000 <= 1800),\r\n wrapperDisplayName: 'UserIsAuthenticated',\r\n redirectPath: '/login'\r\n});\r\n\r\nexport const userIsNotAuthenticated = connectedRouterRedirect({\r\n // Want to redirect the user when they are authenticated\r\n authenticatedSelector: state => !state.admin.isLoggedIn || !window.localStorage.getItem('tokenCreatedDate') || (window.localStorage.getItem('tokenCreatedDate') && (new Date().getTime() - window.localStorage.getItem('tokenCreatedDate'))/1000 >= 1800),\r\n wrapperDisplayName: 'UserIsNotAuthenticated',\r\n redirectPath: (state, ownProps) => locationHelper.getRedirectQueryParam(ownProps) || '/',\r\n allowRedirectBack: false\r\n});","export const path = {\r\n HOME: \"/\",\r\n LOGIN: \"/login\",\r\n LOG_OUT: \"/logout\",\r\n SYSTEM: \"/system\",\r\n};\r\n\r\nexport const languages = {\r\n VI: \"vi\",\r\n EN: \"en\",\r\n};\r\n\r\nexport const manageActions = {\r\n ADD: \"ADD\",\r\n EDIT: \"EDIT\",\r\n DELETE: \"DELETE\",\r\n};\r\n\r\nexport const dateFormat = {\r\n SEND_TO_SERVER: \"DD/MM/YYYY\",\r\n};\r\n\r\nexport const YesNoObj = {\r\n YES: \"Y\",\r\n NO: \"N\",\r\n};\r\n\r\nexport const IS_DEV = process.env.NODE_ENV === \"development\";\r\n","class KeyCodeUtils {\r\n\r\n static UP = 38;\r\n\r\n static DOWN = 40;\r\n\r\n static TAB = 9;\r\n\r\n static ENTER = 13;\r\n\r\n static E = 69;\r\n\r\n static ESCAPE = 27; \r\n\r\n static isNavigation(e) {\r\n return (e >= 33 && e <= 40) || e === 9 || e === 8 || e === 46 || e === 14 || e === 13;\r\n }\r\n\r\n static isNumeric(e) {\r\n return (e >= 48 && e <= 57) || (e >= 96 && e <= 105);\r\n }\r\n static isAlphabetic(e) {\r\n return (e >= 65 && e <= 90);\r\n }\r\n static isDecimal(e) {\r\n return e === 190 || e === 188 || e === 108 || e === 110;\r\n }\r\n\r\n static isDash(e) {\r\n return e === 109 || e === 189;\r\n }\r\n}\r\n\r\nexport default KeyCodeUtils;","import messages_vi from '../translations/vi.json';\r\nimport messages_en from '../translations/en.json';\r\n\r\nconst flattenMessages = ((nestedMessages, prefix = '') => {\r\n if (nestedMessages == null) {\r\n return {}\r\n }\r\n return Object.keys(nestedMessages).reduce((messages, key) => {\r\n const value = nestedMessages[key];\r\n const prefixedKey = prefix ? `${prefix}.${key}` : key;\r\n\r\n if (typeof value === 'string') {\r\n Object.assign(messages, {[prefixedKey]: value})\r\n } else {\r\n Object.assign(messages, flattenMessages(value, prefixedKey))\r\n }\r\n\r\n return messages\r\n }, {})\r\n});\r\n\r\nconst messages = {\r\n 'vi': flattenMessages(messages_vi),\r\n 'en': flattenMessages(messages_en),\r\n};\r\n\r\nexport default class LanguageUtils {\r\n static getMessageByKey(key, lang) {\r\n return messages[lang][key]\r\n }\r\n\r\n static getFlattenedMessages() {\r\n return messages;\r\n }\r\n}","export default __webpack_public_path__ + \"static/media/Round.af446279.png\";","export default __webpack_public_path__ + \"static/media/SpinIcon.54c264be.png\";","import axios from \"axios\";\r\n\r\nconst instance = axios.create({\r\n baseURL: process.env.REACT_APP_BACKEND_URL,\r\n withCredentials: true,\r\n});\r\n\r\nconst REACT_APP_CRM_InstanceURL = \"/api/SpinWheel/\";\r\n\r\ninstance.interceptors.response.use(\r\n (response) => {\r\n return response;\r\n },\r\n (error) => {\r\n if (error.response.status === 401) {\r\n console.log(\"401\");\r\n }\r\n return error;\r\n }\r\n);\r\n\r\nexport const GetListPrize = async (token) => {\r\n const MemberHeader = {\r\n headers: {\r\n Authorization: token\r\n },\r\n };\r\n return instance.post(REACT_APP_CRM_InstanceURL + 'GetPrizes', {}, MemberHeader);\r\n};\r\n\r\nexport const GetChances = async (token) => {\r\n const MemberHeader = {\r\n headers: {\r\n Authorization: token\r\n },\r\n };\r\n return instance.post(REACT_APP_CRM_InstanceURL + 'GetNumberOfChances', {}, MemberHeader);\r\n};\r\n\r\nexport const GenerateAndRedeemPrizeWon = async (token) => {\r\n const MemberHeader = {\r\n headers: {\r\n Authorization: token\r\n },\r\n };\r\n return instance.post(REACT_APP_CRM_InstanceURL + 'GenerateAndRedeemPrizeWon', {}, MemberHeader);\r\n};","import axios from 'axios';\r\n\r\nconst instance = axios.create({\r\n baseURL: process.env.REACT_APP_BACKEND_URL,\r\n withCredentials: true\r\n});\r\n\r\nexport const isSuccessStatusCode = (s) => {\r\n // May be string or number\r\n const statusType = typeof s;\r\n return (statusType === 'number' && s === 0) || (statusType === 'string' && s.toUpperCase() === 'OK');\r\n};\r\n\r\nconst setupInterceptors = (history) => {\r\n instance.interceptors.response.use(response => {\r\n return response\r\n }, \r\n error => {\r\n if (error.response.status === 401) {\r\n window.localStorage.clear();\r\n console.log('xxxxx')\r\n }\r\n })\r\n}\r\n\r\nexport default setupInterceptors\r\n","import React, { Component } from \"react\";\r\n// import { connect } from 'react-redux';\r\nimport \"./PopUp.scss\";\r\n\r\nclass PopUp extends Component {\r\n openProfilePage = () => {\r\n window.location.href = process.env.REACT_APP_LEVIS_PROFILE;\r\n };\r\n\r\n render() {\r\n if (this.props.statusMessage === \"SUCCESS\") {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n 당첨!
축하 드립니다.\r\n
\r\n
\r\n
\r\n 현금 {this.props.item} 상당의 리바이스 쿠폰을 받으셨습니다.\r\n
\r\n
\r\n 쿠폰을 확인하시려면 마이 프로필 페이지로 이동하세요.\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n {this.props.chances > 0 ? (\r\n
\r\n \r\n
\r\n ) : (\r\n
\r\n
남은 기회: 0
\r\n
\r\n )}\r\n
\r\n
\r\n\r\n
\r\n
\r\n );\r\n } else if (this.props.statusMessage === \"INACTIVE\") {\r\n return (\r\n
\r\n
\r\n {/*
*/}\r\n
안내 !!!
\r\n
\r\n 캠페인이 종료 되었습니다.
다음 기회에 참여해 주세요.\r\n
\r\n
\r\n \r\n
\r\n {/*
*/}\r\n
\r\n
\r\n );\r\n } else {\r\n return (\r\n
\r\n
\r\n
오류 !!!
\r\n
\r\n 오류가 발생했습니다. 다시 시도해 주세요.\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n }\r\n}\r\n\r\nexport default PopUp;\r\n","import React, { Component } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport SpinRound from \"../../../src/assets/images/Round.png\";\r\nimport SpinIcon from \"../../../src/assets/images/SpinIcon.png\";\r\nimport \"./Home.scss\";\r\nimport * as API from \"../../services\";\r\nimport PopUp from \"../../components/PopUp/PopUp\";\r\nimport \"reactjs-popup/dist/index.css\";\r\nimport { IS_DEV } from \"../../utils\";\r\n\r\nclass Home extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n PopUpState: false,\r\n popUpLoginState: false,\r\n PopUpStatus: \"\",\r\n countnameAni: 0,\r\n codes: [],\r\n rewardCampaignHistory: {},\r\n prize: \"\",\r\n rewardPrize: {},\r\n code: undefined,\r\n timeInfo: \"\",\r\n descriptionInfo: \"\",\r\n checkSpin: false,\r\n rotateStart: 0,\r\n countNameAni: 0,\r\n memberCardNo: \"\",\r\n description: \"\",\r\n emptyRewards: false,\r\n tokenLocal: \"\",\r\n totalAvailableChances: 0\r\n };\r\n this.btnSpin = React.createRef();\r\n this.handleSpin = this.handleSpin.bind(this);\r\n this.wheel = React.createRef()\r\n }\r\n\r\n handleSpin(random) {\r\n const styleSheets = document.styleSheets[document.styleSheets.length - 1];\r\n styleSheets.removeRule(styleSheets.cssRules.length - 1);\r\n const rotate = 5 * 360 + (-360 * random) / 5 - 25;\r\n const nameAni = `spin-wheel-${this.state.countnameAni}`;\r\n this.setState({ countnameAni: this.state.countnameAni + 1 });\r\n const keyFrames = `@-webkit-keyframes ${nameAni} {\r\n from {transform: rotate(${this.state.rotateStart}deg)}\r\n to {transform: rotate(${rotate}deg)}\r\n }`\r\n styleSheets.insertRule(keyFrames, styleSheets.cssRules.length);\r\n this.wheel.current.style.animationName = nameAni;\r\n this.wheel.current.style.animationTimingFunction = 'ease-in-out';\r\n this.wheel.current.style.animationDuration = '2.5s';\r\n this.wheel.current.style.transform = `rotate(${rotate}deg)`;\r\n this.setState({ rotateStart: rotate%360 });\r\n setTimeout(() => {\r\n this.setState({\r\n checkSpin: false,\r\n PopUpState: true,\r\n PopUpStatus: \"SUCCESS\",\r\n })\r\n }, 3000)\r\n }\r\n\r\n componentDidMount = async () => {\r\n const query = new URLSearchParams(window.location.search);\r\n let tokenLocal = query.get(\"access_token\");\r\n if (!tokenLocal && !IS_DEV) {\r\n let domain = new URL(process.env.REACT_APP_LEVIS_PROFILE);\r\n domain = domain.hostname;\r\n window.location.href = `https://${domain}/s/LeviKR/home?returnurl=${process.env.REACT_APP_BACKEND_URL}`;\r\n return;\r\n }\r\n // https://staging-amastore-lsco.demandware.net/on/demandware.store/Sites-LeviKR-Site/ko_KR/HomePage-loyaltyPoint\r\n // https://staging-amastore-lsco.demandware.net/s/LeviKR/home\r\n this.setState({\r\n tokenLocal\r\n })\r\n const listPrize = await API.GetListPrize(tokenLocal);\r\n\r\n if (listPrize && listPrize.response && listPrize.response.status === 401) {\r\n this.setState({\r\n popUpLoginState: true,\r\n });\r\n return;\r\n }\r\n if (listPrize && listPrize.data && listPrize.data.result) {\r\n this.setState({\r\n codes: listPrize.data.result\r\n });\r\n }\r\n const chances = await API.GetChances(tokenLocal);\r\n if (chances && chances.data && chances.data.result) {\r\n this.setState({\r\n totalAvailableChances: chances.data.result.totalAvailableChances\r\n });\r\n }\r\n };\r\n\r\n handleClick = async () => {\r\n if (!this.state.checkSpin) {\r\n this.setState({\r\n checkSpin: true,\r\n });\r\n const prize = await API.GenerateAndRedeemPrizeWon(this.state.tokenLocal);\r\n console.log(prize)\r\n if (prize && prize.response && prize.response.status === 401) {\r\n this.setState({\r\n popUpLoginState: true,\r\n });\r\n return;\r\n } else if (prize && prize.response && prize.response.status === 400) {\r\n if (prize.response.data.message.includes('campaign has expired')) {\r\n this.setState({\r\n PopUpState: true,\r\n checkSpin: false,\r\n PopUpStatus: \"INACTIVE\",\r\n });\r\n }\r\n }\r\n if (prize && prize.data && prize.data.result) {\r\n var random = this.state.codes.findIndex( x=> x.customCode === prize.data.result.customCode);\r\n this.handleSpin(random);\r\n this.setState({\r\n rewardPrize: {\r\n Name: prize.data.result.name\r\n }\r\n });\r\n // setTimeout(() => {\r\n // this.setState({\r\n // PopUpState: true,\r\n // PopUpStatus: \"SUCCESS\",\r\n // checkSpin: false,\r\n // });\r\n // }, 1000);\r\n const chances = await API.GetChances(this.state.tokenLocal);\r\n if (chances && chances.data && chances.data.result) {\r\n this.setState({\r\n totalAvailableChances: chances.data.result.totalAvailableChances\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n
\r\n {this.state.PopUpState && (\r\n this.setState({ PopUpState: false })}\r\n />\r\n )}\r\n {this.state.popUpLoginState && (\r\n this.setState({ popUpLoginState: false })}\r\n />\r\n )}\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \"\"\r\n \r\n {this.state.codes &&\r\n this.state.codes.map((item, index) => {\r\n const splitIndex = [\"voucher\", \"cash\"].reduce(\r\n (idx, subfix) =>\r\n idx === -1 ? item.name.indexOf(subfix) : idx,\r\n -1\r\n );\r\n\r\n const name = item.name.substring(0, splitIndex).trim();\r\n const voucher = item.name\r\n .substring(splitIndex, item.name.length)\r\n .trim();\r\n return (\r\n
  • \r\n

    {name}

    \r\n

    {voucher}

    \r\n
  • \r\n );\r\n })}\r\n
    \r\n
    \r\n
    \r\n \"\"\r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n

    룰렛 이벤트

    \r\n

    \r\n 기간 : 2024년 2월 15일 11 AM ~ 2월 29일 12 AM\r\n
    \r\n 100% 당첨 룰렛 이벤트에 참여하고 최대 5,000원의 Levi's® 쿠폰을 받으세요!\r\n
    \r\n
    \r\n Levi's® 레드탭 멤버십에 가입하신 모든 분들께 1 번의 룰렛게임 참여기회가 주어집니다. 당첨된 혜택은 나의 혜택 > 쿠폰에서 확인할 수 있습니다.\r\n

    \r\n {/*

    \r\n Spins left: {this.state.totalAvailableChances || 0}\r\n

    */}\r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n

    유의사항:

    \r\n

    \r\n - Levi's® 레드탭 멤버라면 누구든지 참여할 수 있습니다.\r\n
    \r\n - 아이디당 1번의 기회가 주어집니다.\r\n
    \r\n - 당첨된 혜택은 나의 혜택 > 쿠폰에서 확인할 수 있으며, 발급일로부터 2주간 유효합니다.\r\n
    \r\n - 룰렛이벤트 쿠폰은 LVC, 콜라보레이션 및 일부 제품은 적용 불가이며, 다른 쿠폰과는 함께 사용할 수 없습니다.\r\n
    \r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n isLoggedIn: state.admin.isLoggedIn,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {};\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Home);\r\n","import React, { Component, Fragment } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Route, Switch } from 'react-router-dom';\r\nimport { ConnectedRouter as Router } from 'connected-react-router';\r\nimport { history } from '../redux'\r\nimport { userIsAuthenticated, userIsNotAuthenticated } from '../hoc/authentication';\r\nimport { path } from '../utils'\r\nimport Home from './Home/Home';\r\n\r\nclass App extends Component {\r\n handlePersistorState = () => {\r\n const { persistor } = this.props;\r\n let { bootstrapped } = persistor.getState();\r\n if (bootstrapped) {\r\n if (this.props.onBeforeLift) {\r\n Promise.resolve(this.props.onBeforeLift())\r\n .then(() => this.setState({ bootstrapped: true }))\r\n .catch(() => this.setState({ bootstrapped: true }));\r\n } else {\r\n this.setState({ bootstrapped: true });\r\n }\r\n }\r\n };\r\n\r\n componentDidMount() {\r\n this.handlePersistorState();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n \r\n
    \r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n started: state.app.started,\r\n isLoggedIn: state.admin.isLoggedIn\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(App);","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import React, { Component } from \"react\";\r\nimport { connect } from 'react-redux';\r\nimport { IntlProvider } from \"react-intl\";\r\n\r\nimport '@formatjs/intl-pluralrules/polyfill';\r\nimport '@formatjs/intl-pluralrules/locale-data/en';\r\nimport '@formatjs/intl-pluralrules/locale-data/vi';\r\n\r\nimport '@formatjs/intl-relativetimeformat/polyfill';\r\nimport '@formatjs/intl-relativetimeformat/locale-data/en';\r\nimport '@formatjs/intl-relativetimeformat/locale-data/vi';\r\n\r\nimport { LanguageUtils } from '../utils'\r\n\r\nconst messages = LanguageUtils.getFlattenedMessages();\r\n\r\nclass IntlProviderWrapper extends Component {\r\n\r\n render() {\r\n const { children, language } = this.props;\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n language: state.app.language\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, null)(IntlProviderWrapper);\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport './styles/styles.scss';\r\nimport App from './containers/App';\r\nimport * as serviceWorker from './serviceWorker';\r\nimport IntlProviderWrapper from \"./hoc/IntlProviderWrapper\";\r\nimport { Provider } from 'react-redux';\r\nimport reduxStore, { persistor } from './redux';\r\n\r\n\r\nconst renderApp = () => {\r\n ReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n );\r\n};\r\n\r\nrenderApp();\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}