{"version":3,"sources":["@contexts/AppContext.tsx","assets/sound/mixkit-delightful-4.mp3","assets/sound/sound-bg-exam.mp3","@components/Sound/BGSound.tsx","@contexts/RouteContext.tsx","@components/Loading.tsx","@core/@services/Liff.service.tsx","@core/env.ts","@core/axios.tsx","@core/LoginUser.ts","coupon/Coupou.tsx","coupon/CouponDetail.tsx","@core/@services/coupon.service.ts","assets/layout/exam-info/back.svg","assets/layout/exam-info/back_icon.svg","assets/sound/mixkit-cool-interface-click-tone-2568.wav","@components/Button.tsx","@components/BackButton.tsx","assets/layout/exam/sound-disable.svg","assets/layout/exam/sound-enable.svg","@components/Sound/SoundIcon.tsx","@components/LeftBackItem.tsx","@components/ExamButton.tsx","@layouts/CouponLayout/CouponLayout.tsx","coupon/api/GetCouponList.ts","coupon/redeem-coupon/RedeemCouponFooter.tsx","coupon/redeem-coupon/RedeemCoupon.tsx","coupon/api/RedeemCouponPoint.ts","assets/layout/exam-info/star-1.svg","@components/FailModal.tsx","coupon/CoupouList.tsx","@core/@routes/CustomLayout.tsx","@components/Information.tsx","@layouts/DefaultLayout.tsx","@contexts/ExamContext.tsx","exam/Exam.tsx","assets/layout/exam-info/star.svg","@components/StarScore.tsx","@core/@services/date-time.service.ts","@core/@services/exam.service.ts","@layouts/ExamInfoLayout/ExamInfoLayout.tsx","@components/RopeAndHeader.tsx","assets/layout/exam/bt_blue.svg","assets/layout/exam/bt_red.svg","@components/ExamGotPoint.tsx","assets/layout/exam/popup_bg.png","@components/SuccessfulModal.tsx","exam/info-video/InfoVideo.tsx","exam/info-video/ExamInfoVideo.tsx","assets/layout/exam/refresh.svg","assets/layout/exam/time.svg","exam/point/Point.tsx","exam/point/PointSubmitComplete.tsx","@layouts/ExamLayout/ExamLayout.tsx","exam/Form.tsx","@hooks/useHeight.tsx","@layouts/FormInfoLayout/FormInfoLayout.tsx","exam/info-video/FormInfoVideo.tsx","@layouts/FormLayout/FormLayout.tsx","exam/info-graphic/InfoGraphic.tsx","@layouts/InformationLayout.tsx","@pages/Information/Information.Page.tsx","@login/Login.tsx","@login/LoginPoint.tsx","exam/point-history/PointHistory.tsx","@components/Avatar.tsx","assets/layout/exam/winner.svg","exam/ranking/Ranking.tsx","member/api/GetMemberInfo.ts","assets/layout/profile/edit.svg","member/member-info/MemberInfo.tsx","assets/layout/tag.svg","@components/ImageProfile.tsx","@layouts/MemberInfoLayout/MemberInfoLayout.tsx","@pages/Menu/api/GetExamList.ts","@pages/Menu/api/GetFormList.ts","@pages/Menu/MenuDetail.tsx","@layouts/MenuDetailLayout.tsx","@layouts/MenuLayout.tsx","@pages/Menu/api/GetMenuList.ts","@pages/Menu/Menu.Page.tsx","@contexts/PageContext.tsx","@components/FormLabel.tsx","member/api/GetPrefix.ts","@components/Input/Input.tsx","@components/Select.tsx","member/register-form/RegisterForm.tsx","member/api/SendOtpSMS.ts","assets/icon/re-send.svg","member/api/ValidateOtp.ts","member/otp-form/OtpForm.tsx","member/api/GetProvinces.ts","member/api/GetEmployeePosition.ts","member/register-form/StaffForm.tsx","member/api/GetUniversity.ts","member/api/GetStudentVersion.ts","member/register-form/StdVeterinaryForm.tsx","member/register-form/VeterinaryForm.tsx","member/register-form/RegisterTypeForm.tsx","member/api/RegisterWithOTP.ts","member/Register.tsx","@layouts/RegisterLayout.tsx","@components/RegisterModal.tsx","exam/info-graphic/SeeMore.tsx","member/PointRegisterComplete.tsx","exam/TestPage.tsx","@document/api/GetDocument.ts","@document/Document.tsx","@layouts/DocumentLayout.tsx","member/api/GetShopName.ts","member/api/GetMemberType.ts","member/api/UpdateMemberInfo.ts","@components/Popup.tsx","member/member-info-edit/MemberInfoEdit.tsx","@layouts/BackLayout/BackLayout.tsx","@pages/TermsAndConditions/api/PostAcceptConsentForm.ts","@pages/TermsAndConditions/TermsAndConditions.Page.tsx","@pages/Otp/Otp.Page.tsx","@core/@routes/Router.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"names":["AppStateContext","createContext","undefined","AppDispatchContext","reducer","state","action","type","enableSound","payload","pageActive","enableBgSound","enableExamBgSound","Error","AppProvider","children","useReducer","dispatch","Provider","value","useAppState","context","React","useContext","useAppDispatch","bgSound","Audio","sound","volume","BGSound","useState","error","setError","ref","useRef","windowClick","current","start","checkPermission","play","then","pause","window","removeEventListener","catch","e","message","useEffect","addEventListener","onload","bgStatus","useMemo","Sound","status","PLAYING","PAUSED","STOPPED","examBgStatus","url","playStatus","autoLoad","loop","ignoreMobileRestrictions","examSound","onError","console","log","RouteProvider","isVisible","usePageVisibility","appDispatch","Loading","className","LiffService","connect","liffId","callback","a","liff","ready","isLoggedIn","getProfile","re","login","init","err","env","process","config","baseURL","headers","proxy","axios","$axios","create","interceptors","request","use","storageToken","sessionStorage","getItem","token","Object","assign","JSON","parse","access_token","Promise","reject","response","LoginUser","data","resolve","post","res","Coupon","locationState","useLocation","history","useHistory","isLoading","setIsLoading","search","profile","line_id","userId","otp_flag","hillToken","campaignInfo","campaign_info","setItem","stringify","rank_no","otp_pass_flag","keep_data_flag","transfer_data_flag","push","coupon_id","URLSearchParams","get","CouponDetail","coupon","setCoupon","param","params","src","coupon_image","coupon_exp_date","coupon_desc","clickSound","Button","onClick","disableSound","props","app","event","backContent","background","BackArea","backgroundSize","width","height","BackButton","goBack","style","BackIcon","alt","SoundIcon","toggleStartStopBGAudio","useCallback","id","soundEnable","soundDisable","LeftBackItem","showSound","LeftWrapper","styled","div","defaultProps","ExamButtonType","CouponLayout","isInApp","closeWindow","onClickBack","GetCouponList","RedeemCouponFooter","onClose","onSubmit","submitTitle","RedeemCoupon","redeemPoint","isOpen","toString","replace","RedeemCouponPoint","FailModal","top","CoupouList","couponList","setCouponList","point","setPoint","isOpenRedeemCoupon","setIsOpenRedeemCoupon","pointRedeem","setPointRedeem","couponId","setCouponId","getCoupon","coupon_list","onCloseRedeemCoupon","StarIcon","maxHeight","map","c","index","coupon_status","coupon_point","couponPoint","onRedeemCoupon","result_code","CustomLayout","Layout","layout","Information","DefaultLayout","paddingTop","ExamContext","examInfo","exam_id","question_list","setExamInfo","startDateTime","setStartDateTime","endDateTime","setEndDateTime","examNo","setExamNo","answerList","setAnswerList","submitScore","setSubmitScore","formInfo","form_id","form_question_list","setFormInfo","formAnswerList","question_value_list","setFormAnswerList","ExamContextProvider","exam_point","exam_title","exam_infographic_image","take_flag","question_title","question_id","group_no","answer_list","form_title","form_desc","form_image","score","form_content_type_id","form_question_id","form_question_title","form_question_detail_default","require_field","order_no","input_type_id","input_type_name","Exam","setValue","find","ans","answer_id","answerRadio","onChange","questionIdex","newAnswer","onChangeAnswer","target","answer","name","checked","answer_name","starContent","backgroundColor","borderRadius","starLayout","Star","StarScore","color","fontColor","getDateTimeServer","getExamInfo","getFormInfo","submitExam","answerExam","submitFormInfo","ExamInfoLayout","isBack","setIsBack","isInfoGraphic","setIsInfoGraphic","location","pathname","includes","onExam","datetime","onSeeMore","menuId","RopeAndHeader","ExamButtonBG","ToClass","Class","Ranking","getBG","ExamButtonStyle","ExamButton","ExamGotPointBG","ExamGotPoint","SuccessFulModal","desc","isRegister","setIsRegister","locationName","page","goTo","ToRanking","InfoVideo","title","video","isTakeFlag","isForm","formId","isOpenPointSumary","setIsOpenPointSumary","setData","useLayoutEffect","videoContainer","document","getElementById","timeout","setTimeout","clearTimeout","padding","playsinline","controls","vimeo","playerOptions","autoplay","responsive","onEnded","result_desc","receive_point","ExamInfoVideo","exam_video","exam_desc","ExamPoint","fullPoint","setFullPiont","recievePoint","setRecievePoint","spendTime","setSpendTimet","submit_flag","start_datetime","end_datetime","full_point","spend_time","TimeIcon","RefreshIcon","PointSubmitComplete","ExamLayout","playTime","setPlayTime","timerRef","isOpenPointSubmit","setIsOpenPointSubmit","isOpenModal","setIsOpenModal","clearTimeInterval","clearInterval","setInterval","time","minute","Math","floor","second","renderTime","peviousExam","length","nextExam","getAnswerList","Form","vh","setHeight","onResize","innerHeight","useHeight","setAnswer","firstUpdate","filter","q","v","formQuestionList","onAnswerChange","answerlist","newanswer","removed","CheckboxList","FormInfoLayout","FormInfoVideo","form_video","FormLayout","question","findIndex","InfoGraphic","InformationLayout","InformationPage","Login","path","setPath","source","ExamPointHistory","getExamPointList","page_index","page_size","point_list","d","point_type","border","exam_date","exam_time","Avatar","xmlns","viewBox","fill","imageStyle","display","objectFit","marginTop","ExamRanking","defaultImage","ranking_list","owner_flag","line_image","full_name","toLocaleString","LeaderIcon","slice","no","alignItems","member_id","GetMemberInfo","MemberInfo","memberInfo","setMemberInfo","isOpenExamPointHistory","setIsOpenExamPointHistory","isOpenExamRanking","setIsOpenExamRanking","redeemDesc","setRedeemDesc","campaign_desc","exam_time_total","to","EditIcon","member_type_id","university_name","province_name","ImageProfile","pictureUrl","rankNo","setProfile","tag","MemberInfoLayout","lineName","setLineName","isGiff","setIsGiff","displayName","validateBtn","onClickMenu","flex","maxWidth","GetExamList","GetFormList","MenuDetail","menuName","setMenuName","examList","setExamList","useParams","exam_type_id","exam_type_name","exam_list","prepareFormList","form_list","result","exam","exam_cover_image","exam_receive_point","form_point","exam_sp_point","exam_content_type_id","Fragment","examId","onClickExam","MenuDetailLayout","MenuLayout","GetMenuList","MenuPage","menuList","setMenuList","menu_list","menu","menu_id","PageProvider","FormLabel","required","GetPrefix","Input","forwardRef","Select","RegisterForm","onSave","form","useForm","dropDownOption","setDropDownOption","prefix_id","first_name","last_name","birth_date","mobile_no","Axios","all","spread","prefix_list","errors","handleSubmit","register","option","prefix_name","minLength","maxLength","SendOtpSMS","ValidateOtp","OtpForm","onFailed","mobileNo","setMobileNo","setRef","sendOtpSms","alert","ref_code","otp","otp_token","Resend","GetProvince","GetEmployeePosition","StaffForm","provinces","setProvinces","positions","setPositions","province_list","emp_position_list","GetUniversity","GetStudentVersion","StdVeterinaryForm","versions","setVersions","universities","setUniversities","university_list","student_version_list","VeterinaryForm","RegisterTypeForm","setState","RegisterWithOTP","Register","line_name","profile_image","RegisterLayout","RegisterModal","defaultCampignInfo","campignInfo","campign","setCampignInfo","SeeMore","PointRegisterComplete","TestPage","isOpenHistory","setIsOpenHistory","isOpenRaking","setIsOpenRaking","isOpenPointRegisterComplete","setIsPointRegisterComplete","GetDocument","Document","setDocument","documentName","document_list","doc","document_cover_image","boxShadow","whiteSpace","document_title","openWindow","document_path","external","DocumentLayout","GetShopName","GetMemberType","UpdateMemberInfo","Popup","text","inputClass","MemberInfoEdit","shopName","setShopName","memberTypes","setMemberTypes","memberType","watch","setIsOpen","shop","shop_list","member_info","member_type_list","vet_license_id","emp_position","student_version","shop_name","shop_id","already_mobile_no_use_flag","t","member_type_name","BackLayout","PostAcceptConsentForm","TermsAndConditionsPage","onAcceptConsent","OtpPage","Router","exact","component","LoginPoint","App","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode"],"mappings":"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","file":"static/js/main.589dd9e4.chunk.js","sourcesContent":["import React, { createContext, useReducer } from 'react';\r\n\r\nexport type ActionType = 'SOUND' | 'BG_SOUND' | 'EXAM_BG_SOUND' | 'PAGE_ACTIVE';\r\ntype Action = {\r\n type: 'SOUND' | 'BG_SOUND' | 'EXAM_BG_SOUND' | 'PAGE_ACTIVE';\r\n payload: boolean;\r\n};\r\ntype Dispatch = (action: Action) => void;\r\ntype State = {\r\n pageActive: boolean;\r\n enableSound: boolean;\r\n enableBgSound: boolean;\r\n enableExamBgSound: boolean;\r\n};\r\n\r\nconst AppStateContext = createContext(undefined);\r\nconst AppDispatchContext = createContext(undefined);\r\n\r\nfunction reducer(state: State, action: Action): State {\r\n switch (action.type) {\r\n case 'SOUND': {\r\n return {\r\n ...state,\r\n enableSound: action.payload,\r\n };\r\n }\r\n case 'PAGE_ACTIVE': {\r\n return {\r\n ...state,\r\n pageActive: action.payload,\r\n };\r\n }\r\n case 'BG_SOUND': {\r\n return {\r\n ...state,\r\n enableBgSound: action.payload,\r\n enableExamBgSound: false,\r\n };\r\n }\r\n case 'EXAM_BG_SOUND': {\r\n return {\r\n ...state,\r\n enableExamBgSound: action.payload,\r\n enableBgSound: action.payload ? false : true,\r\n };\r\n }\r\n default:\r\n throw new Error(`Unhandled action type: ${action.type}`);\r\n }\r\n}\r\n\r\nconst AppProvider: React.FC = ({ children }) => {\r\n const [state, dispatch] = useReducer(reducer, {\r\n pageActive: true,\r\n enableSound: false,\r\n enableBgSound: false,\r\n enableExamBgSound: false,\r\n });\r\n\r\n return (\r\n \r\n \r\n {children}\r\n \r\n \r\n );\r\n};\r\n\r\nconst useAppState = (): State => {\r\n const context = React.useContext(AppStateContext);\r\n if (context === undefined) {\r\n throw new Error('useAppState must be used within a AppProvider');\r\n }\r\n return context;\r\n};\r\nconst useAppDispatch = (): Dispatch => {\r\n const context = React.useContext(AppDispatchContext);\r\n if (context === undefined) {\r\n throw new Error('useAppDispatch must be used within a AppProvider');\r\n }\r\n return context;\r\n};\r\n\r\nexport { AppProvider, useAppState, useAppDispatch };\r\n","export default __webpack_public_path__ + \"static/media/mixkit-delightful-4.789f2067.mp3\";","export default __webpack_public_path__ + \"static/media/sound-bg-exam.567e303b.mp3\";","import React, { useEffect, useMemo, useRef, useState } from 'react';\r\nimport { useAppDispatch, useAppState } from '@contexts/AppContext';\r\n\r\nimport Sound from 'react-sound';\r\nimport examSound from 'assets/sound/mixkit-delightful-4.mp3';\r\nimport sound from 'assets/sound/sound-bg-exam.mp3';\r\n\r\ninterface SoundType {\r\n sound: { start: () => void; stop: () => void };\r\n props: { playStatus: string };\r\n}\r\n\r\nconst bgSound = new Audio(sound);\r\nbgSound.volume = 0.1;\r\n\r\nconst BGSound = (): React.ReactElement | null => {\r\n const { enableSound, enableBgSound, enableExamBgSound, pageActive } =\r\n useAppState();\r\n const [error, setError] = useState();\r\n const dispatch = useAppDispatch();\r\n const ref = useRef(null);\r\n\r\n const windowClick = () => {\r\n if (ref.current) {\r\n ref.current.sound.start();\r\n }\r\n if (error !== undefined) {\r\n setError(undefined);\r\n }\r\n checkPermission();\r\n };\r\n\r\n const checkPermission = () => {\r\n bgSound\r\n .play()\r\n .then(() => {\r\n bgSound.pause();\r\n window.removeEventListener('click', windowClick, false);\r\n })\r\n .catch((e) => {\r\n bgSound.pause();\r\n setError(e.message);\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n window.addEventListener('click', windowClick, false);\r\n window.onload = () => {\r\n dispatch({ type: 'SOUND', payload: true });\r\n checkPermission();\r\n };\r\n }, []);\r\n\r\n const bgStatus = useMemo(() => {\r\n if (enableSound && enableBgSound && !enableExamBgSound) {\r\n if (pageActive) {\r\n return Sound.status.PLAYING;\r\n } else {\r\n return Sound.status.PAUSED;\r\n }\r\n }\r\n return Sound.status.STOPPED;\r\n }, [enableSound, enableBgSound, enableExamBgSound, pageActive]);\r\n\r\n const examBgStatus = useMemo(() => {\r\n if (enableSound && enableExamBgSound && pageActive) {\r\n if (pageActive) {\r\n return Sound.status.PLAYING;\r\n } else {\r\n return Sound.status.PAUSED;\r\n }\r\n }\r\n return Sound.status.STOPPED;\r\n }, [enableSound, enableExamBgSound, pageActive]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default BGSound;\r\n","import React, { useEffect } from 'react';\r\n\r\nimport { useAppDispatch } from './AppContext';\r\nimport { usePageVisibility } from 'react-page-visibility';\r\n\r\nconst RouteProvider: React.FC = ({ children }) => {\r\n const isVisible = usePageVisibility();\r\n const appDispatch = useAppDispatch();\r\n React.useEffect(() => {\r\n console.log('isVisible: ', isVisible);\r\n appDispatch({ type: 'PAGE_ACTIVE', payload: isVisible });\r\n }, [isVisible]);\r\n\r\n return <>{children};\r\n};\r\n\r\nexport { RouteProvider };\r\n","import React from 'react';\r\n\r\nconst Loading: React.FC = () => {\r\n return (\r\n
\r\n
\r\n

\r\n Loading...\r\n

\r\n
\r\n );\r\n};\r\n\r\nexport default Loading;\r\n","import liff from '@line/liff';\r\n\r\nexport class LiffService {\r\n static connect = async (\r\n liffId: string,\r\n callback?: (profile: {\r\n userId: string;\r\n displayName: string;\r\n pictureUrl?: string;\r\n }) => void\r\n ) => {\r\n liff.ready.then(() => {\r\n if (liff.isLoggedIn()) {\r\n liff.getProfile().then((re) => {\r\n callback && callback(re);\r\n });\r\n } else {\r\n liff.login();\r\n }\r\n });\r\n await liff.init({ liffId: `${liffId}` }).catch((err) => {\r\n throw err;\r\n });\r\n };\r\n\r\n}\r\n","interface ENV {\r\n apiURL?: string;\r\n registerLiffId?: string;\r\n loginLiffId?: string;\r\n pointLiffId?: string;\r\n couponLiffId?:string;\r\n}\r\n\r\nexport const env: ENV = {\r\n apiURL: process.env.REACT_APP_API_URL,\r\n registerLiffId: process.env.REACT_APP_LIFF_REGISTER,\r\n loginLiffId: process.env.REACT_APP_LIFF_LOGIN,\r\n pointLiffId: process.env.REACT_APP_LIFF_POINT,\r\n couponLiffId: process.env.REACT_APP_LIFF_COUPON,\r\n};\r\n","import $axios, { AxiosInstance, AxiosRequestConfig } from 'axios';\r\nimport { Token } from './core.model';\r\nimport { env } from './env';\r\n\r\nconst config: AxiosRequestConfig = {\r\n baseURL: env.apiURL,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n proxy: false,\r\n};\r\n\r\n// const baseURL = env.apiURL;\r\n// const axios: AxiosInstance = $axios.create({ baseURL });\r\nconst axios: AxiosInstance = $axios.create(config);\r\n\r\naxios.interceptors.request.use(\r\n (config) => {\r\n const storageToken = sessionStorage.getItem('hillToken');\r\n if (storageToken) {\r\n const token: Token = {};\r\n Object.assign(token, JSON.parse(storageToken));\r\n if (token.access_token) {\r\n config.headers['X-HILL-AccessToken'] = token.access_token;\r\n }\r\n }\r\n return config;\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\naxios.interceptors.response.use(\r\n (response) => {\r\n return response;\r\n },\r\n (error) => {\r\n return Promise.reject(error.response);\r\n }\r\n);\r\n\r\nexport default axios;\r\n","import axios from '@core/axios';\r\nimport { LoginResponse } from '@login/login.model';\r\nimport { AxiosResponse } from 'axios';\r\nimport { LoginRequest } from './core.model';\r\n\r\nconst LoginUser = (data: LoginRequest): Promise => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(`/Member/reqLogin`, data)\r\n .then((res: AxiosResponse) => {\r\n if (res.status === 200) {\r\n return resolve(res.data);\r\n }\r\n })\r\n .catch((err: any) => reject(err?.response));\r\n });\r\n};\r\n\r\nexport default LoginUser;\r\n","import Loading from '@components/Loading';\r\nimport { LiffService } from '@core/@services/Liff.service';\r\nimport { Token } from '@core/core.model';\r\nimport { env } from '@core/env';\r\nimport LoginUser from '@core/LoginUser';\r\nimport { LoginResponse } from '@login/login.model';\r\nimport { useEffect, useState } from 'react';\r\nimport { useHistory, useLocation } from 'react-router-dom';\r\n\r\nexport interface LocationState {\r\n coupon_id: string;\r\n isInApp: boolean;\r\n}\r\n\r\nconst Coupon = () => {\r\n const locationState = useLocation();\r\n const history = useHistory();\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n useEffect(() => {\r\n if (locationState.search) {\r\n const liffId = env.pointLiffId || '';\r\n LiffService.connect(liffId, login);\r\n }\r\n }, [locationState.search]);\r\n\r\n const login = (profile: {\r\n userId: string;\r\n displayName: string;\r\n pictureUrl?: string;\r\n }) => {\r\n LoginUser({ line_id: profile.userId, otp_flag: true })\r\n .then((res: LoginResponse) => {\r\n const hillToken: Token = {\r\n access_token: res.token,\r\n };\r\n const campaignInfo = res.campaign_info ? res.campaign_info[0] : null;\r\n sessionStorage.setItem('hillToken', JSON.stringify(hillToken));\r\n sessionStorage.setItem('rankNo', `${res.rank_no}`);\r\n sessionStorage.setItem('campaignInfo', JSON.stringify(campaignInfo));\r\n sessionStorage.setItem('liff-profile', JSON.stringify(profile));\r\n sessionStorage.setItem(\r\n 'otp_pass_flag',\r\n JSON.stringify(res.otp_pass_flag)\r\n );\r\n sessionStorage.setItem(\r\n 'keep_data_flag',\r\n JSON.stringify(res.keep_data_flag)\r\n );\r\n sessionStorage.setItem(\r\n 'transfer_data_flagprofile',\r\n JSON.stringify(res.transfer_data_flag)\r\n );\r\n setIsLoading(false);\r\n\r\n history.push('/coupon-detail', {\r\n coupon_id: new URLSearchParams(locationState.search).get('coupon_id'),\r\n });\r\n })\r\n .catch((error) => {\r\n console.log(error, 'Login error');\r\n });\r\n };\r\n return <>{isLoading && };\r\n};\r\n\r\nexport default Coupon;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useLocation } from 'react-router-dom';\r\nimport { Coupon } from './coupon.model';\r\nimport './coupon-detail.scss';\r\nimport { getCouponInfo } from '@core/@services/coupon.service';\r\nimport parse from 'html-react-parser';\r\ninterface LocationState {\r\n coupon_id: string;\r\n}\r\n\r\nconst CouponDetail = () => {\r\n const locationState = useLocation();\r\n const [coupon, setCoupon] = useState();\r\n\r\n useEffect(() => {\r\n const param = locationState?.state?.coupon_id ? locationState?.state.coupon_id : new URLSearchParams(locationState.search).get('coupon_id')\r\n if (param) {\r\n getCouponInfo(param).then((data) => {\r\n setCoupon(data);\r\n });\r\n }\r\n }, [locationState?.state?.coupon_id, locationState.search])\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n

