[현재 작업중] 포유, 에너지 라벨 관련 처리#1

- 포유 api받아오는 부분 처리완료(단 호출 위치를 홈에서 불러서 처리해야함 props로 데이터 내려주는 방식으로 처리해야할듯.)
 - 에너지라벨(컨버트 이미지 처리하였지만 현재 이미지가 노출되지않아 이부분 확인중, 이부분 처리완료 되면 다른곳 노출작업 예정)
This commit is contained in:
junghoon86.park
2025-10-17 17:23:37 +09:00
parent 0e6da8922d
commit 99779b8394
10 changed files with 889 additions and 643 deletions

View File

@@ -2,220 +2,220 @@
export const types = { export const types = {
// panel actions // panel actions
PUSH_PANEL: 'PUSH_PANEL', PUSH_PANEL: "PUSH_PANEL",
POP_PANEL: 'POP_PANEL', POP_PANEL: "POP_PANEL",
UPDATE_PANEL: 'UPDATE_PANEL', UPDATE_PANEL: "UPDATE_PANEL",
RESET_PANELS: 'RESET_PANELS', RESET_PANELS: "RESET_PANELS",
// device actions // device actions
GET_AUTHENTICATION_CODE: 'GET_AUTHENTICATION_CODE', GET_AUTHENTICATION_CODE: "GET_AUTHENTICATION_CODE",
REGISTER_DEVICE: 'REGISTER_DEVICE', REGISTER_DEVICE: "REGISTER_DEVICE",
REGISTER_DEVICE_INFO: 'REGISTER_DEVICE_INFO', REGISTER_DEVICE_INFO: "REGISTER_DEVICE_INFO",
GET_DEVICE_INFO: 'GET_DEVICE_INFO', GET_DEVICE_INFO: "GET_DEVICE_INFO",
CLEAR_REGISTER_DEVICE_INFO: 'CLEAR_REGISTER_DEVICE_INFO', CLEAR_REGISTER_DEVICE_INFO: "CLEAR_REGISTER_DEVICE_INFO",
REGISTER_DEVICE_RESET: 'REGISTER_DEVICE_RESET', REGISTER_DEVICE_RESET: "REGISTER_DEVICE_RESET",
// common actions // common actions
GET_HTTP_HEADER: 'GET_HTTP_HEADER', GET_HTTP_HEADER: "GET_HTTP_HEADER",
CHANGE_APP_STATUS: 'CHANGE_APP_STATUS', CHANGE_APP_STATUS: "CHANGE_APP_STATUS",
SEND_BROADCAST: 'SEND_BROADCAST', SEND_BROADCAST: "SEND_BROADCAST",
CHANGE_LOCAL_SETTINGS: 'CHANGE_LOCAL_SETTINGS', CHANGE_LOCAL_SETTINGS: "CHANGE_LOCAL_SETTINGS",
GNB_OPENED: 'GNB_OPENED', GNB_OPENED: "GNB_OPENED",
SET_SHOW_POPUP: 'SET_SHOW_POPUP', SET_SHOW_POPUP: "SET_SHOW_POPUP",
SET_SHOW_SECONDARY_POPUP: 'SET_SHOW_SECONDARY_POPUP', SET_SHOW_SECONDARY_POPUP: "SET_SHOW_SECONDARY_POPUP",
SET_HIDE_POPUP: 'SET_HIDE_POPUP', SET_HIDE_POPUP: "SET_HIDE_POPUP",
SET_HIDE_SECONDARY_POPUP: 'SET_HIDE_SECONDARY_POPUP', SET_HIDE_SECONDARY_POPUP: "SET_HIDE_SECONDARY_POPUP",
SHOW_OPTIONAL_TERMS_CONFIRM_POPUP: 'SHOW_OPTIONAL_TERMS_CONFIRM_POPUP', SHOW_OPTIONAL_TERMS_CONFIRM_POPUP: "SHOW_OPTIONAL_TERMS_CONFIRM_POPUP",
HIDE_OPTIONAL_TERMS_CONFIRM_POPUP: 'HIDE_OPTIONAL_TERMS_CONFIRM_POPUP', HIDE_OPTIONAL_TERMS_CONFIRM_POPUP: "HIDE_OPTIONAL_TERMS_CONFIRM_POPUP",
TOGGLE_OPTIONAL_TERMS_CONFIRM: 'TOGGLE_OPTIONAL_TERMS_CONFIRM', TOGGLE_OPTIONAL_TERMS_CONFIRM: "TOGGLE_OPTIONAL_TERMS_CONFIRM",
// 선택약관 팝업 상태 관리 // 선택약관 팝업 상태 관리
SET_OPTIONAL_TERMS_POPUP_SHOWN: 'SET_OPTIONAL_TERMS_POPUP_SHOWN', SET_OPTIONAL_TERMS_POPUP_SHOWN: "SET_OPTIONAL_TERMS_POPUP_SHOWN",
SET_OPTIONAL_TERMS_USER_DECISION: 'SET_OPTIONAL_TERMS_USER_DECISION', SET_OPTIONAL_TERMS_USER_DECISION: "SET_OPTIONAL_TERMS_USER_DECISION",
RESET_OPTIONAL_TERMS_SESSION: 'RESET_OPTIONAL_TERMS_SESSION', RESET_OPTIONAL_TERMS_SESSION: "RESET_OPTIONAL_TERMS_SESSION",
// 선택약관 직접 상태 업데이트 (API 호출 없이) // 선택약관 직접 상태 업데이트 (API 호출 없이)
UPDATE_OPTIONAL_TERMS_AGREE_DIRECT: 'UPDATE_OPTIONAL_TERMS_AGREE_DIRECT', UPDATE_OPTIONAL_TERMS_AGREE_DIRECT: "UPDATE_OPTIONAL_TERMS_AGREE_DIRECT",
UPDATE_TERMS_AGREEMENT_STATUS_DIRECT: 'UPDATE_TERMS_AGREEMENT_STATUS_DIRECT', UPDATE_TERMS_AGREEMENT_STATUS_DIRECT: "UPDATE_TERMS_AGREEMENT_STATUS_DIRECT",
SET_EXIT_APP: 'SET_EXIT_APP', SET_EXIT_APP: "SET_EXIT_APP",
GET_LOGIN_USER_DATA: 'GET_LOGIN_USER_DATA', GET_LOGIN_USER_DATA: "GET_LOGIN_USER_DATA",
GET_TERMS_AGREE_YN: 'GET_TERMS_AGREE_YN', GET_TERMS_AGREE_YN: "GET_TERMS_AGREE_YN",
LAUNCH_MEMBERSHIP_APP: 'LAUNCH_MEMBERSHIP_APP', LAUNCH_MEMBERSHIP_APP: "LAUNCH_MEMBERSHIP_APP",
SET_FOCUS: 'SET_FOCUS', SET_FOCUS: "SET_FOCUS",
SET_GNB_MENU: 'SET_GNB_MENU', SET_GNB_MENU: "SET_GNB_MENU",
SET_SYSTEM_NOTICE: 'SET_SYSTEM_NOTICE', SET_SYSTEM_NOTICE: "SET_SYSTEM_NOTICE",
SET_SYSTEM_TERMINATION: 'SET_SYSTEM_TERMINATION', SET_SYSTEM_TERMINATION: "SET_SYSTEM_TERMINATION",
SET_DEEP_LINK: 'SET_DEEP_LINK', SET_DEEP_LINK: "SET_DEEP_LINK",
SET_SECOND_LAYER_INFO: 'SET_SECOND_LAYER_INFO', SET_SECOND_LAYER_INFO: "SET_SECOND_LAYER_INFO",
SET_ERROR_MESSAGE: 'SET_ERROR_MESSAGE', SET_ERROR_MESSAGE: "SET_ERROR_MESSAGE",
CLEAR_ERROR_MESSAGE: 'CLEAR_ERROR_MESSAGE', CLEAR_ERROR_MESSAGE: "CLEAR_ERROR_MESSAGE",
GET_DEVICE_MACADDRESS: 'GET_DEVICE_MACADDRESS', GET_DEVICE_MACADDRESS: "GET_DEVICE_MACADDRESS",
SET_DEVICE_REGISTERED: 'SET_DEVICE_REGISTERED', SET_DEVICE_REGISTERED: "SET_DEVICE_REGISTERED",
// billing actions // billing actions
GET_MY_INFO_BILLING_SEARCH: 'GET_MY_INFO_BILLING_SEARCH', GET_MY_INFO_BILLING_SEARCH: "GET_MY_INFO_BILLING_SEARCH",
// card actions // card actions
GET_MY_INFO_CARD_SEARCH: 'GET_MY_INFO_CARD_SEARCH', GET_MY_INFO_CARD_SEARCH: "GET_MY_INFO_CARD_SEARCH",
// shipping actions // shipping actions
GET_MY_INFO_SHIPPING_SEARCH: 'GET_MY_INFO_SHIPPING_SEARCH', GET_MY_INFO_SHIPPING_SEARCH: "GET_MY_INFO_SHIPPING_SEARCH",
// cart actions // cart actions
GET_MY_INFO_CART_SEARCH: 'GET_MY_INFO_CART_SEARCH', GET_MY_INFO_CART_SEARCH: "GET_MY_INFO_CART_SEARCH",
ADD_TO_CART: 'ADD_TO_CART', ADD_TO_CART: "ADD_TO_CART",
REMOVE_FROM_CART: 'REMOVE_FROM_CART', REMOVE_FROM_CART: "REMOVE_FROM_CART",
UPDATE_CART_ITEM: 'UPDATE_CART_ITEM', UPDATE_CART_ITEM: "UPDATE_CART_ITEM",
CLEAR_CART: 'CLEAR_CART', CLEAR_CART: "CLEAR_CART",
// appData actions // appData actions
ADD_MAIN_INDEX: 'ADD_MAIN_INDEX', ADD_MAIN_INDEX: "ADD_MAIN_INDEX",
SEND_SMS: 'SEND_SMS', SEND_SMS: "SEND_SMS",
CLEAR_SMS: 'CLEAR_SMS', CLEAR_SMS: "CLEAR_SMS",
// home actions // home actions
GET_HOME_TERMS: 'GET_HOME_TERMS', GET_HOME_TERMS: "GET_HOME_TERMS",
SET_TERMS_ID_MAP: 'SET_TERMS_ID_MAP', SET_TERMS_ID_MAP: "SET_TERMS_ID_MAP",
SET_OPTIONAL_TERMS_AVAILABILITY: 'SET_OPTIONAL_TERMS_AVAILABILITY', SET_OPTIONAL_TERMS_AVAILABILITY: "SET_OPTIONAL_TERMS_AVAILABILITY",
GET_HOME_MENU: 'GET_HOME_MENU', GET_HOME_MENU: "GET_HOME_MENU",
GET_HOME_LAYOUT: 'GET_HOME_LAYOUT', GET_HOME_LAYOUT: "GET_HOME_LAYOUT",
GET_HOME_MAIN_CONTENTS: 'GET_HOME_MAIN_CONTENTS', GET_HOME_MAIN_CONTENTS: "GET_HOME_MAIN_CONTENTS",
GET_HOME_FULL_VIDEO_INFO: 'GET_HOME_FULL_VIDEO_INFO', GET_HOME_FULL_VIDEO_INFO: "GET_HOME_FULL_VIDEO_INFO",
GET_THEME_CURATION_INFO: 'GET_THEME_CURATION_INFO', GET_THEME_CURATION_INFO: "GET_THEME_CURATION_INFO",
GET_THEME_CURATION_DETAIL_INFO: 'GET_THEME_CURATION_DETAIL_INFO', GET_THEME_CURATION_DETAIL_INFO: "GET_THEME_CURATION_DETAIL_INFO",
GET_THEME_HOTEL_DETAIL_INFO: 'GET_THEME_HOTEL_DETAIL_INFO', GET_THEME_HOTEL_DETAIL_INFO: "GET_THEME_HOTEL_DETAIL_INFO",
GET_THEME_MENU_SHELF_INFO: 'GET_THEME_MENU_SHELF_INFO', GET_THEME_MENU_SHELF_INFO: "GET_THEME_MENU_SHELF_INFO",
CLEAR_THEME_MENU_SHELF_INFO: 'CLEAR_THEME_MENU_SHELF_INFO', CLEAR_THEME_MENU_SHELF_INFO: "CLEAR_THEME_MENU_SHELF_INFO",
CLEAR_THEME_DETAIL: 'CLEAR_THEME_DETAIL', CLEAR_THEME_DETAIL: "CLEAR_THEME_DETAIL",
CHECK_ENTER_THROUGH_GNB: 'CHECK_ENTER_THROUGH_GNB', CHECK_ENTER_THROUGH_GNB: "CHECK_ENTER_THROUGH_GNB",
SET_DEFAULT_FOCUS: 'SET_DEFAULT_FOCUS', SET_DEFAULT_FOCUS: "SET_DEFAULT_FOCUS",
SET_BANNER_INDEX: 'SET_BANNER_INDEX', SET_BANNER_INDEX: "SET_BANNER_INDEX",
RESET_HOME_INFO: 'RESET_HOME_INFO', RESET_HOME_INFO: "RESET_HOME_INFO",
UPDATE_HOME_INFO: 'UPDATE_HOME_INFO', UPDATE_HOME_INFO: "UPDATE_HOME_INFO",
// brand actions // brand actions
GET_BRAND_LIST: 'GET_BRAND_LIST', GET_BRAND_LIST: "GET_BRAND_LIST",
GET_BRAND_LAYOUT_INFO: 'GET_BRAND_LAYOUT_INFO', GET_BRAND_LAYOUT_INFO: "GET_BRAND_LAYOUT_INFO",
GET_BRAND_LIVE_CHANNEL_INFO: 'GET_BRAND_LIVE_CHANNEL_INFO', GET_BRAND_LIVE_CHANNEL_INFO: "GET_BRAND_LIVE_CHANNEL_INFO",
GET_BRAND_CHAN_INFO: 'GET_BRAND_CHAN_INFO', GET_BRAND_CHAN_INFO: "GET_BRAND_CHAN_INFO",
GET_BRAND_TSV_INFO: 'GET_BRAND_TSV_INFO', GET_BRAND_TSV_INFO: "GET_BRAND_TSV_INFO",
GET_BRAND_RECOMMENDED_SHOW_INFO: 'GET_BRAND_RECOMMENDED_SHOW_INFO', GET_BRAND_RECOMMENDED_SHOW_INFO: "GET_BRAND_RECOMMENDED_SHOW_INFO",
GET_BRAND_SERIES_INFO: 'GET_BRAND_SERIES_INFO', GET_BRAND_SERIES_INFO: "GET_BRAND_SERIES_INFO",
GET_BRAND_CATEGORY_INFO: 'GET_BRAND_CATEGORY_INFO', GET_BRAND_CATEGORY_INFO: "GET_BRAND_CATEGORY_INFO",
GET_BRAND_CATEGORY_PRODUCT_INFO: 'GET_BRAND_CATEGORY_PRODUCT_INFO', GET_BRAND_CATEGORY_PRODUCT_INFO: "GET_BRAND_CATEGORY_PRODUCT_INFO",
GET_BRAND_BEST_SELLER: 'GET_BRAND_BEST_SELLER', GET_BRAND_BEST_SELLER: "GET_BRAND_BEST_SELLER",
GET_BRAND_CREATORS_INFO: 'GET_BRAND_CREATORS_INFO', GET_BRAND_CREATORS_INFO: "GET_BRAND_CREATORS_INFO",
GET_BRAND_SHOWROOM: 'GET_BRAND_SHOWROOM', GET_BRAND_SHOWROOM: "GET_BRAND_SHOWROOM",
GET_BRAND_RECENTLY_AIRED: 'GET_BRAND_RECENTLY_AIRED', GET_BRAND_RECENTLY_AIRED: "GET_BRAND_RECENTLY_AIRED",
SET_BRAND_LIVE_CHANNEL_UPCOMING: 'SET_BRAND_LIVE_CHANNEL_UPCOMING', SET_BRAND_LIVE_CHANNEL_UPCOMING: "SET_BRAND_LIVE_CHANNEL_UPCOMING",
SET_BRAND_CHAN_INFO: 'SET_BRAND_CHAN_INFO', SET_BRAND_CHAN_INFO: "SET_BRAND_CHAN_INFO",
RESET_BRAND_STATE: 'RESET_BRAND_STATE', RESET_BRAND_STATE: "RESET_BRAND_STATE",
RESET_BRAND_STATE_EXCEPT_BRAND_INFO: 'RESET_BRAND_STATE_EXCEPT_BRAND_INFO', RESET_BRAND_STATE_EXCEPT_BRAND_INFO: "RESET_BRAND_STATE_EXCEPT_BRAND_INFO",
RESET_BRAND_LAYOUT_INFO: 'RESET_BRAND_LAYOUT_INFO', RESET_BRAND_LAYOUT_INFO: "RESET_BRAND_LAYOUT_INFO",
// main actions // main actions
GET_SUB_CATEGORY: 'GET_SUB_CATEGORY', GET_SUB_CATEGORY: "GET_SUB_CATEGORY",
APPEND_SUB_CATEGORY: 'APPEND_SUB_CATEGORY', APPEND_SUB_CATEGORY: "APPEND_SUB_CATEGORY",
GET_TOP_20_SHOW: 'GET_TOP_20_SHOW', GET_TOP_20_SHOW: "GET_TOP_20_SHOW",
GET_PRODUCT_DETAIL: 'GET_PRODUCT_DETAIL', GET_PRODUCT_DETAIL: "GET_PRODUCT_DETAIL",
GET_YOUMAYLIKE: 'GET_YOUMAYLIKE', GET_YOUMAYLIKE: "GET_YOUMAYLIKE",
SET_MAIN_LIKE_CATEGORY: 'SET_MAIN_LIKE_CATEGORY', SET_MAIN_LIKE_CATEGORY: "SET_MAIN_LIKE_CATEGORY",
SET_MAIN_LIVE_UPCOMING_ALARM: 'SET_MAIN_LIVE_UPCOMING_ALARM', SET_MAIN_LIVE_UPCOMING_ALARM: "SET_MAIN_LIVE_UPCOMING_ALARM",
GET_MAIN_LIVE_SHOW_NOW_PRODUCT: 'GET_MAIN_LIVE_SHOW_NOW_PRODUCT', GET_MAIN_LIVE_SHOW_NOW_PRODUCT: "GET_MAIN_LIVE_SHOW_NOW_PRODUCT",
GET_MAIN_LIVE_SHOW: 'GET_MAIN_LIVE_SHOW', GET_MAIN_LIVE_SHOW: "GET_MAIN_LIVE_SHOW",
GET_MAIN_CATEGORY_SHOW_DETAIL: 'GET_MAIN_CATEGORY_SHOW_DETAIL', GET_MAIN_CATEGORY_SHOW_DETAIL: "GET_MAIN_CATEGORY_SHOW_DETAIL",
CLEAR_PRODUCT_DETAIL: 'CLEAR_PRODUCT_DETAIL', CLEAR_PRODUCT_DETAIL: "CLEAR_PRODUCT_DETAIL",
CLEAR_SUB_CATEGORY: 'CLEAR_SUB_CATEGORY', CLEAR_SUB_CATEGORY: "CLEAR_SUB_CATEGORY",
CLEAR_SHOPNOW_INFO: 'CLEAR_SHOPNOW_INFO', CLEAR_SHOPNOW_INFO: "CLEAR_SHOPNOW_INFO",
// myPage actions // myPage actions
GET_MY_RECOMMANDED_KEYWORD: 'GET_MY_RECOMMANDED_KEYWORD', GET_MY_RECOMMANDED_KEYWORD: "GET_MY_RECOMMANDED_KEYWORD",
GET_MY_FAQ_INFO: 'GET_MY_FAQ_INFO', GET_MY_FAQ_INFO: "GET_MY_FAQ_INFO",
GET_NOTICE: 'GET_NOTICE', GET_NOTICE: "GET_NOTICE",
GET_MY_CUSTOMERS: 'GET_MY_CUSTOMERS', GET_MY_CUSTOMERS: "GET_MY_CUSTOMERS",
GET_MY_FAVORITE: 'GET_MY_FAVORITE', GET_MY_FAVORITE: "GET_MY_FAVORITE",
DELETE_MY_FAVORITE: 'DELETE_MY_FAVORITE', DELETE_MY_FAVORITE: "DELETE_MY_FAVORITE",
GET_MY_FAVORITE_FLAG: 'GET_MY_FAVORITE_FLAG', GET_MY_FAVORITE_FLAG: "GET_MY_FAVORITE_FLAG",
SET_MY_TERMS_WITHDRAW: 'SET_MY_TERMS_WITHDRAW', SET_MY_TERMS_WITHDRAW: "SET_MY_TERMS_WITHDRAW",
GET_MY_UPCOMING_CHANGE_INFO: 'GET_MY_UPCOMING_CHANGE_INFO', GET_MY_UPCOMING_CHANGE_INFO: "GET_MY_UPCOMING_CHANGE_INFO",
GET_MY_UPCOMING_ALERT_SHOW: 'GET_MY_UPCOMING_ALERT_SHOW', GET_MY_UPCOMING_ALERT_SHOW: "GET_MY_UPCOMING_ALERT_SHOW",
DELETE_MY_UPCOMING_ALERT_SHOW: 'DELETE_MY_UPCOMING_ALERT_SHOW', DELETE_MY_UPCOMING_ALERT_SHOW: "DELETE_MY_UPCOMING_ALERT_SHOW",
GET_MY_UPCOMING_ALERT_SHOW_KEYS: 'GET_MY_UPCOMING_ALERT_SHOW_KEYS', GET_MY_UPCOMING_ALERT_SHOW_KEYS: "GET_MY_UPCOMING_ALERT_SHOW_KEYS",
SET_MY_UPCOMING_USE_ALERT: 'SET_MY_UPCOMING_USE_ALERT', SET_MY_UPCOMING_USE_ALERT: "SET_MY_UPCOMING_USE_ALERT",
GET_UPCOMING_ALERT_SHOW_CHANGE_INFO: 'GET_UPCOMING_ALERT_SHOW_CHANGE_INFO', GET_UPCOMING_ALERT_SHOW_CHANGE_INFO: "GET_UPCOMING_ALERT_SHOW_CHANGE_INFO",
GET_MY_RECENTLY_VIEWED_INFO: 'GET_MY_RECENTLY_VIEWED_INFO', GET_MY_RECENTLY_VIEWED_INFO: "GET_MY_RECENTLY_VIEWED_INFO",
CLEAR_RECENTLY_VIEWED_INFO: 'CLEAR_RECENTLY_VIEWED_INFO', CLEAR_RECENTLY_VIEWED_INFO: "CLEAR_RECENTLY_VIEWED_INFO",
CLEAR_FAVORITES: 'CLEAR_FAVORITES', CLEAR_FAVORITES: "CLEAR_FAVORITES",
SET_MYPAGE_TERMS_AGREE: 'SET_MYPAGE_TERMS_AGREE', SET_MYPAGE_TERMS_AGREE: "SET_MYPAGE_TERMS_AGREE",
SET_MYPAGE_TERMS_AGREE_SUCCESS: 'SET_MYPAGE_TERMS_AGREE_SUCCESS', SET_MYPAGE_TERMS_AGREE_SUCCESS: "SET_MYPAGE_TERMS_AGREE_SUCCESS",
SET_MYPAGE_TERMS_AGREE_FAIL: 'SET_MYPAGE_TERMS_AGREE_FAIL', SET_MYPAGE_TERMS_AGREE_FAIL: "SET_MYPAGE_TERMS_AGREE_FAIL",
// onSale actions // onSale actions
GET_HOME_ON_SALE_INFO: 'GET_HOME_ON_SALE_INFO', GET_HOME_ON_SALE_INFO: "GET_HOME_ON_SALE_INFO",
GET_ON_SALE_INFO: 'GET_ON_SALE_INFO', GET_ON_SALE_INFO: "GET_ON_SALE_INFO",
COPY_CATEGORY_INFO: 'COPY_CATEGORY_INFO', COPY_CATEGORY_INFO: "COPY_CATEGORY_INFO",
RESET_ON_SALE_STATE: 'RESET_ON_SALE_STATE', RESET_ON_SALE_STATE: "RESET_ON_SALE_STATE",
// product actions // product actions
GET_BEST_SELLER: 'GET_BEST_SELLER', GET_BEST_SELLER: "GET_BEST_SELLER",
GET_PRODUCT_GROUP: 'GET_PRODUCT_GROUP', GET_PRODUCT_GROUP: "GET_PRODUCT_GROUP",
GET_PRODUCT_OPTION: 'GET_PRODUCT_OPTION', GET_PRODUCT_OPTION: "GET_PRODUCT_OPTION",
GET_PRODUCT_IMAGE_LENGTH: 'GET_PRODUCT_IMAGE_LENGTH', GET_PRODUCT_IMAGE_LENGTH: "GET_PRODUCT_IMAGE_LENGTH",
GET_VIDEO_INDECATOR_FOCUS: 'GET_VIDEO_INDECATOR_FOCUS', GET_VIDEO_INDECATOR_FOCUS: "GET_VIDEO_INDECATOR_FOCUS",
GET_PRODUCT_OPTION_ID: 'GET_PRODUCT_OPTION_ID', GET_PRODUCT_OPTION_ID: "GET_PRODUCT_OPTION_ID",
CLEAR_PRODUCT_OPTIONS: 'CLEAR_PRODUCT_OPTIONS', CLEAR_PRODUCT_OPTIONS: "CLEAR_PRODUCT_OPTIONS",
GET_USER_REVIEW: 'GET_USER_REVIEW', GET_USER_REVIEW: "GET_USER_REVIEW",
TOGGLE_SHOW_ALL_REVIEWS: 'TOGGLE_SHOW_ALL_REVIEWS', TOGGLE_SHOW_ALL_REVIEWS: "TOGGLE_SHOW_ALL_REVIEWS",
RESET_SHOW_ALL_REVIEWS: 'RESET_SHOW_ALL_REVIEWS', RESET_SHOW_ALL_REVIEWS: "RESET_SHOW_ALL_REVIEWS",
// search actions // search actions
GET_SEARCH: 'GET_SEARCH', GET_SEARCH: "GET_SEARCH",
GET_SHOPPERHOUSE_SEARCH: 'GET_SHOPPERHOUSE_SEARCH', GET_SHOPPERHOUSE_SEARCH: "GET_SHOPPERHOUSE_SEARCH",
RESET_SEARCH: 'RESET_SEARCH', RESET_SEARCH: "RESET_SEARCH",
GET_SEARCH_PROCESSED: 'GET_SEARCH_PROCESSED', GET_SEARCH_PROCESSED: "GET_SEARCH_PROCESSED",
SET_SEARCH_INIT_PERFORMED: 'SET_SEARCH_INIT_PERFORMED', SET_SEARCH_INIT_PERFORMED: "SET_SEARCH_INIT_PERFORMED",
UPDATE_SEARCH_TIMESTAMP: 'UPDATE_SEARCH_TIMESTAMP', UPDATE_SEARCH_TIMESTAMP: "UPDATE_SEARCH_TIMESTAMP",
// event actions // event actions
GET_WELCOME_EVENT_INFO: 'GET_WELCOME_EVENT_INFO', GET_WELCOME_EVENT_INFO: "GET_WELCOME_EVENT_INFO",
GET_EVENT_ISSUED_STATUS: 'GET_EVENT_ISSUED_STATUS', GET_EVENT_ISSUED_STATUS: "GET_EVENT_ISSUED_STATUS",
SET_EVENT_ISSUE_REQ: 'SET_EVENT_ISSUE_REQ', SET_EVENT_ISSUE_REQ: "SET_EVENT_ISSUE_REQ",
SET_EVENT_POP_CLICK_INFO: 'SET_EVENT_POP_CLICK_INFO', SET_EVENT_POP_CLICK_INFO: "SET_EVENT_POP_CLICK_INFO",
CLEAR_EVENT_INFO: 'CLEAR_EVENT_INFO', CLEAR_EVENT_INFO: "CLEAR_EVENT_INFO",
SKIP_CLICK_INFO: 'SKIP_CLICK_INFO', SKIP_CLICK_INFO: "SKIP_CLICK_INFO",
CLEAR_CURATION_COUPON: 'CLEAR_CURATION_COUPON', CLEAR_CURATION_COUPON: "CLEAR_CURATION_COUPON",
CLEAR_EVENT_ISSUED_STATUS_SUCCEESS: 'CLEAR_EVENT_ISSUED_STATUS_SUCCEESS', CLEAR_EVENT_ISSUED_STATUS_SUCCEESS: "CLEAR_EVENT_ISSUED_STATUS_SUCCEESS",
// coupon actions // coupon actions
GET_PRODUCT_COUPON_INFO: 'GET_PRODUCT_COUPON_INFO', GET_PRODUCT_COUPON_INFO: "GET_PRODUCT_COUPON_INFO",
GET_PRODUCT_COUPON_SEARCH: 'GET_PRODUCT_COUPON_SEARCH', GET_PRODUCT_COUPON_SEARCH: "GET_PRODUCT_COUPON_SEARCH",
GET_PRODUCT_COUPON_DOWNLOAD: 'GET_PRODUCT_COUPON_DOWNLOAD', GET_PRODUCT_COUPON_DOWNLOAD: "GET_PRODUCT_COUPON_DOWNLOAD",
GET_PRODUCT_COUPON_TOTDOWNLOAD: 'GET_PRODUCT_COUPON_TOTDOWNLOAD', GET_PRODUCT_COUPON_TOTDOWNLOAD: "GET_PRODUCT_COUPON_TOTDOWNLOAD",
CLEAR_COUPON_INFO: 'CLEAR_COUPON_INFO', CLEAR_COUPON_INFO: "CLEAR_COUPON_INFO",
CLEAR_GET_PRODUCT_COUPON_DOWNLOAD: 'CLEAR_GET_PRODUCT_COUPON_DOWNLOAD', CLEAR_GET_PRODUCT_COUPON_DOWNLOAD: "CLEAR_GET_PRODUCT_COUPON_DOWNLOAD",
// checkout actions // checkout actions
GET_CHECKOUT_INFO: 'GET_CHECKOUT_INFO', GET_CHECKOUT_INFO: "GET_CHECKOUT_INFO",
INSERT_MY_INFO_CHECKOUT_ORDER: 'INSERT_MY_INFO_CHECKOUT_ORDER', INSERT_MY_INFO_CHECKOUT_ORDER: "INSERT_MY_INFO_CHECKOUT_ORDER",
GET_TAX_INFOS: 'GET_TAX_INFOS', GET_TAX_INFOS: "GET_TAX_INFOS",
UPDATE_SELECTED_SHIPPING_ADDR: 'UPDATE_SELECTED_SHIPPING_ADDR', UPDATE_SELECTED_SHIPPING_ADDR: "UPDATE_SELECTED_SHIPPING_ADDR",
UPDATE_SELECTED_BILLING_ADDR: 'UPDATE_SELECTED_BILLING_ADDR', UPDATE_SELECTED_BILLING_ADDR: "UPDATE_SELECTED_BILLING_ADDR",
UPDATE_SELECTED_COUPON: 'UPDATE_SELECTED_COUPON', UPDATE_SELECTED_COUPON: "UPDATE_SELECTED_COUPON",
GET_CHECKOUT_TOTAL_AMT: 'GET_CHECKOUT_TOTAL_AMT', GET_CHECKOUT_TOTAL_AMT: "GET_CHECKOUT_TOTAL_AMT",
CHECKOUT_DATA_RESET: 'CHECKOUT_DATA_RESET', CHECKOUT_DATA_RESET: "CHECKOUT_DATA_RESET",
// order actions // order actions
SET_PURCHASE_TERMS_AGREE: 'SET_PURCHASE_TERMS_AGREE', SET_PURCHASE_TERMS_AGREE: "SET_PURCHASE_TERMS_AGREE",
SET_PURCHASE_TERMS_WITHDRAW: 'SET_PURCHASE_TERMS_WITHDRAW', SET_PURCHASE_TERMS_WITHDRAW: "SET_PURCHASE_TERMS_WITHDRAW",
GET_MY_INFO_ORDER_SEARCH: 'GET_MY_INFO_ORDER_SEARCH', GET_MY_INFO_ORDER_SEARCH: "GET_MY_INFO_ORDER_SEARCH",
GET_MY_INFO_ORDER_SEARCH_CANCEL: 'GET_MY_INFO_ORDER_SEARCH_CANCEL', GET_MY_INFO_ORDER_SEARCH_CANCEL: "GET_MY_INFO_ORDER_SEARCH_CANCEL",
GET_MY_INFO_ORDER_DETAIL_SEARCH: 'GET_MY_INFO_ORDER_DETAIL_SEARCH', GET_MY_INFO_ORDER_DETAIL_SEARCH: "GET_MY_INFO_ORDER_DETAIL_SEARCH",
GET_MY_INFO_ORDER_SHIPPING_SEARCH: 'GET_MY_INFO_ORDER_SHIPPING_SEARCH', GET_MY_INFO_ORDER_SHIPPING_SEARCH: "GET_MY_INFO_ORDER_SHIPPING_SEARCH",
CLEAR_MY_INFO_ORDER_SEARCH: 'CLEAR_MY_INFO_ORDER_SEARCH', CLEAR_MY_INFO_ORDER_SEARCH: "CLEAR_MY_INFO_ORDER_SEARCH",
// play controller // play controller
GET_CHAT_LOG: 'GET_CHAT_LOG', GET_CHAT_LOG: "GET_CHAT_LOG",
GET_SUBTITLE: 'GET_SUBTITLE', GET_SUBTITLE: "GET_SUBTITLE",
CLEAR_PLAYER_INFO: 'CLEAR_PLAYER_INFO', CLEAR_PLAYER_INFO: "CLEAR_PLAYER_INFO",
UPDATE_VIDEO_PLAY_STATE: 'UPDATE_VIDEO_PLAY_STATE', UPDATE_VIDEO_PLAY_STATE: "UPDATE_VIDEO_PLAY_STATE",
// 🔽 [추가] 플레이 제어 매니저 액션 타입 // 🔽 [추가] 플레이 제어 매니저 액션 타입
/** /**
@@ -226,80 +226,88 @@ export const types = {
* SET_PLAYER_CONTROL: 특정 컴포넌트에게 비디오 재생 제어권을 부여합니다. * SET_PLAYER_CONTROL: 특정 컴포넌트에게 비디오 재생 제어권을 부여합니다.
* CLEAR_PLAYER_CONTROL: 컴포넌트로부터 비디오 재생 제어권을 회수합니다. * CLEAR_PLAYER_CONTROL: 컴포넌트로부터 비디오 재생 제어권을 회수합니다.
*/ */
SET_PLAYER_CONTROL: 'SET_PLAYER_CONTROL', SET_PLAYER_CONTROL: "SET_PLAYER_CONTROL",
CLEAR_PLAYER_CONTROL: 'CLEAR_PLAYER_CONTROL', CLEAR_PLAYER_CONTROL: "CLEAR_PLAYER_CONTROL",
// reset action // reset action
RESET_REDUX_STATE: 'RESET_REDUX_STATE', RESET_REDUX_STATE: "RESET_REDUX_STATE",
// cancel actions // cancel actions
GET_MY_INFO_ORDER_CANCEL_SEARCH: 'GET_MY_INFO_ORDER_CANCEL_SEARCH', GET_MY_INFO_ORDER_CANCEL_SEARCH: "GET_MY_INFO_ORDER_CANCEL_SEARCH",
GET_MY_INFO_ORDER_CANCEL_COLUMNS_SEARCH: 'GET_MY_INFO_ORDER_CANCEL_COLUMNS_SEARCH', GET_MY_INFO_ORDER_CANCEL_COLUMNS_SEARCH:
UPDATE_ORDER_PARTIAL_CANCEL: 'UPDATE_ORDER_PARTIAL_CANCEL', "GET_MY_INFO_ORDER_CANCEL_COLUMNS_SEARCH",
PAYMENT_TOTAL_CANCEL: 'PAYMENT_TOTAL_CANCEL', UPDATE_ORDER_PARTIAL_CANCEL: "UPDATE_ORDER_PARTIAL_CANCEL",
PAYMENT_TOTAL_CANCEL: "PAYMENT_TOTAL_CANCEL",
// emp actions // emp actions
GET_SHOPTIME_TERMS: 'GET_SHOPTIME_TERMS', GET_SHOPTIME_TERMS: "GET_SHOPTIME_TERMS",
// pinCode actions // pinCode actions
GET_MY_INFO_CARD_PINCODE_CHECK: 'GET_MY_INFO_CARD_PINCODE_CHECK', GET_MY_INFO_CARD_PINCODE_CHECK: "GET_MY_INFO_CARD_PINCODE_CHECK",
// new actions // new actions
CANCEL_FOCUS_ELEMENT: 'CANCEL_FOCUS_ELEMENT', CANCEL_FOCUS_ELEMENT: "CANCEL_FOCUS_ELEMENT",
// 약관동의 여부 확인 상태 // 약관동의 여부 확인 상태
GET_TERMS_AGREE_YN_START: 'GET_TERMS_AGREE_YN_START', GET_TERMS_AGREE_YN_START: "GET_TERMS_AGREE_YN_START",
GET_TERMS_AGREE_YN_SUCCESS: 'GET_TERMS_AGREE_YN_SUCCESS', GET_TERMS_AGREE_YN_SUCCESS: "GET_TERMS_AGREE_YN_SUCCESS",
GET_TERMS_AGREE_YN_FAILURE: 'GET_TERMS_AGREE_YN_FAILURE', GET_TERMS_AGREE_YN_FAILURE: "GET_TERMS_AGREE_YN_FAILURE",
// device // device
REQ_REG_DEVICE_INFO: 'REQ_REG_DEVICE_INFO', REQ_REG_DEVICE_INFO: "REQ_REG_DEVICE_INFO",
// 🔽 [추가] 영구재생 비디오 정보 저장 // 🔽 [추가] 영구재생 비디오 정보 저장
SET_PERSISTENT_VIDEO_INFO: 'SET_PERSISTENT_VIDEO_INFO', SET_PERSISTENT_VIDEO_INFO: "SET_PERSISTENT_VIDEO_INFO",
// 🔽 [추가] 배너 비디오 제어 액션 타입 // 🔽 [추가] 배너 비디오 제어 액션 타입
/** /**
* HomeBanner의 배너 간 비디오 재생 제어를 위한 액션 타입들. * HomeBanner의 배너 간 비디오 재생 제어를 위한 액션 타입들.
* 첫 번째 배너 상시 재생과 두 번째 배너 포커스 재생을 관리합니다. * 첫 번째 배너 상시 재생과 두 번째 배너 포커스 재생을 관리합니다.
*/ */
SET_BANNER_STATE: 'SET_BANNER_STATE', SET_BANNER_STATE: "SET_BANNER_STATE",
SET_BANNER_FOCUS: 'SET_BANNER_FOCUS', SET_BANNER_FOCUS: "SET_BANNER_FOCUS",
SET_BANNER_AVAILABILITY: 'SET_BANNER_AVAILABILITY', SET_BANNER_AVAILABILITY: "SET_BANNER_AVAILABILITY",
SET_BANNER_TRANSITION: 'SET_BANNER_TRANSITION', SET_BANNER_TRANSITION: "SET_BANNER_TRANSITION",
PAUSE_PLAYER_CONTROL: 'PAUSE_PLAYER_CONTROL', PAUSE_PLAYER_CONTROL: "PAUSE_PLAYER_CONTROL",
RESUME_PLAYER_CONTROL: 'RESUME_PLAYER_CONTROL', RESUME_PLAYER_CONTROL: "RESUME_PLAYER_CONTROL",
// 🔽 [추가] HomeBanner 동영상 포커스 정책 관리 // 🔽 [추가] HomeBanner 동영상 포커스 정책 관리
SET_CURRENT_FOCUS_BANNER: 'SET_CURRENT_FOCUS_BANNER', SET_CURRENT_FOCUS_BANNER: "SET_CURRENT_FOCUS_BANNER",
UPDATE_VIDEO_POLICY: 'UPDATE_VIDEO_POLICY', UPDATE_VIDEO_POLICY: "UPDATE_VIDEO_POLICY",
SET_MODAL_BORDER: 'SET_MODAL_BORDER', SET_MODAL_BORDER: "SET_MODAL_BORDER",
SET_BANNER_VISIBILITY: 'SET_BANNER_VISIBILITY', SET_BANNER_VISIBILITY: "SET_BANNER_VISIBILITY",
// 🔽 [추가] JustForYou 상품 관리 부분 // 🔽 [추가] JustForYou 상품 관리 부분
GET_RECENTLY_SAW_ITEM: 'GET_RECENTLY_SAW_ITEM', GET_RECENTLY_SAW_ITEM: "GET_RECENTLY_SAW_ITEM",
GET_LIKE_BRAND_PRODUCT: 'GET_LIKE_BRAND_PRODUCT', GET_LIKE_BRAND_PRODUCT: "GET_LIKE_BRAND_PRODUCT",
GET_MORE_TO_CONCIDER_AT_THIS_PRICE: 'GET_MORE_TO_CONCIDER_AT_THIS_PRICE', GET_MORE_TO_CONCIDER_AT_THIS_PRICE: "GET_MORE_TO_CONCIDER_AT_THIS_PRICE",
GET_JUSTFORYOU_INFO: "GET_JUSTFORYOU_INFO",
// 🔽 Voice Conductor 관련 액션 타입 // 🔽 Voice Conductor 관련 액션 타입
VOICE_REGISTER_SUCCESS: 'VOICE_REGISTER_SUCCESS', VOICE_REGISTER_SUCCESS: "VOICE_REGISTER_SUCCESS",
VOICE_REGISTER_FAILURE: 'VOICE_REGISTER_FAILURE', VOICE_REGISTER_FAILURE: "VOICE_REGISTER_FAILURE",
VOICE_SET_TICKET: 'VOICE_SET_TICKET', VOICE_SET_TICKET: "VOICE_SET_TICKET",
VOICE_SET_CONTEXT_SUCCESS: 'VOICE_SET_CONTEXT_SUCCESS', VOICE_SET_CONTEXT_SUCCESS: "VOICE_SET_CONTEXT_SUCCESS",
VOICE_SET_CONTEXT_FAILURE: 'VOICE_SET_CONTEXT_FAILURE', VOICE_SET_CONTEXT_FAILURE: "VOICE_SET_CONTEXT_FAILURE",
VOICE_PERFORM_ACTION: 'VOICE_PERFORM_ACTION', VOICE_PERFORM_ACTION: "VOICE_PERFORM_ACTION",
VOICE_REPORT_RESULT_SUCCESS: 'VOICE_REPORT_RESULT_SUCCESS', VOICE_REPORT_RESULT_SUCCESS: "VOICE_REPORT_RESULT_SUCCESS",
VOICE_REPORT_RESULT_FAILURE: 'VOICE_REPORT_RESULT_FAILURE', VOICE_REPORT_RESULT_FAILURE: "VOICE_REPORT_RESULT_FAILURE",
VOICE_UPDATE_INTENTS: 'VOICE_UPDATE_INTENTS', VOICE_UPDATE_INTENTS: "VOICE_UPDATE_INTENTS",
VOICE_CLEAR_STATE: 'VOICE_CLEAR_STATE', VOICE_CLEAR_STATE: "VOICE_CLEAR_STATE",
VOICE_ADD_LOG: 'VOICE_ADD_LOG', VOICE_ADD_LOG: "VOICE_ADD_LOG",
VOICE_CLEAR_LOGS: 'VOICE_CLEAR_LOGS', VOICE_CLEAR_LOGS: "VOICE_CLEAR_LOGS",
VOICE_STT_TEXT_RECEIVED: 'VOICE_STT_TEXT_RECEIVED', // STT 텍스트 수신 VOICE_STT_TEXT_RECEIVED: "VOICE_STT_TEXT_RECEIVED", // STT 텍스트 수신
// 🔽 Web Speech API 관련 // 🔽 Web Speech API 관련
WEB_SPEECH_INITIALIZED: 'WEB_SPEECH_INITIALIZED', WEB_SPEECH_INITIALIZED: "WEB_SPEECH_INITIALIZED",
WEB_SPEECH_START: 'WEB_SPEECH_START', WEB_SPEECH_START: "WEB_SPEECH_START",
WEB_SPEECH_INTERIM_RESULT: 'WEB_SPEECH_INTERIM_RESULT', WEB_SPEECH_INTERIM_RESULT: "WEB_SPEECH_INTERIM_RESULT",
WEB_SPEECH_END: 'WEB_SPEECH_END', WEB_SPEECH_END: "WEB_SPEECH_END",
WEB_SPEECH_ERROR: 'WEB_SPEECH_ERROR', WEB_SPEECH_ERROR: "WEB_SPEECH_ERROR",
WEB_SPEECH_CLEANUP: 'WEB_SPEECH_CLEANUP', WEB_SPEECH_CLEANUP: "WEB_SPEECH_CLEANUP",
//convert img
CONVERT_PDF_TO_IMAGE: "CONVERT_PDF_TO_IMAGE",
CONVERT_PDF_TO_IMAGE_SUCCESS: "CONVERT_PDF_TO_IMAGE_SUCCESS",
CONVERT_PDF_TO_IMAGE_FAILURE: "CONVERT_PDF_TO_IMAGE_FAILURE",
CLEAR_CONVERTED_IMAGE: "CLEAR_CONVERTED_IMAGE",
}; };

