1import {cartState} from '../state/CartState.js'; 2 3/** 4 * ë¹íì ì¡°í ì¸ì ì ëë ëë¤. 5 * 6 * ì¸ì í¤ ì¿ í¤ê° httpOnly ë¼ ì¤í¬ë¦½í¸ê° ì§ì ì§ì¸ ì ìì´ ìë²ì ë§¡ê¹ëë¤. 7 * ì ë¦¬ê° ëë기 ì ì ì¥ë°êµ¬ë ì¡°íê° ëê°ë©´ ê·¸ ìì²ì´ ë¹íì ê²½ë¡ë¡ íë¬ê°ë¯ë¡ 8 * í¸ì¶ë¶ìì ë°ëì await í´ì¼ í©ëë¤. 9 * 10 * @return {Promise} 11 */ 12function deleteNonMemberCookie() { 13 return order.utils.clearNonMemberSession(); 14} 15 16/** 17 * ë¹íì ì¿ í¤ ìì 18 */ 19function deleteTempMemberCookie() { 20 const tmprMmbrNum = $("#tmprMmbrNum").val(); 21 const expiredDate = new Date(); 22 expiredDate.setDate(expiredDate.getDate() + -1); 23 const cookieValue = `; path=/; expires=${expiredDate.toUTCString()}; domain=.kyobobook.co.kr`; 24 document.cookie = `tmprMmbrNum=${tmprMmbrNum}; ${cookieValue}`; 25} 26 27/** 28 * ìíê°ìì¬ë¶ ì²´í¬ 29 * 30 * @returns {boolean} 31 */ 32function cartCntChk() { 33 if (cartState.cartCnt === 0) { //ì¥ë°êµ¬ë ê°ìê° 0ì´ë©´ 34 KbbJS.ui.alert("ìíì ë´ì í ì§íí´ì£¼ì¸ì."); 35 return false; 36 } 37 return true; 38} 39 40 41/** 42 * íë¨ ì¶ì² ìì ìí GA ë°ì´í° ìì§ 43 * @param {string} sectionKey - 'picks' | 'bestSeller' | 'topic' | 'today' | 'pbc' | 'mdPick' 44 * @param {string} saleCmdtid 45 * @returns {[Object|undefined, string]} [selectedItem, sectionName] 46 */ 47function getGtmItem(sectionKey, saleCmdtid) { 48 let gtmItem; 49 let section = ''; 50 51 switch (sectionKey) { 52 case 'picks': 53 section = 'AI ë§ì¶¤ì¶ì²'; 54 cartState.cartPicksList.forEach((item, idx) => { 55 if (item.saleCmdtid === saleCmdtid) { 56 gtmItem = {...item, index: idx + 1, price: item.saleCmdtSapr}; 57 } 58 }); 59 break; 60 case 'bestSeller': 61 section = 'AI ë§ì¶¤ì¶ì²'; 62 cartState.cartWishList.forEach((item, idx) => { 63 if (item.saleCmdtid === saleCmdtid) { 64 gtmItem = {...item, index: idx + 1, price: item.sapr}; 65 } 66 }); 67 break; 68 case 'topic': 69 section = 'ìë¡ ëì¨ ì± '; 70 cartState.cartTopicList.forEach((item, idx) => { 71 if (item.saleCmdtId === saleCmdtid) { 72 gtmItem = {...item, saleCmdtid: item.saleCmdtId, index: idx + 1, price: item.cmdtSapr}; 73 } 74 }); 75 break; 76 case 'today': 77 section = 'ì¤ëì ì± '; 78 cartState.cartTodayList.forEach((item, idx) => { 79 if (item.saleCmdtId === saleCmdtid) { 80 gtmItem = {...item, saleCmdtid: item.saleCmdtId, index: idx + 1, price: item.cmdtSapr}; 81 } 82 }); 83 break; 84 case 'pbc': 85 section = $('[data-pbc-corner]').text(); 86 cartState.cartPbcList.forEach((item, idx) => { 87 if (item.saleCmdtid === saleCmdtid) { 88 gtmItem = {...item, index: idx + 1, price: item.saleCmdtSapr}; 89 } 90 }); 91 break; 92 case 'mdPick': 93 section = $('[data-md-pick-corner]').text(); 94 cartState.cartMdPickList.forEach((item, idx) => { 95 if (item.saleCmdtid === saleCmdtid) { 96 gtmItem = {...item, index: idx + 1, price: item.saleCmdtSapr}; 97 } 98 }); 99 break; 100 case 'hottracksRecommend': 101 section = $('[data-hottrcaks-recommend-corner]').text(); 102 cartState.cartHottrcaksRecommendList.forEach((item, idx) => { 103 if (item.saleCmdtid === saleCmdtid) { 104 gtmItem = {...item, index: idx + 1, price: item.saleCmdtSapr}; 105 } 106 }); 107 break; 108 default: 109 break; 110 } 111 112 return [gtmItem, section]; 113} 114 115/** 116 * 주문ì íìë ì²´í¬ 117 * 118 * @param dataObj 119 * @param packageYsno 120 * @returns {*|string|jQuery|number} 121 */ 122function ordrLmttCheck(dataObj, packageYsno) { 123 if (packageYsno == "Y" || dataObj.find("[data-list-spbkKindCode]").val() == "060") { // í¨í¤ì§í ê²°í©ìí ëë ìíê¶ì¼ ê²½ì°, í매ì íì¬ë¶ê° Yì¼ ë 주문ì íìë ì²´í¬ 124 if (dataObj.find("[data-list-salelmttysno]").val() == "Y" && dataObj.find("[data-list-ordrlmttqntt]").val() > 0 && dataObj.find("[data-list-requqntt]").val() > dataObj.find("[data-list-ordrlmttqntt]").val()) { 125 return dataObj.find("[data-list-ordrlmttqntt]").val(); 126 } 127 } else if (dataObj.find("[data-list-spbkKindCode]").val() == "020") { // ë컨 ìíì¼ ê²½ì°, 주문ìëì´
1271ë³´ë¤ í°ì§ ì²´í¬ 128 if (dataObj.find("[data-list-requqntt]").val() > 1) { 129 return 1; 130 } 131 } else { 132 return 0; 133 } 134} 135 136 137/** 138 * 주문ì ìí ë¹íì ë²í¸ ìì± ë° ì¿ í¤ ì ì¥ 139 * 140 * @returns {string} 141 */ 142function setTempMemberCookie() { 143 let tmprMmbrNum = ""; 144 let today = new Date(); 145 146 today.setHours(today.getHours() + 9); 147 today = today.toISOString().replaceAll('-', '').replaceAll(':', '').replace('T', '').substring(0, 14) 148 tmprMmbrNum = today + "_0" + (Math.floor(9e3 * Math.random()) + 1e3); 149 150 const expiresDate = new Date(); 151 expiresDate.setHours(expiresDate.getHours() + 3); //tmprMmbrNumì ì í¨ìê° 3ìê° ì¤ì 152 document.cookie = "tmprMmbrNum=" + tmprMmbrNum + "; path=/; expires=" + expiresDate.toUTCString() + "; domain=.kyobobook.co.kr"; 153 154 return tmprMmbrNum; 155} 156 157/** 158 * í©ë°°ì¡ ê°ë¥ ìí í¬í¨ ì¬ë¶ 159 * 160 * @param cmdtList 161 * @returns {*} 162 */ 163function requiresSeparateShipments(cmdtList) { 164 // cmdtListì 모ë ìíì´ ì£¼ì´ì§ ì¡°ê±´ì ë§ì¡±íëì§ íì¸í©ëë¤. 165 if (!cmdtList || cmdtList.length === 0) { 166 return false; 167 } 168 169 // êµë³´ë¬¸ê³ ë°°ì¡ ìí ë´ POD í¹ì ìì½ ìíì´ í¬í¨ë ê²½ì° 170 const isIncludePreorderWithKyobo = cmdtList.filter(cmdt => cmdt.saleCmdtGrpDvsnCode === 'SGK').length > 1 // êµë³´ë¬¸ê³ ë°°ì¡ ìíì´ 2ê° ì´ìì¸ ê²½ì° 171 && cmdtList.some(cmdt => cmdt.saleCmdtGrpDvsnCode === 'SGK' // êµë³´ë¬¸ê³ ë°°ì¡ ìíì¸ ê²½ì° 172 // KOR / ENG / JAP / PBC ì¤ ìì½ ìíì´ í¬í¨ë ê²½ì° 173 && ((cartState.kyoboDeliveryCodes.includes(cmdt.saleCmdtDvsnCode) && cartState.prenSaleCdtnCodes.includes(cmdt.saleCdtnCode)) 174 // POD ìíì¸ ê²½ì° 175 || cmdt.saleCmdtDvsnCode === "POD")); 176 177 // í«í¸ëì¤ ë°°ì¡ ìí ë´ ìì½ ìíì´ í¬í¨ë ê²½ì° 178 const isIncludePreorderWithHottracks = cmdtList.filter(cmdt => cmdt.saleCmdtGrpDvsnCode === 'SGM' || cmdt.saleCmdtGrpDvsnCode === 'SGI').length > 1 // í«í¸ëì¤ ë°°ì¡ ìíì´ 2ê° ì´ìì¸ ê²½ì° 179 && cmdtList.some(cmdt => (cmdt.saleCmdtGrpDvsnCode === 'SGM' || cmdt.saleCmdtGrpDvsnCode === 'SGI') // í«í¸ëì¤ ìíì¸ ê²½ì° 180 && cartState.prenSaleCdtnCodes.includes(cmdt.saleCdtnCode)); // ìì½ ìíì¸ ê²½ì° 181 console.log(cmdtList, isIncludePreorderWithKyobo, isIncludePreorderWithHottracks); 182 183 return isIncludePreorderWithKyobo || isIncludePreorderWithHottracks; 184} 185 186/** 187 * êµë³´ë¬¸ê³ ë°°ì¡ ìíì ì¡°í 188 * KOR / ENG / JAP /PBC / POD 189 * 190 * @param cmdtList 191 * @returns {Number} 192 */ 193function kyoboDeliveryCmdtCnt(cmdtList) { 194 return cmdtList.filter(cmdt => cartState.kyoboDeliveryCodes.includes(cmdt.saleCmdtDvsnCode) || cmdt.saleCmdtDvsnCode === "POD").length; 195} 196 197/** 198 * 기íí¸ì¹´ë ì£¼ë¬¸ì¸ ê²½ì° ë³¸ì¸ì¸ì¦ ì²´í¬ 199 * @param prd060Cnt 200 * @returns {boolean} 201 */ 202function validationVerifyForGiftCardOrder(prd060Cnt) { 203 if (prd060Cnt > 0 && order.user?.data?.crttYsno === "N") { 204 KbbJS.ui.alert({ 205 text: "기íí¸ì¹´ë ìíì ë³¸ì¸ ì¸ì¦ íìë§ êµ¬ë§¤ ê°ë¥í©ëë¤. ë³¸ì¸ ì¸ì¦ í ì´ì©í´ì£¼ì¸ì.", 206 confirm: { 207 label: "íì¸" 208 }, 209 cancel: { 210 label: "ë³¸ì¸ ì¸ì¦í기", 211 callback: (b) => (location.href = KbbJS.util.parseStageURL("/MBR/member-info")) 212 } 213 }); 214 215 return true; 216 } 217 218 return false; 219} 220 221/** 222 * ë¡ê·¸ì¸ì¬ë¶ ì²´í¬ 223 * 224 * @param nextPage 225 * @param params 226 * @param guestOption 227 * @returns {boolean} 228 */ 229function loginChk(nextPage, params, guestOption) { 230 if (KbbJS.auth.authorized) { //íìì¸ê²½ì° 231 return true; 232 } 233 234 // ë¡ê·¸ì¸ íì´ì§ë¡ ì´ë 235 guestOption = guestOption || "guest"; 236 const loginURL = KbbJS.getOption('auth.redirect.login'); 237 KbbJS.util.moveTo(loginURL, { 238 continue: KbbJS.util.customURL(nextPage || window.location.href, params), 239 order: guestOption, 240 }); 241 return false; 242} 243 244function debounce(fn, delay = 200) { 245 let timer = null; 246 return function (...args) { 247 clearTimeout(timer); 248 timer = setTimeout(() => fn.apply(this, args), delay); 249 }; 250} 251 252/** 253 * ìë ë기í 254 * @param cartGoodInfoList 255 * @returns {Promise<void>} 256 */ 257async function syncCartState(cartGoodInfoList) { 258 if (!cartGoodInfoList) { 259 return; 260 } 261 262 // 1) ë³ê²½ ìì² ë¦¬ì¤í¸ë¥¼ spbkId â requQntt ë§µì¼ë¡
263 const qtyMap = cartGoodInfoList.reduce((map, {spbkId, requQntt}) => { 264 map[spbkId] = requQntt; 265 return map; 266 }, {}); 267 268 // 2) cartState.cartGoodsList를 ëë©´ì requQnttê° ìì¼ë©´ êµì²´ 269 cartState.cartGoodsList = cartState.cartGoodsList.map(item => { 270 if (qtyMap[item.spbkId] != null) { 271 return { 272 ...item, 273 requQntt: qtyMap[item.spbkId] 274 }; 275 } 276 return item; 277 }); 278} 279 280/** 281 * Export ì ì 282 */ 283export const cartHelpers = { 284 deleteNonMemberCookie, 285 deleteTempMemberCookie, 286 cartCntChk, 287 getGtmItem, 288 ordrLmttCheck, 289 setTempMemberCookie, 290 requiresSeparateShipments, 291 validationVerifyForGiftCardOrder, 292 loginChk, 293 debounce, 294 syncCartState, 295 kyoboDeliveryCmdtCnt 296}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.