รายละเอียดการใช้คูปอง

\r\n

หมดอายุ: {coupon?.coupon_exp_date}

\r\n

{parse(coupon?.coupon_desc || \"\")}

\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default CouponDetail;\r\n","import axios from '@core/axios';\r\nimport { AxiosResponse } from 'axios';\r\nimport {\r\n CheckAlertRedeemResponse,\r\n Coupon,\r\n CouponList,\r\n} from 'coupon/coupon.model';\r\n\r\nexport const getCouponList = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(`/Member/reqCouponList`)\r\n .then((res: any) => {\r\n if (res.status === 200) {\r\n return resolve(res.data);\r\n }\r\n })\r\n .catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport const getCouponInfo = (coupon_id: string): Promise => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .get(`/Member/reqCouponInfo`, { params: { coupon_id } })\r\n .then((res: any) => {\r\n if (res.status === 200) {\r\n return resolve(res.data);\r\n }\r\n })\r\n .catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport const checkAlertRedeem = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .get(`/Member/checkAlertRedeem`)\r\n .then((res: AxiosResponse) => {\r\n if (res.status === 200) {\r\n return resolve(res.data);\r\n }\r\n })\r\n .catch((err: any) => reject(err.response));\r\n });\r\n};\r\n","export default __webpack_public_path__ + \"static/media/back.e339d53e.svg\";","export default __webpack_public_path__ + \"static/media/back_icon.45c190d7.svg\";","export default __webpack_public_path__ + \"static/media/mixkit-cool-interface-click-tone-2568.91940e3f.wav\";","import React from 'react';\r\nimport sound from 'assets/sound/mixkit-cool-interface-click-tone-2568.wav';\r\nimport { useAppState } from '@contexts/AppContext';\r\n\r\nconst clickSound = new Audio(sound);\r\nclickSound.volume = 0.5;\r\n\r\ninterface ButtonProps extends React.DetailedHTMLProps, HTMLButtonElement> {\r\n disableSound?: boolean;\r\n}\r\n\r\nconst Button: React.FC = ({ children, onClick, disableSound, ...props }) => {\r\n const app = useAppState();\r\n const onHandleClick = (event: React.MouseEvent) => {\r\n if (app.enableSound && disableSound != true) {\r\n clickSound.play();\r\n }\r\n onClick && onClick(event);\r\n }\r\n return \r\n}\r\n\r\nexport default Button;","import BackArea from 'assets/layout/exam-info/back.svg';\r\nimport BackIcon from 'assets/layout/exam-info/back_icon.svg';\r\nimport Button from './Button';\r\nimport CSS from 'csstype';\r\nimport React from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nconst backContent: CSS.Properties = {\r\n background: 'url(' + BackArea + ') no-repeat',\r\n backgroundSize: 'cover',\r\n width: '42px',\r\n height: '35px',\r\n};\r\n\r\nexport interface BackButtonProps {\r\n onClick?: () => void;\r\n}\r\nconst BackButton: React.FC = ({ ...props }) => {\r\n const history = useHistory();\r\n\r\n const onBack = () => {\r\n history.goBack();\r\n };\r\n\r\n return (\r\n \r\n \"back\"\r\n \r\n );\r\n};\r\nexport default BackButton;\r\n","export default __webpack_public_path__ + \"static/media/sound-disable.ddb88a41.svg\";","export default __webpack_public_path__ + \"static/media/sound-enable.4e93bb7a.svg\";","import React, { useCallback } from 'react';\r\nimport { useAppDispatch, useAppState } from '@contexts/AppContext';\r\n\r\nimport soundDisable from 'assets/layout/exam/sound-disable.svg';\r\nimport soundEnable from 'assets/layout/exam/sound-enable.svg';\r\n\r\nfunction SoundIcon(): React.ReactElement {\r\n const { enableSound } = useAppState();\r\n const dispatch = useAppDispatch();\r\n\r\n const toggleStartStopBGAudio = useCallback(() => {\r\n dispatch({ type: 'SOUND', payload: !enableSound });\r\n }, [enableSound]);\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default SoundIcon;\r\n","import BackButton, { BackButtonProps } from './BackButton';\r\n\r\nimport React from 'react';\r\nimport SoundIcon from './Sound/SoundIcon';\r\nimport styled from 'styled-components';\r\n\r\ninterface LeftBackItemProps extends BackButtonProps {\r\n showSound?: boolean;\r\n}\r\n\r\nconst LeftBackItem: React.FC = ({ showSound, ...props }: LeftBackItemProps) => {\r\n return \r\n \r\n {showSound && }\r\n \r\n}\r\n\r\nconst LeftWrapper = styled.div`\r\n display: flex;\r\n gap: 10px;\r\n`;\r\n\r\nLeftBackItem.defaultProps = {\r\n showSound: true\r\n}\r\n\r\nexport default LeftBackItem;","import React, { useContext } from 'react';\r\n\r\nimport Button from './Button';\r\nimport CSS from 'csstype';\r\nimport Class from 'assets/layout/exam/bt_blue.svg';\r\nimport { ExamContext } from '@contexts/ExamContext';\r\nimport Ranking from 'assets/layout/exam/bt_red.svg';\r\nimport Star from 'assets/layout/exam-info/star.svg';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nexport const ExamButtonBG = (type: ExamButtonType): CSS.Properties => {\r\n const getBG = (type: ExamButtonType) => {\r\n return type === ExamButtonType.ToClass ? Class : Ranking;\r\n };\r\n return {\r\n background: 'url(' + getBG(type) + ') no-repeat center',\r\n };\r\n};\r\n\r\nconst ExamButtonStyle: CSS.Properties = {\r\n height: '55px',\r\n width: '185px',\r\n};\r\n\r\nexport enum ExamButtonType {\r\n ToClass,\r\n ToRanking,\r\n}\r\n\r\ntype ExamButtonProps = {\r\n children: React.ReactNode;\r\n type: ExamButtonType;\r\n};\r\n\r\nconst ExamButton = ({ children, type }: ExamButtonProps) => {\r\n const history = useHistory();\r\n const { setSubmitScore } = useContext(ExamContext);\r\n\r\n const onClick = (type) => {\r\n setSubmitScore(false);\r\n if (type === ExamButtonType.ToClass) {\r\n history.push('/menu');\r\n return;\r\n } else {\r\n history.push('/member-info');\r\n }\r\n };\r\n\r\n return (\r\n onClick(type)}\r\n >\r\n {children}\r\n \r\n );\r\n};\r\nexport default ExamButton;\r\n","import * as React from 'react';\r\nimport LeftBackItem from '@components/LeftBackItem';\r\nimport { LocationState } from 'coupon/Coupou';\r\nimport { useHistory, useLocation } from 'react-router-dom';\r\nimport liff from '@line/liff';\r\n\r\nexport const CouponLayout: React.FC = ({ children }) => {\r\n const locationState = useLocation();\r\n const history = useHistory();\r\n\r\n const onClickBack = () => {\r\n if(!locationState?.state?.isInApp) {\r\n liff.closeWindow()\r\n } else {\r\n history.goBack()\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n onClickBack()}\r\n />\r\n
\r\n
\r\n
{children}
\r\n
\r\n );\r\n};\r\n","import axios from \"@core/axios\";\r\nimport { AxiosResponse } from \"axios\";\r\nimport { CouponList } from \"coupon/coupon.model\";\r\n\r\nconst GetCouponList = () => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(\"/Member/reqCouponList\", {})\r\n .then((res: AxiosResponse) => {\r\n if (res.status === 200) {\r\n return resolve(res);\r\n }\r\n }).catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport default GetCouponList;","import Button from '@components/Button';\r\nimport React from 'react';\r\n\r\ninterface RedeemCouponFooterProps {\r\n onClose: () => void;\r\n onSubmit: () => void;\r\n submitTitle?: string;\r\n}\r\nconst btnCloseClass =\r\n 'btn-close z-30 tracking-wider rounded-2xl lg:rounded-3xl';\r\n\r\nconst btnSubmitClass =\r\n 'btn-submit z-30 tracking-wider rounded-2xl lg:rounded-3xl';\r\n\r\nconst RedeemCouponFooter: React.FC = ({\r\n onClose,\r\n onSubmit,\r\n submitTitle = 'ยืนยัน',\r\n}) => {\r\n return (\r\n <>\r\n onClose()}\r\n >\r\n ปิด\r\n \r\n onSubmit()}\r\n >\r\n {submitTitle}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default RedeemCouponFooter;\r\n","import './redeem-coupon.scss';\r\n\r\nimport React from 'react';\r\nimport RedeemCouponFooter from './RedeemCouponFooter';\r\n\r\nconst RedeemCoupon = ({ redeemPoint, isOpen, onClose, onSubmit, id }: any) => {\r\n const btnCloseClass =\r\n 'btn-close z-30 text-3xl lg:text-7xl tracking-wider rounded-2xl lg:rounded-3xl';\r\n\r\n const btnSubmitClass =\r\n 'btn-submit z-30 text-3xl lg:text-7xl tracking-wider rounded-2xl lg:rounded-3xl';\r\n\r\n const pointWithComma = () => {\r\n return redeemPoint\r\n ? redeemPoint.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\r\n : '-';\r\n };\r\n\r\n const onSubmitRedeemCoupon = () => {\r\n onSubmit(id);\r\n };\r\n\r\n return (\r\n <>\r\n {isOpen && (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

ใช้ {pointWithComma()} คะแนน เพื่อแลกคูปอง

\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 RedeemCoupon;\r\n","import axios from '@core/axios';\r\nimport { AxiosResponse } from 'axios';\r\n\r\nexport interface RedeemCouponPointResponse {\r\n result_code: string;\r\n result_desc: string;\r\n}\r\n\r\nconst RedeemCouponPoint = (coupon_id: {\r\n coupon_id: string;\r\n}): Promise => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post('/Member/redeemCoupon', coupon_id)\r\n .then((res: AxiosResponse) => {\r\n if (res.status === 200) {\r\n return resolve(res.data);\r\n }\r\n })\r\n .catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport default RedeemCouponPoint;\r\n","export default __webpack_public_path__ + \"static/media/star-1.9183197e.svg\";","import '../coupon/redeem-coupon/redeem-coupon.scss';\r\nimport Button from './Button';\r\n\r\ninterface FailModalProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n message: string;\r\n}\r\n\r\nconst FailModal = ({ isOpen, onClose, message }: FailModalProps) => {\r\n return (\r\n <>\r\n {isOpen && (\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n