View File

@@ -0,0 +1,72 @@
import { URLS } from '../api/apiConfig';
import { TAxios } from '../api/TAxios';
import { get } from '../utils/fp';
import { types } from './actionTypes';
import { changeAppStatus } from './commonActions';
/**
* PDF를 이미지로 변환하는 액션
* @param {string} pdfUrl - 변환할 PDF URL
* @param {function} callback - 성공/실패 후 실행할 콜백 함수
*/
export const convertPdfToImage = (pdfUrl, callback) => (dispatch, getState) => {
// 로딩 시작
dispatch(changeAppStatus({ showLoadingPanel: { show: true } }));
const onSuccess = (response) => {
const blob = new Blob([response.data], { type: "image/png;charset=UTF-8" });
const imageUrl = URL.createObjectURL(blob);
console.log("convertPdfToImage onSuccess", response.data);
console.log("imageUrl onSuccess", imageUrl);
// const imageData = get("data.data", imageUrl);
dispatch({
type: types.CONVERT_PDF_TO_IMAGE_SUCCESS,
// payload: imageData,
payload: imageUrl,
});
dispatch(changeAppStatus({ showLoadingPanel: { show: false } }));
// 콜백이 있으면 변환된 이미지 데이터와 함께 호출
// callback && callback(null, imageData);
callback && callback(null, imageUrl);
};
const onFail = (error) => {
console.error("convertPdfToImage onFail", error);
dispatch({
type: types.CONVERT_PDF_TO_IMAGE_FAILURE,
payload: error,
});
dispatch(changeAppStatus({ showLoadingPanel: { show: false } }));
// 콜백이 있으면 에러와 함께 호출
callback && callback(error, null);
};
// API 요청 파라미터
const params = {
pdfUrl: pdfUrl,
};
TAxios(
dispatch,
getState,
"post",
URLS.CONVERT_IMG,
{},
params,
onSuccess,
onFail
);
};
/**
* 변환된 이미지 데이터를 초기화하는 액션
*/
export const clearConvertedImage = () => ({
type: types.CLEAR_CONVERTED_IMAGE,
});

View File

@@ -1,4 +1,12 @@
import { URLS } from '../api/apiConfig';
import { TAxios } from '../api/TAxios';
import {
curry,
get,
set,
} from '../utils/fp';
import { types } from './actionTypes'; import { types } from './actionTypes';
import { changeAppStatus } from './commonActions';
// 최근 본 아이템 관련 액션 // 최근 본 아이템 관련 액션
export const getRecentlySawItem = (data) => ({ export const getRecentlySawItem = (data) => ({
@@ -17,3 +25,32 @@ export const getMoreToConciderAtThisPrice = (data) => ({
type: types.GET_MORE_TO_CONCIDER_AT_THIS_PRICE, type: types.GET_MORE_TO_CONCIDER_AT_THIS_PRICE,
payload: data, payload: data,
}); });
export const getJustForYouInfo = (callback) => (dispatch, getState) => {
const onSuccess = (response) => {
console.log("getJustForYouInfo onSuccess", response.data);
dispatch({
type: types.GET_JUSTFORYOU_INFO,
payload: get("data.data", response),
});
dispatch(changeAppStatus({ showLoadingPanel: { show: false } }));
callback && callback();
};
const onFail = (error) => {
console.error("getJustForYouInfo onFail", error);
dispatch(changeAppStatus({ showLoadingPanel: { show: false } }));
callback && callback();
};
TAxios(
dispatch,
getState,
"get",
URLS.GET_JUSTFORYOU_INFO,
{},
{},
onSuccess,
onFail
);
};

View File

@@ -1,223 +1,232 @@
// export const SHOPTIME_BASE_URL = "https://qt2-aic.lgshopsvc.lgappstv.com/"; // export const SHOPTIME_BASE_URL = "https://qt2-aic.lgshopsvc.lgappstv.com/";
export const SHOPTIME_BASE_URL = '.lgshopsvc.lgappstv.com'; export const SHOPTIME_BASE_URL = ".lgshopsvc.lgappstv.com";
export const URLS = { export const URLS = {
//device controller //device controller
GET_AUTHENTICATION_CODE: '/lgsp/v1/device/auth.lge', GET_AUTHENTICATION_CODE: "/lgsp/v1/device/auth.lge",
GET_RE_AUTHENTICATION_CODE: '/lgsp/v1/device/reauth.lge', GET_RE_AUTHENTICATION_CODE: "/lgsp/v1/device/reauth.lge",
GET_DEVICE_ADDITION_INFO: '/lgsp/v1/device/info/addition.lge', GET_DEVICE_ADDITION_INFO: "/lgsp/v1/device/info/addition.lge",
DELETE_DEVICE_ADDITION_INFO: '/lgsp/v1/device/info/addition/delete.lge', DELETE_DEVICE_ADDITION_INFO: "/lgsp/v1/device/info/addition/delete.lge",
DELETE_DEVICE_PAIRING: '/lgsp/v1/device/pairing/delete.lge', DELETE_DEVICE_PAIRING: "/lgsp/v1/device/pairing/delete.lge",
REGISTER_DEVICE_PAIRING: '/lgsp/v1/device/pairing/register.lge', REGISTER_DEVICE_PAIRING: "/lgsp/v1/device/pairing/register.lge",
REGISTER_DEVICE: '/lgsp/v1/device/register.lge', REGISTER_DEVICE: "/lgsp/v1/device/register.lge",
REGISTER_DEVICE_INFO: '/lgsp/v1/device/register/info.lge', REGISTER_DEVICE_INFO: "/lgsp/v1/device/register/info.lge",
GET_DEVICE_INFO: '/lgsp/v1/device/info/addition.lge', GET_DEVICE_INFO: "/lgsp/v1/device/info/addition.lge",
// billing controller // billing controller
GET_MY_INFO_BILLING_SEARCH: '/lgsp/v1/myinfo/address/billing/search.lge', GET_MY_INFO_BILLING_SEARCH: "/lgsp/v1/myinfo/address/billing/search.lge",
// card controller // card controller
GET_MY_INFO_CARD_SEARCH: '/lgsp/v1/myinfo/card/search.lge', GET_MY_INFO_CARD_SEARCH: "/lgsp/v1/myinfo/card/search.lge",
// cart controller // cart controller
GET_MY_INFO_CART_SEARCH: '/lgsp/v1/myinfo/cart/search.lge', GET_MY_INFO_CART_SEARCH: "/lgsp/v1/myinfo/cart/search.lge",
ADD_TO_CART: '/lgsp/v1/myinfo/cart/add.lge', ADD_TO_CART: "/lgsp/v1/myinfo/cart/add.lge",
REMOVE_FROM_CART: '/lgsp/v1/myinfo/cart/remove.lge', REMOVE_FROM_CART: "/lgsp/v1/myinfo/cart/remove.lge",
UPDATE_CART_ITEM: '/lgsp/v1/myinfo/cart/update.lge', UPDATE_CART_ITEM: "/lgsp/v1/myinfo/cart/update.lge",
// shipping controller // shipping controller
GET_MY_INFO_SHIPPING_SEARCH: '/lgsp/v1/myinfo/address/shipping/search.lge', GET_MY_INFO_SHIPPING_SEARCH: "/lgsp/v1/myinfo/address/shipping/search.lge",
//home controller //home controller
GET_HOME_TERMS: '/lgsp/v1/home/terms.lge', GET_HOME_TERMS: "/lgsp/v1/home/terms.lge",
GET_HOME_MENU: '/lgsp/v1/home/menu.lge', GET_HOME_MENU: "/lgsp/v1/home/menu.lge",
GET_HOME_LAYOUT: '/lgsp/v1/home/homeLayout.lge', GET_HOME_LAYOUT: "/lgsp/v1/home/homeLayout.lge",
GET_HOME_MAIN_CONTENTS: '/lgsp/v1/home/homeContentsInfo.lge', GET_HOME_MAIN_CONTENTS: "/lgsp/v1/home/homeContentsInfo.lge",
GET_THEME_CURATION_INFO: '/lgsp/v2/home/theme/curations.lge', GET_THEME_CURATION_INFO: "/lgsp/v2/home/theme/curations.lge",
GET_THEME_CURATION_DETAIL_INFO: '/lgsp/v1/home/theme/curation/detail.lge', GET_THEME_CURATION_DETAIL_INFO: "/lgsp/v1/home/theme/curation/detail.lge",
GET_THEME_HOTEL_DETAIL_INFO: '/lgsp/v1/home/theme/hotel/detail.lge', GET_THEME_HOTEL_DETAIL_INFO: "/lgsp/v1/home/theme/hotel/detail.lge",
GET_THEME_MENU_SHELF_INFO: '/lgsp/v1/home/theme/menu/shelf/info.lge', GET_THEME_MENU_SHELF_INFO: "/lgsp/v1/home/theme/menu/shelf/info.lge",
//brand-controller //brand-controller
GET_BRAND_LIST: '/lgsp/v1/brand/info.lge', GET_BRAND_LIST: "/lgsp/v1/brand/info.lge",
GET_BRAND_LAYOUT_INFO: '/lgsp/v1/brand/shelf.lge', GET_BRAND_LAYOUT_INFO: "/lgsp/v1/brand/shelf.lge",
GET_BRAND_LIVE_CHANNEL_INFO: '/lgsp/v1/brand/live.lge', GET_BRAND_LIVE_CHANNEL_INFO: "/lgsp/v1/brand/live.lge",
GET_BRAND_TSV_INFO: '/lgsp/v1/brand/tsv.lge', GET_BRAND_TSV_INFO: "/lgsp/v1/brand/tsv.lge",
GET_BRAND_RECOMMENDED_SHOW_INFO: '/lgsp/v1/brand/recommend.lge', GET_BRAND_RECOMMENDED_SHOW_INFO: "/lgsp/v1/brand/recommend.lge",
GET_BRAND_SERIES_INFO: '/lgsp/v1/brand/series.lge', GET_BRAND_SERIES_INFO: "/lgsp/v1/brand/series.lge",
GET_BRAND_CATEGORY_INFO: '/lgsp/v1/brand/category.lge', GET_BRAND_CATEGORY_INFO: "/lgsp/v1/brand/category.lge",
GET_BRAND_BEST_SELLER: '/lgsp/v1/brand/bestSeller.lge', GET_BRAND_BEST_SELLER: "/lgsp/v1/brand/bestSeller.lge",
GET_BRAND_CREATORS_INFO: '/lgsp/v1/brand/creators.lge', GET_BRAND_CREATORS_INFO: "/lgsp/v1/brand/creators.lge",
GET_BRAND_SHOWROOM: '/lgsp/v1/brand/showroom.lge', GET_BRAND_SHOWROOM: "/lgsp/v1/brand/showroom.lge",
GET_BRAND_RECENTLY_AIRED: '/lgsp/v1/brand/recently/aired.lge', GET_BRAND_RECENTLY_AIRED: "/lgsp/v1/brand/recently/aired.lge",
//on-sale controller //on-sale controller
GET_ON_SALE_INFO: '/lgsp/v1/onsale/onsale.lge', GET_ON_SALE_INFO: "/lgsp/v1/onsale/onsale.lge",
//product controller //product controller
GET_PRODUCT_BESTSELLER: '/lgsp/v1/product/bestSeller.lge', GET_PRODUCT_BESTSELLER: "/lgsp/v1/product/bestSeller.lge",
GET_PRODUCT_GROUP: '/lgsp/v1/product/group.lge', GET_PRODUCT_GROUP: "/lgsp/v1/product/group.lge",
GET_PRODUCT_OPTION: '/lgsp/v1/product/option.lge', GET_PRODUCT_OPTION: "/lgsp/v1/product/option.lge",
GET_USER_REVEIW: '/lgsp/v1/product/reviews.lge', GET_USER_REVEIW: "/lgsp/v1/product/reviews.lge",
//my-page controller //my-page controller
GET_MY_RECOMMANDED_KEYWORD: '/lgsp/v1/mypage/reckeyword.lge', GET_MY_RECOMMANDED_KEYWORD: "/lgsp/v1/mypage/reckeyword.lge",
GET_MY_FAQ_INFO: '/lgsp/v1/mypage/support/faq.lge', GET_MY_FAQ_INFO: "/lgsp/v1/mypage/support/faq.lge",
GET_NOTICE: '/lgsp/v1/mypage/support/notice.lge', GET_NOTICE: "/lgsp/v1/mypage/support/notice.lge",
GET_MY_CUSTOMERS: '/lgsp/v1/mypage/customers.lge', GET_MY_CUSTOMERS: "/lgsp/v1/mypage/customers.lge",
GET_MY_FAVORITE: '/lgsp/v1/mypage/favorite.lge', GET_MY_FAVORITE: "/lgsp/v1/mypage/favorite.lge",
DELETE_MY_FAVORITE: '/lgsp/v1/mypage/favorite.lge', DELETE_MY_FAVORITE: "/lgsp/v1/mypage/favorite.lge",
GET_MY_FAVORITE_FLAG: '/lgsp/v1/mypage/favorite/flag.lge', GET_MY_FAVORITE_FLAG: "/lgsp/v1/mypage/favorite/flag.lge",
SET_MY_TERMS_WITHDRAW: '/lgsp/v1/mypage/terms/withdraw.lge', SET_MY_TERMS_WITHDRAW: "/lgsp/v1/mypage/terms/withdraw.lge",
GET_MY_UPCOMING_CHANGE_INFO: '/lgsp/v1/mypage/upcoming/alert/changeinfo.lge', GET_MY_UPCOMING_CHANGE_INFO: "/lgsp/v1/mypage/upcoming/alert/changeinfo.lge",
GET_MY_UPCOMING_ALERT_SHOW: '/lgsp/v1/mypage/upcoming/alert/show.lge', GET_MY_UPCOMING_ALERT_SHOW: "/lgsp/v1/mypage/upcoming/alert/show.lge",
DELETE_MY_UPCOMING_ALERT_SHOW: '/lgsp/v1/mypage/upcoming/alert/show.lge', DELETE_MY_UPCOMING_ALERT_SHOW: "/lgsp/v1/mypage/upcoming/alert/show.lge",
GET_MY_UPCOMING_ALERT_SHOW_KEYS: '/lgsp/v1/mypage/upcoming/alert/show/keys.lge', GET_MY_UPCOMING_ALERT_SHOW_KEYS:
SET_MY_UPCOMING_USE_ALERT: '/lgsp/v1/mypage/upcoming/alert/use.lge', "/lgsp/v1/mypage/upcoming/alert/show/keys.lge",
GET_UPCOMING_ALERT_SHOW_CHANGE_INFO: '/lgsp/v1/mypage/upcoming/show/changeinfo.lge', SET_MY_UPCOMING_USE_ALERT: "/lgsp/v1/mypage/upcoming/alert/use.lge",
GET_MY_RECENTLY_VIEWED_INFO: '/lgsp/v1/mypage/recently/viewed.lge', GET_UPCOMING_ALERT_SHOW_CHANGE_INFO:
"/lgsp/v1/mypage/upcoming/show/changeinfo.lge",
GET_MY_RECENTLY_VIEWED_INFO: "/lgsp/v1/mypage/recently/viewed.lge",
//search controller //search controller
GET_SEARCH: '/lgsp/v1/search/list.lge', GET_SEARCH: "/lgsp/v1/search/list.lge",
// IF-LGSP-098 ShopperHouse검색조회 // IF-LGSP-098 ShopperHouse검색조회
GET_SHOPPERHOUSE_SEARCH: '/lgsp/v1/search/shopperhouse/list.lge', GET_SHOPPERHOUSE_SEARCH: "/lgsp/v1/search/shopperhouse/list.lge",
//main controller //main controller
GET_SUB_CATEGORY: '/lgsp/v1/main/subcategory.lge', GET_SUB_CATEGORY: "/lgsp/v1/main/subcategory.lge",
GET_TOP20_SHOW: '/lgsp/v1/main/top/show.lge', GET_TOP20_SHOW: "/lgsp/v1/main/top/show.lge",
GET_PRODUCT_DETAIL: '/lgsp/v1/main/category/product/detail.lge', GET_PRODUCT_DETAIL: "/lgsp/v1/main/category/product/detail.lge",
GET_YOUMAYLIKE: '/lgsp/v1/main/youmaylike.lge', GET_YOUMAYLIKE: "/lgsp/v1/main/youmaylike.lge",
GET_HOME_FULL_VIDEO_INFO: '/lgsp/v1/main/homeFullVideoInfo.lge', GET_HOME_FULL_VIDEO_INFO: "/lgsp/v1/main/homeFullVideoInfo.lge",
SET_MAIN_LIKE_CATEGORY: '/lgsp/v1/main/category/like.lge', SET_MAIN_LIKE_CATEGORY: "/lgsp/v1/main/category/like.lge",
SET_MAIN_LIVE_UPCOMING_ALARM: '/lgsp/v1/main/live/upcoming/alarm.lge', SET_MAIN_LIVE_UPCOMING_ALARM: "/lgsp/v1/main/live/upcoming/alarm.lge",
GET_MAIN_LIVE_SHOW_NOW_PRODUCT: '/lgsp/v1/main/live/show/nowproduct.lge', GET_MAIN_LIVE_SHOW_NOW_PRODUCT: "/lgsp/v1/main/live/show/nowproduct.lge",
GET_MAIN_CATEGORY_SHOW_DETAIL: '/lgsp/v1/main/category/show/detail.lge', GET_MAIN_CATEGORY_SHOW_DETAIL: "/lgsp/v1/main/category/show/detail.lge",
GET_MAIN_LIVE_SHOW: '/lgsp/v1/main/live/show.lge', GET_MAIN_LIVE_SHOW: "/lgsp/v1/main/live/show.lge",
//event controller //event controller
GET_WELCOME_EVENT_INFO: '/lgsp/v1/event/event.lge', GET_WELCOME_EVENT_INFO: "/lgsp/v1/event/event.lge",
GET_EVENT_ISSUED_STATUS: '/lgsp/v1/event/issued/status.lge', GET_EVENT_ISSUED_STATUS: "/lgsp/v1/event/issued/status.lge",
SET_EVENT_ISSUE_REQ: '/lgsp/v1/event/issued.lge', SET_EVENT_ISSUE_REQ: "/lgsp/v1/event/issued.lge",
SET_EVENT_POP_CLICK_INFO: '/lgsp/v1/event/popup/click.lge', SET_EVENT_POP_CLICK_INFO: "/lgsp/v1/event/popup/click.lge",
// coupon actions // coupon actions
GET_PRODUCT_COUPON_INFO: '/lgsp/v1/product/coupon/info.lge', GET_PRODUCT_COUPON_INFO: "/lgsp/v1/product/coupon/info.lge",
GET_PRODUCT_COUPON_SEARCH: '/lgsp/v1/product/coupon/search.lge', GET_PRODUCT_COUPON_SEARCH: "/lgsp/v1/product/coupon/search.lge",
GET_PRODUCT_COUPON_DOWNLOAD: '/lgsp/v1/product/coupon/download.lge', GET_PRODUCT_COUPON_DOWNLOAD: "/lgsp/v1/product/coupon/download.lge",
GET_PRODUCT_COUPON_TOTDOWNLOAD: '/lgsp/v1/product/coupon/totDownload.lge', GET_PRODUCT_COUPON_TOTDOWNLOAD: "/lgsp/v1/product/coupon/totDownload.lge",
//checkout controller //checkout controller
GET_CHECKOUT_INFO: '/lgsp/v1/myinfo/checkout/info.lge', GET_CHECKOUT_INFO: "/lgsp/v1/myinfo/checkout/info.lge",
INSERT_MY_INFO_CHECKOUT_ORDER: '/lgsp/v1/myinfo/checkout/order.lge', INSERT_MY_INFO_CHECKOUT_ORDER: "/lgsp/v1/myinfo/checkout/order.lge",
GET_TAX_INFOS: '/lgsp/v1/myinfo/checkout/taxInfo.lge', GET_TAX_INFOS: "/lgsp/v1/myinfo/checkout/taxInfo.lge",
GET_CHECKOUT_TOTAL_AMT: '/lgsp/v1/myinfo/checkout/totalAmt.lge', GET_CHECKOUT_TOTAL_AMT: "/lgsp/v1/myinfo/checkout/totalAmt.lge",
// app controller // app controller
SEND_SMS: '/lgsp/v1/app/sms.lge', SEND_SMS: "/lgsp/v1/app/sms.lge",
// play controller // play controller
CHAT_LOG: '/lgsp/v1/play/vod/chatLog.lge', CHAT_LOG: "/lgsp/v1/play/vod/chatLog.lge",
SUBTITLE: '/lgsp/v1/play/vod/subtitle.lge', SUBTITLE: "/lgsp/v1/play/vod/subtitle.lge",
// order controller // order controller
SET_PURCHASE_TERMS_AGREE: '/lgsp/v1/myinfo/purchaseTerms/agree.lge', SET_PURCHASE_TERMS_AGREE: "/lgsp/v1/myinfo/purchaseTerms/agree.lge",
SET_PURCHASE_TERMS_WITHDRAW: '/lgsp/v1/myinfo/purchaseTerms/withdraw.lge', SET_PURCHASE_TERMS_WITHDRAW: "/lgsp/v1/myinfo/purchaseTerms/withdraw.lge",
GET_MY_INFO_ORDER_SEARCH: '/lgsp/v1/myinfo/order/info.lge', GET_MY_INFO_ORDER_SEARCH: "/lgsp/v1/myinfo/order/info.lge",
GET_MY_INFO_ORDER_DETAIL_SEARCH: '/lgsp/v1/myinfo/order/detail.lge', GET_MY_INFO_ORDER_DETAIL_SEARCH: "/lgsp/v1/myinfo/order/detail.lge",
GET_MY_INFO_ORDER_SHIPPING_SEARCH: '/lgsp/v1/myinfo/order/shipping.lge', GET_MY_INFO_ORDER_SHIPPING_SEARCH: "/lgsp/v1/myinfo/order/shipping.lge",
// cancel controller // cancel controller
GET_MY_INFO_ORDER_CANCEL_SEARCH: '/lgsp/v1/myinfo/order/cancel/info.lge', GET_MY_INFO_ORDER_CANCEL_SEARCH: "/lgsp/v1/myinfo/order/cancel/info.lge",
GET_MY_INFO_ORDER_CANCEL_COLUMNS_SEARCH: '/lgsp/v1/myinfo/order/cancel/reasoninfo.lge', GET_MY_INFO_ORDER_CANCEL_COLUMNS_SEARCH:
UPDATE_ORDER_PARTIAL_CANCEL: '/lgsp/v1/myinfo/order/orderPartialCancel.lge', "/lgsp/v1/myinfo/order/cancel/reasoninfo.lge",
PAYMENT_TOTAL_CANCEL: '/lgsp/v1/myinfo/order/paymentTotalCancel.lge', UPDATE_ORDER_PARTIAL_CANCEL: "/lgsp/v1/myinfo/order/orderPartialCancel.lge",
PAYMENT_TOTAL_CANCEL: "/lgsp/v1/myinfo/order/paymentTotalCancel.lge",
// foryou controller
GET_JUSTFORYOU_INFO: "/lgsp/v1/justforyou/list.lge",
// emp controller // emp controller
GET_SHOPTIME_TERMS: '/lgsp/v1/emp/shoptime/terms.lge', GET_SHOPTIME_TERMS: "/lgsp/v1/emp/shoptime/terms.lge",
SET_MYPAGE_TERMS_AGREE: '/lgsp/v1/mypage/terms/agree.lge', SET_MYPAGE_TERMS_AGREE: "/lgsp/v1/mypage/terms/agree.lge",
// pinCode controller // pinCode controller
GET_MY_INFO_CARD_PINCODE_CHECK: '/lgsp/v1/myinfo/card/pincode/check.lge', GET_MY_INFO_CARD_PINCODE_CHECK: "/lgsp/v1/myinfo/card/pincode/check.lge",
// img convert
CONVERT_IMG: "/lgsp/v1/convert/file/pdf2image.lge",
// log deeplink controller // log deeplink controller
LOG_DEEPLINK: '/lgsp/v1/log/deeplink.lge', LOG_DEEPLINK: "/lgsp/v1/log/deeplink.lge",
// IF-LGSP-LOG-001 log live controller // IF-LGSP-LOG-001 log live controller
LOG_LIVE: '/lgsp/v1/log/live.lge', LOG_LIVE: "/lgsp/v1/log/live.lge",
// IF-LGSP-LOG-002 log vod controller // IF-LGSP-LOG-002 log vod controller
LOG_VOD: '/lgsp/v1/log/vod.lge', LOG_VOD: "/lgsp/v1/log/vod.lge",
// IF-LGSP-LOG-003 log curation controller // IF-LGSP-LOG-003 log curation controller
LOG_CURATION: '/lgsp/v1/log/curation.lge', LOG_CURATION: "/lgsp/v1/log/curation.lge",
// IF-LGSP-LOG-004 log second layer controller // IF-LGSP-LOG-004 log second layer controller
LOG_SECOND_LAYER: '/lgsp/v1/log/secondlayer.lge', LOG_SECOND_LAYER: "/lgsp/v1/log/secondlayer.lge",
// IF-LGSP-LOG-005 log gnb controller // IF-LGSP-LOG-005 log gnb controller
LOG_GNB: '/lgsp/v1/log/gnb.lge', LOG_GNB: "/lgsp/v1/log/gnb.lge",
// IF-LGSP-LOG-006 log product controller // IF-LGSP-LOG-006 log product controller
LOG_PRODUCT: '/lgsp/v1/log/product.lge', LOG_PRODUCT: "/lgsp/v1/log/product.lge",
// IF-LGSP-LOG-007 log detail controller // IF-LGSP-LOG-007 log detail controller
LOG_DETAIL: '/lgsp/v1/log/detail.lge', LOG_DETAIL: "/lgsp/v1/log/detail.lge",
// IF-LGSP-LOG-008 log shop by mobile controller // IF-LGSP-LOG-008 log shop by mobile controller
LOG_SHOP_BY_MOBILE: '/lgsp/v1/log/shopbymobile.lge', LOG_SHOP_BY_MOBILE: "/lgsp/v1/log/shopbymobile.lge",
// IF-LGSP-LOG-009 log partners controller // IF-LGSP-LOG-009 log partners controller
LOG_PARTNERS: '/lgsp/v1/log/partners.lge', LOG_PARTNERS: "/lgsp/v1/log/partners.lge",
// IF-LGSP-LOG-010 log alert flag controller // IF-LGSP-LOG-010 log alert flag controller
LOG_MY_PAGE_ALERT_FLAG: '/lgsp/v1/log/mypage/alertflag.lge', LOG_MY_PAGE_ALERT_FLAG: "/lgsp/v1/log/mypage/alertflag.lge",
// IF-LGSP-LOG-011 log my delete controller // IF-LGSP-LOG-011 log my delete controller
LOG_MY_PAGE_MY_DELETE: '/lgsp/v1/log/mypage/mydelete.lge', LOG_MY_PAGE_MY_DELETE: "/lgsp/v1/log/mypage/mydelete.lge",
// IF-LGSP-LOG-012 log notive controller // IF-LGSP-LOG-012 log notive controller
LOG_MY_PAGE_NOTICE: '/lgsp/v1/log/mypage/notice.lge', LOG_MY_PAGE_NOTICE: "/lgsp/v1/log/mypage/notice.lge",
// IF-LGSP-LOG-013 log search controller // IF-LGSP-LOG-013 log search controller
LOG_SEARCH: '/lgsp/v1/log/search/search.lge', LOG_SEARCH: "/lgsp/v1/log/search/search.lge",
// IF-LGSP-LOG-014 log search click controller // IF-LGSP-LOG-014 log search click controller
LOG_SEARCH_CLICK: '/lgsp/v1/log/search/click.lge', LOG_SEARCH_CLICK: "/lgsp/v1/log/search/click.lge",
// IF-LGSP-LOG-015 log upcoming flag controller // IF-LGSP-LOG-015 log upcoming flag controller
LOG_UPCOMING_FLAG: '/lgsp/v1/log/upcoming/upcomingflag.lge', LOG_UPCOMING_FLAG: "/lgsp/v1/log/upcoming/upcomingflag.lge",
// IF-LGSP-LOG-016 log keyword flag controller, 미사용 // IF-LGSP-LOG-016 log keyword flag controller, 미사용
// LOG_KEYWORD_FLAG: "/lgsp/v1/log/upcoming/keywordflag.lge", // LOG_KEYWORD_FLAG: "/lgsp/v1/log/upcoming/keywordflag.lge",
// IF-LGSP-LOG-017 log alarm pop controller // IF-LGSP-LOG-017 log alarm pop controller
LOG_ALARM_POP: '/lgsp/v1/log/alarm/alarmpop.lge', LOG_ALARM_POP: "/lgsp/v1/log/alarm/alarmpop.lge",
// IF-LGSP-LOG-018 log alarm click controller // IF-LGSP-LOG-018 log alarm click controller
LOG_ALARM_CLICK: '/lgsp/v1/log/alarm/alarmclick.lge', LOG_ALARM_CLICK: "/lgsp/v1/log/alarm/alarmclick.lge",
// IF-LGSP-LOG-019 검증 필요 // IF-LGSP-LOG-019 검증 필요
LOG_PURCHASE_TRACKING: '/lgsp/v1/log/purchase/tracking.lge', LOG_PURCHASE_TRACKING: "/lgsp/v1/log/purchase/tracking.lge",
// IF-LGSP-LOG-020 log theme product controller // IF-LGSP-LOG-020 log theme product controller
LOG_THEME_PRODUCT: '/lgsp/v1/log/theme/product.lge', LOG_THEME_PRODUCT: "/lgsp/v1/log/theme/product.lge",
// IF-LGSP-LOG-100 log top contents controller // IF-LGSP-LOG-100 log top contents controller
LOG_TOP_CONTENTS: '/lgsp/v1/log/topcontents.lge', LOG_TOP_CONTENTS: "/lgsp/v1/log/topcontents.lge",
// IF-LGSP-LOG-101 log tearms controller // IF-LGSP-LOG-101 log tearms controller
LOG_TERMS: '/lgsp/v1/log/terms.lge', LOG_TERMS: "/lgsp/v1/log/terms.lge",
// IF-LGSP-LOG-102 log login controller // IF-LGSP-LOG-102 log login controller
LOG_ACCOUNT_LOGIN: '/lgsp/v1/log/account/login.lge', LOG_ACCOUNT_LOGIN: "/lgsp/v1/log/account/login.lge",
// IF-LGSP-LOG-103 log order btn click controller // IF-LGSP-LOG-103 log order btn click controller
LOG_ORDER_BTN_CLICK: '/lgsp/v1/log/order/btnClick.lge', LOG_ORDER_BTN_CLICK: "/lgsp/v1/log/order/btnClick.lge",
// IF-LGSP-LOG-104 log order change controller // IF-LGSP-LOG-104 log order change controller
LOG_ORDER_CHANGE: '/lgsp/v1/log/order/change.lge', LOG_ORDER_CHANGE: "/lgsp/v1/log/order/change.lge",
// IF-LGSP-LOG-105 log coupon use controller // IF-LGSP-LOG-105 log coupon use controller
LOG_COUPON_USE: '/lgsp/v1/log/coupon/use.lge', LOG_COUPON_USE: "/lgsp/v1/log/coupon/use.lge",
// IF-LGSP-LOG-106 log cart add controller, 미사용 // IF-LGSP-LOG-106 log cart add controller, 미사용
// LOG_CART_ADD: "/lgsp/v1/log/cart/add.lge", // LOG_CART_ADD: "/lgsp/v1/log/cart/add.lge",
@@ -226,37 +235,37 @@ export const URLS = {
// LOG_CART_DELETE: "/lgsp/v1/log/cart/delete.lge", // LOG_CART_DELETE: "/lgsp/v1/log/cart/delete.lge",
// IF-LGSP-LOG-108 log payment entry controller // IF-LGSP-LOG-108 log payment entry controller
LOG_PAYMENT_ENTRY: '/lgsp/v1/log/payment/entry.lge', LOG_PAYMENT_ENTRY: "/lgsp/v1/log/payment/entry.lge",
// IF-LGSP-LOG-109 log payment complete controller // IF-LGSP-LOG-109 log payment complete controller
LOG_PAYMENT_COMPLETE: '/lgsp/v1/log/payment/complete.lge', LOG_PAYMENT_COMPLETE: "/lgsp/v1/log/payment/complete.lge",
// IF-LGSP-LOG-110 log brands controller // IF-LGSP-LOG-110 log brands controller
LOG_BRANDS: '/lgsp/v1/log/brands.lge', LOG_BRANDS: "/lgsp/v1/log/brands.lge",
// IF-LGSP-LOG-111 log myinfo controller // IF-LGSP-LOG-111 log myinfo controller
LOG_MY_INFO_EDIT: '/lgsp/v1/log/myinfo/edit.lge', LOG_MY_INFO_EDIT: "/lgsp/v1/log/myinfo/edit.lge",
// IF-LGSP-LOG-112 log checkout btn click controller // IF-LGSP-LOG-112 log checkout btn click controller
LOG_CHECKOUT_BTN_CLICK: '/lgsp/v1/log/checkout/btnClick.lge', LOG_CHECKOUT_BTN_CLICK: "/lgsp/v1/log/checkout/btnClick.lge",
// IF-LGSP-LOG-200 // IF-LGSP-LOG-200
LOG_TOTAL_RECOMMEND: '/lgsp/v1/log/recommend.lge', LOG_TOTAL_RECOMMEND: "/lgsp/v1/log/recommend.lge",
}; };
export let countryCode = ''; export let countryCode = "";
export let ricCode = ''; export let ricCode = "";
const getRicCode = (country, ricCodeSetting) => { const getRicCode = (country, ricCodeSetting) => {
if (ricCodeSetting !== 'system') { if (ricCodeSetting !== "system") {
return ricCodeSetting; return ricCodeSetting;
} }
if (country == 'US') { if (country == "US") {
return 'aic'; return "aic";
} else if (country == 'DE' || country == 'GB') { } else if (country == "DE" || country == "GB") {
return 'eic'; return "eic";
} else if (country == 'RU') { } else if (country == "RU") {
return 'ruc'; return "ruc";
} }
return null; return null;
}; };
@@ -264,38 +273,38 @@ export const getUrl = (getState, endStr) => {
const serverHOST = getState().common.appStatus.serverHOST; const serverHOST = getState().common.appStatus.serverHOST;
const { serverType, ricCodeSetting } = getState().localSettings; const { serverType, ricCodeSetting } = getState().localSettings;
if (!serverHOST) { if (!serverHOST) {
console.error('getUrl: Not supported. Host is missing'); console.error("getUrl: Not supported. Host is missing");
return ''; return "";
} }
// serverHOST "qt2-US.nextlgsdp.com" // serverHOST "qt2-US.nextlgsdp.com"
let sdpURL = serverHOST.split('.')[0]; let sdpURL = serverHOST.split(".")[0];
// let countryCode = "", // let countryCode = "",
// ricCode = ""; // ricCode = "";
if (sdpURL.indexOf('-') > 0) { if (sdpURL.indexOf("-") > 0) {
countryCode = sdpURL.split('-')[1]; countryCode = sdpURL.split("-")[1];
} else { } else {
countryCode = sdpURL; countryCode = sdpURL;
} }
ricCode = getRicCode(countryCode, ricCodeSetting); ricCode = getRicCode(countryCode, ricCodeSetting);
if (!ricCode) { if (!ricCode) {
return ''; return "";
} }
sdpURL = sdpURL.toLowerCase(); sdpURL = sdpURL.toLowerCase();
if (serverType !== 'system') { if (serverType !== "system") {
sdpURL = serverType; sdpURL = serverType;
} }
let newUrl = ''; let newUrl = "";
if (sdpURL.indexOf('qt2') >= 0) { if (sdpURL.indexOf("qt2") >= 0) {
// dev // dev
newUrl = 'https://qt2-' + ricCode + SHOPTIME_BASE_URL; newUrl = "https://qt2-" + ricCode + SHOPTIME_BASE_URL;
} else if (sdpURL.indexOf('qt') >= 0 || sdpURL.indexOf('st') >= 0) { } else if (sdpURL.indexOf("qt") >= 0 || sdpURL.indexOf("st") >= 0) {
// Qa - cdn // Qa - cdn
newUrl = 'https://qt-' + ricCode + SHOPTIME_BASE_URL; newUrl = "https://qt-" + ricCode + SHOPTIME_BASE_URL;
} else { } else {
// Prod // Prod
newUrl = 'https://' + ricCode + SHOPTIME_BASE_URL; newUrl = "https://" + ricCode + SHOPTIME_BASE_URL;
} }
return newUrl + endStr; return newUrl + endStr;
}; };

View File

@@ -1,58 +1,75 @@
import React, { memo, useCallback, useEffect, useMemo, useState } from 'react'; import React, {
memo,
useCallback,
useEffect,
useMemo,
useState,
} from 'react';
import classNames from 'classnames'; import classNames from 'classnames';
import { useDispatch, useSelector } from 'react-redux'; import {
useDispatch,
useSelector,
} from 'react-redux';
import Spottable from '@enact/spotlight/Spottable'; import Spottable from '@enact/spotlight/Spottable';
import energyDetail from '../../../assets/images/energyLabel/energyDetail.png'; import defaultLogoImg
import energyLabelA from '../../../assets/images/energyLabel/labelgradeA.png'; from '../../../assets/images/ic-tab-partners-default@3x.png';
import energyLabelB from '../../../assets/images/energyLabel/labelgradeB.png'; import defaultimgHorizontal
import energyLabelC from '../../../assets/images/energyLabel/labelgradeC.png'; from '../../../assets/images/img-thumb-empty-hor@3x.png';
import energyLabelD from '../../../assets/images/energyLabel/labelgradeD.png'; import defaultImageItem
import energyLabelE from '../../../assets/images/energyLabel/labelgradeE.png'; from '../../../assets/images/img-thumb-empty-product@3x.png';
import energyLabelF from '../../../assets/images/energyLabel/labelgradeF.png'; import defaultimgVertical
import energyLabelG from '../../../assets/images/energyLabel/labelgradeG.png'; from '../../../assets/images/img-thumb-empty-ver@3x.png';
//에너지 라벨
import qrImg from '../../../assets/images/energyLabel/qr.png';
import defaultLogoImg from '../../../assets/images/ic-tab-partners-default@3x.png';
import defaultimgHorizontal from '../../../assets/images/img-thumb-empty-hor@3x.png';
import defaultImageItem from '../../../assets/images/img-thumb-empty-product@3x.png';
import defaultimgVertical from '../../../assets/images/img-thumb-empty-ver@3x.png';
import IcLiveShow from '../../../assets/images/tag/tag-liveshow.png'; import IcLiveShow from '../../../assets/images/tag/tag-liveshow.png';
import { setHidePopup, setShowPopup } from '../../actions/commonActions'; import testPdf from '../../../assets/mock/test.pdf';
import {
setHidePopup,
setShowPopup,
} from '../../actions/commonActions';
import {
clearConvertedImage,
convertPdfToImage,
} from '../../actions/convertActions';
import { sendLogTotalRecommend } from '../../actions/logActions'; import { sendLogTotalRecommend } from '../../actions/logActions';
import usePriceInfo from '../../hooks/usePriceInfo'; import usePriceInfo from '../../hooks/usePriceInfo';
import * as Config from '../../utils/Config'; import * as Config from '../../utils/Config';
import { $L, getQRCodeUrl, removeSpecificTags } from '../../utils/helperMethods'; import {
$L,
getQRCodeUrl,
removeSpecificTags,
} from '../../utils/helperMethods';
import CustomImage from '../CustomImage/CustomImage'; import CustomImage from '../CustomImage/CustomImage';
import TPopUp from '../TPopUp/TPopUp'; import TPopUp from '../TPopUp/TPopUp';
import css from './TItemCard.module.less'; import css from './TItemCard.module.less';
const SpottableComponent = Spottable('div'); const SpottableComponent = Spottable("div");
const SpottableTemp = Spottable('div'); const SpottableTemp = Spottable("div");
const TYPES = { const TYPES = {
vertical: 'vertical', vertical: "vertical",
horizontal: 'horizontal', horizontal: "horizontal",
videoShow: 'videoShow', videoShow: "videoShow",
}; };
const IMAGETYPES = { const IMAGETYPES = {
imgHorizontal: 'imgHorizontal', imgHorizontal: "imgHorizontal",
imgVertical: 'imgVertical', imgVertical: "imgVertical",
}; };
const STRING_CONF = { const STRING_CONF = {
SOLD_OUT: 'SOLD OUT', SOLD_OUT: "SOLD OUT",
ENERGY_LOADING: "Loading energy label...",
ENERGY_ERROR: "Failed to load energy label",
}; };
export const removeDotAndColon = (string) => { export const removeDotAndColon = (string) => {
return /[.:]/.test(string) ? string.replace(/[.:]/g, '') : string; return /[.:]/.test(string) ? string.replace(/[.:]/g, "") : string;
}; };
const parsePrice = (price) => { const parsePrice = (price) => {
return parseFloat(price?.replace(/[^0-9.-]+/g, '') || '0'); return parseFloat(price?.replace(/[^0-9.-]+/g, "") || "0");
}; };
export default memo(function TItemCardNew({ export default memo(function TItemCardNew({
@@ -99,23 +116,35 @@ export default memo(function TItemCardNew({
nowCategory, nowCategory,
nowProductTitle, nowProductTitle,
contentId, contentId,
dcPrice,
originPrice,
euEnrgLblInfos,
...rest ...rest
}) { }) {
const dispatch = useDispatch(); const dispatch = useDispatch();
const [defaultImage, setDefaultImage] = useState(null); const [defaultImage, setDefaultImage] = useState(null);
const [prdtId, setPrdtId] = useState(null); const [currentPdfUrl, setCurrentPdfUrl] = useState(null);
const countryCode = useSelector((state) => state.common.httpHeader.cntry_cd); const countryCode = useSelector((state) => state.common.httpHeader.cntry_cd);
const cursorVisible = useSelector((state) => state.common.appStatus.cursorVisible); const cursorVisible = useSelector(
const { activePopup, popupVisible } = useSelector((state) => state.common.popup); (state) => state.common.appStatus.cursorVisible
);
const { activePopup, popupVisible } = useSelector(
(state) => state.common.popup
);
const convert = useSelector((state) => state.convert);
const serverHOST = useSelector((state) => state.common.appStatus.serverHOST); const serverHOST = useSelector((state) => state.common.appStatus.serverHOST);
const serverType = useSelector((state) => state.localSettings.serverType); const serverType = useSelector((state) => state.localSettings.serverType);
useEffect(() => { useEffect(() => {
if (!imageSource) { if (!imageSource) {
if (type === 'videoShow') { if (type === "videoShow") {
setDefaultImage( setDefaultImage(
imgType === IMAGETYPES.imgHorizontal ? defaultimgHorizontal : defaultimgVertical imgType === IMAGETYPES.imgHorizontal
? defaultimgHorizontal
: defaultimgVertical
); );
} else { } else {
setDefaultImage(defaultImageItem); setDefaultImage(defaultImageItem);
@@ -123,7 +152,8 @@ export default memo(function TItemCardNew({
} }
}, [imageSource, type, imgType]); }, [imageSource, type, imgType]);
const { originalPrice, discountedPrice, discountRate } = usePriceInfo(priceInfo) || {}; const { originalPrice, discountedPrice, discountRate } =
usePriceInfo(priceInfo) || {};
const _onBlur = useCallback(() => { const _onBlur = useCallback(() => {
if (onBlur) { if (onBlur) {
@@ -211,23 +241,25 @@ export default memo(function TItemCardNew({
); );
const ariaLabel = useMemo(() => { const ariaLabel = useMemo(() => {
const soldOutText = soldoutFlag === 'Y' ? 'Sold Out ' : ''; const soldOutText = soldoutFlag === "Y" ? "Sold Out " : "";
const firstLabelText = firstLabel ? `${firstLabel} ` : ''; const firstLabelText = firstLabel ? `${firstLabel} ` : "";
const discountLabel = discountRate ? `${discountRate} discount, ` : ''; const discountLabel = discountRate ? `${discountRate} discount, ` : "";
const discountPriceLabel = discountRate ? `Sale price ${discountedPrice}, ` : ''; const discountPriceLabel = discountRate
? `Sale price ${discountedPrice}, `
: "";
const parsedPrice = parsePrice(originalPrice); const parsedPrice = parsePrice(originalPrice);
const priceLabel = const priceLabel =
parsedPrice === 0 parsedPrice === 0
? offerInfo ? offerInfo
? ` ${offerInfo}` ? ` ${offerInfo}`
: '' : ""
: originalPrice : originalPrice
? ` Original price ${originalPrice}, ` ? ` Original price ${originalPrice}, `
: ''; : "";
const productLabel = label || ''; const productLabel = label || "";
const lastLabelText = lastLabel || ''; const lastLabelText = lastLabel || "";
return `${soldOutText}${firstLabelText}${discountLabel}${productName}${discountPriceLabel}${priceLabel}${productLabel}${lastLabelText}`; return `${soldOutText}${firstLabelText}${discountLabel}${productName}${discountPriceLabel}${priceLabel}${productLabel}${lastLabelText}`;
}, [ }, [
@@ -247,19 +279,28 @@ export default memo(function TItemCardNew({
return sanitizedString; return sanitizedString;
}, [productName]); }, [productName]);
// 🔽 팝업 닫기
const handleClosePopup = useCallback(() => { const handleClosePopup = useCallback(() => {
dispatch(setHidePopup()); dispatch(setHidePopup());
dispatch(clearConvertedImage());
setCurrentPdfUrl(null);
}, [dispatch]); }, [dispatch]);
const { setupPinUrl } = useMemo(() => { const { setupPinUrl } = useMemo(() => {
return getQRCodeUrl({ serverHOST, serverType }); return getQRCodeUrl({ serverHOST, serverType });
}, [serverHOST, serverType]); }, [serverHOST, serverType]);
// 🔽 에너지 라벨 클릭 - PDF 변환 시작
const onEnergyClick = useCallback( const onEnergyClick = useCallback(
(e, pId) => { (e, pdfUrl) => {
e.stopPropagation(); e.stopPropagation();
setPrdtId(pId);
setCurrentPdfUrl(pdfUrl);
dispatch(setShowPopup(Config.ACTIVE_POPUP.energyPopup)); dispatch(setShowPopup(Config.ACTIVE_POPUP.energyPopup));
// PDF를 이미지로 변환
// dispatch(convertPdfToImage(pdfUrl));
dispatch(convertPdfToImage(testPdf));
}, },
[dispatch] [dispatch]
); );
@@ -270,13 +311,15 @@ export default memo(function TItemCardNew({
className={classNames( className={classNames(
css[type], css[type],
nonPosition && css.nonPosition, nonPosition && css.nonPosition,
type === 'videoShow' && css[imgType], type === "videoShow" && css[imgType],
className && className className && className
)} )}
onBlur={_onBlur} onBlur={_onBlur}
onClick={_onClick} onClick={_onClick}
onFocus={_onFocus} onFocus={_onFocus}
spotlightId={spotlightId ?? 'spotlightId-' + removeDotAndColon(productId)} spotlightId={
spotlightId ?? "spotlightId-" + removeDotAndColon(productId)
}
aria-label={ariaLabel} aria-label={ariaLabel}
role="button" role="button"
{...rest} {...rest}
@@ -287,7 +330,7 @@ export default memo(function TItemCardNew({
delay={0} delay={0}
src={imageSource} src={imageSource}
fallbackSrc={ fallbackSrc={
type === 'videoShow' type === "videoShow"
? imgType === IMAGETYPES.imgHorizontal ? imgType === IMAGETYPES.imgHorizontal
? defaultimgHorizontal ? defaultimgHorizontal
: defaultimgVertical : defaultimgVertical
@@ -295,24 +338,34 @@ export default memo(function TItemCardNew({
} }
onError={addDefaultImg} onError={addDefaultImg}
/> />
{priceInfo && discountRate && Number(discountRate.replace('%', '')) > 4 && ( {priceInfo &&
<span className={css.discount}>{discountRate}</span> discountRate &&
)} Number(discountRate.replace("%", "")) > 4 && (
{soldoutFlag && soldoutFlag === 'Y' && ( <span className={css.discount}>{discountRate}</span>
<div className={classNames(css.soldout, countryCode === 'DE' && css.de)}> )}
{soldoutFlag && soldoutFlag === "Y" && (
<div
className={classNames(
css.soldout,
countryCode === "DE" && css.de
)}
>
{$L(STRING_CONF.SOLD_OUT)} {$L(STRING_CONF.SOLD_OUT)}
</div> </div>
)} )}
{isLive && <img className={css.liveTag} src={IcLiveShow} alt="Live Show" />} {isLive && (
<img className={css.liveTag} src={IcLiveShow} alt="Live Show" />
)}
</div> </div>
<div className={css.flexBox}> <div className={css.flexBox}>
<div <div
className={classNames( className={classNames(
css.descWrap, css.descWrap,
catNm && css.hstNmWrap, catNm && css.hstNmWrap,
originalPrice && parseFloat(originalPrice.replace('$', '').replace(',', '')) > 1000 euEnrgLblInfos &&
? css.labelBox euEnrgLblInfos.length > 0 &&
: '' euEnrgLblInfos[0]?.enrgLblIcnUrl !== null &&
css.labelBox
)} )}
> >
{logoDisplay && logo && ( {logoDisplay && logo && (
@@ -330,42 +383,52 @@ export default memo(function TItemCardNew({
{children} {children}
{priceInfo ? ( {priceInfo ? (
<p className={css.priceInfo}> <p className={css.priceInfo}>
{parseFloat(originalPrice?.replace(/[^0-9.-]+/g, '') || '0') === 0 ? ( {parseFloat(originalPrice?.replace(/[^0-9.-]+/g, "") || "0") ===
0 ? (
<strong>{offerInfo}</strong> <strong>{offerInfo}</strong>
) : discountRate ? ( ) : discountRate ? (
discountedPrice discountedPrice
) : ( ) : (
originalPrice originalPrice
)} )}
{discountRate && <span className={css.originalPrice}>{originalPrice}</span>} {discountRate && (
<span className={css.originalPrice}>{originalPrice}</span>
)}
</p> </p>
) : ( ) : (
<p className={css.offerInfo}>{offerInfo}</p> <p className={css.offerInfo}>{offerInfo}</p>
)} )}
{originPrice && (
<p className={css.priceInfo}>
{dcPrice ? dcPrice : originPrice}
{dcPrice && (
<span className={css.originalPrice}>{originPrice}</span>
)}
</p>
)}
</div> </div>
{originalPrice && {euEnrgLblInfos &&
parseFloat(Number(originalPrice.replace('$', '').replace(',', ''))) > 1000 ? ( euEnrgLblInfos.length > 0 &&
<div className={css.labelImgBox}> euEnrgLblInfos[0]?.enrgLblIcnUrl !== null &&
<SpottableTemp euEnrgLblInfos.map(
spotlightDisabled={Boolean(!cursorVisible)} (info, index) =>
onClick={(e) => onEnergyClick(e, productId)} index < 3 && (
> <div key={index} className={css.labelImgBox}>
<CustomImage alt="Energy Label A" delay={0} src={energyLabelA} /> <SpottableTemp
</SpottableTemp> spotlightDisabled={Boolean(!cursorVisible)}
<SpottableTemp onClick={(e) => onEnergyClick(e, info.enrgLblUrl)}
spotlightDisabled={Boolean(!cursorVisible)} aria-label={`Energy Efficiency ${info.enrgGrade || ""}`}
onClick={(e) => onEnergyClick(e, productId)} >
> <CustomImage
<CustomImage alt="Energy Label B" delay={0} src={energyLabelB} /> alt={`Energy Label ${info.enrgGrade || index + 1}`}
</SpottableTemp> delay={0}
<SpottableTemp src={info.enrgLblIcnUrl}
spotlightDisabled={Boolean(!cursorVisible)} />
onClick={(e) => onEnergyClick(e, productId)} </SpottableTemp>
> </div>
<CustomImage alt="Energy Label C" delay={0} src={energyLabelC} /> )
</SpottableTemp> )}
</div>
) : null}
</div> </div>
{isBestSeller && rank && ( {isBestSeller && rank && (
<div className={css.bestSeller}> <div className={css.bestSeller}>
@@ -373,33 +436,28 @@ export default memo(function TItemCardNew({
</div> </div>
)} )}
</SpottableComponent> </SpottableComponent>
{activePopup === Config.ACTIVE_POPUP.energyPopup && prdtId === productId && (
{activePopup === Config.ACTIVE_POPUP.energyPopup && currentPdfUrl && (
<TPopUp <TPopUp
kind="energyPopup" kind="energyPopup"
title="Energy Efficiency" title={$L("Energy Efficiency")}
hasText hasText
open={popupVisible} open={popupVisible}
hasButton hasButton
button1Text={$L('CLOSE')} button1Text={$L("CLOSE")}
onClose={handleClosePopup} onClose={handleClosePopup}
> >
<div> <div className={css.energyPopupContent}>
<span> {convert && (
<CustomImage alt="Energy Label C" delay={0} src={energyDetail} /> <div className={css.energyImagesContainer}>
<div> <img
<CustomImage alt="Energy Label C" delay={0} src={qrImg} /> alt="Energy Label"
</div> // delay={0}
</span> src={convert.convertedImage}
{/* <span> className={css.energyImage}
<CustomImage
alt="Energy Label C"
delay={0}
src={energyDetail}
/> />
<div> </div>
<CustomImage alt="Energy Label C" delay={0} src={qrImg} /> )}
</div>
</span> */}
</div> </div>
</TPopUp> </TPopUp>
)} )}

View File

@@ -0,0 +1,48 @@
import { types } from '../actions/actionTypes';
import {
curry,
get,
set,
} from '../utils/fp';
// 초기 상태 정의
const initialState = {
convertedImage: null,
error: null,
isConverting: false,
};
// 변환 성공 핸들러
const convertSuccess = curry((state, action) =>
set(
"convertedImage",
get("payload", action),
set("error", null, set("isConverting", false, state))
)
);
// 변환 실패 핸들러
const convertFailure = curry((state, action) =>
set("error", get("payload", action), set("isConverting", false, state))
);
// 변환 데이터 초기화 핸들러
const clearConverted = curry((state) => ({
...state,
convertedImage: null,
error: null,
isConverting: false,
}));
// 액션 타입별 핸들러 매핑
const handlers = {
[types.CONVERT_PDF_TO_IMAGE_SUCCESS]: convertSuccess,
[types.CONVERT_PDF_TO_IMAGE_FAILURE]: convertFailure,
[types.CLEAR_CONVERTED_IMAGE]: clearConverted,
};
export const convertReducer = (state = initialState, action = {}) => {
const type = get("type", action);
const handler = handlers[type];
return handler ? handler(state, action) : state;
};

View File

@@ -1,38 +1,66 @@
import { types } from '../actions/actionTypes'; import { types } from '../actions/actionTypes';
import {
curry,
get,
set,
} from '../utils/fp';
// 초기 상태 정의 // 초기 상태 정의
// const initialState = {
// recentlySawItems: [],
// likeBrandProducts: [],
// moreToConciderAtThisPrice: [],
// };
const initialState = { const initialState = {
recentlySawItems: [], justForYouInfo: {},
likeBrandProducts: [], shelfInfos: {},
moreToConciderAtThisPrice: [],
}; };
const foryouReducer = (state = initialState, action) => { // const foryouReducer = (state = initialState, action) => {
switch (action.type) { // switch (action.type) {
// 최근 본 아이템 // // 최근 본 아이템
case types.GET_RECENTLY_SAW_ITEM: // case types.GET_RECENTLY_SAW_ITEM:
return { // return {
...state, // ...state,
recentlySawItems: action.payload, // recentlySawItems: action.payload,
}; // };
// 좋아하는 브랜드 제품 // // 좋아하는 브랜드 제품
case types.GET_LIKE_BRAND_PRODUCT: // case types.GET_LIKE_BRAND_PRODUCT:
return { // return {
...state, // ...state,
likeBrandProducts: action.payload, // likeBrandProducts: action.payload,
}; // };
// 이 가격대에서 고려할 만한 더 많은 제품 // // 이 가격대에서 고려할 만한 더 많은 제품
case types.GET_MORE_TO_CONCIDER_AT_THIS_PRICE: // case types.GET_MORE_TO_CONCIDER_AT_THIS_PRICE:
return { // return {
...state, // ...state,
moreToConciderAtThisPrice: action.payload, // moreToConciderAtThisPrice: action.payload,
}; // };
default: // default:
return state; // return state;
} // }
// };
const justForYouInfo = curry((state, action) =>
set("justForYouInfo", get("payload", action), state)
);
const shelfInfos = curry((state, action) =>
set("shelfInfos", get("payload", action), state)
);
const handlers = {
[types.GET_JUSTFORYOU_INFO]: justForYouInfo,
[types.GET_SHELFINFOS]: shelfInfos,
}; };
export default foryouReducer; export const foryouReducer = (state = initialState, action = {}) => {
const type = get("type", action);
const handler = handlers[type];
return handler ? handler(state, action) : state;
};
// export default foryouReducer;

View File

@@ -1,4 +1,8 @@
import { applyMiddleware, combineReducers, createStore } from 'redux'; import {
applyMiddleware,
combineReducers,
createStore,
} from 'redux';
import thunk from 'redux-thunk'; import thunk from 'redux-thunk';
import { appDataReducer } from '../reducers/appDataReducer'; import { appDataReducer } from '../reducers/appDataReducer';
@@ -9,12 +13,14 @@ import { cardReducer } from '../reducers/cardReducer';
import { cartReducer } from '../reducers/cartReducer'; import { cartReducer } from '../reducers/cartReducer';
import { checkoutReducer } from '../reducers/checkoutReducer'; import { checkoutReducer } from '../reducers/checkoutReducer';
import { commonReducer } from '../reducers/commonReducer'; import { commonReducer } from '../reducers/commonReducer';
//convert
import { convertReducer } from '../reducers/convertReducer';
import { couponReducer } from '../reducers/couponReducer'; import { couponReducer } from '../reducers/couponReducer';
import { deviceReducer } from '../reducers/deviceReducer'; import { deviceReducer } from '../reducers/deviceReducer';
import { empReducer } from '../reducers/empReducer'; import { empReducer } from '../reducers/empReducer';
import { eventReducer } from '../reducers/eventReducer'; import { eventReducer } from '../reducers/eventReducer';
//foryou //foryou
import foryouReducer from '../reducers/forYouReducer'; import { foryouReducer } from '../reducers/forYouReducer';
import { homeReducer } from '../reducers/homeReducer'; import { homeReducer } from '../reducers/homeReducer';
import { localSettingsReducer } from '../reducers/localSettingsReducer'; import { localSettingsReducer } from '../reducers/localSettingsReducer';
import { mainReducer } from '../reducers/mainReducer'; import { mainReducer } from '../reducers/mainReducer';
@@ -60,6 +66,7 @@ const rootReducer = combineReducers({
toast: toastReducer, toast: toastReducer,
videoPlay: videoPlayReducer, videoPlay: videoPlayReducer,
voice: voiceReducer, voice: voiceReducer,
convert: convertReducer,
}); });
export const store = createStore(rootReducer, applyMiddleware(thunk)); export const store = createStore(rootReducer, applyMiddleware(thunk));

View File

@@ -45,29 +45,28 @@ function JustForYouBanner({
const [imagesLoaded, setImagesLoaded] = useState(false); const [imagesLoaded, setImagesLoaded] = useState(false);
const loadedImages = useRef(new Set()); const loadedImages = useRef(new Set());
const Container = SpotlightContainerDecorator(
{ enterTo: "last-focused" },
"div"
);
//NOTE - 임시 데이터 추후 API 연동 필요 //NOTE - 임시 데이터 추후 API 연동 필요
const recentlyProductsData = useMemo( const recentlyProductsData = useMemo(
() => [ () => [
{ {
src: creamImage, src: creamImage,
alt: "Product 1", alt: "Product 1",
id: "Product_1",
}, },
{ {
src: pizzaImage, src: pizzaImage,
alt: "Product 4", alt: "Product 4",
id: "Product_4",
}, },
{ {
src: coffeeImage, src: coffeeImage,
alt: "Product 2", alt: "Product 2",
id: "Product_2",
}, },
{ {
src: salmonImage, src: salmonImage,
alt: "Product 3", alt: "Product 3",
id: "Product_3",
}, },
], ],
[] []
@@ -85,7 +84,7 @@ function JustForYouBanner({
const preloadImages = recentlyProductsData.map((imageData) => ( const preloadImages = recentlyProductsData.map((imageData) => (
<CustomImage <CustomImage
key={imageData.src} key={imageData.id}
src={imageData.src} src={imageData.src}
style={{ display: "none" }} style={{ display: "none" }}
onLoad={() => handleImageLoad(imageData.src)} onLoad={() => handleImageLoad(imageData.src)}
@@ -93,7 +92,7 @@ function JustForYouBanner({
)); ));
return ( return (
<Container <div
className={classNames( className={classNames(
css.rollingWrap, css.rollingWrap,
isHorizontal && css.isHorizontalWrap isHorizontal && css.isHorizontalWrap
@@ -107,8 +106,6 @@ function JustForYouBanner({
popupVisible={popupVisible} popupVisible={popupVisible}
activePopup={activePopup} activePopup={activePopup}
> >
{!imagesLoaded && preloadImages}
<div <div
className={classNames( className={classNames(
cssBannerUnit.JustForYouBanner, cssBannerUnit.JustForYouBanner,
@@ -120,8 +117,6 @@ function JustForYouBanner({
</div> </div>
<div className={cssBannerUnit.itemImgBox}> <div className={cssBannerUnit.itemImgBox}>
{/* {imagesLoaded && <TImageGrid images={recentlyProductsData} />} */}
<div <div
className={classNames( className={classNames(
cssBannerUnit.imageLayout, cssBannerUnit.imageLayout,
@@ -129,9 +124,8 @@ function JustForYouBanner({
)} )}
> >
{recentlyProductsData.map((img, index) => ( {recentlyProductsData.map((img, index) => (
<div className={cssBannerUnit.imageItemBox}> <div className={cssBannerUnit.imageItemBox} key={img.id}>
<img <img
key={index}
src={img.src} src={img.src}
alt={`item-${index}`} alt={`item-${index}`}
className={classNames( className={classNames(
@@ -147,7 +141,7 @@ function JustForYouBanner({
</div> </div>
</div> </div>
</SpottableComponent> </SpottableComponent>
</Container> </div>
); );
} }
@@ -190,7 +184,7 @@ export default function JustForSwitchBanner({
name: panel_names.JUST_FOR_YOU_TEST_PANEL, name: panel_names.JUST_FOR_YOU_TEST_PANEL,
}) })
); );
}, []); }, [dispatch]);
return ( return (
<div <div

View File

@@ -1,5 +1,6 @@
import React, { import React, {
useCallback, useCallback,
useEffect,
useRef, useRef,
useState, useState,
} from 'react'; } from 'react';
@@ -17,6 +18,7 @@ import { setContainerLastFocusedElement } from '@enact/spotlight/src/container';
import background import background
from '../../../assets/images/JustForYouPanel/background_new.png'; from '../../../assets/images/JustForYouPanel/background_new.png';
import { getJustForYouInfo } from '../../actions/forYouActions';
import { import {
popPanel, popPanel,
pushPanel, pushPanel,
@@ -45,27 +47,20 @@ const ListContainer = SpotlightContainerDecorator(
"div" "div"
); );
const STRING_CONF_TITLE = {
LIKE_ITEMS: "Like items you recently saw",
LIKE_BRANDS: "Liked Brand Products",
MORE_PRICE: "More to Consider at This Price",
};
const JustForYouTestPanel = ({ panelInfo, ...rest }) => { const JustForYouTestPanel = ({ panelInfo, ...rest }) => {
const dispatch = useDispatch(); const dispatch = useDispatch();
const [showButton, setShowButton] = useState("showButton", true); const [showButton, setShowButton] = useState("showButton", true);
const cbChangePageRef = useRef(null); const cbChangePageRef = useRef(null);
const recentlyItem = useSelector((state) => state.foryou.recentlySawItems); const shelfInfos = useSelector((state) => state.foryou?.shelfInfos);
const STRING_CONF = { useEffect(() => {
LIKE_ITEMS: "Like items you recently saw", dispatch(getJustForYouInfo());
LIKE_BRANDS: "Liked Brand Products", }, [dispatch]);
MORE_PRICE: "More to Consider at This Price",
};
const recentItems = useSelector( useEffect(() => {
(state) => state.product?.bestSellerData?.bestSeller console.log("###shelfInfos updated", shelfInfos);
); }, [dispatch, shelfInfos]);
const onClick = useCallback(() => { const onClick = useCallback(() => {
dispatch(popPanel(panel_names.JUST_FOR_YOU_TEST_PANEL)); dispatch(popPanel(panel_names.JUST_FOR_YOU_TEST_PANEL));
@@ -80,58 +75,68 @@ const JustForYouTestPanel = ({ panelInfo, ...rest }) => {
cbChangePageRef.current(0, true); cbChangePageRef.current(0, true);
} }
if (recentItems && recentItems.length > 0) { if (
const target = `spotlightId-recentItem-${recentItems[0]?.prdtId}`; shelfInfos &&
shelfInfos.length > 0 &&
shelfInfos[0].productInfos?.length > 0
) {
const firstProduct = shelfInfos[0].productInfos[0];
const target = `spotlightId-${shelfInfos[0].shelfId}-${removeDotAndColon(firstProduct.contentId)}`;
Spotlight.focus(target); Spotlight.focus(target);
setContainerLastFocusedElement(null, [SpotlightIds.JUST_FOR_YOU_ITEMS]); setContainerLastFocusedElement(null, [
`${SpotlightIds.JUST_FOR_YOU_ITEMS}_${shelfInfos[0].shelfId}`,
]);
} }
}, [recentItems]); }, [shelfInfos]);
const renderItem = useCallback( const renderItem = useCallback(
({ index, ...rest }) => { (shelfId, productInfos) =>
const { ({ index, ...rest }) => {
imgUrl, if (!productInfos || !productInfos[index]) {
offerInfo, return null;
prdtId, }
lgCatNm,
patncNm,
patnrId,
brndNm,
prdtNm,
priceInfo,
} = recentItems[index];
const handleItemClick = () => { const product = productInfos[index];
dispatch( const {
pushPanel({ contentId,
name: panel_names.DETAIL_PANEL, title,
panelInfo: { patnrId, prdtId }, thumbnail,
}) price,
dcPrice,
partnerName,
partnerLogo,
} = product;
const handleItemClick = () => {
// Extract product ID from contentId if needed
const prdtId = contentId.split("_").pop();
dispatch(
pushPanel({
name: panel_names.DETAIL_PANEL,
panelInfo: { prdtId: contentId },
})
);
};
return (
<TItemCard
key={contentId}
patnerName={partnerName}
data-wheel-point={index >= 5}
imageAlt={title}
imageSource={thumbnail}
label={`${index + 1} of ${productInfos.length}`}
lastLabel=" go to detail, button"
priceInfo={{ price, dcPrice }}
productName={title}
productId={contentId}
onClick={handleItemClick}
spotlightId={`spotlightId-${shelfId}-${removeDotAndColon(contentId)}`}
{...rest}
/>
); );
}; },
[dispatch]
return (
<TItemCard
key={prdtId}
catNm={lgCatNm}
patnerName={patncNm}
brandName={brndNm}
data-wheel-point={index >= 5}
imageAlt={prdtId}
imageSource={imgUrl}
label={index * 1 + 1 + " of " + recentItems.length}
lastLabel=" go to detail, button"
offerInfo={offerInfo}
priceInfo={priceInfo}
productName={prdtNm}
productId={prdtId}
onClick={handleItemClick}
spotlightId={"spotlightId-recentItem-" + removeDotAndColon(prdtId)}
{...rest}
/>
);
},
[recentItems]
); );
return ( return (
@@ -153,78 +158,58 @@ const JustForYouTestPanel = ({ panelInfo, ...rest }) => {
/> />
<CustomImage src={background} animationSpeed="none" /> <CustomImage src={background} animationSpeed="none" />
</div> </div>
{recentlyItem && recentlyItem?.length > 0 && (
<ListContainer
className={classNames(
css.itemsContainer,
css.itemsContinerFirst
)}
spotlightId={SpotlightIds.JUST_FOR_YOU_ITEMS}
data-wheel-point
>
<SectionTitle
title={`${$L(STRING_CONF.LIKE_ITEMS)} (${recentlyItem.length})`}
data-title-index="JFYTitle"
/>
<div className={css.itemList}> {shelfInfos &&
<TVirtualGridList Array.isArray(shelfInfos) &&
dataSize={recentlyItem.length} shelfInfos.length > 0 ? (
itemWidth={324} <>
itemHeight={438} {shelfInfos.map((shelf, shelfIndex) => {
spacing={18} if (
renderItem={renderItem} !shelf ||
direction="horizontal" !shelf.productInfos ||
/> shelf.productInfos.length === 0
</div> ) {
</ListContainer> return null;
)} }
{recentItems && recentItems?.length > 0 && (
<ListContainer
className={classNames(css.itemsContainer)}
spotlightId={SpotlightIds.JUST_FOR_YOU_ITEMS}
data-wheel-point
>
<SectionTitle
title={`${$L(STRING_CONF.LIKE_BRANDS)} (${recentItems.length})`}
data-title-index="JFYTitle"
/>
<div className={css.itemList}> return (
<TVirtualGridList <ListContainer
dataSize={recentItems.length} key={shelf.shelfId}
itemWidth={324} className={classNames(
itemHeight={438} css.itemsContainer,
spacing={18} shelfIndex === 0 && css.itemsContinerFirst
renderItem={renderItem} )}
direction="horizontal" spotlightId={`${SpotlightIds.JUST_FOR_YOU_ITEMS}_${shelf.shelfId}`}
/> data-wheel-point
</div> >
</ListContainer> <SectionTitle
)} title={`${shelf.shelfNm.replace("(#)", "").trim()} (${shelf.productInfos.length})`}
{recentItems && recentItems?.length > 0 && ( data-title-index={`JFYTitle_${shelfIndex}`}
<ListContainer />
className={classNames(css.itemsContainer)}
spotlightId={SpotlightIds.JUST_FOR_YOU_ITEMS}
data-wheel-point
>
<SectionTitle
title={`${$L(STRING_CONF.MORE_PRICE)} (${recentItems.length})`}
data-title-index="JFYTitle"
/>
<div className={css.itemList}> <div className={css.itemList}>
<TVirtualGridList <TVirtualGridList
dataSize={recentItems.length} dataSize={shelf.productInfos.length}
itemWidth={324} itemWidth={324}
itemHeight={438} itemHeight={438}
spacing={18} spacing={18}
renderItem={renderItem} renderItem={renderItem(
direction="horizontal" shelf.shelfId,
/> shelf.productInfos
</div> )}
</ListContainer> direction="horizontal"
/>
</div>
</ListContainer>
);
})}
</>
) : (
<div className={css.loadingContainer}>
<p>Loading...</p>
</div>
)} )}
<ListContainer> <ListContainer>
<TButton <TButton
onClick={handleTopButtonClick} onClick={handleTopButtonClick}