{message}

\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 FailModal;\r\n","import '../coupon/coupon.scss';\r\n\r\nimport { useEffect, useState } from 'react';\r\n\r\nimport Button from '@components/Button';\r\nimport { Coupon } from './coupon.model';\r\nimport GetCouponList from './api/GetCouponList';\r\nimport RedeemCoupon from './redeem-coupon/RedeemCoupon';\r\nimport RedeemCouponPoint, {\r\n RedeemCouponPointResponse,\r\n} from './api/RedeemCouponPoint';\r\nimport StarIcon from '../assets/layout/exam-info/star-1.svg';\r\nimport { useHistory } from 'react-router-dom';\r\nimport FailModal from '@components/FailModal';\r\n\r\nconst CoupouList = () => {\r\n const [couponList, setCouponList] = useState([]);\r\n const [point, setPoint] = useState(0);\r\n const history = useHistory();\r\n const [isOpenRedeemCoupon, setIsOpenRedeemCoupon] = useState(false);\r\n const [pointRedeem, setPointRedeem] = useState(0);\r\n const [couponId, setCouponId] = useState('');\r\n\r\n useEffect(() => {\r\n getCoupon();\r\n }, []);\r\n\r\n const getCoupon = () => {\r\n GetCouponList()\r\n .then((res: any) => {\r\n setPoint(res.data.point);\r\n setCouponList(res.data.coupon_list);\r\n })\r\n .catch((error) => {\r\n console.log(error, 'Get member info failer');\r\n });\r\n };\r\n\r\n const onRedeemCoupon = (couponPoint: number, couponId: string) => {\r\n setIsOpenRedeemCoupon(true);\r\n setPointRedeem(couponPoint);\r\n setCouponId(couponId);\r\n };\r\n\r\n const onClickDetail = (coupon_id: string) => {\r\n history.push('/coupon-detail', { coupon_id, isInApp: true });\r\n };\r\n\r\n const onCloseRedeemCoupon = () => {\r\n setIsOpenRedeemCoupon(false);\r\n };\r\n\r\n const onSubmmit = (coupon_id: string) => {\r\n RedeemCouponPoint({ coupon_id })\r\n .then(({ result_code }: RedeemCouponPointResponse) => {\r\n const isLackOfPoint = result_code === '11';\r\n if (isLackOfPoint) {\r\n setPointRedeem(-1);\r\n return;\r\n }\r\n getCoupon();\r\n onCloseRedeemCoupon();\r\n })\r\n .catch((error) => {\r\n console.log(error, 'Coupon error');\r\n setPointRedeem(-1);\r\n return;\r\n // onCloseRedeemCoupon();\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n \r\n
\r\n
\r\n \"star-point\"\r\n \r\n
\r\n
\r\n \r\n {couponList.map((c: Coupon, index: number) => {\r\n return (\r\n 1 ? 'bg-color-blue' : 'bg-white'\r\n } grid grid-cols-2 bg-white`}\r\n key={c.coupon_id}\r\n style={{\r\n height: '125px',\r\n }}\r\n >\r\n
\r\n \r\n
\r\n
\r\n {c.coupon_status === 0 && (\r\n
\r\n
\r\n \r\n
\r\n
\r\n )}\r\n {c.coupon_status === 1 && (\r\n
\r\n
\r\n \r\n\r\n
\r\n onClickDetail(c.coupon_id)}\r\n >\r\n ดูรายละเอียด\r\n \r\n
\r\n
\r\n
\r\n )}\r\n {(c.coupon_status === 2 || c.coupon_status === 3) && (\r\n
\r\n
\r\n \"star-point\"\r\n \r\n
\r\n
\r\n \r\n onRedeemCoupon(c.coupon_point, c.coupon_id)\r\n }\r\n >\r\n แลกคูปอง\r\n \r\n
\r\n
\r\n )}\r\n
\r\n \r\n );\r\n })}\r\n {pointRedeem !== -1 && (\r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CoupouList;\r\n","import * as React from \"react\";\r\n\r\ntype LayoutProps = {\r\n layout: any;\r\n};\r\nexport const CustomLayout: React.FC = ({\r\n layout: Layout,\r\n children,\r\n}) => {children};\r\n","import * as React from 'react';\r\n\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nexport const Information: React.FC = () => {\r\n const history = useHistory();\r\n const goToInformation = () => {\r\n history.push(`/information`);\r\n };\r\n\r\n return
;\r\n};\r\n","import { Information } from '@components/Information';\r\nimport * as React from 'react';\r\nexport const DefaultLayout: React.FC = ({ children }) => {\r\n return (\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {children}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n","import {\r\n ExamInfo,\r\n FormInfo,\r\n SubmitExamAnswerList,\r\n SubmitFormInfoRequest,\r\n} from 'exam/exam.model';\r\nimport React, { useState } from 'react';\r\n\r\ninterface ExamContextInterface {\r\n examInfo: ExamInfo;\r\n setExamInfo: any;\r\n startDateTime: string;\r\n setStartDateTime: any;\r\n endDateTime: string;\r\n setEndDateTime: any;\r\n examNo: number;\r\n setExamNo: any;\r\n answerList: SubmitExamAnswerList[];\r\n setAnswerList: any;\r\n submitScore: boolean;\r\n setSubmitScore: any;\r\n formInfo: FormInfo;\r\n setFormInfo: any;\r\n formAnswerList: SubmitFormInfoRequest;\r\n setFormAnswerList: any;\r\n}\r\n\r\nexport const ExamContext = React.createContext({\r\n examInfo: {\r\n exam_id: '',\r\n question_list: [],\r\n },\r\n setExamInfo: null,\r\n startDateTime: '',\r\n setStartDateTime: null,\r\n endDateTime: '',\r\n setEndDateTime: null,\r\n examNo: 1,\r\n setExamNo: null,\r\n answerList: [],\r\n setAnswerList: null,\r\n submitScore: false,\r\n setSubmitScore: null,\r\n formInfo: {\r\n form_id: '',\r\n form_question_list: [],\r\n },\r\n setFormInfo: null,\r\n formAnswerList: {\r\n form_id: '',\r\n question_value_list: [],\r\n },\r\n setFormAnswerList: null,\r\n});\r\n\r\nconst ExamContextProvider = (props: { children: React.ReactNode }) => {\r\n const [examInfo, setExamInfo] = useState({\r\n exam_id: '',\r\n exam_point: 99,\r\n exam_title: \"Story's Name\",\r\n exam_infographic_image:\r\n 'https://www.hillsschoolth.com/API/ExamImage/6c588c43-0025-45f1-8110-a4911c51e952.jpg',\r\n take_flag: false,\r\n question_list: [\r\n {\r\n question_title: '',\r\n question_id: '',\r\n point: 0,\r\n group_no: 0,\r\n answer_list: [],\r\n },\r\n ],\r\n });\r\n\r\n const [formInfo, setFormInfo] = useState({\r\n form_id: '',\r\n form_title: 'Test ACTIVIRY แบบสอบถาม Radio',\r\n form_desc: ' รายละเอียด Test ACTIVIRY แบบสอบถาม Radio',\r\n form_image:\r\n 'https://www.hillsschoolth.com/API/FormImage/78da1fa1-802c-4143-8568-dff71f308351.jpg',\r\n score: 10,\r\n form_content_type_id: 0,\r\n take_flag: false,\r\n form_question_list: [\r\n {\r\n form_question_id: '',\r\n form_question_title: '',\r\n form_question_detail_default: '',\r\n require_field: false,\r\n order_no: 1,\r\n input_type_id: 7,\r\n input_type_name: '',\r\n },\r\n ],\r\n });\r\n\r\n const [startDateTime, setStartDateTime] = useState('');\r\n const [endDateTime, setEndDateTime] = useState('');\r\n const [examNo, setExamNo] = useState(1);\r\n const [answerList, setAnswerList] = useState([]);\r\n const [formAnswerList, setFormAnswerList] = useState({\r\n form_id: '',\r\n question_value_list: [],\r\n });\r\n const [submitScore, setSubmitScore] = useState(false);\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nexport default ExamContextProvider;\r\n","import { ExamContext } from '@contexts/ExamContext';\r\nimport { AnswerList, SubmitExamAnswerList } from 'exam/exam.model';\r\nimport React, { useContext, useEffect, useState } from 'react';\r\nimport './exam.scss';\r\n\r\nconst Exam = () => {\r\n const {\r\n examInfo: { question_list },\r\n examNo,\r\n answerList,\r\n setAnswerList,\r\n submitScore,\r\n } = useContext(ExamContext);\r\n const question_id = question_list[examNo - 1].question_id;\r\n const [value, setValue] = useState();\r\n\r\n useEffect(() => {\r\n if (examNo) {\r\n setValue(\r\n answerList.find((ans) => ans.question_id === question_id)?.answer_id\r\n );\r\n }\r\n }, [examNo, answerList]);\r\n\r\n const onChangeAnswer = (answer_id, questionIdex) => {\r\n const newAnswer: SubmitExamAnswerList = {\r\n question_id,\r\n group_no: question_list[examNo - 1].group_no,\r\n answer_id,\r\n };\r\n answerList[questionIdex] = newAnswer;\r\n setAnswerList(answerList);\r\n };\r\n\r\n const answerRadioList = (answerRadio: AnswerList[]) => {\r\n return answerRadio.map((answer: AnswerList) => (\r\n \r\n ));\r\n };\r\n\r\n return (\r\n
\r\n
\r\n \r\n

\r\n {examNo}.{' '}\r\n {question_list && question_list[examNo - 1].question_title}\r\n

\r\n onChangeAnswer(e.target.value, examNo - 1)}\r\n >\r\n {question_list &&\r\n question_list[examNo - 1].answer_list &&\r\n answerRadioList(question_list[examNo - 1].answer_list || [])}\r\n
\r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nexport default Exam;\r\n","export default __webpack_public_path__ + \"static/media/star.d9fbae5d.svg\";","import React from 'react';\r\nimport CSS from 'csstype';\r\nimport Star from 'assets/layout/exam-info/star.svg';\r\n\r\nconst starContent: CSS.Properties = {\r\n backgroundColor: '#d6182f',\r\n borderRadius: '15px',\r\n};\r\n\r\nconst starLayout: CSS.Properties = {\r\n background: 'url('+Star+') no-repeat right',\r\n width: '35px',\r\n};\r\n\r\ntype StarScoreProps = {\r\n children: React.ReactNode;\r\n color?: string;\r\n fontColor?: string\r\n};\r\n\r\nconst StarScore = ({ children, color, fontColor }: StarScoreProps) => {\r\n return (\r\n
\r\n
\r\n \r\n {children}\r\n
\r\n \r\n );\r\n};\r\nexport default StarScore;\r\n","import axios from '@core/axios';\r\n\r\nexport const getDateTimeServer = () => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(`/Member/reqServerDateTime`)\r\n .then((res: any) => {\r\n if (res.status === 200) {\r\n return resolve(res.data);\r\n }\r\n })\r\n .catch((err: any) => reject(err.response));\r\n });\r\n};\r\n","import axios from '@core/axios';\r\nimport {\r\n ExamInfo,\r\n FormInfo,\r\n PointResponse,\r\n Ranking,\r\n SubmitExam,\r\n SubmitExamResponse,\r\n SubmitFormInfoRequest,\r\n SubmitFormResponse,\r\n SubmitPointHistory,\r\n} from 'exam/exam.model';\r\n\r\nexport const getExamInfo = (exam_id: string): Promise => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(`/Member/reqExamInfo`, {\r\n exam_id,\r\n })\r\n .then((res: any) => {\r\n if (res.status === 200) {\r\n return resolve(res.data);\r\n }\r\n })\r\n .catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport const getFormInfo = (form_id: string): Promise => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(`/Member/reqFormInfo`, {\r\n form_id,\r\n })\r\n .then((res: any) => {\r\n if (res.status === 200) {\r\n return resolve(res.data);\r\n }\r\n })\r\n .catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport const submitExam = (\r\n answerExam: SubmitExam\r\n): Promise => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(`/Member/submitExamInfo`, answerExam)\r\n .then((res: any) => {\r\n if (res.status === 200) {\r\n return resolve(res.data);\r\n }\r\n })\r\n .catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport const submitFormInfo = (\r\n data: SubmitFormInfoRequest\r\n): Promise => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(`/Member/submitFormInfo`, data)\r\n .then((res: any) => {\r\n if (res.status === 200) {\r\n return resolve(res.data);\r\n }\r\n })\r\n .catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport const getExamRanking = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(`/Member/reqRanking`)\r\n .then((res: any) => {\r\n if (res.status === 200) {\r\n return resolve(res.data);\r\n }\r\n })\r\n .catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport const getExamPointList = (data: SubmitPointHistory): Promise => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(`/Member/reqPointList`, data)\r\n .then((res: any) => {\r\n if (res.status === 200) {\r\n return resolve(res.data);\r\n }\r\n })\r\n .catch((err: any) => reject(err.response));\r\n });\r\n};\r\n","import './exam-info-layout.scss';\r\n\r\nimport * as React from 'react';\r\n\r\nimport { useContext, useEffect } from 'react';\r\nimport { useHistory, useLocation } from 'react-router-dom';\r\n\r\nimport Button from '@components/Button';\r\nimport { ExamContext } from '@contexts/ExamContext';\r\nimport { ExamInfo } from 'exam/exam.model';\r\nimport LeftBackItem from '@components/LeftBackItem';\r\nimport StarScore from '@components/StarScore';\r\nimport { getDateTimeServer } from '@core/@services/date-time.service';\r\nimport { getExamInfo } from '@core/@services/exam.service';\r\n\r\ninterface LocationState {\r\n id: string;\r\n menuId: string;\r\n}\r\n\r\nexport const ExamInfoLayout: React.FC = ({ children }) => {\r\n const {\r\n examInfo: { exam_point, take_flag },\r\n setExamInfo,\r\n setStartDateTime,\r\n setExamNo,\r\n } = useContext(ExamContext);\r\n const history = useHistory();\r\n const locationState = useLocation().state;\r\n const [isBack, setIsBack] = React.useState(false);\r\n const [isInfoGraphic, setIsInfoGraphic] = React.useState(false);\r\n\r\n useEffect(() => {\r\n if (locationState?.id) {\r\n getExamInfo(locationState.id).then((data: ExamInfo) => {\r\n setExamInfo(data);\r\n });\r\n }\r\n }, [locationState?.id]);\r\n\r\n useEffect(() => {\r\n setIsBack(history.location.pathname.includes('see-more'));\r\n setIsInfoGraphic(history.location.pathname.includes('graphic'));\r\n }, [history.location.pathname]);\r\n\r\n const onExam = () => {\r\n getDateTimeServer().then((data: any) => {\r\n setStartDateTime(data.datetime);\r\n setExamNo(1);\r\n history.push('/exam');\r\n });\r\n };\r\n\r\n const infoAction = () => {\r\n return take_flag ? (\r\n
\r\n ) : (\r\n
\r\n \r\n
\r\n );\r\n };\r\n\r\n const onSeeMore = () => {\r\n history.push('/exam-info/see-more');\r\n };\r\n\r\n const infoGraphicAction = () => {\r\n return take_flag ? (\r\n
\r\n \r\n
\r\n ) : (\r\n
\r\n \r\n \r\n
\r\n );\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {exam_point}\r\n
\r\n
\r\n {isBack ? (\r\n \r\n ) : (\r\n \r\n history.push(`/menu-detail/${locationState?.menuId}`)\r\n }\r\n />\r\n )}\r\n
\r\n
\r\n
{children}
\r\n {isInfoGraphic ? infoGraphicAction() : infoAction()}\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\n\r\nconst RopeAndHeader: React.FC = ({ children }) => {\r\n return (\r\n
\r\n
\r\n
\r\n {children}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default RopeAndHeader;\r\n","export default __webpack_public_path__ + \"static/media/bt_blue.0079e62a.svg\";","export default __webpack_public_path__ + \"static/media/bt_red.3b7b2c69.svg\";","import StarScore from '@components/StarScore';\r\nimport popup_bg from 'assets/layout/exam/popup_bg.png';\r\nimport React from 'react';\r\nimport CSS from 'csstype';\r\n\r\nconst ExamGotPointBG: CSS.Properties = {\r\n background: 'url(' + popup_bg + ') no-repeat top',\r\n height: '350px',\r\n};\r\n\r\nconst ExamGotPoint = ({ children, point }) => {\r\n return (\r\n \r\n {point > 0 && (\r\n \r\n {point}\r\n \r\n )}\r\n
\r\n

{children}

\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default ExamGotPoint;\r\n","export default __webpack_public_path__ + \"static/media/popup_bg.15f4b965.png\";","import * as React from 'react';\r\n\r\nimport { ExamButtonBG, ExamButtonType } from './ExamButton';\r\nimport { useEffect, useState } from 'react';\r\n\r\nimport Button from './Button';\r\nimport ExamGotPoint from './ExamGotPoint';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { Token } from '@core/core.model';\r\n\r\nexport interface SuccessFulModalProps {\r\n desc: string;\r\n point: number;\r\n}\r\n\r\nexport const ExamButtonStyle = {\r\n height: '55px',\r\n width: '185px',\r\n};\r\n\r\nexport const SuccessFulModal: React.FC = ({\r\n desc,\r\n point,\r\n children,\r\n}) => {\r\n const history = useHistory();\r\n const [isRegister, setIsRegister] = useState(true);\r\n\r\n const goTo = (page: string) => {\r\n const storageToken = sessionStorage.getItem('hillToken');\r\n if (storageToken) {\r\n const token: Token = {};\r\n Object.assign(token, JSON.parse(storageToken));\r\n if (token.access_token) {\r\n history.push('/menu');\r\n return;\r\n }\r\n }\r\n history.push('/login', { page });\r\n };\r\n\r\n useEffect(() => {\r\n const locationName = history.location.pathname;\r\n setIsRegister(locationName === '/register' || locationName === '/');\r\n }, [history.location.pathname]);\r\n\r\n return (\r\n
\r\n {desc}\r\n {children ? (\r\n children\r\n ) : (\r\n
\r\n goTo('/menu')}\r\n >\r\n กลับสู่ห้องเรียน\r\n \r\n \r\n history.push(\r\n history.location.pathname === '/success-register-modal'\r\n ? '/point'\r\n : '/member-info'\r\n )\r\n }\r\n >\r\n {isRegister ? 'ดูคะแนนของฉัน' : ' ดูลำดับของฉัน'}\r\n \r\n
\r\n )}\r\n
\r\n );\r\n};\r\n","import RopeAndHeader from '@components/RopeAndHeader';\r\nimport {\r\n SuccessFulModal,\r\n SuccessFulModalProps,\r\n} from '@components/SuccessfulModal';\r\nimport { useAppDispatch } from '@contexts/AppContext';\r\nimport { submitFormInfo } from '@core/@services/exam.service';\r\nimport { SubmitFormInfoRequest, SubmitFormResponse } from 'exam/exam.model';\r\nimport React, { useLayoutEffect, useState } from 'react';\r\nimport ReactPlayer from 'react-player/lazy';\r\nimport './info-video.scss';\r\n\r\nexport interface InfoVideoProps {\r\n title: string;\r\n desc: string;\r\n video: string;\r\n isTakeFlag?: boolean;\r\n isForm?: boolean;\r\n formId?: string;\r\n}\r\nexport const InfoVideo: React.FC = ({\r\n title,\r\n desc,\r\n video,\r\n isTakeFlag,\r\n isForm,\r\n formId,\r\n}) => {\r\n const dispatch = useAppDispatch();\r\n const [isOpenPointSumary, setIsOpenPointSumary] = useState(false);\r\n const [data, setData] = useState({\r\n point: 0,\r\n desc: '',\r\n });\r\n\r\n useLayoutEffect(() => {\r\n const videoContainer = document.getElementById('video-container');\r\n if (videoContainer) {\r\n dispatch({ type: 'SOUND', payload: false });\r\n const timeout = setTimeout(() => {\r\n videoContainer.style.width = '100%';\r\n videoContainer.style.height = '100%';\r\n }, 1000);\r\n\r\n return () => {\r\n clearTimeout(timeout);\r\n };\r\n }\r\n });\r\n\r\n const handleEnded = () => {\r\n dispatch({ type: 'SOUND', payload: true });\r\n if (isForm && !isTakeFlag && formId) {\r\n const param: SubmitFormInfoRequest = {\r\n form_id: formId,\r\n question_value_list: [],\r\n };\r\n submitFormInfo(param).then((response: SubmitFormResponse) => {\r\n const data: SuccessFulModalProps = {\r\n desc: response.result_desc,\r\n point: response.receive_point,\r\n };\r\n setData(data);\r\n setIsOpenPointSumary(true);\r\n });\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n {title}\r\n
\r\n \r\n \r\n
\r\n

\r\n {desc}\r\n

\r\n \r\n {isOpenPointSumary && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n","import { ExamContext } from '@contexts/ExamContext';\r\nimport React, { useContext } from 'react';\r\nimport './info-video.scss';\r\nimport { InfoVideo } from './InfoVideo';\r\n\r\nexport const ExamInfoVideo: React.FC = () => {\r\n const {\r\n examInfo: { exam_title, exam_video, exam_desc },\r\n } = useContext(ExamContext);\r\n\r\n return (\r\n \r\n );\r\n};\r\n","export default __webpack_public_path__ + \"static/media/refresh.ba90258b.svg\";","export default __webpack_public_path__ + \"static/media/time.f2f9f775.svg\";","import './point.scss';\r\n\r\nimport React, { useContext, useEffect, useState } from 'react';\r\nimport { ExamInfo, SubmitExam, SubmitExamResponse } from 'exam/exam.model';\r\n\r\nimport Button from '@components/Button';\r\nimport { ExamContext } from '@contexts/ExamContext';\r\nimport RefreshIcon from '../../assets/layout/exam/refresh.svg';\r\nimport StartScore from '@components/StarScore';\r\nimport TimeIcon from '../../assets/layout/exam/time.svg';\r\nimport { getExamInfo, submitExam } from '@core/@services/exam.service';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { getDateTimeServer } from '@core/@services/date-time.service';\r\n\r\nconst ExamPoint = (props: { isOpen?: boolean; onClose?: any }) => {\r\n const { isOpen, onClose } = props;\r\n const history = useHistory();\r\n const {\r\n examInfo: { exam_id },\r\n answerList,\r\n startDateTime,\r\n endDateTime,\r\n setSubmitScore,\r\n setExamNo,\r\n setStartDateTime,\r\n setAnswerList,\r\n setExamInfo,\r\n } = useContext(ExamContext);\r\n const [fullPoint, setFullPiont] = useState(0);\r\n const [recievePoint, setRecievePoint] = useState(0);\r\n const [spendTime, setSpendTimet] = useState('');\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n const request: SubmitExam = {\r\n submit_flag: false,\r\n exam_id,\r\n start_datetime: startDateTime,\r\n end_datetime: endDateTime,\r\n answer_list: answerList,\r\n };\r\n submitExam(request).then((data: SubmitExamResponse) => {\r\n setFullPiont(data.full_point);\r\n setRecievePoint(data.receive_point);\r\n setSpendTimet(data.spend_time);\r\n });\r\n }\r\n }, [isOpen]);\r\n\r\n const btnSendResultClass =\r\n 'btn-send-result z-30 text-3xl lg:text-7xl tracking-wider rounded-2xl lg:rounded-3xl';\r\n const btnRefreshClass =\r\n 'btn-refresh flex items-center justify-center lg:rounded-3xl lg:text-7xl rounded-2xl text-3xl tracking-wider z-30';\r\n\r\n const onSendResult = () => {\r\n setSubmitScore(true);\r\n onClose();\r\n };\r\n\r\n const onReExam = () => {\r\n getExamInfo(exam_id).then((data: ExamInfo) => {\r\n setExamInfo(data);\r\n getDateTimeServer().then((data: any) => {\r\n setStartDateTime(data.datetime);\r\n setExamNo(1);\r\n setAnswerList([])\r\n history.push('/exam');\r\n onClose();\r\n });\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n {isOpen ? (\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
{spendTime}
\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\n
\r\n
\r\n ) : null}\r\n \r\n );\r\n};\r\n\r\nexport default ExamPoint;\r\n","import ExamButton, { ExamButtonType } from '@components/ExamButton';\r\nimport ExamGotPoint from '@components/ExamGotPoint';\r\nimport { ExamContext } from '@contexts/ExamContext';\r\nimport { submitExam } from '@core/@services/exam.service';\r\nimport { SubmitExam, SubmitExamResponse } from 'exam/exam.model';\r\nimport React, { useContext, useEffect, useState } from 'react';\r\n\r\nconst PointSubmitComplete = (props: { isOpen?: boolean }) => {\r\n const { isOpen } = props;\r\n const {\r\n examInfo: { exam_id },\r\n answerList,\r\n startDateTime,\r\n endDateTime,\r\n } = useContext(ExamContext);\r\n const [point, setPoint] = useState(0);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n const request: SubmitExam = {\r\n submit_flag: true,\r\n exam_id,\r\n start_datetime: startDateTime,\r\n end_datetime: endDateTime,\r\n answer_list: answerList,\r\n };\r\n submitExam(request).then((data: SubmitExamResponse) => {\r\n setPoint(data.receive_point);\r\n });\r\n }\r\n }, [isOpen])\r\n\r\n return (\r\n <>\r\n {isOpen ? (\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 ) : null}\r\n \r\n );\r\n};\r\n\r\nexport default PointSubmitComplete;\r\n","import './exam-layout.scss';\r\n\r\nimport * as React from 'react';\r\n\r\nimport { useContext, useEffect, useRef, useState } from 'react';\r\n\r\nimport Button from '@components/Button';\r\nimport { ExamContext } from '@contexts/ExamContext';\r\nimport ExamPoint from 'exam/point/Point';\r\nimport PointSubmitComplete from 'exam/point/PointSubmitComplete';\r\nimport SoundIcon from '@components/Sound/SoundIcon';\r\nimport { getDateTimeServer } from '@core/@services/date-time.service';\r\nimport { useHistory } from 'react-router-dom';\r\nimport FailModal from '@components/FailModal';\r\n\r\nexport const ExamLayout: React.FC = ({ children }) => {\r\n const [playTime, setPlayTime] = useState(0);\r\n const timerRef = useRef();\r\n const {\r\n examInfo: { question_list },\r\n examNo,\r\n setExamNo,\r\n setEndDateTime,\r\n submitScore,\r\n answerList,\r\n setAnswerList,\r\n startDateTime,\r\n } = useContext(ExamContext);\r\n const [isOpenPointSumary, setIsOpenPointSumary] = useState(false);\r\n const [isOpenPointSubmit, setIsOpenPointSubmit] = useState(false);\r\n const [isOpenModal, setIsOpenModal] = useState(false);\r\n const onClosePointSumary = () => setIsOpenPointSumary(false);\r\n const history = useHistory();\r\n\r\n useEffect(() => {\r\n setPlayTime(0);\r\n }, [startDateTime]);\r\n\r\n useEffect(() => {\r\n timerRef.current = setInterval(() => {\r\n setPlayTime((time) => time + 1);\r\n }, 1000);\r\n return () => {\r\n clearTimeInterval();\r\n };\r\n }, [timerRef, playTime]);\r\n\r\n useEffect(() => {\r\n if (submitScore) {\r\n setIsOpenPointSubmit(true);\r\n }\r\n }, [submitScore]);\r\n\r\n function clearTimeInterval() {\r\n if (timerRef?.current) {\r\n clearInterval(timerRef.current);\r\n }\r\n }\r\n\r\n const renderTime = () => {\r\n const minute = Math.floor(playTime / 60);\r\n const second = playTime % 60;\r\n return (\r\n minute + ':' + (second < 10 ? '0' + second.toString() : second.toString())\r\n );\r\n };\r\n\r\n const onPevious = () => {\r\n const peviousExam = examNo - 1;\r\n\r\n if (peviousExam === 0) {\r\n setAnswerList([]);\r\n history.goBack();\r\n }\r\n\r\n if (peviousExam <= question_list?.length && peviousExam != 0) {\r\n setExamNo(peviousExam);\r\n return;\r\n }\r\n };\r\n\r\n const onNaxt = () => {\r\n if (!answerList[examNo - 1]) {\r\n setIsOpenModal(true);\r\n return;\r\n }\r\n const nextExam = examNo + 1;\r\n if (nextExam <= question_list?.length) {\r\n setExamNo(nextExam);\r\n return;\r\n }\r\n getDateTimeServer().then((data: any) => {\r\n clearTimeInterval();\r\n setEndDateTime(data.datetime);\r\n setIsOpenPointSumary(true);\r\n });\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

\r\n {renderTime()}\r\n

\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
{children}
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n setIsOpenModal(false)}\r\n />\r\n
\r\n );\r\n};\r\n","import { ExamContext } from '@contexts/ExamContext';\r\nimport { getFormInfo } from '@core/@services/exam.service';\r\nimport {\r\n FormInfo,\r\n FormQuestionList,\r\n FormQuestionListDetail,\r\n QuestionValueList,\r\n} from 'exam/exam.model';\r\nimport React, { useContext, useEffect, useRef, useState } from 'react';\r\nimport { useLocation } from 'react-router-dom';\r\nimport './exam.scss';\r\nimport useHeight from '@hooks/useHeight';\r\n\r\nfunction getAnswerList(value: string): QuestionValueList[] {\r\n return JSON.parse(value);\r\n}\r\n\r\ninterface LocationState {\r\n id: string;\r\n}\r\n\r\nexport const Form = () => {\r\n const {\r\n examNo,\r\n submitScore,\r\n formInfo: { form_question_list, form_id },\r\n setFormAnswerList,\r\n formAnswerList,\r\n setFormInfo,\r\n setExamNo,\r\n } = useContext(ExamContext);\r\n\r\n const height = useHeight(100);\r\n\r\n const form_question_id =\r\n form_question_list[examNo - 1].form_question_id || '';\r\n const locationState = useLocation().state;\r\n\r\n const [answer, setAnswer] = useState([]);\r\n\r\n const firstUpdate = useRef(true);\r\n\r\n useEffect(() => {\r\n if (locationState?.id) {\r\n getFormInfo(locationState.id).then((data: FormInfo) => {\r\n setExamNo(1);\r\n setFormInfo(data);\r\n });\r\n }\r\n }, [locationState?.id]);\r\n\r\n useEffect(() => {\r\n if (firstUpdate.current) {\r\n firstUpdate.current = false;\r\n return;\r\n }\r\n\r\n setAnswer(\r\n formAnswerList.question_value_list\r\n .filter((q) => q.form_question_id === form_question_id)\r\n .map((v) => v.value)\r\n );\r\n }, [examNo]);\r\n\r\n const onAnswerChange = (answer: string[]) => {\r\n const answerlist = getAnswerList(\r\n form_question_list[examNo - 1].form_question_detail_default\r\n );\r\n\r\n const newanswer: QuestionValueList[] = answer.map((value) => {\r\n return {\r\n form_question_id,\r\n name: answerlist.find((v) => v.value === value)?.name || '',\r\n value,\r\n };\r\n });\r\n\r\n const question_value_list = formAnswerList.question_value_list.filter(\r\n (value) => value.form_question_id !== form_question_id\r\n );\r\n\r\n question_value_list.push(...newanswer);\r\n\r\n setFormAnswerList({\r\n form_id,\r\n question_value_list: question_value_list,\r\n });\r\n };\r\n\r\n const CheckboxList = (formQuestionList: FormQuestionList) => {\r\n const answers = getAnswerList(\r\n formQuestionList.form_question_detail_default\r\n );\r\n\r\n return answers.map((answerlist: FormQuestionListDetail, index: number) => (\r\n \r\n {\r\n if (answer.includes(answerlist.value)) {\r\n const removed = answer.filter((value) => value !== e.target.value)\r\n setAnswer([...removed]);\r\n onAnswerChange([...removed]);\r\n } else {\r\n setAnswer([...answer, e.target.value]);\r\n onAnswerChange([...answer, e.target.value]);\r\n }\r\n }}\r\n checked={answer.includes(answerlist.value)}\r\n />\r\n \r\n {answerlist.name}\r\n \r\n \r\n ));\r\n };\r\n\r\n const RadioList = (formQuestionList: FormQuestionList) => {\r\n const answers = getAnswerList(\r\n formQuestionList.form_question_detail_default\r\n );\r\n\r\n return answers.map((answerlist: FormQuestionListDetail, index: number) => (\r\n \r\n {\r\n setAnswer([e.target.value]);\r\n onAnswerChange([e.target.value]);\r\n }}\r\n checked={answer.includes(answerlist.value)}\r\n />\r\n \r\n {answerlist.name}\r\n \r\n \r\n ));\r\n };\r\n\r\n return (\r\n
\r\n
\r\n \r\n

\r\n {examNo}.\r\n {form_question_list &&\r\n form_question_list[examNo - 1].form_question_title}\r\n

\r\n \r\n {form_question_list &&\r\n form_question_list[examNo - 1].form_question_detail_default &&\r\n (form_question_list[examNo - 1].input_type_id === 7\r\n ? RadioList(form_question_list[examNo - 1])\r\n : CheckboxList(form_question_list[examNo - 1]))}\r\n
\r\n
\r\n \r\n \r\n );\r\n};\r\n","import { useEffect, useState } from 'react';\r\n\r\nexport default function useHeight(vh: number) {\r\n const [height, setHeight] = useState(`${vh}vh`);\r\n\r\n useEffect(() => {\r\n const onResize = () => {\r\n setHeight(`${(window.innerHeight * vh) / 100}px`);\r\n };\r\n\r\n onResize();\r\n\r\n window.addEventListener('resize', onResize);\r\n\r\n return () => {\r\n window.removeEventListener('resize', onResize);\r\n };\r\n }, [vh]);\r\n\r\n return height;\r\n}\r\n","import '../ExamInfoLayout/exam-info-layout.scss';\r\n\r\nimport * as React from 'react';\r\n\r\nimport { useContext, useEffect } from 'react';\r\nimport { useHistory, useLocation } from 'react-router-dom';\r\n\r\nimport Button from '@components/Button';\r\nimport { ExamContext } from '@contexts/ExamContext';\r\nimport { FormInfo } from 'exam/exam.model';\r\nimport LeftBackItem from '@components/LeftBackItem';\r\nimport StarScore from '@components/StarScore';\r\nimport { getFormInfo } from '@core/@services/exam.service';\r\n\r\ninterface LocationState {\r\n id: string;\r\n}\r\n\r\nexport const FormInfoLayout: React.FC = ({ children }) => {\r\n const {\r\n setExamNo,\r\n setFormInfo,\r\n formInfo: { score, take_flag, form_content_type_id },\r\n } = useContext(ExamContext);\r\n const history = useHistory();\r\n const locationState = useLocation().state;\r\n\r\n useEffect(() => {\r\n if (locationState?.id) {\r\n getFormInfo(locationState.id).then((data: FormInfo) => {\r\n setFormInfo(data);\r\n });\r\n }\r\n }, [locationState?.id]);\r\n\r\n const onExam = () => {\r\n setExamNo(1);\r\n history.push('/form');\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {score}\r\n
\r\n
\r\n history.push('/menu-detail/3')} />\r\n
\r\n
\r\n
{children}
\r\n {take_flag && form_content_type_id === 1 ? (\r\n
\r\n ) : form_content_type_id === 1 ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n
\r\n );\r\n};\r\n","import { ExamContext } from '@contexts/ExamContext';\r\nimport React, { useContext } from 'react';\r\nimport './info-video.scss';\r\nimport { InfoVideo } from './InfoVideo';\r\n\r\nexport const FormInfoVideo: React.FC = () => {\r\n const {\r\n formInfo: { form_title, form_video, form_desc, take_flag, form_id },\r\n } = useContext(ExamContext);\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import '../ExamLayout/exam-layout.scss';\r\n\r\nimport * as React from 'react';\r\n\r\nimport { ExamButtonBG, ExamButtonType } from '@components/ExamButton';\r\nimport {\r\n ExamButtonStyle,\r\n SuccessFulModal,\r\n SuccessFulModalProps,\r\n} from '@components/SuccessfulModal';\r\nimport { useContext, useState } from 'react';\r\n\r\nimport Button from '@components/Button';\r\nimport { ExamContext } from '@contexts/ExamContext';\r\nimport { SubmitFormResponse } from 'exam/exam.model';\r\nimport { submitFormInfo } from '@core/@services/exam.service';\r\nimport { useHistory } from 'react-router-dom';\r\nimport FailModal from '@components/FailModal';\r\n\r\nexport const FormLayout: React.FC = ({ children }) => {\r\n const {\r\n formInfo: { form_question_list },\r\n examNo,\r\n setExamNo,\r\n formAnswerList,\r\n } = useContext(ExamContext);\r\n const history = useHistory();\r\n const [isOpenModal, setIsOpenModal] = useState(false);\r\n const [isOpenPointSumary, setIsOpenPointSumary] = useState(false);\r\n const [data, setData] = useState({\r\n point: 0,\r\n desc: '',\r\n });\r\n\r\n const onPevious = () => {\r\n const peviousExam = examNo - 1;\r\n if (peviousExam === 0) {\r\n history.goBack();\r\n }\r\n if (peviousExam <= form_question_list?.length && peviousExam !== 0) {\r\n setExamNo(peviousExam);\r\n return;\r\n }\r\n };\r\n\r\n const onNaxt = () => {\r\n const question = form_question_list[examNo - 1];\r\n\r\n if (\r\n formAnswerList.question_value_list.findIndex(\r\n (value) => value.form_question_id === question.form_question_id\r\n ) < 0\r\n ) {\r\n setIsOpenModal(true);\r\n return;\r\n }\r\n\r\n const nextExam = examNo + 1;\r\n if (nextExam <= form_question_list?.length) {\r\n setExamNo(nextExam);\r\n return;\r\n }\r\n\r\n submitFormInfo(formAnswerList).then((response: SubmitFormResponse) => {\r\n const data: SuccessFulModalProps = {\r\n desc: response.result_desc,\r\n point: response.receive_point,\r\n };\r\n setData(data);\r\n setIsOpenPointSumary(true);\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
{children}
\r\n {isOpenPointSumary && (\r\n \r\n )}\r\n
\r\n \r\n \r\n
\r\n
\r\n setIsOpenModal(false)}\r\n />\r\n \r\n );\r\n};\r\n","import './info-graphic.scss';\r\n\r\nimport React, { useContext } from 'react';\r\n\r\nimport { ExamContext } from '@contexts/ExamContext';\r\n\r\nconst InfoGraphic = () => {\r\n const {\r\n examInfo: { exam_infographic_image },\r\n } = useContext(ExamContext);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default InfoGraphic;\r\n","import * as React from 'react';\r\n\r\nimport LeftBackItem from '@components/LeftBackItem';\r\n\r\nexport const InformationLayout: React.FC = ({ children }) => {\r\n return (\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {children}\r\n
\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\n\r\nconst InformationPage = () => {\r\n return (\r\n
\r\n
\r\n

ข้อมูลอธิบายการใช้งาน

\r\n
\r\n \r\n Hill’s School เป็นแพลทฟอร์มการเรียนรู้ในรูปแบบออนไลน์\r\n อยู่ภายใต้ลิขสิทธิ์ของบริษัท ฮิลส์ เพ็ท นูทริชั่น (ประเทศไทย) จำกัด\r\n และได้รับมอบหมายให้จัดทำและดูแลข้อมูลโดยบริษัท พีเบอร์รี่ สตูดิโอ\r\n จำกัด\r\n หากท่านต้องการสอบถามข้อมูลเพิ่มเติมหรือต้องการแจ้งยกเลิกเงื่อนไขนโยบายควา\r\n มเป็นส่วนตัว หรือต้องการปรึกษาเกี่ยวกับสุขภาพสัตว์เลี้ยง\r\n \r\n กรุณาติดต่อศูนย์บริการให้คำปรึษา หมายเลขโทรศัพท์ 02- 229-8200\r\n ตั้งแต่วันจันทร์ - ศุกร์ เวลา 08.00 - 16.30 น.\r\n \r\n \r\n
\r\n

\r\n ขั้นตอนการสมัครใช้งาน Hill’s School\r\n

\r\n
\r\n
    \r\n
  1. \r\n Add Line @hillsschool จากนั้นกดปุ่มลงทะเบียนที่เมนูด้านล่าง\r\n
  2. \r\n
  3. \r\n กรอกข้อมูลส่วนตัวของท่าน จากนั้นกดยืนยัน\r\n
  4. \r\n
  5. เริ่มใช้งานแพลทฟอร์มได้ทันที
  6. \r\n
\r\n
\r\n

ขั้นตอนการสะสมคะแนน

\r\n
\r\n
\r\n ท่านสามารถได้รับคะแนนสะสม จากการร่วมกิจกรรมของ Hill’s School\r\n ดังต่อไปนี้\r\n
\r\n
    \r\n
  1. \r\n รับชมสื่อการเรียนรู้ในรูปแบบ VDO\r\n และ/หรือตอบคำถามหลังจากรับชมให้ถูกต้อง\r\n
  2. \r\n
  3. \r\n อ่านบทความให้ความรู้ พร้อมทั้งตอบคำถามท้ายบทความให้ถูกต้อง\r\n
  4. \r\n
  5. \r\n สำหรับท่านที่ลงทะเบียนเข้าใช้งานครั้งแรก รับคะแนนพิเศษแรกเข้า\r\n
  6. \r\n
  7. \r\n ท่านจะได้รับคะแนนพิเศษ เมื่อถึงวันเกิดของท่าน\r\n
  8. \r\n
\r\n
\r\n คะแนนที่สะสม จะมีอายุ 1 ปี (นับจากวันที่เริ่มสะสม)\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\n
\r\n
\r\n ท่านสามารถตรวจสอบอันดับคะแนนของท่านเมื่อเปรียบเทียบกับผู้ใช้งานท่านอื่นๆโดยจะเรียงลำดับตามคะแนนและการใช้เวลาในการทำข้อสอบน้อยที่สุด\r\n
\r\n
\r\n โดยผู้ที่อยู่ในอันดับสูงสุด 5 อันดับแรก จะได้รับ Xiaomi Watch Lite\r\n ท่านละ 1 รางวัล (ประกาศผลในเดือนธันวาคม 2564)\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default InformationPage;\r\n","import Loading from '@components/Loading';\r\nimport { LiffService } from '@core/@services/Liff.service';\r\nimport { Token } from '@core/core.model';\r\nimport { env } from '@core/env';\r\nimport LoginUser from '@core/LoginUser';\r\nimport { useEffect, useState } from 'react';\r\nimport { useHistory, useLocation } from 'react-router-dom';\r\nimport { LoginResponse } from './login.model';\r\n\r\ninterface LocationLoginState {\r\n page: string;\r\n}\r\n\r\nconst Login = () => {\r\n const history = useHistory();\r\n const page = useLocation();\r\n const [path, setPath] = useState('menu');\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n useEffect(() => {\r\n const liffId = env.loginLiffId || '';\r\n LiffService.connect(liffId, login);\r\n setPath(page.state?.page ? page.state.page : 'menu');\r\n }, []);\r\n\r\n const login = (profile: {\r\n userId: string;\r\n displayName: string;\r\n pictureUrl?: string;\r\n }) => {\r\n LoginUser({ line_id: profile.userId, otp_flag: true })\r\n .then((res: LoginResponse) => {\r\n const hillToken: Token = {\r\n access_token: res.token,\r\n };\r\n const campaignInfo = res.campaign_info ? res.campaign_info[0] : null;\r\n sessionStorage.setItem('hillToken', JSON.stringify(hillToken));\r\n sessionStorage.setItem('rankNo', `${res.rank_no}`);\r\n sessionStorage.setItem('campaignInfo', JSON.stringify(campaignInfo));\r\n sessionStorage.setItem('liff-profile', JSON.stringify(profile));\r\n sessionStorage.setItem(\r\n 'otp_pass_flag',\r\n JSON.stringify(res.otp_pass_flag)\r\n );\r\n sessionStorage.setItem(\r\n 'keep_data_flag',\r\n JSON.stringify(res.keep_data_flag)\r\n );\r\n sessionStorage.setItem(\r\n 'transfer_data_flag_profile',\r\n JSON.stringify(res.transfer_data_flag)\r\n );\r\n setIsLoading(false);\r\n\r\n if (!res.otp_pass_flag) {\r\n history.push('/member-info-edit', {\r\n line_id: profile.userId,\r\n source: '/otp',\r\n });\r\n\r\n return;\r\n }\r\n\r\n history.push(path);\r\n })\r\n .catch((error) => {\r\n console.log(error, 'Login error');\r\n });\r\n };\r\n return <>{isLoading && };\r\n};\r\n\r\nexport default Login;\r\n","import Loading from '@components/Loading';\r\nimport { LiffService } from '@core/@services/Liff.service';\r\nimport { Token } from '@core/core.model';\r\nimport { env } from '@core/env';\r\nimport LoginUser from '@core/LoginUser';\r\nimport { useEffect, useState } from 'react';\r\nimport { useHistory, useLocation } from 'react-router-dom';\r\nimport { LoginResponse } from './login.model';\r\n\r\ninterface LocationLoginState {\r\n page: string;\r\n}\r\nconst Login = () => {\r\n const history = useHistory();\r\n const page = useLocation();\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n useEffect(() => {\r\n const liffId = env.pointLiffId || '';\r\n LiffService.connect(liffId, login);\r\n }, []);\r\n\r\n const login = (profile: {\r\n userId: string;\r\n displayName: string;\r\n pictureUrl?: string;\r\n }) => {\r\n LoginUser({ line_id: profile.userId, otp_flag: true })\r\n .then((res: LoginResponse) => {\r\n const hillToken: Token = {\r\n access_token: res.token,\r\n };\r\n const campaignInfo = res.campaign_info ? res.campaign_info[0] : null;\r\n sessionStorage.setItem('hillToken', JSON.stringify(hillToken));\r\n sessionStorage.setItem('rankNo', `${res.rank_no}`);\r\n sessionStorage.setItem('campaignInfo', JSON.stringify(campaignInfo));\r\n sessionStorage.setItem('liff-profile', JSON.stringify(profile));\r\n sessionStorage.setItem('keep_data_flag', JSON.stringify(res.keep_data_flag));\r\n sessionStorage.setItem(\r\n 'otp_pass_flag',\r\n JSON.stringify(res.otp_pass_flag)\r\n );\r\n sessionStorage.setItem(\r\n 'keep_data_flag',\r\n JSON.stringify(res.keep_data_flag)\r\n );\r\n sessionStorage.setItem(\r\n 'transfer_data_flag_profile',\r\n JSON.stringify(res.transfer_data_flag)\r\n );\r\n setIsLoading(false);\r\n\r\n if (!res.otp_pass_flag) {\r\n history.push('/member-info-edit', {\r\n line_id: profile.userId,\r\n source: '/otp',\r\n });\r\n\r\n return;\r\n }\r\n\r\n history.push('member-info?isCheckRedeem=true');\r\n })\r\n .catch((error) => {\r\n console.log(error, 'Login error');\r\n });\r\n };\r\n return <>{isLoading && };\r\n};\r\n\r\nexport default Login;\r\n","import Button from '@components/Button';\r\nimport { getExamPointList } from '@core/@services/exam.service';\r\nimport { PointResponse, SubmitPointHistory } from 'exam/exam.model';\r\nimport React, { useEffect, useState } from 'react';\r\nimport StarIcon from '../../assets/layout/exam-info/star.svg';\r\nimport TimeIcon from '../../assets/layout/exam/time.svg';\r\nimport './point-history.scss';\r\n\r\nconst ExamPointHistory = ({ isOpen, onClose }) => {\r\n const [data, setData] = useState();\r\n\r\n useEffect(() => {\r\n const req: SubmitPointHistory = {\r\n page_index: 1,\r\n page_size: 0,\r\n };\r\n getExamPointList(req).then((res) => {\r\n setData(res);\r\n });\r\n }, []);\r\n\r\n const getReceivePoint = (point: number): string => {\r\n return point === 0 ? `${point}` : point > 0 ? `+${point}` : `${point}`;\r\n };\r\n\r\n return (\r\n <>\r\n {isOpen && (\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n {data?.point_list?.map((d) => (\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n {d.point_type !== 3 && (\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\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 ExamPointHistory;\r\n","import * as React from 'react';\r\n\r\ntype AvatarProps = {\r\n background: string;\r\n color: string;\r\n};\r\nexport const Avatar: React.FC = ({\r\n background,\r\n color,\r\n ...props\r\n}) => {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","export default __webpack_public_path__ + \"static/media/winner.f6abf74d.svg\";","import { Avatar } from '@components/Avatar';\r\nimport Button from '@components/Button';\r\nimport { getExamRanking } from '@core/@services/exam.service';\r\nimport { Ranking } from 'exam/exam.model';\r\nimport React, { useEffect, useState } from 'react';\r\nimport styled, { CSSProperties } from 'styled-components';\r\nimport StarIcon from '../../assets/layout/exam-info/star.svg';\r\nimport TimeIcon from '../../assets/layout/exam/time.svg';\r\nimport LeaderIcon from '../../assets/layout/exam/winner.svg';\r\nimport './ranking.scss';\r\n\r\nconst imageStyle: CSSProperties = {\r\n display: 'inline-block',\r\n width: '39px',\r\n height: ' 39px',\r\n objectFit: 'cover',\r\n marginTop: '-1rem',\r\n borderRadius: '50%',\r\n};\r\n\r\nexport const ExamRanking = ({ isOpen, onClose }) => {\r\n const [data, setData] = useState();\r\n\r\n useEffect(() => {\r\n getExamRanking().then((res) => {\r\n setData(res);\r\n });\r\n }, []);\r\n\r\n const defaultImage = (\r\n \r\n );\r\n\r\n return (\r\n <>\r\n {isOpen && (\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 {data?.ranking_list[1].line_image ? (\r\n \r\n ) : (\r\n defaultImage\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\n {data?.ranking_list[0].line_image ? (\r\n \r\n ) : (\r\n defaultImage\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\n {data?.ranking_list[2].line_image ? (\r\n \r\n ) : (\r\n defaultImage\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\n
\r\n {data?.ranking_list.slice(3).map((d) => (\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {d.line_image ? (\r\n \r\n ) : (\r\n defaultImage\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 \"star\"\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 ExamRanking;\r\n","import axios from \"@core/axios\";\r\n\r\nconst GetMemberInfo = () => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(\"/Member/reqMemberInfo\", {})\r\n .then((res: any) => {\r\n if (res.status === 200) {\r\n return resolve(res);\r\n }\r\n }).catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport default GetMemberInfo;","export default __webpack_public_path__ + \"static/media/edit.409a19bd.svg\";","import '../member-info/member-info.scss';\r\n\r\nimport React, { useEffect, useState } from 'react';\r\n\r\nimport Button from '@components/Button';\r\nimport ExamPointHistory from 'exam/point-history/PointHistory';\r\nimport ExamRanking from 'exam/ranking/Ranking';\r\nimport GetMemberInfo from 'member/api/GetMemberInfo';\r\nimport { MemberInfoResponse } from 'member/member.model';\r\nimport StarIcon from '../../assets/layout/exam-info/star.svg';\r\nimport TimeIcon from '../../assets/layout/exam/time.svg';\r\nimport EditIcon from '../../assets/layout/profile/edit.svg';\r\nimport { checkAlertRedeem } from '@core/@services/coupon.service';\r\nimport { SuccessFulModal } from '@components/SuccessfulModal';\r\nimport { CheckAlertRedeemResponse } from 'coupon/coupon.model';\r\nimport RedeemCouponFooter from 'coupon/redeem-coupon/RedeemCouponFooter';\r\nimport { Link, useHistory, useLocation } from 'react-router-dom';\r\n\r\nexport interface LocationState {\r\n isCheckRedeem: boolean;\r\n}\r\nconst MemberInfo = () => {\r\n const [memberInfo, setMemberInfo] = useState();\r\n const [isOpenExamPointHistory, setIsOpenExamPointHistory] = useState(false);\r\n const [isOpenExamRanking, setIsOpenExamRanking] = useState(false);\r\n const [redeemDesc, setRedeemDesc] = useState('');\r\n const onCloseExamPointHistory = () => setIsOpenExamPointHistory(false);\r\n const onCloseExamRanking = () => setIsOpenExamRanking(false);\r\n const history = useHistory();\r\n const locationState = useLocation();\r\n\r\n useEffect(() => {\r\n GetMemberInfo()\r\n .then((res: any) => {\r\n if (!res?.data?.otp_pass_flag) {\r\n const profile = JSON.parse(\r\n sessionStorage.getItem('liff-profile') || '{}'\r\n );\r\n\r\n history.push('/member-info-edit', {\r\n line_id: profile.userId,\r\n source: '/otp',\r\n });\r\n\r\n return;\r\n }\r\n\r\n setMemberInfo(res.data);\r\n })\r\n .catch((error) => {\r\n console.log(error, 'Get member info failer');\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (locationState.search) {\r\n checkAlertRedeem().then((res: CheckAlertRedeemResponse) => {\r\n setRedeemDesc(res.campaign_info[0].campaign_desc);\r\n });\r\n }\r\n }, [locationState.search]);\r\n\r\n const onClose = () => {\r\n setRedeemDesc('');\r\n };\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n setIsOpenExamRanking(true)}\r\n >\r\n ดูลำดับคะแนน\r\n \r\n\r\n setIsOpenExamPointHistory(true)}\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\n
\r\n
\r\n \r\n \r\n {redeemDesc && (\r\n \r\n
\r\n history.push('/coupon')}\r\n submitTitle=\"แลกคูปอง\"\r\n />\r\n
\r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default MemberInfo;\r\n","export default __webpack_public_path__ + \"static/media/tag.3036b4ad.svg\";","import { useEffect, useState } from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport '../exam/ranking/ranking.scss';\r\nimport { Avatar } from './Avatar';\r\nimport tag from '../assets/layout/tag.svg';\r\n\r\ninterface Profile {\r\n pictureUrl: string;\r\n rankNo: string;\r\n}\r\n\r\nexport const ImageProfile: React.FC = () => {\r\n const [profile, setProfile] = useState({\r\n pictureUrl: '',\r\n rankNo: '',\r\n });\r\n\r\n const history = useHistory();\r\n\r\n useEffect(() => {\r\n const { pictureUrl } = JSON.parse(\r\n sessionStorage.getItem('liff-profile') || '{}'\r\n );\r\n const rankNo = JSON.parse(sessionStorage.getItem('rankNo') || '{}');\r\n setProfile({ pictureUrl, rankNo });\r\n }, []);\r\n\r\n const onClick = () => {\r\n history.push('/member-info');\r\n };\r\n\r\n return (\r\n \r\n {profile.pictureUrl ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {+profile.rankNo > 0 && (\r\n
\r\n \"tag\"\r\n
{profile.rankNo}
\r\n
\r\n )}\r\n \r\n );\r\n};\r\n","import '../MemberInfoLayout/member-info-layout.scss';\r\nimport '../MemberInfoLayout/member-info-layout.scss';\r\n\r\nimport { useEffect, useState } from 'react';\r\n\r\nimport Button from '@components/Button';\r\nimport { ImageProfile } from '@components/ImageProfile';\r\nimport { Information } from '@components/Information';\r\nimport LeftBackItem from '@components/LeftBackItem';\r\nimport liff from '@line/liff';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nexport const MemberInfoLayout: React.FC = ({ children }) => {\r\n const [lineName, setLineName] = useState('');\r\n const [isGiff, setIsGiff] = useState(true);\r\n const history = useHistory();\r\n\r\n useEffect(() => {\r\n const { displayName } = JSON.parse(\r\n sessionStorage.getItem('liff-profile') || ''\r\n );\r\n setLineName(displayName);\r\n validateBtn(history.location.pathname);\r\n }, []);\r\n\r\n const onClickMenu = (path: string) => {\r\n history.push(path);\r\n };\r\n\r\n useEffect(() => {\r\n validateBtn(history.location.pathname);\r\n }, [history.location.pathname]);\r\n\r\n const validateBtn = (path: string) => {\r\n setIsGiff(path === '/member-info');\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n history.push('menu')} />\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 {children}\r\n
\r\n
\r\n \r\n onClickMenu('menu')}\r\n />\r\n {isGiff ? (\r\n onClickMenu('coupon')}\r\n />\r\n ) : (\r\n onClickMenu('member-info')}\r\n />\r\n )}\r\n
\r\n
\r\n \r\n );\r\n};\r\n","import axios from \"@core/axios\";\r\nimport { ExamListRequest } from \"../menu.model\";\r\n\r\nconst GetExamList = (data: ExamListRequest) => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(`/Member/reqExamList`, data)\r\n .then((res: any) => {\r\n if (res.status === 200) {\r\n return resolve(res);\r\n }\r\n }).catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport default GetExamList;","import axios from \"@core/axios\";\r\n\r\nconst GetFormList = () => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(`/Member/reqFormList`, {})\r\n .then((res: any) => {\r\n if (res.status === 200) {\r\n return resolve(res);\r\n }\r\n }).catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport default GetFormList;","import { ExamList, ExamListRequest, FormList } from './menu.model';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { useHistory, useParams } from 'react-router-dom';\r\n\r\nimport Button from '@components/Button';\r\nimport GetExamList from './api/GetExamList';\r\nimport GetFormList from './api/GetFormList';\r\nimport { ImageProfile } from '@components/ImageProfile';\r\nimport StartScore from '@components/StarScore';\r\n\r\nconst MenuDetail = () => {\r\n const [menuName, setMenuName] = useState('');\r\n const [examList, setExamList] = useState([]);\r\n const { id }: any = useParams();\r\n const history = useHistory();\r\n\r\n useEffect(() => {\r\n if (id <= 2) {\r\n const req: ExamListRequest = {\r\n exam_type_id: id,\r\n };\r\n // แบบทดสอบ\r\n GetExamList(req)\r\n .then((res: any) => {\r\n setMenuName(res.data.exam_type_name);\r\n setExamList(res.data.exam_list);\r\n })\r\n .catch((error) => {\r\n console.log(error, 'Get exam list error');\r\n });\r\n } else {\r\n //(กิจกรรม)แบบสอบถาม\r\n GetFormList()\r\n .then((res: any) => {\r\n prepareFormList(res.data.form_list);\r\n setMenuName('กิจกรรม');\r\n })\r\n .catch((error) => {\r\n console.log(error, 'Get exam list error');\r\n });\r\n }\r\n }, []);\r\n\r\n const prepareFormList = (data: FormList[]) => {\r\n const result: ExamList[] = [];\r\n data.map((d: FormList) => {\r\n const exam: ExamList = {\r\n exam_cover_image: d.form_image,\r\n exam_title: d.form_title,\r\n exam_receive_point: 0,\r\n exam_point: d.form_point,\r\n exam_sp_point: 0,\r\n take_flag: d.take_flag,\r\n exam_content_type_id: d.form_content_type_id,\r\n exam_id: d.form_id,\r\n isForm: true,\r\n };\r\n result.push(exam);\r\n });\r\n setExamList(result);\r\n };\r\n\r\n const onClickExam = (\r\n type: number,\r\n examId: string,\r\n isForm: boolean = false,\r\n isTakeFlag: boolean\r\n ) => {\r\n const path = isForm ? 'form-info' : 'exam-info';\r\n console.log(isForm, type, isTakeFlag);\r\n if (isForm && type !== 1 && isTakeFlag) {\r\n return;\r\n }\r\n\r\n if (type === 1) {\r\n history.push(`/${path}/video`, { id: examId, menuId: id });\r\n } else {\r\n if (isForm) {\r\n history.push('/form', { id: examId });\r\n } else {\r\n history.push(`/${path}/graphic`, { id: examId, menuId: id });\r\n }\r\n }\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n {menuName}\r\n \r\n
\r\n
\r\n {examList.map((exam: ExamList, index: number) => {\r\n return (\r\n \r\n \r\n onClickExam(\r\n exam.exam_content_type_id,\r\n exam.exam_id,\r\n exam.isForm,\r\n exam.take_flag\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\n })}\r\n
\r\n \r\n );\r\n};\r\nexport default MenuDetail;\r\n","import * as React from 'react';\r\n\r\nimport { Information } from '@components/Information';\r\nimport LeftBackItem from '@components/LeftBackItem';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { ImageProfile } from '@components/ImageProfile';\r\n\r\nexport const MenuDetailLayout: React.FC = ({ children }) => {\r\n const history = useHistory();\r\n return (\r\n
\r\n
\r\n
\r\n history.push('/menu')} />\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {children}\r\n
\r\n );\r\n};\r\n","import React, { useEffect } from 'react';\r\n\r\nimport { Information } from '@components/Information';\r\nimport LeftBackItem from '@components/LeftBackItem';\r\nimport liff from '@line/liff';\r\nimport { useAppDispatch } from '@contexts/AppContext';\r\nimport { ImageProfile } from '@components/ImageProfile';\r\n\r\nexport const MenuLayout: React.FC = ({ children }) => {\r\n const dispatch = useAppDispatch();\r\n const closeWindow = () => {\r\n liff.closeWindow();\r\n };\r\n\r\n useEffect(() => {\r\n dispatch({ type: 'BG_SOUND', payload: true });\r\n }, []);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {children}\r\n
\r\n );\r\n};\r\n","import axios from '@core/axios';\r\nimport { AxiosResponse } from 'axios';\r\nimport { MenuListResponse } from '../menu.model';\r\n\r\nconst GetMenuList = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(`/Member/reqMenuList`, {})\r\n .then((res: AxiosResponse) => {\r\n if (res.status === 200) {\r\n return resolve(res.data);\r\n }\r\n })\r\n .catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport default GetMenuList;\r\n","import { MenuList, MenuListResponse } from './menu.model';\r\nimport { useEffect, useState } from 'react';\r\n\r\nimport GetMenuList from './api/GetMenuList';\r\nimport React from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport './menu.scss';\r\n\r\nconst MenuPage: React.FC = () => {\r\n const [menuList, setMenuList] = useState([]);\r\n const history = useHistory();\r\n\r\n useEffect(() => {\r\n if (sessionStorage.getItem('keep_data_flag') !== 'true') {\r\n history.push('/terms-and-conditions', {\r\n source: 'menu',\r\n });\r\n return;\r\n }\r\n\r\n GetMenuList()\r\n .then((res: MenuListResponse) => {\r\n setMenuList([...res.menu_list]);\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n });\r\n }, []);\r\n\r\n const onClick = (id: number) => {\r\n if (sessionStorage.getItem('keep_data_flag') !== 'true') {\r\n history.push('/terms-and-conditions');\r\n return;\r\n }\r\n\r\n if (id === 4) {\r\n history.push(`/document`);\r\n return;\r\n }\r\n history.push(`/menu-detail/${id}`);\r\n };\r\n\r\n return (\r\n \r\n {menuList.map((menu: MenuList) => (\r\n onClick(menu.menu_id)}\r\n >\r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default MenuPage;\r\n","import React, { useEffect } from 'react';\r\n\r\nimport { useAppDispatch } from './AppContext';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\nconst PageProvider: React.FC = ({ children }) => {\r\n const location = useLocation();\r\n const appDispatch = useAppDispatch();\r\n\r\n useEffect(() => {\r\n if (location.pathname === '/exam') {\r\n appDispatch({ type: 'BG_SOUND', payload: false });\r\n appDispatch({ type: 'EXAM_BG_SOUND', payload: true });\r\n } else {\r\n appDispatch({ type: 'BG_SOUND', payload: true });\r\n appDispatch({ type: 'EXAM_BG_SOUND', payload: false });\r\n }\r\n return () => {\r\n appDispatch({ type: 'BG_SOUND', payload: false });\r\n appDispatch({ type: 'EXAM_BG_SOUND', payload: false });\r\n };\r\n }, [location]);\r\n\r\n return <>{children};\r\n};\r\n\r\nexport { PageProvider };\r\n","import React from 'react';\r\n\r\ninterface PropsType {\r\n title: string;\r\n required?: boolean;\r\n}\r\n\r\nconst FormLabel: React.FC = ({ title, required }) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default FormLabel;\r\n","import axios from \"@core/axios\";\r\nimport { PrefixRequest } from \"member/member.model\";\r\n\r\nconst GetPrefix = (data: PrefixRequest) => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(`/Member/reqPrefixs`, data)\r\n .then((res: any) => {\r\n if (res.status === 200) {\r\n return resolve(res);\r\n }\r\n }).catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport default GetPrefix;","import React, { InputHTMLAttributes } from 'react';\r\n\r\nimport './Input.scss'\r\n\r\nconst Input = React.forwardRef<\r\n HTMLInputElement,\r\n InputHTMLAttributes\r\n>((props, ref) => {\r\n return (\r\n \r\n );\r\n});\r\n\r\nexport default Input;\r\n","import React, { InputHTMLAttributes } from 'react';\r\n\r\nconst Select = React.forwardRef>((props, ref) => {\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n});\r\n\r\nexport default Select;\r\n","import Axios from 'axios';\r\nimport Button from '@components/Button';\r\nimport FormLabel from '@components/FormLabel';\r\nimport { PrefixList, PrefixRequest } from 'member/member.model';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { useForm } from 'react-hook-form';\r\nimport GetPrefix from 'member/api/GetPrefix';\r\nimport Input from '@components/Input/Input';\r\nimport Select from '@components/Select';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\ninterface PropsType {\r\n data: any;\r\n onSave: (value: any) => void;\r\n}\r\n\r\nconst RegisterForm: React.FC = (props) => {\r\n const { data, onSave } = props;\r\n\r\n const form = useForm();\r\n const history = useHistory();\r\n\r\n const [dropDownOption, setDropDownOption] = useState([]);\r\n\r\n useEffect(() => {\r\n form.setValue('prefix_id', data.prefix_id);\r\n form.setValue('first_name', data.first_name);\r\n form.setValue('last_name', data.last_name);\r\n form.setValue('birth_date', data.birth_date);\r\n form.setValue('mobile_no', data.mobile_no);\r\n }, [data]);\r\n\r\n useEffect(() => {\r\n Axios.all([GetPrefix({ member_type_id: 1 })])\r\n .then(\r\n Axios.spread((...res: any) => {\r\n setDropDownOption(res[0]?.data ? res[0].data.prefix_list : []);\r\n form.setValue('prefix_id', res[0].data.prefix_list[0].prefix_id);\r\n })\r\n )\r\n .catch((errors: any) => {\r\n console.log('Error get option value' + errors);\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (sessionStorage.getItem('keep_data_flag') === 'true') {\r\n form.setValue('accepted_term', true);\r\n }\r\n }, []);\r\n\r\n const onClickTerms = () => {\r\n history.push('/terms-and-conditions', {\r\n source: '/',\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {dropDownOption.map((option) => {\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\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\n\r\nexport default RegisterForm;\r\n","import axios from '@core/axios';\r\nimport { AxiosResponse } from 'axios';\r\nimport { SendOtpSMSRequest, SendOtpSMSResponse } from 'member/member.model';\r\n\r\nconst SendOtpSMS = (data: SendOtpSMSRequest): Promise => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(`/Member/sendSmsOtp`, data)\r\n .then((res: AxiosResponse) => {\r\n if (res.status === 200) {\r\n return resolve(res.data);\r\n }\r\n })\r\n .catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport default SendOtpSMS;\r\n","export default __webpack_public_path__ + \"static/media/re-send.b3135473.svg\";","import axios from '@core/axios';\r\nimport { AxiosResponse } from 'axios';\r\nimport { ValidateOtpRequest, ValidateOtpResponse } from 'member/member.model';\r\n\r\nconst ValidateOtp = (data: ValidateOtpRequest): Promise => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(`/Member/validateOtp`, data)\r\n .then((res: AxiosResponse) => {\r\n if (res.status === 200) {\r\n return resolve(res.data);\r\n }\r\n })\r\n .catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport default ValidateOtp;\r\n","import Axios from 'axios';\r\nimport Input from '@components/Input/Input';\r\nimport { useEffect, useState } from 'react';\r\nimport SendOtpSMS from 'member/api/SendOtpSMS';\r\nimport Resend from 'assets/icon/re-send.svg';\r\nimport ValidateOtp from 'member/api/ValidateOtp';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\ninterface PropType {\r\n line_id?: string;\r\n mobile_no?: string;\r\n onSave: (value: any) => void;\r\n onFailed: () => void;\r\n}\r\n\r\nconst OtpForm: React.FC = (props) => {\r\n const { line_id, mobile_no, onSave, onFailed } = props;\r\n\r\n const [mobileNo, setMobileNo] = useState(mobile_no);\r\n const [value, setValue] = useState('');\r\n const [ref, setRef] = useState('XXXXX');\r\n\r\n useEffect(() => {\r\n sendOtpSms();\r\n }, [mobile_no]);\r\n\r\n const sendOtpSms = () => {\r\n Axios.all([SendOtpSMS({ mobile_no, line_id })])\r\n .then(\r\n Axios.spread((...res: any) => {\r\n if (res[0].result_code !== '0') {\r\n alert(res[0].result_desc);\r\n onFailed();\r\n return;\r\n }\r\n\r\n if (res[0].ref_code) setRef(res[0].ref_code);\r\n\r\n if (res[0].mobile_no) setMobileNo(res[0].mobile_no);\r\n })\r\n )\r\n .catch((errors: any) => {\r\n console.log('Error get option value' + errors);\r\n });\r\n };\r\n\r\n const validateOtp = (otp: string) => {\r\n ValidateOtp({\r\n mobile_no: mobileNo,\r\n ref_code: ref,\r\n otp: otp,\r\n })\r\n .then((res) => {\r\n onSave({ otp_token: res.otp_token });\r\n })\r\n .catch((errors: any) => {\r\n console.log('Error get option value' + errors);\r\n });\r\n };\r\n\r\n const onChange = (e: React.ChangeEvent) => {\r\n if (e.target.value.length > 6) return;\r\n\r\n setValue(e.target.value);\r\n\r\n if (e.target.value.length === 6) {\r\n validateOtp(e.target.value);\r\n return;\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n
\r\n \r\n
\r\n

กรุณาป้อนรหัส OTP ที่ได้รับจาก SMS หมายเลข

\r\n

\r\n {mobile_no} ที่คุณได้ลงทะเบียนไว้เพื่อยืนยันตัวตน\r\n

\r\n
\r\n
\r\n

รหัสอ้างอิง: {ref} จะหมดอายุภายใน 5 นาที

\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n

\r\n ส่งรหัส OTP ใหม่\r\n

\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nOtpForm.defaultProps = {\r\n onFailed: () => {},\r\n};\r\n\r\nexport default OtpForm;\r\n","import axios from \"@core/axios\";\r\n\r\nconst GetProvince = () => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .get(`/Member/reqProvinceList`)\r\n .then((res: any) => {\r\n if (res.status === 200) {\r\n return resolve(res);\r\n }\r\n }).catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport default GetProvince;","import axios from \"@core/axios\";\r\n\r\nconst GetEmployeePosition = () => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .get(`/Member/reqEmpPositionList`)\r\n .then((res: any) => {\r\n if (res.status === 200) {\r\n return resolve(res);\r\n }\r\n }).catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport default GetEmployeePosition;","import Axios from 'axios';\r\nimport FormLabel from '@components/FormLabel';\r\nimport { useEffect, useState } from 'react';\r\nimport { useForm } from 'react-hook-form';\r\nimport GetProvince from 'member/api/GetProvinces';\r\nimport { EmployeePosition, Province } from 'member/member.model';\r\nimport Button from '@components/Button';\r\nimport GetEmployeePosition from 'member/api/GetEmployeePosition';\r\nimport Select from '@components/Select';\r\n\r\ninterface PropType {\r\n onSave: (value: any) => void;\r\n}\r\n\r\nconst StaffForm: React.FC = (props) => {\r\n const { onSave } = props;\r\n\r\n const form = useForm();\r\n\r\n const [provinces, setProvinces] = useState([]);\r\n const [positions, setPositions] = useState([]);\r\n\r\n useEffect(() => {\r\n Axios.all([GetProvince(), GetEmployeePosition()])\r\n .then(\r\n Axios.spread((...res: any) => {\r\n setProvinces(res[0]?.data ? res[0].data.province_list : []);\r\n setPositions(res[1]?.data ? res[1].data.emp_position_list : []);\r\n })\r\n )\r\n .catch((errors: any) => {\r\n console.log('Error get option value' + errors);\r\n });\r\n }, []);\r\n\r\n const onSubmit = (data: any) => {\r\n onSave({ ...data, member_type_id: 1 });\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n \r\n {positions.map((option) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n \r\n \r\n {provinces.map((option) => {\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\nexport default StaffForm;\r\n","import axios from \"@core/axios\";\r\n\r\nconst GetUniversity = () => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .get(`/Member/reqUniversityList`)\r\n .then((res: any) => {\r\n if (res.status === 200) {\r\n return resolve(res);\r\n }\r\n }).catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport default GetUniversity;","import axios from \"@core/axios\";\r\n\r\nconst GetStudentVersion = () => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .get(`/Member/reqStudentVersionList`)\r\n .then((res: any) => {\r\n if (res.status === 200) {\r\n return resolve(res);\r\n }\r\n }).catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport default GetStudentVersion;","import Axios from 'axios';\r\nimport FormLabel from '@components/FormLabel';\r\nimport { StdVersion, University } from 'member/member.model';\r\nimport { useEffect, useState } from 'react';\r\nimport { useForm } from 'react-hook-form';\r\nimport GetUniversity from 'member/api/GetUniversity';\r\nimport Button from '@components/Button';\r\nimport GetStudentVersion from 'member/api/GetStudentVersion';\r\nimport Select from '@components/Select';\r\n\r\ninterface PropType {\r\n onSave: (value: any) => void;\r\n}\r\n\r\nconst StdVeterinaryForm: React.FC = (props) => {\r\n const { onSave } = props;\r\n\r\n const form = useForm();\r\n\r\n const [versions, setVersions] = useState([]);\r\n const [universities, setUniversities] = useState([]);\r\n\r\n useEffect(() => {\r\n Axios.all([GetUniversity(), GetStudentVersion()])\r\n .then(\r\n Axios.spread((...res: any) => {\r\n setUniversities(res[0]?.data ? res[0].data.university_list : []);\r\n setVersions(res[1]?.data ? res[1].data.student_version_list : []);\r\n })\r\n )\r\n .catch((errors: any) => {\r\n console.log('Error get option value' + errors);\r\n });\r\n }, []);\r\n\r\n const onSubmit = (data: any) => {\r\n onSave({ ...data, member_type_id: 3 });\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n \r\n {universities.map((option) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n \r\n \r\n {versions.map((option) => {\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\nexport default StdVeterinaryForm;\r\n","import Axios from 'axios';\r\nimport FormLabel from '@components/FormLabel';\r\nimport Input from '@components/Input/Input';\r\nimport GetProvince from 'member/api/GetProvinces';\r\nimport { Province } from 'member/member.model';\r\nimport { useEffect, useState } from 'react';\r\nimport { useForm } from 'react-hook-form';\r\nimport Button from '@components/Button';\r\nimport Select from '@components/Select';\r\n\r\ninterface PropType {\r\n onSave: (value: any) => void;\r\n}\r\n\r\nconst VeterinaryForm: React.FC = (props) => {\r\n const { onSave } = props;\r\n\r\n const form = useForm();\r\n\r\n const [provinces, setProvinces] = useState([]);\r\n\r\n useEffect(() => {\r\n Axios.all([GetProvince()])\r\n .then(\r\n Axios.spread((...res: any) => {\r\n setProvinces(res[0]?.data ? res[0].data.province_list : []);\r\n })\r\n )\r\n .catch((errors: any) => {\r\n console.log('Error get option value' + errors);\r\n });\r\n }, []);\r\n\r\n const onSubmit = (data: any) => {\r\n onSave({ ...data, member_type_id: 2 });\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n {provinces.map((option) => {\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\nexport default VeterinaryForm;\r\n","import { useState } from 'react';\r\nimport StaffForm from './StaffForm';\r\nimport StdVeterinaryForm from './StdVeterinaryForm';\r\nimport VeterinaryForm from './VeterinaryForm';\r\nimport Button from '@components/Button';\r\n\r\ninterface PropType {\r\n onSave: (value: any) => void;\r\n}\r\n\r\nconst RegisterTypeForm: React.FC = (props) => {\r\n const { onSave } = props;\r\n\r\n const [state, setState] = useState('staff');\r\n\r\n return (\r\n <>\r\n
\r\n \r\n
\r\n setState('staff')}\r\n >
\r\n setState('veterinary')}\r\n >
\r\n setState('std-veterinary')}\r\n >\r\n \r\n \r\n
\r\n {state === 'staff' && }\r\n {state === 'veterinary' && }\r\n {state === 'std-veterinary' && }\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default RegisterTypeForm;\r\n","import axios from '@core/axios';\r\nimport { AxiosResponse } from 'axios';\r\n\r\nconst RegisterWithOTP = (data: any): Promise => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(`/Member/reqRegisterWithOTP`, data)\r\n .then((res: AxiosResponse) => {\r\n if (res.status === 200) {\r\n return resolve(res.data);\r\n }\r\n })\r\n .catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport default RegisterWithOTP;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useHistory } from 'react-router';\r\nimport RegisterForm from './register-form/RegisterForm';\r\nimport OtpForm from './otp-form/OtpForm';\r\nimport RegisterTypeForm from './register-form/RegisterTypeForm';\r\nimport RegisterWithOTP from './api/RegisterWithOTP';\r\nimport { env } from '@core/env';\r\nimport { LiffService } from '@core/@services/Liff.service';\r\n\r\nimport '../member/Register.scss';\r\n\r\nconst Register = () => {\r\n const history = useHistory();\r\n\r\n const [data, setData] = useState({});\r\n const [state, setState] = useState('register-form');\r\n const [profile, setProfile] = useState({});\r\n\r\n useEffect(() => {\r\n const line_liff = env.registerLiffId || '';\r\n\r\n LiffService.connect(line_liff, (value) => {\r\n setProfile(value);\r\n });\r\n }, []);\r\n\r\n const onSaveRegisterForm = (value: any) => {\r\n setData((data) => ({ ...data, ...value }));\r\n setState('otp');\r\n };\r\n\r\n const onSaveOtp = (value: any) => {\r\n setData((data) => ({ ...data, ...value }));\r\n\r\n if (value.otp_token) {\r\n setState('register-type-form');\r\n }\r\n };\r\n\r\n const onSaveRegisterTypeForm = (value: any) => {\r\n setData((data) => ({ ...data, ...value }));\r\n\r\n const { userId, displayName, pictureUrl } = profile;\r\n\r\n RegisterWithOTP({\r\n ...data,\r\n ...value,\r\n line_id: userId,\r\n line_name: displayName,\r\n profile_image: pictureUrl,\r\n })\r\n .then((res) => {\r\n if (res.result_code != '0' && res.result_code != '12') {\r\n alert(res.result_desc);\r\n return;\r\n }\r\n\r\n history.push('/login');\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n });\r\n };\r\n\r\n return (\r\n
\r\n {state === 'register-form' && (\r\n \r\n )}\r\n {state === 'otp' && (\r\n setState('register-form')}\r\n />\r\n )}\r\n {state === 'register-type-form' && (\r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default Register;\r\n","import * as React from 'react';\r\n\r\nexport const RegisterLayout: React.FC = ({ children }) => {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
{children}
\r\n
\r\n );\r\n};\r\n","import * as React from 'react';\r\n\r\nimport { CampaignInfo } from '@login/login.model';\r\nimport { SuccessFulModal } from './SuccessfulModal';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\ninterface LocationState {\r\n campignInfo: CampaignInfo | null;\r\n}\r\n\r\nexport const RegisterModal: React.FC = () => {\r\n const defaultCampignInfo: CampaignInfo = {\r\n campaign_desc: '',\r\n point: 0,\r\n };\r\n\r\n const { campignInfo } = useLocation().state;\r\n\r\n const [campign, setCampignInfo] = React.useState(\r\n defaultCampignInfo\r\n );\r\n\r\n React.useEffect(() => {\r\n setCampignInfo(campignInfo ? campignInfo : defaultCampignInfo);\r\n }, []);\r\n\r\n return ;\r\n};\r\n","import { ExamContext } from '@contexts/ExamContext';\r\nimport React, { useContext } from 'react';\r\nimport './see-more.scss';\r\n\r\nconst SeeMore = () => {\r\n const { examInfo : { exam_title, exam_desc } } = useContext(ExamContext);\r\n\r\n return (\r\n
\r\n

{exam_title}

\r\n

{exam_desc}

\r\n
\r\n );\r\n};\r\n\r\nexport default SeeMore;\r\n","import ExamButton, { ExamButtonType } from '@components/ExamButton';\r\nimport ExamGotPoint from '@components/ExamGotPoint';\r\nimport React, { useContext, useEffect, useState } from 'react';\r\n\r\nconst PointRegisterComplete = (props: { isOpen?: boolean }) => {\r\n const { isOpen } = props;\r\n const [point] = useState(10);\r\n\r\n return (\r\n <>\r\n {isOpen ? (\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 ) : null}\r\n \r\n );\r\n};\r\n\r\nexport default PointRegisterComplete;\r\n","import React, { useState } from 'react';\r\n\r\nimport Button from '@components/Button';\r\nimport ExamPointHistory from './point-history/PointHistory';\r\nimport ExamRanking from './ranking/Ranking';\r\nimport PointRegisterComplete from 'member/PointRegisterComplete';\r\nimport RedeemCoupon from 'coupon/redeem-coupon/RedeemCoupon';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nconst TestPage = () => {\r\n const history = useHistory();\r\n const [isOpenHistory, setIsOpenHistory] = useState(false);\r\n const [isOpenRaking, setIsOpenRaking] = useState(false);\r\n const [isOpenPointRegisterComplete, setIsPointRegisterComplete] =\r\n useState(false);\r\n const [isOpenRedeemCoupon, setIsOpenRedeemCoupon] = useState(false);\r\n\r\n\r\n const onExamVideo = (id) => {\r\n history.push('/exam-info/video', { id });\r\n };\r\n\r\n const onExamGraphic = (id) => {\r\n history.push('/exam-info/graphic', { id });\r\n };\r\n\r\n const onCouponDetail = (coupon_id) => {\r\n history.push('/coupon-detail', { coupon_id });\r\n };\r\n\r\n const onCloseHistory = () => {\r\n setIsOpenHistory(false);\r\n };\r\n\r\n const onCloseRaking = () => {\r\n setIsOpenRaking(false);\r\n };\r\n\r\n const onCloseRedeemCoupon = () => {\r\n setIsOpenRedeemCoupon(false);\r\n };\r\n\r\n return (\r\n
\r\n onExamVideo('2d470dc0-3f41-4e1c-92d3-73e0b3aedf88')}\r\n >\r\n Exam 1\r\n \r\n
\r\n onExamGraphic('4e170c0b-a3e6-4a6c-b9be-0e7e6c626bfc')}\r\n >\r\n Exam 2\r\n \r\n
\r\n onCouponDetail('ea2252de-efe1-4eb1-8bb5-ec3824645b28')}\r\n >\r\n coupon detail\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\n};\r\n\r\nexport default TestPage;\r\n","import axios from '@core/axios';\r\nimport { DocumentDetail } from '@document/document.model';\r\nimport { AxiosResponse } from 'axios';\r\n\r\n\r\nconst GetDocument = (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(`/Member/reqDocumentList`, {})\r\n .then((res: AxiosResponse) => {\r\n if (res.status === 200) {\r\n return resolve(res.data);\r\n }\r\n })\r\n .catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport default GetDocument;\r\n","import Button from '@components/Button'\r\nimport liff from '@line/liff/dist/lib';\r\nimport React, { useEffect, useState } from 'react'\r\nimport { useHistory } from 'react-router-dom';\r\nimport GetDocument from './api/GetDocument';\r\nimport { DocumentList } from './document.model';\r\n\r\nfunction Document() {\r\n const [document, setDocument] = useState([])\r\n const [documentName, setDocumentName] = useState(\"ดาวน์โหลดเอกสาร\\nประกอบการเรียน\");\r\n\r\n useEffect(() => {\r\n GetDocument()\r\n .then((res: any) => {\r\n setDocument(res.document_list)\r\n })\r\n .catch((error) => {\r\n console.log(error, 'Get document error');\r\n });\r\n }, []);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n {documentName}\r\n \r\n
\r\n
\r\n {document.map((doc: DocumentList, index: number) => {\r\n return (\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n {doc.document_title}\r\n
\r\n {\r\n liff.openWindow({\r\n url: doc.document_path,\r\n external: true\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\n\r\nexport default Document\r\n","import React, { useEffect } from 'react';\r\n\r\nimport { Information } from '@components/Information';\r\nimport LeftBackItem from '@components/LeftBackItem';\r\nimport liff from '@line/liff';\r\nimport { useAppDispatch } from '@contexts/AppContext';\r\nimport { ImageProfile } from '@components/ImageProfile';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nexport const DocumentLayout: React.FC = ({ children }) => {\r\n const dispatch = useAppDispatch();\r\n const history = useHistory();\r\n\r\n useEffect(() => {\r\n dispatch({ type: 'BG_SOUND', payload: true });\r\n }, []);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n { history.goBack() }} />\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {children}\r\n
\r\n );\r\n};\r\n","import axios from \"@core/axios\";\r\nimport { PrefixRequest } from \"member/member.model\";\r\n\r\nconst GetShopName = (data: PrefixRequest) => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(`/Member/reqShops`, data)\r\n .then((res: any) => {\r\n if (res.status === 200) {\r\n return resolve(res);\r\n }\r\n }).catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport default GetShopName;","import axios from \"@core/axios\";\r\n\r\nconst GetMemberType = () => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(\"/Member/reqMemberType\", {})\r\n .then((res: any) => {\r\n if (res.status === 200) {\r\n return resolve(res);\r\n }\r\n }).catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport default GetMemberType;","import axios from '@core/axios';\r\n\r\nconst UpdateMemberInfo = (data) => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(`/Member/updateMemberInfoV2`, data)\r\n .then((res) => {\r\n if (res.status === 200) {\r\n return resolve(res.data);\r\n }\r\n })\r\n .catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport default UpdateMemberInfo;\r\n","import { FunctionComponent } from 'react';\r\nimport '../coupon/redeem-coupon/redeem-coupon.scss';\r\nimport Button from './Button';\r\n\r\ninterface PopupProp {\r\n text: string;\r\n isOpen: boolean;\r\n onClose?: () => void;\r\n}\r\n\r\nconst Popup: FunctionComponent = ({ text, isOpen, onClose }) => {\r\n return (\r\n <>\r\n {isOpen && (\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n

{text}

\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;","import './member-info-edit.scss';\r\n\r\nimport { useEffect, useState } from 'react';\r\nimport Axios from 'axios';\r\nimport Button from '@components/Button';\r\nimport Autocomplete from '@autocomplete/Autocomplete';\r\nimport GetShopName from 'member/api/GetShopName';\r\nimport { useForm } from 'react-hook-form';\r\nimport {\r\n EmployeePosition,\r\n MemberType,\r\n PrefixRequest,\r\n Province,\r\n ShopList,\r\n StdVersion,\r\n University,\r\n} from 'member/member.model';\r\nimport GetMemberInfo from 'member/api/GetMemberInfo';\r\nimport GetMemberType from 'member/api/GetMemberType';\r\nimport UpdateMemberInfo from 'member/api/UpdateMemberInfo';\r\nimport FailModal from '@components/FailModal';\r\nimport Popup from '@components/Popup';\r\nimport GetProvince from 'member/api/GetProvinces';\r\nimport GetUniversity from 'member/api/GetUniversity';\r\nimport FormLabel from '@components/FormLabel';\r\nimport Input from '@components/Input/Input';\r\nimport AutoComplete from '@components/AutoComplete/AutoComplete';\r\nimport { useHistory, useLocation } from 'react-router-dom';\r\nimport Select from '@components/Select';\r\nimport GetEmployeePosition from 'member/api/GetEmployeePosition';\r\nimport GetStudentVersion from 'member/api/GetStudentVersion';\r\n\r\ninterface LocationState {\r\n source?: string;\r\n}\r\n\r\nconst inputClass =\r\n 'appearance-none font-input-size-16 w-full py-2 px-3 leading-tight focus:outline-none focus:shadow-outline';\r\n\r\nconst MemberInfoEdit = () => {\r\n const form = useForm();\r\n const state = useLocation();\r\n const history = useHistory();\r\n\r\n const [shopName, setShopName] = useState([]);\r\n const [memberTypes, setMemberTypes] = useState([]);\r\n\r\n const memberType = form.watch('member_type_id');\r\n\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const [positions, setPositions] = useState([]);\r\n const [provinces, setProvinces] = useState([]);\r\n const [universities, setUniversities] = useState([]);\r\n const [versions, setVersions] = useState([]);\r\n\r\n useEffect(() => {\r\n Axios.all([\r\n GetProvince(),\r\n GetUniversity(),\r\n GetEmployeePosition(),\r\n GetStudentVersion(),\r\n ])\r\n .then(\r\n Axios.spread((...res: any) => {\r\n setProvinces(res[0]?.data ? res[0].data.province_list : []);\r\n setUniversities(res[1]?.data ? res[1].data.university_list : []);\r\n setPositions(res[2]?.data ? res[2].data.emp_position_list : []);\r\n setVersions(res[3]?.data ? res[3].data.student_version_list : []);\r\n })\r\n )\r\n .catch((errors: any) => {\r\n console.log('Error get option value' + errors);\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n GetShopName({\r\n member_type_id: memberType,\r\n })\r\n .then((shop: any) => {\r\n setShopName(shop?.data ? shop.data.shop_list : []);\r\n })\r\n .catch((errors: any) => {\r\n console.log('Error get option value' + errors);\r\n });\r\n }, [memberType]);\r\n\r\n useEffect(() => {\r\n const req: PrefixRequest = {\r\n member_type_id: 2,\r\n };\r\n Axios.all([GetMemberInfo(), GetMemberType()])\r\n .then(\r\n Axios.spread((...res: any) => {\r\n const member_info = res[0]?.data || {};\r\n\r\n setMemberTypes(res[1]?.data?.member_type_list || []);\r\n\r\n form.setValue('member_type_id', member_info.member_type_id);\r\n form.setValue('first_name', member_info.first_name);\r\n form.setValue('last_name', member_info.last_name);\r\n form.setValue('vet_license_id', member_info.vet_license_id);\r\n form.setValue('emp_position', member_info.emp_position);\r\n form.setValue('province_name', member_info.province_name);\r\n form.setValue('university_name', member_info.university_name);\r\n form.setValue('student_version', member_info.student_version);\r\n form.setValue('mobile_no', member_info.mobile_no);\r\n })\r\n )\r\n .catch((errors: any) => {\r\n console.log('Error get option value' + errors);\r\n });\r\n }, []);\r\n\r\n const onSubmit = (data: any) => {\r\n const shop = shopName.find((shop) => shop.shop_name === data.shop_name);\r\n\r\n UpdateMemberInfo({ ...data, shop_id: shop?.shop_id })\r\n .then((res: any) => {\r\n if (res.already_mobile_no_use_flag) {\r\n alert('เบอร์โทรศัพท์ซ้ำในระบบ');\r\n return;\r\n }\r\n setIsOpen(true);\r\n })\r\n .catch((errors: any) => {\r\n console.log('Error get option value' + errors);\r\n });\r\n };\r\n\r\n const onClose = () => {\r\n setIsOpen(false);\r\n\r\n if (state?.state?.source) {\r\n history.push(state.state.source);\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n {memberTypes.map((t) => (\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\n {memberType == 1 && (\r\n <>\r\n
\r\n \r\n \r\n {positions.map((option) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n \r\n \r\n {provinces.map((option) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n \r\n )}\r\n {memberType == 2 && (\r\n <>\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n {provinces.map((option) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n \r\n )}\r\n {memberType == 3 && (\r\n <>\r\n
\r\n \r\n \r\n {universities.map((option) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n \r\n \r\n {versions.map((option) => {\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\n \r\n );\r\n};\r\n\r\nexport default MemberInfoEdit;\r\n","import * as React from 'react';\r\n\r\nimport LeftBackItem from '@components/LeftBackItem';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\ninterface LocationState {\r\n source?: string;\r\n}\r\n\r\nexport const BackLayout: React.FC = ({ children }) => {\r\n const state = useLocation();\r\n\r\n return (\r\n
\r\n
\r\n {state?.state?.source !== '/otp' && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n
\r\n {children}\r\n
\r\n
\r\n );\r\n};\r\n","import axios from '@core/axios';\r\nimport { AxiosResponse } from 'axios';\r\nimport { AcceptConsentRequest, AcceptConsentResponse } from '../term.model';\r\n\r\nconst PostAcceptConsentForm = (data: AcceptConsentRequest) => {\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post(`/Member/acceptConsentForm`, data)\r\n .then((res: AxiosResponse) => {\r\n if (res.status === 200) {\r\n return resolve(res.data);\r\n }\r\n })\r\n .catch((err: any) => reject(err.response));\r\n });\r\n};\r\n\r\nexport default PostAcceptConsentForm;\r\n","import Button from '@components/Button';\r\nimport liff from '@line/liff/dist/lib';\r\nimport { useForm } from 'react-hook-form';\r\nimport { useHistory, useLocation } from 'react-router-dom';\r\nimport PostAcceptConsentForm from './api/PostAcceptConsentForm';\r\nimport { AcceptConsentRequest } from './term.model';\r\n\r\nimport './term.scss';\r\n\r\ninterface LocationState {\r\n line_id?: string;\r\n source?: 'menu';\r\n}\r\n\r\ninterface AcceptConsentForm {\r\n keep_data_flag?: 'true' | 'false';\r\n transfer_data_flag?: 'true' | 'false';\r\n}\r\n\r\nconst TermsAndConditionsPage = () => {\r\n const form = useForm();\r\n const history = useHistory();\r\n const state = useLocation();\r\n\r\n const onAcceptConsent = (data: AcceptConsentRequest, path: string) => {\r\n PostAcceptConsentForm(data).then(() => {\r\n sessionStorage.setItem(\r\n 'keep_data_flag',\r\n JSON.stringify(data.keep_data_flag)\r\n );\r\n sessionStorage.setItem(\r\n 'transfer_data_flag_profile',\r\n JSON.stringify(data.transfer_data_flag)\r\n );\r\n\r\n if (\r\n !data.keep_data_flag &&\r\n state &&\r\n state.state &&\r\n state.state.source === 'menu'\r\n ) {\r\n console.log('close window');\r\n liff.closeWindow();\r\n return;\r\n }\r\n\r\n history.push(path);\r\n });\r\n };\r\n\r\n const onSubmit = (value: AcceptConsentForm) => {\r\n const data = {\r\n line_id: '',\r\n keep_data_flag: value.keep_data_flag === 'true',\r\n transfer_data_flag: value.transfer_data_flag === 'true',\r\n };\r\n\r\n if (state && state.state && state.state.line_id) {\r\n data.line_id = state.state.line_id;\r\n\r\n onAcceptConsent(data, '/login');\r\n } else {\r\n const profile = sessionStorage.getItem('liff-profile') || '{}';\r\n\r\n const { userId } = JSON.parse(profile);\r\n\r\n data.line_id = userId;\r\n\r\n const path = state?.state?.source || 'menu';\r\n\r\n onAcceptConsent(data, path);\r\n }\r\n };\r\n\r\n return (\r\n
\r\n

\r\n แบบให้ความยินยอม\r\n

\r\n

\r\n ข้าพเจ้า (\"เจ้าของขอมูล\") ขอให้คำยินยอมของข้าพเจ้าต่อบริษัท ฮิลส์เพ็ท\r\n นูทริชั่น (ประเทศไทย) จำกัด (\"บริษัท\")\r\n ในฐานะผู้ควบคุมข้อมูลตามและเพื่อวัตถุประสงค์ของพระราชบัญญัติคุ้มครองข้อมูลส่วนบุลคล\r\n พ.ศ. 2562 เพื่อ\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\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\n
    \r\n
    \r\n {' '}\r\n
    ไม่ยินยอม
    \r\n
    \r\n
    \r\n
  • \r\n
\r\n
ข้อควรทราบทั่วไป:
\r\n
\r\n 1. การประมวลผลข้อมูลส่วนบุคคลของท่าน\r\n รวมทั้งการประมวลตามที่กล่าวมาข้างต้น\r\n อยู่ภายใต้ขอบเขตทั่วไปของนโยบายการคุ้มครองข้อมูลส่วนบุคคลสำหรับบุคคลภาพนอกของบริษัทฯ\r\n (\"นโยบาย\") โปรดศึกษานโยบายโดยละเอียดเพื่อทำความเข้าใจอย่างครบถ้วน\r\n และในกรณีใดๆ\r\n ให้ถือว่าแบบให้ความยินยอมสำหรับไลน์นี้เป็นเอกสารแนบท้ายนโยบายดังกล่าว\r\n
\r\n
\r\n 2.\r\n การประมวลผลข้อมูลส่วนบุคคลของท่านตามที่ได้กล่าวถึงในแบบนี้กระทำขึ้นภายใต้ฐานความยินยอม\r\n บริษัทฯ จะแจ้งให้ท่านทราบในกรณีที่มีการเปลี่ยนแปลงฐานในการประมวลผล\r\n
\r\n
\r\n 3. บริษัทฯ จะลบข้อมูลส่วนบุคคลของท่านเมื่อท่านเพิกถอนการให้ความยินยอม\r\n เว้นแต่กรณีที่บริษัทฯ มีฐานใหม่รองรับการเก็บข้อมูลนั้น\r\n ซึ่งหากเป็นเช่นนั้น บริษัทฯ จะแจ้งให้ท่านทราบ\r\n
\r\n
\r\n 4. บริษัทฯ จะลบข้อมูลส่วนบุคคลของท่านเมื่อท่านเพิกถอนการให้ความยินยอม\r\n เว้นแต่กรณีที่บริษัทฯ มีฐานใหม่รองรับการเก็บข้อมูลนั้น\r\n ซึ่งหากเป็นเช่นนั้น บริษัทฯ จะแจ้งให้ท่านทราบ\r\n
\r\n
\r\n 5. สิทธิของท่านที่อยู่ภายใต้กฎหมายมีดังนี้\r\n
\r\n
\r\n (1) สิทธิในการเข้าถึงข้อมูลส่วนบุคคลของท่าน\r\n
\r\n
\r\n (2) สิทธิในการรับรู้แหล่งที่มาในการเก็บรวบรวมข้อมูลส่วนบุคคลของท่าน\r\n
\r\n
\r\n (3) สิทธิในการถอนความยินยอมที่ท่านให้ไว้แก่บริษัทฯ\r\n
\r\n
\r\n (4) สิทธิในการร้องขอให้ลบ ทำงาย\r\n หรือทำให้ข้อมูลส่วนบุคคลไม่สามารถระบุตัวตนของท่านได้\r\n
\r\n
\r\n (5) สิทธิในการขอให้ระงับการใช้ข้อมูลส่วนบุคคลของท่าน\r\n
\r\n
\r\n (6) สิทธิในการขอสำเนาข้อมูลส่วนบุคคลของท่าน\r\n
\r\n
\r\n (7) สิทธิในการคัดค้านการเก็บรวบรวม ใช้ และเปิดเผยข้อมูลส่วนบุคคลของท่าน\r\n
\r\n
\r\n (8) สิทธิในการเข้าถึงการบันทึกการติดต่อสื่อสารกับบริษัทฯ\r\n เกี่ยวกับข้อมูลส่วนบุคคลของท่าน\r\n
\r\n
\r\n (9) สิทธิในการร้องเรียนต่อบริษัทฯ\r\n เกี่ยวกับการประมวลผลข้อมูลส่วนบุคคลของท่าน\r\n
\r\n
\r\n (10) สิทธิในการร้องเรียนต่อผู้มีอานาจที่เกี่ยวข้องตามกฎหมาย\r\n ไม่ว่าจะด้วยเหตุผลใด\r\n
\r\n
\r\n 6. หากมีข้อสงสัย โปรดติดต่อ\r\n
\r\n บริษัทฯ ที บริษัท ฮิลส์ เพ็ท นู่ทริชั่น (ประเทศไทย) จำกัด\r\n
\r\n
\r\n ที่อยู่: 19 ซอยแยกถนน ณ ระนอง คลองเตย กรุงเทพฯ 10110 ประเทศไทย\r\n
\r\n
\r\n โทร: 1800-011-971 (วันจันทร์ - วันศุกร์) เวลา 08:30 - 16:30 น.\r\n
\r\n
\r\n อีเมล: cathailand@colpal.com\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 TermsAndConditionsPage;\r\n","import OtpForm from 'member/otp-form/OtpForm';\r\nimport { useHistory, useLocation } from 'react-router-dom';\r\n\r\ninterface LocationState {\r\n line_id?: string;\r\n source?: string;\r\n}\r\n\r\nconst OtpPage: React.FC = () => {\r\n const history = useHistory();\r\n const state = useLocation();\r\n\r\n const onSave = (value: any) => {\r\n if (value.otp_token === null) return;\r\n\r\n const path = state?.state?.source || 'menu';\r\n\r\n history.push(path);\r\n };\r\n\r\n return (\r\n <>\r\n history.goBack()} />\r\n \r\n );\r\n};\r\n\r\nexport default OtpPage;\r\n","import * as React from 'react';\r\n\r\nimport Coupon from 'coupon/Coupou';\r\nimport CouponDetail from 'coupon/CouponDetail';\r\nimport { CouponLayout } from '@layouts/CouponLayout/CouponLayout';\r\nimport CoupouList from 'coupon/CoupouList';\r\nimport { CustomLayout } from './CustomLayout';\r\nimport { DefaultLayout } from '@layouts/DefaultLayout';\r\nimport Exam from 'exam/Exam';\r\nimport ExamContextProvider from '@contexts/ExamContext';\r\nimport { ExamInfoLayout } from '@layouts/ExamInfoLayout/ExamInfoLayout';\r\nimport { ExamInfoVideo } from 'exam/info-video/ExamInfoVideo';\r\nimport { ExamLayout } from '@layouts/ExamLayout/ExamLayout';\r\nimport { Form } from 'exam/Form';\r\nimport { FormInfoLayout } from '@layouts/FormInfoLayout/FormInfoLayout';\r\nimport { FormInfoVideo } from 'exam/info-video/FormInfoVideo';\r\nimport { FormLayout } from '@layouts/FormLayout/FormLayout';\r\nimport InfoGraphic from 'exam/info-graphic/InfoGraphic';\r\nimport { InformationLayout } from '@layouts/InformationLayout';\r\nimport InformationPage from '@pages/Information/Information.Page';\r\nimport Login from '@login/Login';\r\nimport LoginPoint from '@login/LoginPoint';\r\nimport MemberInfo from 'member/member-info/MemberInfo';\r\nimport { MemberInfoLayout } from '@layouts/MemberInfoLayout/MemberInfoLayout';\r\nimport MenuDetail from '@pages/Menu/MenuDetail';\r\nimport { MenuDetailLayout } from '@layouts/MenuDetailLayout';\r\nimport { MenuLayout } from '@layouts/MenuLayout';\r\nimport MenuPage from '@pages/Menu/Menu.Page';\r\nimport { PageProvider } from '@contexts/PageContext';\r\nimport Register from 'member/Register';\r\nimport { RegisterLayout } from '@layouts/RegisterLayout';\r\nimport { RegisterModal } from '@components/RegisterModal';\r\nimport { Route } from 'react-router-dom';\r\nimport SeeMore from 'exam/info-graphic/SeeMore';\r\nimport { Switch } from 'react-router';\r\nimport TestPage from 'exam/TestPage';\r\nimport Document from '@document/Document';\r\nimport { DocumentLayout } from '@layouts/DocumentLayout';\r\nimport MemberInfoEdit from 'member/member-info-edit/MemberInfoEdit';\r\nimport { BackLayout } from '@layouts/BackLayout/BackLayout';\r\nimport TermsAndConditionsPage from '@pages/TermsAndConditions/TermsAndConditions.Page';\r\nimport OtpPage from '@pages/Otp/Otp.Page';\r\n\r\nexport const Router: React.FC = () => {\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\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\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\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\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\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\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\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\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","import './App.scss';\r\n\r\nimport { AppProvider } from '@contexts/AppContext';\r\nimport BGSound from '@components/Sound/BGSound';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport { RouteProvider } from '@contexts/RouteContext';\r\nimport { Router } from '@core/@routes/Router';\r\n\r\nfunction App() {\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\nexport default App;\r\n","import { ReportHandler } from 'web-vitals';\r\n// eslint-disable-next-line \r\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\r\n if (onPerfEntry && onPerfEntry instanceof Function) {\r\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n getCLS(onPerfEntry);\r\n getFID(onPerfEntry);\r\n getFCP(onPerfEntry);\r\n getLCP(onPerfEntry);\r\n getTTFB(onPerfEntry);\r\n });\r\n }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","import './index.scss';\r\n\r\nimport App from './App';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport reportWebVitals from './reportWebVitals';\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\nreportWebVitals();\r\n"],"sourceRoot":""}