@sledge-app/react-instant-search 2.0.0 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"sledge-react-instant-search.js","sources":["../src/components/ProductFilterWidget/ProductFilterWidget.tsx","../../../core/lib/const.ts","../../../core/lib/swr.ts","../../../core/hooks/usePrevious.ts","../../../core/hooks/useMediaQuery.ts","../../../core/hooks/useIntersectionObserver.ts","../../../core/hooks/useEffectCallback.ts","../../../core/hooks/useDebounce.ts","../../../core/hooks/useIsFirstRender.ts","../../../core/hooks/usePreviewSettings.ts","../../../core/hooks/useEffectOnChange.ts","../../../core/lib/helper.ts","../../../core/components/Popover/Popover.tsx","../../../core/components/Progress/Progress.tsx","../../../core/components/Checkbox/Checkbox.tsx","../../../core/components/Slider/Slider.tsx","../../../core/components/Pagination/Pagination.tsx","../../../core/components/RadioGroup/RadioGroup.tsx","../../../core/components/ColorSwatch/ColorSwatch.tsx","../../../core/components/Select/Select.tsx","../../../core/components/Icons/HeartIcon/HeartIcon.tsx","../../../core/components/Icons/ChevronArrowDownIcon/ChevronArrowDownIcon.tsx","../../../core/components/Icons/ChevronArrowLeftIcon/ChevronArrowLeftIcon.tsx","../../../core/components/Icons/ChevronArrowRightIcon/ChevronArrowRightIcon.tsx","../../../core/components/Icons/ArrowRightIcon/ArrowRightIcon.tsx","../../../core/components/Icons/BagIcon/BagIcon.tsx","../../../core/components/Icons/CloseIcon/CloseIcon.tsx","../../../core/components/Icons/SearchIcon/SearchIcon.tsx","../../../core/components/Icons/MessageAddIcon/MessageAddIcon.tsx","../../../core/components/Icons/SwapIcon/SwapIcon.tsx","../../../core/components/Icons/NoteIcon/NoteIcon.tsx","../../../core/components/Icons/FilterIcon/FilterIcon.tsx","../../../core/components/Icons/InfoCircleIcon/InfoCircleIcon.tsx","../../../core/components/Button/Button.tsx","../../../core/components/SearchInputField/SearchInputField.tsx","../../../core/lib/animation.ts","../../../core/components/SelectField/SelectField.tsx","../../../core/lib/polyfills.ts","../../../core/api/shopify.ts","../../../core/api/wishlist.ts","../../wishlist/src/components/Badge/utils.ts","../../wishlist/src/components/Badge/BadgeCounter.tsx","../../wishlist/src/components/Widget/WidgetHeaderClearTrigger.tsx","../../wishlist/src/components/Widget/WidgetHeaderShareTrigger.tsx","../../wishlist/src/components/Widget/WidgetHeaderSearchForm.tsx","../../wishlist/src/components/Widget/WidgetHeaderTitle.tsx","../../wishlist/src/components/Widget/WidgetHeaderLimit.tsx","../../wishlist/src/components/Widget/WidgetHeaderSort.tsx","../../wishlist/src/components/Widget/WidgetHeader.tsx","../../wishlist/src/components/Widget/WidgetList.tsx","../../wishlist/src/components/Widget/WidgetRoot.tsx","../../wishlist/src/components/Widget/Widget.tsx","../../wishlist/src/components/Badge/Badge.tsx","../../wishlist/src/components/Badge/BadgeInitSelector.tsx","../../wishlist/src/components/Trigger/Trigger.tsx","../../../core/api/product-review.ts","../../product-review/src/components/Rating/Rating.tsx","../../product-review/src/components/Widget/WidgetHeaderAddTrigger.tsx","../../product-review/src/components/Widget/WidgetHeaderSort.tsx","../../product-review/src/components/Widget/WidgetHeaderSummary.tsx","../../product-review/src/components/Widget/WidgetHeader.tsx","../../../core/api/instant-search.ts","../../../core/api/product-recommendation.ts","../../../core/components/ProductGrid/ProductGrid.tsx","../../../core/components/InputField/InputField.tsx","../../../core/components/CollectionGrid/CollectionGrid.tsx","../../../core/components/PageGrid/PageGrid.tsx","../../../core/components/BlogGrid/BlogGrid.tsx","../../../core/components/ArticleGrid/ArticleGrid.tsx","../../../core/components/Tooltip/Tooltip.tsx","../../../core/components/ScrollArea/ScrollArea.tsx","../../../core/components/SkeletonLoading/SkeletonItem.tsx","../../../core/components/SkeletonLoading/SkeletonProductGrid.tsx","../../../core/components/SkeletonLoading/SkeletonReviewGrid.tsx","../../../core/components/SkeletonLoading/SkeletonCollectionGrid.tsx","../../../core/components/SkeletonLoading/SkeletonPageGrid.tsx","../../../core/components/SkeletonLoading/SkeletonBlogGrid.tsx","../../../core/components/SkeletonLoading/SkeletonArticleGrid.tsx","../../../core/components/SkeletonLoading/SkeletonLoading.tsx","../../../core/components/LoadingDots/LoadingDots.tsx","../../../core/components/Carousel/Carousel.tsx","../../../core/components/FlyoutSidebar/FlyoutSidebar.tsx","../../../core/components/Virtualized/VirtualizedList.tsx","../../../core/components/Alert/Alert.tsx","../src/components/SearchIconWidget/SearchIconWidget.tsx","../src/components/Global/OtherIndexLists.tsx","../src/components/Global/SuggestionKeywordLists.tsx","../src/components/Global/SearchViewMoreResult.tsx","../src/components/Global/index.ts","../src/components/SearchIconWidget/SearchIconWidgetPopup.tsx","../src/components/SearchResultWidget/utils.ts","../src/components/SearchResultWidget/components/Sort.tsx","../src/components/SearchResultWidget/components/Limit.tsx","../src/components/SearchResultWidget/components/Search.tsx","../src/components/SearchResultWidget/components/Tab.tsx","../src/components/SearchResultWidget/components/PaginationOrLoadMore.tsx","../src/components/SearchResultWidget/components/FacetBlockSelected.tsx","../src/components/SearchResultWidget/components/FilterVertical.tsx","../src/components/SearchResultWidget/components/FilterHorizontal.tsx","../src/components/SearchResultWidget/components/FilterActive.tsx","../src/components/SearchResultWidget/components/Facet.tsx","../src/components/SearchResultWidget/components/ColumnGridSelector.tsx","../src/components/SearchResultWidget/layouts/Elements.tsx","../src/components/SearchResultWidget/layouts/DesktopLayout.tsx","../src/components/SearchResultWidget/layouts/MobileLayout.tsx","../src/components/SearchResultWidget/SearchResultWidget.tsx","../src/components/SearchWidget/SearchWidget.tsx"],"sourcesContent":["import { SearchResultWidget } from '@react-instant-search/components';\n\nexport interface IProductFilterWidgetProps {\n width?: string;\n query?: {\n keyword?: string;\n sortBy?: string;\n page?: string;\n limit?: string;\n };\n params?:\n | {\n collectionId?: string | number | '';\n collectionName?: string | '';\n }\n | undefined;\n children?: any;\n onAfterAddToCart?(state: 'success' | 'failed'): void;\n onAfterAddWishlist?(state: 'success' | 'failed'): void;\n onAfterRemoveWishlist?(state: 'success' | 'failed'): void;\n onAfterRenderProduct?(state: 'success' | 'failed'): void;\n data?: any;\n sledgeSettings?: any;\n previewSettings?: any;\n currentTags?: string[] | number[];\n}\n\nexport const ProductFilterWidget = (props: IProductFilterWidgetProps) => {\n return <SearchResultWidget layoutType=\"product-filter\" {...props} />;\n};\n","export const API_URL = 'https://api.sledge-app.com';\nexport const INSTANT_SEARCH_ENGINE_URL = 'https://instant-search-engine.sledge-app.com';\nexport const CDN_URL = 'https://sledgeassets.nyc3.cdn.digitaloceanspaces.com';\nexport const SCRIPT_EMBED_ID = 'sledge-embed-script';\nexport const SELECTOR_ATTRIBUTE_KEY = 'data-component';\nexport const DATASET_ATTRIBUTE_KEY = {\n GLOBAL: {\n PRODUCT_ID: 'data-product-id',\n PRODUCT_VARIANT_ID: 'data-product-variant-id',\n PRODUCT_NAME: 'data-product-name',\n PRODUCT_VENDOR: 'data-product-vendor',\n PRODUCT_SKU: 'data-product-sku',\n PRODUCT_VARIANT_NAME: 'data-product-variant-name',\n PRODUCT_LINK: 'data-product-link',\n PRODUCT_IMAGE: 'data-product-image',\n PRODUCT_CURRENCY: 'data-product-currency',\n PRODUCT_PRICE: 'data-product-price',\n USER_ID: 'data-user-id',\n USER_EMAIL: 'data-user-email',\n USER_FULLNAME: 'data-user-fullname',\n COLLECTION_ID: 'data-collection-id',\n COLLECTION_NAME: 'data-collection-name',\n WIDTH_ELEMENT: 'data-width-element',\n ICON_SIZE: 'data-icon-size',\n RENDER_PRODUCT_CARD: 'data-render-product-card',\n WITH_SKELETON_LOADING: 'data-with-skeleton-loading',\n SECTION_TITLE: 'data-section-title',\n SECTION_DESCRIPTION: 'data-section-description',\n USE_SLIDER: 'data-use-slider',\n FILL_COLOR: 'data-fill-color',\n OUTLINE_COLOR: 'data-outline-color',\n POSITION_WIDGET: 'data-position-widget'\n },\n WISHLIST: {\n SHARE_ID: 'data-share-id',\n QUERY_SHARE_ID: 'data-query-share-id',\n RENDER_WISHLIST_WIDGET_ALERT: 'data-render-wishlist-widget-alert',\n USE_PROXY_URL: 'data-use-proxy-url',\n LIMIT_OPTIONS: 'data-limit-options',\n TRIGGER_BADGE: 'data-trigger-badge',\n URL_WISHLIST_WIDGET: 'data-url-wishlist-widget',\n USE_WISHLIST_FLYOUT: 'data-use-wishlist-flyout'\n },\n PRODUCT_REVIEW: {\n RATING_SIZE: 'data-rating-size',\n RATING_TOTAL: 'data-rating-total',\n RATING_AVERAGE: 'data-rating-average',\n RENDER_REVIEW_PRODUCT_INFO: 'data-render-review-product-info',\n TRUST_BADGE_VARIANT: 'data-trust-badge-variant',\n SHOW_RATING_AVERAGE: 'data-show-rating-average'\n },\n INSTANT_SEARCH: {\n QUERY_KEYWORD: 'data-query-keyword',\n QUERY_SORT_BY: 'data-query-sort-by',\n QUERY_PAGE: 'data-query-page',\n QUERY_LIMIT: 'data-query-limit',\n URL_SEARCH_RESULT: 'data-url-search-result',\n RENDER_SUGGESTION_KEYWORD_LIST: 'data-render-suggestion-keyword-list',\n RENDER_OTHER_INDEX_LIST: 'data-render-other-index-list',\n RENDER_SEARCH_VIEW_MORE_RESULT: 'data-render-search-view-more-result',\n RENDER_COLLECTION_CARD: 'data-render-collection-card',\n RENDER_PAGE_CARD: 'data-render-page-card',\n RENDER_BLOG_CARD: 'data-render-blog-card',\n RENDER_ARTICLE_CARD: 'data-render-article-card',\n CURRENT_TAGS: 'data-current-tags'\n },\n PRODUCT_RECOMMENDATION: {\n DISPLAY_LIMIT: 'data-display-limit',\n HIDDEN_PRODUCT_IDS: 'data-hidden-product-ids'\n }\n};\nexport const LOCAL_STORAGE_KEY = {\n ANONYM_ID: 'sledge-anonym-id',\n AUTH_APP: 'sledge-auth-app',\n INSTANT_SEARCH_AUTH_APP: 'sledge-instant-search-auth-app',\n GENERAL_SETTING: 'sledge-general-setting',\n WISHLIST_SETTING: 'sledge-wishlist-setting',\n PRODUCT_REVIEW_SETTING: 'sledge-product-review-setting',\n INSTANT_SEARCH_SETTING: 'sledge-instant-search-setting',\n PRODUCT_RECOMMENDATION_SETTING: 'sledge-product-recommendation-setting',\n ISSUED_AUTH_APP: 'sledge-issued-auth-app',\n EXPIRED_AUTH_APP: 'sledge-expired-auth-app',\n RECENTLY_VIEWED_APP: 'sledge-recently-viewed',\n LIMIT_PRODUCT: 'sledge-limit-product',\n WISHLIST_BADGE_COUNTER: 'sledge-wishlist-badge-counter',\n GRID_DESKTOP_COLUMN: 'sledge-product-grid-desktop-columns',\n GRID_MOBILE_COLUMN: 'sledge-product-grid-mobile-columns',\n PRODUCT_FILTER_INIT_TOTAL_HITS: 'sledge-product-filter-init-total-hits',\n SEARCH_RESULT_INIT_TOTAL_HITS: 'sledge-search-result-init-total-hits'\n};\nexport const INTERNAL_SELECTOR_VALUE = {\n ELEMENT_TOAST_NOTIFICATION: 'toast-notification',\n ELEMENT_CONFIRMATION_POPUP: 'confirmation-popup',\n ELEMENT_INFO_POPUP: 'info-popup',\n ELEMENT_CONTAINER_WIDGET: 'container-widget',\n ELEMENT_FLOATING_LEFT_WIDGET: 'floating-left-widget',\n ELEMENT_FLOATING_RIGHT_WIDGET: 'floating-right-widget',\n WISHLIST: {\n ELEMENT_WIDGET_POPUP: 'wishlist-widget-popup',\n ELEMENT_BADGE_COUNTER: 'wishlist-badge-counter'\n },\n PRODUCT_REVIEW: {\n ELEMENT_WIDGET_POPUP_DETAIL: 'product-review-widget-popup-detail',\n ELEMENT_WIDGET_FORM_ADD: 'product-review-widget-form-add',\n ELEMENT_STICKY_BADGE: 'product-review-sticky-badge',\n ELEMENT_HAPPY_CUSTOMERS_PAGE_POPUP: 'product-review-happy-customers-page-popup'\n },\n INSTANT_SEARCH: {\n ELEMENT_SEARCH_ICON_WIDGET_POPUP: 'instant-search-icon-widget-popup'\n }\n};\nexport const SELECTOR = {\n GLOBAL: {\n ELEMENT_CUSTOM_COMPONENTS: `[${SELECTOR_ATTRIBUTE_KEY}=\"custom-components\"]`\n },\n WISHLIST: {\n ELEMENT_BADGE: `[${SELECTOR_ATTRIBUTE_KEY}=\"wishlist-badge\"]`,\n ELEMENT_BADGE_COUNTER: `[${SELECTOR_ATTRIBUTE_KEY}=\"${INTERNAL_SELECTOR_VALUE.WISHLIST.ELEMENT_BADGE_COUNTER}\"]`,\n ELEMENT_BADGE_MENU_ITEM: `[href=\"#sledge-wishlist-badge-menu-item\"]`,\n ELEMENT_TRIGGER: `[${SELECTOR_ATTRIBUTE_KEY}=\"wishlist-trigger\"]`,\n ELEMENT_WIDGET: `[${SELECTOR_ATTRIBUTE_KEY}=\"wishlist-widget\"]`,\n ELEMENT_BUTTON_DETAIL: `[${SELECTOR_ATTRIBUTE_KEY}=\"wishlist-button-detail\"]`\n },\n PRODUCT_REVIEW: {\n ELEMENT_WIDGET: `[${SELECTOR_ATTRIBUTE_KEY}=\"product-review-widget\"]`,\n ELEMENT_HAPPY_CUSTOMERS_PAGE: `[${SELECTOR_ATTRIBUTE_KEY}=\"product-review-happy-customers-page\"]`,\n ELEMENT_RATING: `[${SELECTOR_ATTRIBUTE_KEY}=\"product-review-rating\"]`,\n ELEMENT_TRUST_BADGE: `[${SELECTOR_ATTRIBUTE_KEY}=\"product-review-trust-badge\"]`,\n ELEMENT_STICKY_SIDEBAR_WIDGET: `[${SELECTOR_ATTRIBUTE_KEY}=\"product-review-sticky-sidebar-widget\"]`,\n ELEMENT_SNIPPET: `[${SELECTOR_ATTRIBUTE_KEY}=\"product-review-snippet\"]`\n },\n INSTANT_SEARCH: {\n ELEMENT_SEARCH_WIDGET: `[${SELECTOR_ATTRIBUTE_KEY}=\"instant-search-widget\"]`,\n ELEMENT_SEARCH_ICON_WIDGET: `[${SELECTOR_ATTRIBUTE_KEY}=\"instant-search-icon-widget\"]`,\n ELEMENT_SEARCH_RESULT_WIDGET: `[${SELECTOR_ATTRIBUTE_KEY}=\"instant-search-result-widget\"]`,\n ELEMENT_PLP_WIDGET: `[${SELECTOR_ATTRIBUTE_KEY}=\"instant-search-product-filter-widget\"]`\n },\n PRODUCT_RECOMMENDATION: {\n ELEMENT_RECENTLY_VIEWED: `[${SELECTOR_ATTRIBUTE_KEY}=\"product-recommendation-recently-viewed\"]`,\n ELEMENT_RELATED_PRODUCTS: `[${SELECTOR_ATTRIBUTE_KEY}=\"product-recommendation-related-prodcuts\"]`\n }\n};\nexport const CUSTOM_EVENT_NAMES = {\n AFTER_ADD_WISHLIST: 'after-add-wishlist',\n AFTER_REMOVE_WISHLIST: 'after-remove-wishlist',\n AFTER_ADD_TO_CART: 'after-add-to-cart',\n AFTER_ADD_REVIEW: 'after-add-review',\n AFTER_RENDER_PRODUCT: 'after-render-product',\n AFTER_RENDER_COLLECTION: 'after-render-collection',\n AFTER_RENDER_PAGE: 'after-render-page',\n AFTER_RENDER_BLOG: 'after-render-blog',\n AFTER_RENDER_ARTICLE: 'after-render-article'\n};\nexport const DEFAULT_LIMIT_VALUE = [12, 24, 36, 48, 120];\nexport const DEFAULT_MAX_WIDTH_COMPONENT = '1180px';\nexport const DEFAULT_SEARCH_RESULT_URL = '/apps/sledge/search';\nexport const DEFAULT_WISHLIST_URL = '/apps/sledge/wishlist';\nexport const DEFAULT_QUERY_PARAM = {\n KEYWORD: 'q',\n SHARE_ID: 'share',\n SORT_BY: 'sort_by',\n PAGE: 'page',\n LIMIT: 'limit'\n};\nexport const DEFAULT_QUERY_PRODUCT_MEILISEARCH = [`'status' = 'active'`, `published_at IS NOT NULL`];\nexport const DEFAULT_QUERY_PUBLISHED_FILTER = 'published_at IS NOT NULL';\nexport const DEFAULT_FACET_LIMIT = 100;\nexport const OBJECT_DATA_STRING_KEY = {\n STORE: {\n NAME: '{{ shop.name }}'\n },\n CURRENT_PAGE: '{{ current_page }}',\n TOTAL_PAGE: '{{ total_page }}',\n TOTAL_RESULT: '{{ total_result }}',\n TOTAL_FILTER_ITEM: '{{ total_filter_item }}',\n COLLECTION_ID: '{{ collection_id }}',\n COLLECTION_NAME: '{{ collection_name }}',\n TOTAL_WISHLIST: '{{ total_wishlist }}',\n ACCEPTED_FILETYPE_MEDIA: '{{ accepted_filetype_media }}',\n MAX_SIZE_MEDIA: '{{ max_size_media }}',\n FILTER_TITLE: '{{ filter_title }}',\n PRICE_MAX_MONEY_FORMAT: '{{ price_max_money_format }}'\n};\nexport const ELEMENT_ID = {\n PRODUCT_REVIEW: {\n ELEMENT_WIDGET: 'product-review-widget'\n }\n};\nexport const SHOPIFY_GID = 'gid://shopify/';\nexport const SHOPIFY_GID_PRODUCT_ID = `${SHOPIFY_GID}Product/`;\nexport const SHOPIFY_GID_PRODUCT_VARIANT_ID = `${SHOPIFY_GID}ProductVariant/`;\nexport const PAYLOAD_API_ALIASES = {\n Authorization: 'zbNTHXQpW7OmI',\n Method: 'Gba2Tb9Ys7JGu',\n GET: 'JniUtw5dNfeKW',\n POST: 'a9Dmw0qP9hvQE',\n PUT: 'dEnOjbvTzULLK',\n DELETE: 'pLC93Tvsu6g7H',\n shopifyUrl: 'NmIxMTNlYTVlM'\n};\nexport const HIERARCHICAL_FACET_OBJECT_ALIASES: any = {\n collections: 'hierarchicalCollections',\n product_type: 'hierarchicalProductType'\n};\nexport const MAX_LIMIT_HIERARCHICAL = 7;\nexport const AES_SECRET_KEY = '5l3ge1nt36124ti0n';\nexport const SEPARATOR_HIERARCHICAL_FACET = '---5L3D9E---';\n","export default async function swr(url: string, options: any) {\n if (typeof localStorage !== 'undefined' && typeof caches !== 'undefined' && options.method === 'GET' && !options?.ignoreSWR) {\n const data = await getData(url);\n return await data.json();\n } else return fetch(url, options).then((response) => response.json());\n}\n\nasync function getData(url: string) {\n const cacheVersion = 1;\n const cacheName = `sledge-${cacheVersion}`;\n\n return caches.open(cacheName).then((cache: any) => {\n return cache.match(url).then((cachedResponse: any) => {\n const fetchedResponse = fetch(url).then(async (networkResponse) => {\n try {\n // cleaning from different token\n const mainUrl = url.split('?')[0];\n const cacheMatches = await cache.matchAll();\n const filteredCaches = await cacheMatches.filter((f: any) => f.url.includes(mainUrl) && f.url !== url);\n for (const c of filteredCaches) {\n await cache.delete(c.url);\n }\n\n cache.put(url, networkResponse.clone());\n } catch (error) {\n caches.delete(cacheName);\n }\n\n return networkResponse;\n });\n\n return cachedResponse || fetchedResponse;\n });\n });\n}\n","import React from 'react';\n\nexport const usePrevious = (value: any) => {\n const ref = React.useRef();\n React.useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n};\n","import { useEffect, useState } from 'react';\n\nexport function useMediaQuery(query: string): boolean {\n const getMatches = (query: string): boolean => {\n // Prevents SSR issues\n if (typeof window !== 'undefined') {\n return window.matchMedia(query).matches;\n }\n return false;\n };\n\n const [matches, setMatches] = useState<boolean>(getMatches(query));\n\n function handleChange() {\n setMatches(getMatches(query));\n }\n\n useEffect(() => {\n const matchMedia = window.matchMedia(query);\n\n // Triggered at the first client-side load and if query changes\n handleChange();\n\n // Listen matchMedia\n if (matchMedia.addListener) {\n matchMedia.addListener(handleChange);\n } else {\n matchMedia.addEventListener('change', handleChange);\n }\n\n return () => {\n if (matchMedia.removeListener) {\n matchMedia.removeListener(handleChange);\n } else {\n matchMedia.removeEventListener('change', handleChange);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [query]);\n\n return matches;\n}\n","import React from 'react';\n\nexport function useIntersectionObserver(options: { threshold?: number; root?: any; rootMargin?: string }) {\n const { threshold = 1, root = null, rootMargin = '0px' } = options || {};\n const [entry, setEntry] = React.useState<any>(null);\n\n const previousObserver: any = React.useRef(null);\n\n const customRef = React.useCallback(\n (node: any) => {\n if (previousObserver.current) {\n previousObserver.current.disconnect();\n previousObserver.current = null;\n }\n\n if (node?.nodeType === Node.ELEMENT_NODE) {\n const observer = new IntersectionObserver(\n ([entry]) => {\n setEntry(entry);\n },\n { threshold, root, rootMargin }\n );\n\n observer.observe(node);\n previousObserver.current = observer;\n }\n },\n [threshold, root, rootMargin]\n );\n\n return [customRef, entry];\n}\n","import React from 'react';\n\nconst useEffectCallback = (callback: Function, dependencies: any) => {\n const memoizedCallback = React.useCallback(() => {\n if (typeof callback === 'function') {\n callback();\n }\n }, [callback]);\n\n // Run the callback whenever dependencies change\n React.useEffect(() => {\n memoizedCallback();\n }, dependencies);\n};\n\nexport default useEffectCallback;\n","import React from 'react';\n\nexport function useDebounce(value: any, delay: number) {\n const [debouncedValue, setDebouncedValue] = React.useState(value);\n\n React.useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n","import React from 'react';\n\nexport function useIsFirstRender() {\n const renderRef = React.useRef(true);\n\n if (renderRef.current === true) {\n renderRef.current = false;\n return true;\n }\n\n return renderRef.current;\n}\n","import React from 'react';\nimport { objectPresent, setNestedProperty } from '@core/lib/helper';\n\nexport function usePreviewSettings(props: { defaultSettings: any; nestedProperty: string }) {\n const { defaultSettings, nestedProperty } = props;\n\n const [previewSettings, setPreviewSettings] = React.useState(defaultSettings || {});\n\n const updatePreviewSettings = React.useCallback((newSettings: any) => {\n setPreviewSettings((prevSettings: any) => ({\n ...prevSettings,\n ...newSettings\n }));\n }, []);\n\n React.useEffect(() => {\n setNestedProperty({\n obj: window,\n path: nestedProperty,\n value: updatePreviewSettings\n });\n\n return () => {\n setNestedProperty({\n obj: window,\n path: nestedProperty,\n value: undefined\n });\n };\n }, [updatePreviewSettings]);\n\n const { settings: preview_settings = null } = previewSettings || {};\n\n const generalPreviewSettings = objectPresent(preview_settings?.general);\n const wishlistPreviewSettings = objectPresent(preview_settings?.wishlist);\n const productReviewPreviewSettings = objectPresent(preview_settings?.review);\n const instantSearchPreviewSettings = objectPresent(preview_settings?.instantsearch);\n const productRecommendationPreviewSettings = objectPresent(preview_settings?.product_recommendation);\n\n return {\n generalPreviewSettings,\n wishlistPreviewSettings,\n productReviewPreviewSettings,\n instantSearchPreviewSettings,\n productRecommendationPreviewSettings,\n previewSettings\n };\n}\n","import { useIsFirstRender } from './useIsFirstRender';\nimport useEffectCallback from './useEffectCallback';\n\nexport function useEffectOnChange(callback: Function, dependencies: any) {\n const isFirstRender = useIsFirstRender();\n\n useEffectCallback(() => {\n if (isFirstRender) return;\n\n callback();\n }, dependencies);\n}\n","import { AES_SECRET_KEY, PAYLOAD_API_ALIASES } from '@core/lib/const';\nimport swr from './swr';\nimport { useMediaQuery } from '@core/hooks';\nimport CryptoES from 'crypto-es';\nimport { ISledgeProps } from '@core/api/global';\n\ndeclare global {\n interface Window {\n // TODO: Soon `sledgeCommonModule` is deprecated\n sledgeCommonModule: ISledgeProps;\n sledge: ISledgeProps;\n Shopify: any;\n }\n}\n\nexport const sanitizeDataId = (id: any) => {\n if (!id) return '';\n\n let getId = String(id);\n\n if (getId.includes('shopify') && getId.includes('/')) {\n // Shopify Data\n let arrId = getId.split('/');\n return arrId[arrId.length - 1] || getId;\n } else {\n return getId;\n }\n};\n\nexport const setCookie = (params: { cname: string; cvalue: any; expired?: number; expiredBy?: 'day' | 'hour' | 'minute' | 'second' }) => {\n const { cname, cvalue, expired = 0, expiredBy = 'day' } = params;\n\n let setExpired;\n\n if (expiredBy === 'day') setExpired = expired * 1000 * 60 * 60 * 24;\n if (expiredBy === 'hour') setExpired = expired * 1000 * 60 * 60;\n if (expiredBy === 'minute') setExpired = expired * 1000 * 60;\n if (expiredBy === 'second') setExpired = expired * 1000;\n\n if (!expiredBy || !setExpired) return;\n\n const d = new Date();\n d.setTime(d.getTime() + setExpired);\n let expires = 'expires=' + d.toUTCString();\n document.cookie = cname + '=' + cvalue + ';' + expires + ';path=/';\n};\n\nexport const getCookie = (cname: string) => {\n let name = cname + '=';\n let ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) == ' ') {\n c = c.substring(1);\n }\n if (c.indexOf(name) == 0) {\n return c.substring(name.length, c.length);\n }\n }\n return '';\n};\n\nexport const documentReady = (init: any) => {\n document.addEventListener('DOMContentLoaded', init);\n};\n\nexport const getTextBetween = (params: { start: string; end: string; text: string }) => {\n const { start, end, text } = params;\n\n if (start && text.includes(start) && end && text.includes(end)) {\n let getText = text.indexOf(start) + start.length;\n\n return text.substring(getText, text.indexOf(end, getText));\n } else {\n return text;\n }\n};\n\nexport const replaceString = (params: { string: string; find: any[]; replace: any[] }) => {\n let { string, find, replace } = params;\n\n for (var i = 0; i < find.length; i++) {\n string = string.replace(new RegExp(find[i], 'gi'), replace[i]);\n }\n\n return string;\n};\n\nexport const isFunction = (data: any): data is (...args: any[]) => any => typeof data === 'function';\n\nexport const scrollToElement = (params: { element: any; headerOffset: number }) => {\n const { element, headerOffset } = params;\n\n if (!element) return;\n\n var elementPosition = element?.getBoundingClientRect().top;\n var offsetPosition = elementPosition + window.scrollY - headerOffset;\n\n window.scrollTo({\n top: offsetPosition,\n behavior: 'smooth'\n });\n};\n\nexport const getUnixTimestamp = (params?: { addMoreTime?: number; addMoreTimeBy?: 'day' | 'hour' | 'minute' | 'second' }) => {\n const { addMoreTime = 0, addMoreTimeBy = 'day' } = params || {};\n\n let moreTime = 0;\n\n if (addMoreTime) {\n if (addMoreTimeBy === 'day') moreTime = addMoreTime * 60 * 60 * 24;\n if (addMoreTimeBy === 'hour') moreTime = addMoreTime * 60 * 60;\n if (addMoreTimeBy === 'minute') moreTime = addMoreTime * 60;\n if (addMoreTimeBy === 'second') moreTime = addMoreTime;\n }\n\n return Math.floor(Date.now() / 1000) + moreTime;\n};\n\nexport const fetchApi = async (params: {\n url: string;\n method: 'GET' | 'POST' | 'PUT' | 'DELETE';\n authorization?: string | null | '';\n payload?: any;\n headers?: any;\n isSimpleRequest?: boolean;\n isUploadFile?: boolean;\n ignoreSWR?: boolean;\n}) => {\n const { url, method, authorization = '', payload = {}, headers = {}, isSimpleRequest = true, isUploadFile = false, ignoreSWR = false } = params;\n\n var myHeaders = new Headers();\n if (!isSimpleRequest) {\n if (authorization) myHeaders.append('Authorization', `Bearer ${authorization}`);\n\n if (Object.keys(headers).length)\n Object.keys(headers).forEach(function (key) {\n myHeaders.append(key, headers[key]);\n });\n }\n\n var formdata = new FormData();\n if (isSimpleRequest || isUploadFile) {\n if (authorization && isSimpleRequest) formdata.append(PAYLOAD_API_ALIASES.Authorization, authorization);\n\n formdata.append(PAYLOAD_API_ALIASES.Method, PAYLOAD_API_ALIASES[method]);\n\n if (Object.keys(payload).length)\n Object.keys(payload).forEach(function (key) {\n if (isUploadFile && payload?.files)\n [...payload.files].map((item: File) => {\n formdata.append('files', item, item.name);\n });\n\n formdata.append(key, payload[key]);\n });\n }\n\n const fixMethod = isSimpleRequest ? 'POST' : method;\n var requestOptions: any = {\n method: fixMethod,\n redirect: 'follow',\n headers: myHeaders,\n body: fixMethod === 'GET' ? null : isSimpleRequest || isUploadFile ? formdata : JSON.stringify(payload),\n ignoreSWR\n };\n\n return await swr(`${url}`, requestOptions);\n};\n\nexport const convertDate = (\n date: any,\n options: any = {\n timeZone: 'Asia/Jakarta',\n year: 'numeric',\n month: 'numeric',\n day: 'numeric'\n }\n) => new Date(date).toLocaleString('en-US', options);\n\nexport const currentMediaQuery = (): string | 'xs' | 'sm' | 'md' | 'lg' | 'xl' => {\n const isSmallDevice = useMediaQuery('(min-width: 425px)');\n const isMediumDevice = useMediaQuery('(min-width: 768px)');\n const isLargeDevice = useMediaQuery('(min-width: 1024px)');\n const isExtraLargeDevice = useMediaQuery('(min-width: 1280px)');\n\n let currentMedia = 'xs';\n\n if (isSmallDevice) currentMedia = 'sm';\n if (isMediumDevice) currentMedia = 'md';\n if (isLargeDevice) currentMedia = 'lg';\n if (isExtraLargeDevice) currentMedia = 'xl';\n\n return currentMedia;\n};\n\nexport const encryptText = (text: string) => {\n return CryptoES.AES.encrypt(text, AES_SECRET_KEY).toString();\n};\n\nexport const decryptText = (encryptText: string) => {\n let bytes = CryptoES.AES.decrypt(encryptText, AES_SECRET_KEY);\n\n return bytes.toString(CryptoES.enc.Utf8);\n};\n\nexport const watchElement = ({ selector = null, init = null, customInit = false }: { selector?: any; init?: any; customInit?: boolean }) => {\n if (!selector || !init) return;\n\n // Watch Element\n var observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n var nodes = Array.prototype.slice.call(mutation.addedNodes);\n nodes.forEach(function (node) {\n if (node.nodeType === 1 && (node.matches(selector) || node.querySelector(selector))) {\n if (!customInit) {\n let elementNode = Array.from(node.querySelectorAll(selector));\n\n if (elementNode.length) {\n elementNode.map((item: any) => {\n init(item);\n });\n }\n } else {\n init();\n }\n }\n });\n });\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: false,\n characterData: false\n });\n // End Watch Element\n};\n\nexport const getFillRating = ({\n average,\n item,\n index,\n productId,\n customComponentId,\n unixTimestamp\n}: {\n average: any;\n item: any;\n index: number;\n productId?: any;\n customComponentId?: any;\n unixTimestamp?: any;\n}) => {\n let ratingValue = Math.floor(parseFloat(average));\n\n let getCommaValue = String(average).includes(',') ? String(average).split(',') : [];\n let getCommaValueDot = String(average).includes('.') ? String(average).split('.') : [];\n let isHaveCommaValue = getCommaValue.length || getCommaValueDot.length;\n let commaValue = isHaveCommaValue ? getCommaValue[1] || getCommaValueDot[1] : 0;\n let fillOther = 'fill-0';\n\n if (item > ratingValue && ratingValue + 1 === item) {\n fillOther = `fill-${commaValue}`;\n }\n\n fillOther = item <= ratingValue ? 'full' : fillOther;\n\n let offset;\n\n if (fillOther === 'fill-0') {\n offset = '0%';\n }\n\n if (fillOther === 'fill-1') {\n offset = '25%';\n }\n\n if (fillOther === 'fill-2') {\n offset = '35%';\n }\n\n if (fillOther === 'fill-3') {\n offset = '40%';\n }\n\n if (fillOther === 'fill-4') {\n offset = '45%';\n }\n\n if (fillOther === 'fill-5') {\n offset = '50%';\n }\n\n if (fillOther === 'fill-6') {\n offset = '60%';\n }\n\n if (fillOther === 'fill-7') {\n offset = '70%';\n }\n\n if (fillOther === 'fill-8') {\n offset = '80%';\n }\n\n if (fillOther === 'fill-9') {\n offset = '90%';\n }\n\n if (fillOther === 'full') {\n offset = '100%';\n }\n\n let suffixGradientId = `-${fillOther}-${index}-${productId ? productId : unixTimestamp}${customComponentId ? `-${customComponentId}` : ''}`;\n let strokeGradientId = `rating-stroke${suffixGradientId}`;\n let fillGradientId = `rating-gradient${suffixGradientId}`;\n\n return {\n suffixGradientId,\n strokeGradientId,\n fillGradientId,\n offset,\n fillOther\n };\n};\n\nexport const stripTags = (html: string) => {\n return html.replace(/(<([^>]+)>)/gi, '');\n};\n\nexport const stringToFunction = (functionName: string) => {\n if (!functionName) return null;\n\n try {\n return eval(functionName);\n } catch (error) {\n return null;\n }\n};\n\nexport const sumArray = (array: any[]) => array.reduce((a, b) => a + b, 0);\n\nexport const stringToSlug = (text: string) => {\n if (!text) return text;\n\n return text\n .toLowerCase()\n .replace(/[^\\w ]+/g, '')\n .replace(/ +/g, '-');\n};\n\nexport const shopifyFormatMoney = (cents: any, format: string) => {\n if (typeof cents == 'string') {\n cents = cents.replace('.', '');\n }\n\n var value = '';\n var placeholderRegex = /\\{\\{\\s*(\\w+)\\s*\\}\\}/;\n var formatString: string = format || '${{amount}}';\n\n function defaultOption(opt: any, def: any) {\n return typeof opt == 'undefined' ? def : opt;\n }\n\n function formatWithDelimiters(number: any, precision: any, thousands?: any, decimal?: any) {\n precision = defaultOption(precision, 2);\n thousands = defaultOption(thousands, ',');\n decimal = defaultOption(decimal, '.');\n\n if (isNaN(number) || number == null) {\n return 0;\n }\n\n number = (number / 100.0).toFixed(precision);\n\n var parts = number.split('.'),\n dollars = parts[0].replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, '$1' + thousands),\n cents = parts[1] ? decimal + parts[1] : '';\n\n return dollars + cents;\n }\n\n switch (formatString.match(placeholderRegex)?.[1]) {\n case 'amount':\n value = formatWithDelimiters(cents, 2);\n break;\n case 'amount_no_decimals':\n value = formatWithDelimiters(cents, 0);\n break;\n case 'amount_with_comma_separator':\n value = formatWithDelimiters(cents, 2, '.', ',');\n break;\n case 'amount_no_decimals_with_comma_separator':\n value = formatWithDelimiters(cents, 0, '.', ',');\n break;\n }\n\n return formatString.replace(placeholderRegex, value);\n};\n\nexport const selectedLocaleJs = () => {\n if (typeof window !== 'undefined') {\n const shopifyLocale = window?.Shopify?.locale;\n const sledgeLocale = window?.sledgeCommonModule?.config?.locale || window?.sledge?.config?.locale;\n\n return shopifyLocale ? shopifyLocale : sledgeLocale || '';\n }\n\n return '';\n};\n\nexport const sledgeConfigJs = () => {\n let sledgeConfig: ISledgeProps['config'] = {};\n\n if (typeof window !== 'undefined') {\n sledgeConfig = window?.sledgeCommonModule?.config || window?.sledge?.config;\n\n return sledgeConfig || {};\n }\n\n return sledgeConfig;\n};\n\nexport const dispatchCustomEvent = (eventName: string, detail?: any): void => {\n const customEvent = new CustomEvent(eventName, { bubbles: true, cancelable: true, composed: false, ...(detail && { detail }) });\n\n document.dispatchEvent(customEvent);\n};\n\nexport const listenerCustomEvent = (eventName: string, listener: (event: CustomEvent) => void, method: 'on' | 'off'): void => {\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n\n document[domMethod](eventName, (event: Event) => {\n if (event instanceof CustomEvent) {\n listener(event);\n }\n });\n};\n\nexport const addCustomCode = ({ type, code }: { type: 'js' | 'css'; code: any }) => {\n const elementSelector = type === 'js' ? 'script' : 'style';\n const elementId = 'sledge-custom-code';\n\n if (document.querySelector(`${elementSelector}#${elementId}`)) document.querySelector(`${elementSelector}#${elementId}`)?.remove?.();\n\n var customCodeElement = document.createElement(elementSelector);\n customCodeElement.id = elementId;\n\n try {\n customCodeElement.appendChild(document.createTextNode(code));\n } catch (e) {\n customCodeElement.innerHTML = code;\n }\n\n document[type === 'js' ? 'body' : 'head'].appendChild(customCodeElement);\n};\n\nexport const sanitizeObjectDataString = (props: { value: any; replace: { [key: string]: any } }): any => {\n const { value, replace } = props;\n\n if (typeof value === 'string') {\n return value.replace(/\\{\\{\\s*(\\w+(?:\\.\\w+)*(?:\\[\\d+\\])?(?:\\.\\w+)?)\\s*\\}\\}/g, (match, key) => {\n const parts = key.split('.');\n let currentValue: any = replace;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (part.endsWith(']')) {\n const [arrayKey, index] = part.split('[');\n const arrayValue = currentValue[arrayKey];\n if (Array.isArray(arrayValue)) {\n const arrayIndex = parseInt(index, 10);\n currentValue = arrayValue[arrayIndex];\n } else {\n currentValue = undefined;\n break;\n }\n } else if (currentValue && typeof currentValue === 'object' && part in currentValue) {\n currentValue = currentValue[part];\n } else {\n currentValue = undefined;\n break;\n }\n }\n\n // If the value is not found, return an empty string\n return currentValue !== undefined ? String(currentValue) : '';\n });\n } else if (Array.isArray(value)) {\n return value.map((item) => sanitizeObjectDataString({ value: item, replace }));\n } else if (typeof value === 'object' && value !== null) {\n const sanitizedObject: { [key: string]: any } = {};\n for (const [key, val] of Object.entries(value)) {\n const parts = key.split('.');\n let currentObj = sanitizedObject;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (i === parts.length - 1) {\n if (Array.isArray(val)) {\n currentObj[part] = val.map((item) => sanitizeObjectDataString({ value: item, replace }));\n } else {\n currentObj[part] = sanitizeObjectDataString({ value: val, replace });\n }\n } else {\n if (!currentObj[part]) {\n currentObj[part] = {};\n }\n currentObj = currentObj[part];\n }\n }\n }\n return sanitizedObject;\n } else {\n return value;\n }\n};\n\nexport const isValidExpression = (expression: any) => {\n try {\n new Function(`return ${expression}`)();\n return true;\n } catch (error) {\n return false;\n }\n};\n\nexport const isIdenticalOfCompareObject = (a: any, b: any): boolean => {\n if (Object.is(a, b)) return true;\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n if (a.constructor !== b.constructor) return false;\n if (Array.isArray(a)) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!isIdenticalOfCompareObject(a[i], b[i])) return false;\n }\n return true;\n }\n const keys = Object.keys(a);\n if (keys.length !== Object.keys(b).length) return false;\n for (const key of keys) {\n if (!Object.prototype.hasOwnProperty.call(b, key) || !isIdenticalOfCompareObject(a[key], b[key])) return false;\n }\n return true;\n }\n return a !== a && b !== b; // NaN check\n};\n\nexport const setNestedProperty = (props: { obj: { [key: string]: any }; path: string; value: any }): { [key: string]: any } | null => {\n const { obj, path, value } = props;\n\n if (typeof obj !== 'object' || obj === null || typeof path !== 'string') {\n return null;\n }\n\n const parts = path.split('.');\n let current: { [key: string]: any } = obj;\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (i === parts.length - 1) {\n current[part] = value;\n } else {\n if (!(part in current) || typeof current[part] !== 'object') {\n current[part] = {};\n }\n current = current[part] as { [key: string]: any };\n }\n }\n\n return obj;\n};\n\nexport const objectPresent = (obj: any) => {\n if (typeof obj !== 'object' || obj === null || (obj && !Object.keys(obj)?.length)) return null;\n\n return obj;\n};\n\nexport const setElementAttribute = ({ element, attributeName, value }: { element: HTMLElement | null; attributeName: string; value: string }) => {\n if (element && element.hasAttribute(attributeName)) {\n element.setAttribute(attributeName, value);\n }\n};\n","import React from 'react';\nimport * as PopoverElement from '@radix-ui/react-popover';\n\nimport './Popover.css';\n\nexport interface IPopoverProps {\n trigger: JSX.Element;\n content: JSX.Element | null;\n isOpen?: boolean | false;\n setIsOpen?(value: React.SetStateAction<boolean>): void;\n hideCloseIcon?: boolean | false;\n align?: 'start' | 'center' | 'end' | undefined;\n className?: string;\n withOpenState?: boolean;\n withArrow?: boolean;\n customArrow?: string;\n sideOffset?: number;\n alignOffset?: number;\n}\n\nexport const Popover = ({\n trigger,\n content,\n isOpen,\n setIsOpen,\n hideCloseIcon,\n align,\n className,\n withOpenState = true,\n withArrow = true,\n customArrow = '',\n sideOffset = 5,\n alignOffset = 0\n}: IPopoverProps) => {\n const [open, setOpen] = React.useState(withOpenState ? isOpen : false);\n\n React.useEffect(() => {\n let arrowElement = document?.querySelector('.PopoverArrow')?.parentElement;\n\n if (arrowElement && customArrow?.length) {\n arrowElement.style.display = 'inline-flex';\n arrowElement.innerHTML = customArrow;\n }\n }, [open]);\n\n return (\n <PopoverElement.Root\n {...(withOpenState && {\n open: isOpen\n })}\n {...(setIsOpen && {\n onOpenChange: (open: boolean) => {\n setOpen(open);\n setIsOpen(open);\n }\n })}\n >\n <PopoverElement.Trigger asChild>{trigger}</PopoverElement.Trigger>\n <PopoverElement.Portal>\n <PopoverElement.Content\n className={`sledge__popover-content ${className ? className : ''}`}\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n align={align}\n {...(setIsOpen && {\n onOpenAutoFocus: () => setIsOpen(true),\n onCloseAutoFocus: () => setIsOpen(false)\n })}\n >\n {content}\n {!hideCloseIcon && (\n <PopoverElement.Close className=\"PopoverClose\" aria-label=\"Close\">\n <svg width={15} height={15} viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n </PopoverElement.Close>\n )}\n {withArrow ? <PopoverElement.Arrow className=\"PopoverArrow\" /> : null}\n </PopoverElement.Content>\n </PopoverElement.Portal>\n </PopoverElement.Root>\n );\n};\n","import React from 'react';\nimport './Progress.css';\n\nimport * as ProgressElement from '@radix-ui/react-progress';\n\nexport interface IProgressProps {\n value: string;\n total: number;\n fillColor?: any;\n outlineColor?: any;\n delay?: number;\n}\n\nexport const Progress = ({ value, total, fillColor = '', outlineColor = '', delay = 150 }: IProgressProps) => {\n const [progress, setProgress] = React.useState(0);\n\n React.useEffect(() => {\n let valueProgress = (+value / total) * 100;\n\n if (delay) {\n const timer = setTimeout(() => {\n if (valueProgress) setProgress(valueProgress);\n }, delay);\n return () => clearTimeout(timer);\n } else {\n setProgress(valueProgress);\n }\n }, []);\n\n return (\n <ProgressElement.Root\n className=\"sledge__progress\"\n value={progress}\n style={\n outlineColor\n ? {\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: outlineColor\n }\n : {}\n }\n >\n <ProgressElement.Indicator\n className=\"sledge__progress-indicator ProgressIndicator\"\n style={{\n ...{ transform: `translateX(-${100 - progress}%)` },\n ...(fillColor && {\n backgroundColor: fillColor\n })\n }}\n />\n </ProgressElement.Root>\n );\n};\n","import './Checkbox.css';\n\nimport * as CheckboxElement from '@radix-ui/react-checkbox';\n\nexport interface ICheckboxProps {\n id: string;\n name: string;\n value: string;\n required?: boolean;\n label?: React.ReactNode;\n checked?: boolean;\n labelStyle?: any;\n onClick?: React.MouseEventHandler<HTMLButtonElement> | undefined;\n}\n\nexport const Checkbox = ({ id, name, value, required, label, checked, labelStyle = {}, onClick }: ICheckboxProps) => {\n return (\n <div className=\"sledge__checkbox-wrapper\">\n <CheckboxElement.Root className=\"sledge__checkbox-root\" checked={checked} id={id} name={name} value={value} required={required} onClick={onClick}>\n <CheckboxElement.Indicator className=\"sledge__checkbox-indicator\">\n <svg width={10} height={8} viewBox=\"0 0 10 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.72318 0.237414C10.0707 0.574491 10.0942 1.14584 9.77561 1.51356L4.40976 7.70711C4.25243 7.88871 4.03181 7.99443 3.79903 7.99979C3.56625 8.00514 3.3415 7.90965 3.17686 7.73545L0.250031 4.63868C-0.0833435 4.28595 -0.0833435 3.71406 0.250031 3.36133C0.583405 3.00859 1.12391 3.00859 1.45729 3.36133L3.75367 5.79105L8.51706 0.292899C8.83564 -0.0748211 9.37564 -0.0996624 9.72318 0.237414Z\"\n fill=\"white\"\n />\n </svg>\n </CheckboxElement.Indicator>\n </CheckboxElement.Root>\n {label && (\n <label className=\"sledge__checkbox-label\" htmlFor={id} style={labelStyle}>\n {label}\n </label>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { InputField, Tooltip } from '@core/components';\nimport './Slider.css';\n\nimport * as SliderElement from '@radix-ui/react-slider';\nimport * as Form from '@radix-ui/react-form';\nimport { useEffectOnChange } from '@core/hooks';\n\nexport interface ISliderProps {\n type?: 'slider' | 'input_range' | 'slider_with_input_range' | string;\n prefixInputRange?: string;\n descriptionInputRange?: string;\n valueFilterSliderChange?: any[];\n labelStyle?: any;\n value: number[];\n textValue?: any[];\n min?: number;\n max: number;\n step?: number;\n setValueCommit?(value: number[]): void;\n setValueChange?(value: number[]): void;\n wrapperClassName?: string;\n minMaxClassName?: string;\n minMaxTextClassName?: string;\n}\n\n// Formatting decimal value with 2 number\nconst inputRangeFormatter = (value: any) => {\n const cleanValue = String(value)?.replace?.(/[^0-9.]/g, '');\n const numValue = parseFloat(cleanValue);\n\n if (isNaN(numValue)) return value;\n\n if (Number.isInteger(numValue)) return numValue.toString();\n\n const [integerPart, decimalPart] = cleanValue.split('.');\n const formattedDecimal = (decimalPart || '').slice(0, 2).padEnd(2, '0');\n\n return `${integerPart}.${formattedDecimal}`;\n};\n\nexport const Slider = (props: ISliderProps) => {\n const {\n type = 'slider',\n prefixInputRange = '',\n descriptionInputRange = '',\n valueFilterSliderChange = [],\n labelStyle = {},\n value,\n textValue = [],\n min,\n max,\n step = 1,\n setValueCommit,\n setValueChange,\n wrapperClassName = '',\n minMaxClassName = '',\n minMaxTextClassName = ''\n } = props;\n\n const [inputRangeMin, setInputRangeMin] = React.useState(inputRangeFormatter(value?.[0]));\n const [inputRangeMax, setInputRangeMax] = React.useState(inputRangeFormatter(value?.[1] || value?.[0]));\n\n const delayInputRangeRef = React.useRef<any>(null);\n\n let content: any = textValue?.length ? textValue : value;\n\n const hasMaxValue = value?.length && value?.[1];\n const FormWrapper = String(type)?.includes('input_range') ? Form.Root : React.Fragment;\n const isTypeInputRange = type === 'input_range';\n const isTypeIncludeSlider = String(type)?.includes('slider');\n const isTypeIncludeInputRange = String(type)?.includes('input_range');\n\n const handleChangeInputRange = ({ event, type }: { event: React.ChangeEvent<HTMLInputElement>; type: 'min' | 'max' }) => {\n let valueInput: any = event?.target?.value;\n\n // Allowed number only\n if (!Number(valueInput) && Number(valueInput) !== 0) return;\n\n let valueCommit: number[] = type === 'min' ? [valueInput || 0, value?.[1] || value?.[0]] : [value?.[0], valueInput || 0];\n\n if (type === 'min') {\n setInputRangeMin(valueInput);\n } else {\n setInputRangeMax(valueInput);\n }\n\n if (delayInputRangeRef.current) {\n clearTimeout(delayInputRangeRef.current);\n }\n\n delayInputRangeRef.current = setTimeout(() => {\n const lastValueMin = valueCommit?.[0];\n const lastValueMax = valueCommit?.[1] || lastValueMin;\n const valueInputRange = inputRangeFormatter(type === 'min' ? lastValueMax : lastValueMin);\n const valueCommitFiltered = [valueInputRange, valueInputRange];\n\n valueInput = inputRangeFormatter(valueInput);\n valueCommit = [inputRangeFormatter(valueCommit[0]), inputRangeFormatter(valueCommit[1])];\n\n let filterValueMinOrMax = false;\n if (type === 'min') {\n filterValueMinOrMax = Number(valueInput) > Number(lastValueMax);\n } else {\n filterValueMinOrMax = Number(valueInput) < Number(lastValueMin);\n }\n\n // Filtering input range value when hit before min or after max\n if (filterValueMinOrMax) {\n setInputRangeMin(valueInputRange);\n setInputRangeMax(valueInputRange);\n\n setValueChange?.(valueCommitFiltered);\n setValueCommit?.(valueCommitFiltered);\n } else {\n if (type === 'min') {\n setInputRangeMin(valueInput);\n } else {\n setInputRangeMax(valueInput);\n }\n\n setValueChange?.(valueCommit);\n setValueCommit?.(valueCommit);\n }\n }, 500);\n };\n\n // Detect reset value for input range\n useEffectOnChange(() => {\n if (isTypeIncludeInputRange && !valueFilterSliderChange?.length) {\n setInputRangeMin(inputRangeFormatter(value?.[0]));\n setInputRangeMax(inputRangeFormatter(value?.[1] || value?.[0]));\n }\n }, [valueFilterSliderChange]);\n\n return (\n <div className={`sledge__slider-wrapper ${wrapperClassName}`} data-slider-type={type}>\n <FormWrapper>\n {isTypeIncludeInputRange ? (\n <>\n {isTypeInputRange && descriptionInputRange ? (\n <div className=\"sledge__slider-input-range-description\" style={labelStyle}>\n {descriptionInputRange}\n </div>\n ) : null}\n\n <div className=\"sledge__slider-input-range-wrapper\">\n {isTypeInputRange && prefixInputRange ? (\n <div className=\"sledge__slider-input-range-prefix\" style={labelStyle}>\n {prefixInputRange}\n </div>\n ) : null}\n <InputField\n className=\"sledge__slider-input-range-minmax\"\n type=\"text\"\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => handleChangeInputRange({ event, type: 'min' })}\n value={inputRangeMin}\n style={labelStyle}\n />\n <span className=\"sledge__slider-input-range-minmax-separator\">-</span>\n <InputField\n className=\"sledge__slider-input-range-minmax\"\n type=\"text\"\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => handleChangeInputRange({ event, type: 'max' })}\n value={inputRangeMax}\n style={labelStyle}\n />\n </div>\n </>\n ) : null}\n {isTypeIncludeSlider ? (\n <>\n <form>\n <SliderElement.Root\n className=\"sledge__SliderRoot\"\n value={value}\n {...(typeof min !== 'undefined'\n ? {\n min\n }\n : {})}\n max={max}\n step={step}\n aria-label=\"Volume\"\n onValueCommit={(valueCommit: number[]) => setValueCommit?.(valueCommit)}\n onValueChange={(valueChange: number[]) => {\n setValueChange?.(valueChange);\n if (isTypeIncludeInputRange) {\n setInputRangeMin(inputRangeFormatter(valueChange?.[0]));\n setInputRangeMax(inputRangeFormatter(valueChange?.[1] || valueChange?.[0]));\n }\n }}\n >\n <SliderElement.Track className=\"sledge__SliderTrack\">\n <SliderElement.Range className=\"sledge__SliderRange\" />\n </SliderElement.Track>\n <Tooltip\n {...(textValue?.length\n ? {\n innerHTMLContent: content[0]\n }\n : {\n content: content[0]\n })}\n customArrow={`<svg width=\"19\" height=\"5\" viewBox=\"0 0 19 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9 4.99998C9 9.48298e-05 16.4996 1.99678e-05 18.4999 0L9 2.2985e-06L0.5 2.04891e-06C9 2.2985e-06 9 4.99998 9 4.99998Z\" fill=\"#43c6ac\"/></svg>`}\n wrapTrigger={false}\n >\n <SliderElement.Thumb className=\"sledge__SliderThumb\" />\n </Tooltip>\n {hasMaxValue ? (\n <Tooltip\n {...(textValue?.length\n ? {\n innerHTMLContent: content[1]\n }\n : {\n content: content[1]\n })}\n customArrow={`<svg width=\"19\" height=\"5\" viewBox=\"0 0 19 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9 4.99998C9 9.48298e-05 16.4996 1.99678e-05 18.4999 0L9 2.2985e-06L0.5 2.04891e-06C9 2.2985e-06 9 4.99998 9 4.99998Z\" fill=\"#43c6ac\"/></svg>`}\n wrapTrigger={false}\n >\n <SliderElement.Thumb className=\"sledge__SliderThumb\" />\n </Tooltip>\n ) : null}\n </SliderElement.Root>\n </form>\n <div className={`sledge__slider-minmax ${minMaxClassName}`}>\n <div className={`sledge__slider-minmax-text ${minMaxTextClassName}`} dangerouslySetInnerHTML={{ __html: content[0] }}></div>\n {hasMaxValue ? <div className={`sledge__slider-minmax-text ${minMaxTextClassName}`} dangerouslySetInnerHTML={{ __html: content[1] }}></div> : null}\n </div>\n </>\n ) : null}\n </FormWrapper>\n </div>\n );\n};\n","import React from 'react';\n\nimport { ChevronArrowLeftIcon, ChevronArrowRightIcon } from '@core/components';\nimport './Pagination.css';\nimport { OBJECT_DATA_STRING_KEY } from '@core/lib/const';\n\nexport interface IPaginationProps {\n type?: string;\n currentPage: number;\n totalPage: number;\n totalResult: number;\n onChange(page: number): void;\n pageInfo?: string;\n}\n\nconst paginationTypes = ['standard', 'numbered_button'];\n\nexport const Pagination = (props: IPaginationProps) => {\n let { type = 'standard', currentPage, totalPage, totalResult, onChange, pageInfo: pageInfoProp } = props;\n\n if (!paginationTypes.includes(type)) type = 'standard';\n\n const isDisabledPreviousPage = currentPage === 1;\n const isDisabledNextPage = currentPage === totalPage;\n\n const [pageInfo, setPageInfo] = React.useState<any>(null);\n\n const handlePageInfo = () => {\n const defaultPageInfo = (\n <>\n Page {currentPage} of {totalPage} - total {totalResult} result\n </>\n );\n\n if (pageInfoProp) {\n pageInfoProp = pageInfoProp.replaceAll(OBJECT_DATA_STRING_KEY.CURRENT_PAGE, String(currentPage));\n pageInfoProp = pageInfoProp.replaceAll(OBJECT_DATA_STRING_KEY.TOTAL_PAGE, String(totalPage));\n pageInfoProp = pageInfoProp.replaceAll(OBJECT_DATA_STRING_KEY.TOTAL_RESULT, String(totalResult));\n }\n\n setPageInfo(pageInfoProp ? pageInfoProp : defaultPageInfo);\n };\n\n const handlePreviousPage = () => {\n if (isDisabledPreviousPage) return;\n\n if (currentPage > 1) {\n onChange(currentPage - 1);\n }\n };\n\n const handleNextPage = () => {\n if (isDisabledNextPage) return;\n\n if (currentPage < totalPage) {\n onChange(currentPage + 1);\n }\n };\n\n const additionalPreviousPagination = {\n ...(isDisabledPreviousPage\n ? {\n disabled: true\n }\n : {\n onClick: () => handlePreviousPage()\n })\n };\n\n const additionalNextPagination = {\n ...(isDisabledNextPage\n ? {\n disabled: true\n }\n : {\n onClick: () => handleNextPage()\n })\n };\n\n const StandardLayout = () => (\n <>\n <button type=\"button\" className=\"sledge__pagination-navigation\" {...additionalPreviousPagination}>\n <ChevronArrowLeftIcon width={16} height={16} color=\"black\" />\n </button>\n <span>{pageInfo}</span>\n <button type=\"button\" className=\"sledge__pagination-navigation\" {...additionalNextPagination}>\n <ChevronArrowRightIcon width={16} height={16} color=\"black\" />\n </button>\n </>\n );\n\n const NumberedButtonLayout = () => {\n const separatorDots = '...';\n\n const getPageNumbers = (): (number | string)[] => {\n const pageNumbers: (number | string)[] = [];\n const visiblePages = 5;\n const halfVisible = Math.floor(visiblePages / 2);\n\n let startPage = Math.max(currentPage - halfVisible, 1);\n let endPage = Math.min(startPage + visiblePages - 1, totalPage);\n\n if (endPage - startPage + 1 < visiblePages) {\n startPage = Math.max(endPage - visiblePages + 1, 1);\n }\n\n if (startPage > 1) {\n pageNumbers.push(1);\n if (startPage > 2) {\n pageNumbers.push(separatorDots);\n }\n }\n\n for (let i = startPage; i <= endPage; i++) {\n pageNumbers.push(i);\n }\n\n if (endPage < totalPage) {\n if (endPage < totalPage - 1) {\n pageNumbers.push(separatorDots);\n }\n pageNumbers.push(totalPage);\n }\n\n return pageNumbers;\n };\n\n return (\n <>\n {isDisabledPreviousPage ? null : (\n <button className=\"sledge__pagination-navigation-borderless\" {...additionalPreviousPagination}>\n <ChevronArrowLeftIcon width={22} height={22} color=\"#43c6ac\" />\n </button>\n )}\n\n <div className=\"sledge__pagination-numbers\">\n {getPageNumbers()?.length\n ? getPageNumbers().map((pageNumber, index) => {\n const isActive = currentPage === pageNumber;\n\n return (\n <React.Fragment key={index}>\n {pageNumber === separatorDots ? (\n <span className=\"sledge__pagination-dots\">{pageNumber}</span>\n ) : (\n <button\n onClick={() => {\n if (!isActive) onChange(pageNumber as number);\n }}\n className={`sledge__pagination-button ${isActive ? 'sledge__pagination-button--active' : ''}`}\n >\n {pageNumber}\n </button>\n )}\n </React.Fragment>\n );\n })\n : null}\n </div>\n\n {isDisabledNextPage ? null : (\n <button className=\"sledge__pagination-navigation-borderless\" {...additionalNextPagination}>\n <ChevronArrowRightIcon width={22} height={22} color=\"#43c6ac\" />\n </button>\n )}\n </>\n );\n };\n\n const renderPaginationLayout = () => {\n switch (type) {\n case 'standard':\n return <StandardLayout />;\n break;\n case 'numbered_button':\n return <NumberedButtonLayout />;\n break;\n\n default:\n return <StandardLayout />;\n break;\n }\n };\n\n React.useEffect(() => {\n handlePageInfo();\n }, []);\n\n return (\n <div className=\"sledge__pagination\" data-pagination-type={type}>\n {renderPaginationLayout()}\n </div>\n );\n};\n","import * as RadioGroupElement from '@radix-ui/react-radio-group';\nimport './RadioGroup.css';\nimport { VirtualizedList } from '@core/components';\n\nexport interface IRadioGroupProps {\n id: string;\n name: string;\n required?: boolean;\n defaultValue?: string | undefined;\n items: Array<{\n label: string;\n value: string;\n }>;\n labelStyle?: any;\n onValueChange?: ((value: string) => void) | undefined;\n useVirtualized?: boolean;\n scrollElement?: Element | (Window & typeof globalThis) | undefined | null;\n selector?: string;\n parentRef?: any;\n}\n\nconst rowRenderer = ({ virtualized, item, id, labelStyle }: { virtualized?: any; item: { label: string; value: string }; id: string; labelStyle?: any }) => {\n const { index, key = '' } = virtualized || {};\n\n const { label, value } = item;\n\n const content = (\n <>\n <RadioGroupElement.Item className=\"sledge__radio-group-item\" value={value} id={`${id}${index}`}>\n <RadioGroupElement.Indicator className=\"sledge__radio-group-indicator\" />\n </RadioGroupElement.Item>\n <label className=\"sledge__radio-group-label\" htmlFor={`${id}${index}`} style={labelStyle}>\n {label}\n </label>\n </>\n );\n\n return (\n <div className=\"sledge__radio-group-item-flex\" key={key || index}>\n {content}\n </div>\n );\n};\n\nexport const RadioGroup = ({ id, name, required, defaultValue, items, labelStyle = {}, onValueChange, useVirtualized = false, scrollElement, selector, parentRef }: IRadioGroupProps) => {\n return (\n <div className=\"sledge__radio-group-wrapper\">\n <form>\n <RadioGroupElement.Root\n className=\"sledge__radio-group-root\"\n aria-label=\"View density\"\n defaultValue={defaultValue}\n id={id}\n name={name}\n required={required}\n onValueChange={onValueChange}\n >\n {useVirtualized ? (\n <VirtualizedList\n rowCount={items?.length}\n rowRenderer={({ index, key }) =>\n rowRenderer({\n virtualized: {\n index,\n key\n },\n item: items[index],\n id,\n labelStyle\n })\n }\n scrollElement={scrollElement}\n selector={selector}\n parentRef={parentRef}\n />\n ) : (\n items.map((item: { label: string; value: string }, index: number) =>\n rowRenderer({\n virtualized: {\n index\n },\n item,\n id,\n labelStyle\n })\n )\n )}\n </RadioGroupElement.Root>\n </form>\n </div>\n );\n};\n","import * as CheckboxElement from '@radix-ui/react-checkbox';\nimport { Tooltip } from '@core/components';\nimport './ColorSwatch.css';\n\nexport interface IColorSwatchProps {\n id: string;\n name: string;\n value: string;\n rgb: string;\n image: string;\n required?: boolean;\n checked?: boolean;\n onClick?: React.MouseEventHandler<HTMLButtonElement> | undefined;\n}\n\nexport const ColorSwatch = ({ id, name, value, rgb, image, required, checked, onClick }: IColorSwatchProps) => {\n const styles = {\n ...(image?.length\n ? {\n backgroundImage: `url(\"${image}\")`,\n backgroundSize: 'contain'\n }\n : {\n backgroundColor: rgb\n })\n };\n\n return (\n <Tooltip\n content={value}\n customArrow={`<svg width=\"19\" height=\"5\" viewBox=\"0 0 19 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9 4.99998C9 9.48298e-05 16.4996 1.99678e-05 18.4999 0L9 2.2985e-06L0.5 2.04891e-06C9 2.2985e-06 9 4.99998 9 4.99998Z\" fill=\"#43c6ac\"/></svg>`}\n wrapTrigger={false}\n >\n <div className=\"sledge__color-swatch-wrapper\">\n <CheckboxElement.Root\n className=\"sledge__color-swatch-root\"\n checked={checked}\n id={id}\n name={name}\n value={value}\n required={required}\n onClick={onClick}\n style={styles}\n ></CheckboxElement.Root>\n </div>\n </Tooltip>\n );\n};\n","import React, { ReactNode } from 'react';\nimport * as SelectElement from '@radix-ui/react-select';\nimport './Select.css';\n\nexport interface ISelectProps {\n name: string;\n placeholder: string;\n required?: boolean;\n defaultValue?: any;\n items: Array<{\n label: ReactNode;\n value: string;\n }>;\n labelStyle?: any;\n onValueChange?: ((value: string) => void) | undefined;\n}\n\nexport const Select = ({ name, placeholder, required, defaultValue, items, labelStyle = {}, onValueChange }: ISelectProps) => {\n const [isLoading, setIsLoading] = React.useState(true);\n\n React.useEffect(() => {\n // Trigger Re-render on defaultValue change\n setIsLoading(true);\n setTimeout(() => {\n setIsLoading(false);\n }, 0);\n }, [defaultValue]);\n\n const handleClassNameRoot = (open: boolean) => {\n if (!open) return;\n\n const selectContentElement = document.querySelector('.sledge__select-content');\n if (selectContentElement) {\n const selectRootElement = selectContentElement.parentElement;\n if (selectRootElement) selectRootElement.classList.toggle('sledge__select-root');\n }\n };\n\n return (\n <>\n {isLoading ? null : (\n <div className=\"sledge__select-wrapper\">\n <SelectElement.Root\n name={name}\n required={required}\n onValueChange={onValueChange}\n onOpenChange={(open) => handleClassNameRoot(open)}\n {...(defaultValue\n ? {\n defaultValue\n }\n : {})}\n >\n <SelectElement.Trigger className=\"sledge__select-trigger\" style={labelStyle}>\n <SelectElement.Value placeholder={placeholder} />\n <SelectElement.Icon className=\"sledge__select-icon\">\n <svg width={15} height={15} viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n </SelectElement.Icon>\n </SelectElement.Trigger>\n <SelectElement.Portal className=\"sledge__select-portal\">\n <SelectElement.Content className=\"sledge__select-content\">\n <SelectElement.ScrollUpButton className=\"sledge__select-scroll-button\">\n <svg width={15} height={15} viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M3.13523 8.84197C3.3241 9.04343 3.64052 9.05363 3.84197 8.86477L7.5 5.43536L11.158 8.86477C11.3595 9.05363 11.6759 9.04343 11.8648 8.84197C12.0536 8.64051 12.0434 8.32409 11.842 8.13523L7.84197 4.38523C7.64964 4.20492 7.35036 4.20492 7.15803 4.38523L3.15803 8.13523C2.95657 8.32409 2.94637 8.64051 3.13523 8.84197Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n </SelectElement.ScrollUpButton>\n <SelectElement.Viewport className=\"sledge__select-viewport\">\n {items.map(\n (\n item: {\n label: ReactNode;\n value: string;\n },\n index: number\n ) => {\n const { label, value } = item;\n\n return (\n <SelectItemComponent key={index} value={value}>\n {label}\n </SelectItemComponent>\n );\n }\n )}\n </SelectElement.Viewport>\n <SelectElement.ScrollDownButton className=\"sledge__select-scroll-button\">\n <svg width={15} height={15} viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n </SelectElement.ScrollDownButton>\n </SelectElement.Content>\n </SelectElement.Portal>\n </SelectElement.Root>\n </div>\n )}\n </>\n );\n};\n\nconst SelectItemComponent = React.forwardRef(({ children, className = '', ...props }: any, forwardedRef) => {\n return (\n <SelectElement.Item className={`sledge__select-item ${className}`} {...props} ref={forwardedRef}>\n <SelectElement.ItemText>{children}</SelectElement.ItemText>\n <SelectElement.ItemIndicator className=\"sledge__select-item-indicator\">\n <svg width={15} height={15} viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.4669 3.72684C11.7558 3.91574 11.8369 4.30308 11.648 4.59198L7.39799 11.092C7.29783 11.2452 7.13556 11.3467 6.95402 11.3699C6.77247 11.3931 6.58989 11.3355 6.45446 11.2124L3.70446 8.71241C3.44905 8.48022 3.43023 8.08494 3.66242 7.82953C3.89461 7.57412 4.28989 7.55529 4.5453 7.78749L6.75292 9.79441L10.6018 3.90792C10.7907 3.61902 11.178 3.53795 11.4669 3.72684Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n </SelectElement.ItemIndicator>\n </SelectElement.Item>\n );\n});\n","export interface IHeartIcon {\n width: number;\n height: number;\n type: 'fill' | 'half-fill' | 'outline';\n color: string;\n}\n\nexport const HeartIcon = ({ width, height, type, color }: IHeartIcon) => {\n const renderIcon = () => {\n switch (type) {\n case 'fill':\n return (\n <svg width={width} height={height} id=\"sledge-icon-heart-fill\" viewBox=\"0 0 18 17\" fill={color}>\n <path d=\"M5.89936 0.0838691C6.42436 0.0998355 6.9327 0.191502 7.4252 0.359002H7.47436C7.5077 0.374836 7.5327 0.392336 7.54936 0.408169C7.73353 0.467336 7.9077 0.534002 8.07436 0.625669L8.39103 0.767336C8.51603 0.834002 8.66603 0.958169 8.74936 1.009C8.8327 1.05817 8.92436 1.109 8.99936 1.1665C9.9252 0.459002 11.0494 0.0756688 12.2077 0.0838691C12.7335 0.0838691 13.2585 0.158169 13.7577 0.325669C16.8335 1.32567 17.9419 4.70067 17.016 7.65067C16.491 9.15817 15.6327 10.534 14.5085 11.6582C12.8994 13.2165 11.1335 14.5998 9.2327 15.7915L9.02436 15.9173L8.8077 15.7832C6.9002 14.5998 5.12436 13.2165 3.5002 11.6498C2.38353 10.5257 1.52436 9.15817 0.991029 7.65067C0.0493627 4.70067 1.1577 1.32567 4.26686 0.308169C4.50853 0.224836 4.7577 0.166502 5.0077 0.134002H5.1077C5.34186 0.0998355 5.57436 0.0838691 5.8077 0.0838691H5.89936ZM13.3244 2.71734C12.9827 2.59984 12.6077 2.784 12.4827 3.134C12.366 3.484 12.5494 3.86734 12.8994 3.9915C13.4335 4.1915 13.791 4.71734 13.791 5.29984V5.32567C13.7752 5.5165 13.8327 5.70067 13.9494 5.84234C14.066 5.984 14.241 6.0665 14.4244 6.084C14.766 6.07484 15.0577 5.80067 15.0827 5.44984V5.35067C15.1077 4.18317 14.4002 3.12567 13.3244 2.71734Z\" />\n </svg>\n );\n break;\n case 'half-fill':\n return (\n <svg width={width} height={height} id=\"sledge-icon-heart-fill\" viewBox=\"0 0 19 18\" fill={color} xmlns=\"http://www.w3.org/2000/svg\">\n <g clipPath=\"url(#clip0_8001_20724)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.71721 0.932813C11.1579 0.00998075 13.0718 -0.244965 14.7252 0.291857C18.3217 1.46694 19.4382 5.43925 18.4396 8.60004C16.8987 13.5643 10.318 17.2673 10.0389 17.4226C9.93961 17.4783 9.82974 17.5061 9.71987 17.5061C9.61 17.5061 9.50101 17.4792 9.40178 17.4244C9.12444 17.2709 2.59153 13.6227 0.999278 8.60094L0.998392 8.60004C-0.00108215 5.43835 1.11181 1.46515 4.70478 0.291857C6.39183 -0.261124 8.23041 -0.0178479 9.71721 0.932813ZM5.11236 1.57377C2.2052 2.52353 1.47509 5.6915 2.26457 8.18979C3.50683 12.1055 8.41471 15.2717 9.71898 16.0554C11.0277 15.2636 15.971 12.0625 17.1734 8.19338C17.9629 5.6924 17.2301 2.52443 14.3185 1.57377C12.9079 1.11505 11.2625 1.39423 10.1266 2.28474C9.88911 2.46967 9.55949 2.47326 9.32026 2.29013C8.11699 1.37358 6.54512 1.10517 5.11236 1.57377ZM13.4679 3.3565C14.6756 3.75239 15.5218 4.83591 15.6255 6.11692C15.6547 6.48767 15.3827 6.81264 15.0167 6.84226C14.9981 6.84405 14.9804 6.84495 14.9618 6.84495C14.6189 6.84495 14.3283 6.57834 14.2999 6.22644C14.2414 5.48853 13.7541 4.86553 13.0603 4.63841C12.7103 4.52351 12.5189 4.14378 12.6315 3.79099C12.7458 3.4373 13.117 3.24519 13.4679 3.3565Z\"\n />\n <mask id=\"mask0_8001_20724\" style={{ maskType: 'alpha' }} maskUnits=\"userSpaceOnUse\" x={-26} y={6} width={71} height={72}>\n <circle cx=\"9.30312\" cy=\"41.872\" r=\"35.3031\" />\n </mask>\n <g mask=\"url(#mask0_8001_20724)\">\n <path d=\"M6.3519 0.0425007C6.92406 0.0601299 7.47805 0.161343 8.01479 0.346287H8.06838C8.1047 0.363769 8.13195 0.383092 8.15011 0.400574C8.35082 0.465903 8.54064 0.539512 8.72228 0.640725L9.06739 0.797146C9.20362 0.870755 9.36709 1.00785 9.45791 1.06398C9.54873 1.11827 9.64863 1.17439 9.73037 1.23788C10.7394 0.456701 11.9645 0.0334464 13.2269 0.0425007C13.8 0.0425007 14.3721 0.124538 14.9161 0.309482C18.2683 1.41363 19.4762 5.14011 18.4672 8.39733C17.895 10.0618 16.9596 11.5809 15.7344 12.8222C13.9807 14.5428 12.0562 16.0702 9.98466 17.386L9.75761 17.5249L9.52148 17.3768C7.44263 16.0702 5.50728 14.5428 3.73721 12.813C2.52024 11.5717 1.58389 10.0618 1.00265 8.39733C-0.0236092 5.14011 1.18429 1.41363 4.57275 0.29016C4.83612 0.198148 5.10767 0.133739 5.38013 0.0978548H5.48911C5.74432 0.0601299 5.9977 0.0425007 6.25199 0.0425007H6.3519ZM14.4439 2.95023C14.0715 2.82049 13.6628 3.02384 13.5266 3.41029C13.3995 3.79674 13.5993 4.21999 13.9807 4.35709C14.5629 4.57792 14.9525 5.15851 14.9525 5.80168V5.8302C14.9352 6.04091 14.9979 6.24425 15.125 6.40067C15.2522 6.55709 15.4429 6.64819 15.6427 6.66751C16.0151 6.65739 16.3329 6.35467 16.3602 5.9673V5.8578C16.3874 4.56872 15.6164 3.40108 14.4439 2.95023Z\" />\n <mask id=\"mask1_8001_20724\" style={{ maskType: 'alpha' }} maskUnits=\"userSpaceOnUse\" x={0} y={0} width={19} height={18}>\n <path d=\"M6.3519 0.0425007C6.92406 0.0601299 7.47805 0.161343 8.01479 0.346287H8.06838C8.10471 0.363769 8.13195 0.383092 8.15012 0.400574C8.35083 0.465903 8.54064 0.539512 8.72228 0.640725L9.06739 0.797146C9.20362 0.870755 9.36709 1.00785 9.45791 1.06398C9.54873 1.11827 9.64863 1.17439 9.73037 1.23788C10.7394 0.456701 11.9645 0.0334464 13.2269 0.0425007C13.8 0.0425007 14.3721 0.124538 14.9161 0.309482C18.2683 1.41363 19.4762 5.14011 18.4672 8.39733C17.895 10.0618 16.9596 11.5809 15.7344 12.8222C13.9807 14.5428 12.0562 16.0702 9.98466 17.386L9.75761 17.5249L9.52148 17.3768C7.44263 16.0702 5.50728 14.5428 3.73721 12.813C2.52024 11.5717 1.58389 10.0618 1.00265 8.39733C-0.0236093 5.14011 1.18429 1.41363 4.57275 0.29016C4.83612 0.198148 5.10767 0.133739 5.38013 0.0978548H5.48911C5.74432 0.0601299 5.9977 0.0425007 6.252 0.0425007H6.3519ZM14.4439 2.95023C14.0715 2.82049 13.6628 3.02384 13.5266 3.41029C13.3995 3.79674 13.5993 4.21999 13.9807 4.35709C14.5629 4.57792 14.9525 5.15851 14.9525 5.80168V5.8302C14.9352 6.04091 14.9979 6.24425 15.125 6.40067C15.2522 6.55709 15.4429 6.64819 15.6427 6.66751C16.0151 6.65739 16.3329 6.35467 16.3602 5.9673V5.8578C16.3874 4.56872 15.6164 3.40108 14.4439 2.95023Z\" />\n </mask>\n <g mask=\"url(#mask1_8001_20724)\">\n <circle cx=\"9.37245\" cy=\"40.7002\" r=\"36.185\" />\n </g>\n </g>\n </g>\n <defs>\n <clipPath id=\"clip0_8001_20724\">\n <rect width={19} height={18} fill=\"transparent\" />\n </clipPath>\n </defs>\n </svg>\n );\n break;\n case 'outline':\n return (\n <svg width={width} height={height} id=\"sledge-icon-heart-line\" viewBox=\"0 0 18 17\" fill={color}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.19515 0.86581C10.5501 0.00914308 12.3501 -0.227524 13.9051 0.27081C17.2876 1.36164 18.3376 5.04914 17.3985 7.98331C15.9493 12.5916 9.76015 16.0291 9.49765 16.1733C9.40431 16.225 9.30098 16.2508 9.19765 16.2508C9.09431 16.2508 8.99181 16.2258 8.89848 16.175C8.63765 16.0325 2.49348 12.6458 0.995979 7.98414L0.995146 7.98331C0.0551462 5.04831 1.10181 1.35998 4.48098 0.27081C6.06765 -0.242524 7.79681 -0.0166903 9.19515 0.86581ZM4.86431 1.46081C2.13015 2.34248 1.44348 5.28331 2.18598 7.60248C3.35431 11.2375 7.97015 14.1766 9.19681 14.9041C10.4276 14.1691 15.0768 11.1975 16.2076 7.60581C16.9501 5.28414 16.261 2.34331 13.5226 1.46081C12.196 1.03498 10.6485 1.29414 9.58015 2.12081C9.35681 2.29248 9.04681 2.29581 8.82181 2.12581C7.69015 1.27498 6.21181 1.02581 4.86431 1.46081ZM12.7226 3.11573C13.8585 3.48323 14.6543 4.48906 14.7518 5.67823C14.7793 6.02239 14.5235 6.32406 14.1793 6.35156C14.1618 6.35323 14.1451 6.35406 14.1276 6.35406C13.8051 6.35406 13.5318 6.10656 13.5051 5.77989C13.4501 5.09489 12.9918 4.51656 12.3393 4.30573C12.0101 4.19906 11.8301 3.84656 11.936 3.51906C12.0435 3.19073 12.3926 3.01239 12.7226 3.11573Z\"\n />\n </svg>\n );\n break;\n\n default:\n break;\n }\n };\n\n return <span className=\"sledge-icon__heart\">{renderIcon()}</span>;\n};\n","export interface IChevronArrowDownIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const ChevronArrowDownIcon = ({ width, height, color }: IChevronArrowDownIcon) => {\n return (\n <span className=\"sledge-icon__arrow-down\">\n <svg width={width} height={height} viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"Arrow - Down 2\">\n <g id=\"Iconly/Light-Outline/Arrow---Down-2\">\n <g id=\"Arrow---Down-2\">\n <path\n id=\"Stroke-1\"\n d=\"M3.72407 6.6414C3.94596 6.41951 4.29318 6.39934 4.53786 6.58089L4.60796 6.6414L9.99935 12.0325L15.3907 6.6414C15.6126 6.41951 15.9598 6.39934 16.2045 6.58089L16.2746 6.6414C16.4965 6.86329 16.5167 7.21051 16.3351 7.45519L16.2746 7.52529L10.4413 13.3586C10.2194 13.5805 9.87218 13.6007 9.62751 13.4191L9.55741 13.3586L3.72407 7.52529C3.48 7.28121 3.48 6.88548 3.72407 6.6414Z\"\n fill={color}\n />\n </g>\n </g>\n </g>\n </svg>\n </span>\n );\n};\n","export interface IChevronArrowLeftIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const ChevronArrowLeftIcon = ({ width, height, color }: IChevronArrowLeftIcon) => {\n return (\n <span className=\"sledge-icon__arrow-left\">\n <svg width={width} height={height} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10.6875 2.97945C10.865 3.15697 10.8812 3.43474 10.7359 3.63048L10.6875 3.68656L6.37465 7.99967L10.6875 12.3128C10.865 12.4903 10.8812 12.7681 10.7359 12.9638L10.6875 13.0199C10.51 13.1974 10.2323 13.2135 10.0365 13.0683L9.98043 13.0199L5.31377 8.35323C5.13625 8.17572 5.12012 7.89794 5.26535 7.7022L5.31377 7.64612L9.98043 2.97945C10.1757 2.78419 10.4923 2.78419 10.6875 2.97945Z\"\n fill={color}\n />\n </svg>\n </span>\n );\n};\n","export interface IChevronArrowRightIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const ChevronArrowRightIcon = ({ width, height, color }: IChevronArrowRightIcon) => {\n return (\n <span className=\"sledge-icon__arrow-right\">\n <svg width={width} height={height} viewBox=\"0 0 17 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.60738 13.1302C5.42987 12.9527 5.41374 12.675 5.55897 12.4792L5.60738 12.4231L9.92027 8.11002L5.60738 3.79691C5.42987 3.6194 5.41374 3.34162 5.55897 3.14588L5.60738 3.0898C5.7849 2.91229 6.06267 2.89615 6.25841 3.04139L6.31449 3.0898L10.9812 7.75647C11.1587 7.93398 11.1748 8.21175 11.0296 8.4075L10.9812 8.46357L6.31449 13.1302C6.11923 13.3255 5.80265 13.3255 5.60738 13.1302Z\"\n fill={color}\n />\n </svg>\n </span>\n );\n};\n","export interface IArrowRightIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const ArrowRightIcon = ({ width, height, color }: IArrowRightIcon) => {\n return (\n <span className=\"sledge-icon__arrow-right\">\n <svg width={width} height={height} viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M3 8.79429C3 8.50952 3.21162 8.27418 3.48617 8.23693L3.5625 8.23179L13.4505 8.23224L9.87826 4.6746C9.65812 4.4554 9.65735 4.09925 9.87655 3.8791C10.0758 3.67897 10.3883 3.66015 10.6088 3.82306L10.672 3.87739L15.2095 8.39539C15.2386 8.42428 15.2638 8.45555 15.2852 8.48858C15.2912 8.49852 15.2973 8.50869 15.3032 8.51906C15.3085 8.52795 15.3134 8.53718 15.318 8.54652C15.3243 8.5601 15.3305 8.57413 15.3361 8.58845C15.3407 8.59949 15.3445 8.61023 15.348 8.62105C15.3522 8.63447 15.3562 8.64877 15.3597 8.66329C15.3622 8.67343 15.3643 8.68319 15.3661 8.69298C15.3686 8.70755 15.3707 8.72263 15.3722 8.73789C15.3735 8.74953 15.3743 8.76106 15.3747 8.77261C15.3749 8.77961 15.375 8.78693 15.375 8.79429L15.3747 8.81608C15.3743 8.82712 15.3735 8.83815 15.3725 8.84916L15.375 8.79429C15.375 8.82979 15.3717 8.86452 15.3654 8.89819C15.364 8.90623 15.3622 8.91449 15.3603 8.92271C15.3563 8.93964 15.3517 8.95595 15.3464 8.97194C15.3438 8.97988 15.3407 8.98837 15.3375 8.99679C15.3309 9.01371 15.3238 9.02985 15.3159 9.04557C15.3122 9.05296 15.3082 9.06069 15.3039 9.06835C15.2968 9.08084 15.2896 9.09272 15.2819 9.10429C15.2765 9.11248 15.2706 9.12101 15.2643 9.1294L15.2594 9.13588C15.2443 9.15568 15.2278 9.17444 15.2102 9.19204L15.2096 9.19256L10.6721 13.7113C10.4519 13.9305 10.0958 13.9298 9.87658 13.7097C9.67729 13.5096 9.65979 13.197 9.82363 12.9771L9.87823 12.9142L13.449 9.35724L3.5625 9.35679C3.25184 9.35679 3 9.10495 3 8.79429Z\"\n fill={color}\n />\n </svg>\n </span>\n );\n};\n","export interface IBagIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const BagIcon = ({ width, height, color }: IBagIcon) => {\n return (\n <span className=\"sledge-icon__bag\">\n <svg width={width} height={height} viewBox=\"0 0 18 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"vuesax/bold/bag-2\">\n <g id=\"bag-2\">\n <path\n id=\"Vector\"\n d=\"M14.3711 6.04627C13.919 5.54693 13.2374 5.25677 12.2927 5.15555V4.64271C12.2927 3.71824 11.9013 2.82752 11.2131 2.20671C10.518 1.57241 9.6138 1.2755 8.67584 1.36322C7.06309 1.51842 5.70676 3.07719 5.70676 4.76417V5.15555C4.76205 5.25677 4.08051 5.54693 3.6284 6.04627C2.97385 6.77505 2.9941 7.74674 3.06833 8.42154L3.54068 12.1801C3.68238 13.496 4.21547 14.8455 7.11707 14.8455H10.8824C13.784 14.8455 14.3171 13.496 14.4588 12.1869L14.9312 8.41479C15.0054 7.74674 15.0189 6.77505 14.3711 6.04627ZM8.77031 2.30118C9.4451 2.24045 10.0862 2.44963 10.5855 2.90174C11.0781 3.34711 11.3548 3.98141 11.3548 4.64271V5.11506H6.64472V4.76417C6.64472 3.56304 7.63666 2.40915 8.77031 2.30118ZM6.58399 8.87365H6.57724C6.2061 8.87365 5.90245 8.56999 5.90245 8.19885C5.90245 7.82772 6.2061 7.52406 6.57724 7.52406C6.95512 7.52406 7.25878 7.82772 7.25878 8.19885C7.25878 8.56999 6.95512 8.87365 6.58399 8.87365ZM11.3075 8.87365H11.3008C10.9296 8.87365 10.626 8.56999 10.626 8.19885C10.626 7.82772 10.9296 7.52406 11.3008 7.52406C11.6787 7.52406 11.9823 7.82772 11.9823 8.19885C11.9823 8.56999 11.6787 8.87365 11.3075 8.87365Z\"\n fill={color}\n />\n </g>\n </g>\n </svg>\n </span>\n );\n};\n","export interface ICloseIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const CloseIcon = ({ width, height, color }: ICloseIcon) => {\n return (\n <span className=\"sledge-icon__close\">\n <svg viewBox=\"0 0 20 20\" focusable=\"false\" aria-hidden=\"true\" width={width} height={height}>\n <path\n d=\"m11.414 10 6.293-6.293a1 1 0 1 0-1.414-1.414l-6.293 6.293-6.293-6.293a1 1 0 0 0-1.414 1.414l6.293 6.293-6.293 6.293a1 1 0 1 0 1.414 1.414l6.293-6.293 6.293 6.293a.998.998 0 0 0 1.707-.707.999.999 0 0 0-.293-.707l-6.293-6.293z\"\n fill={color}\n />\n </svg>\n </span>\n );\n};\n","export interface ISearchIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const SearchIcon = ({ width, height, color }: ISearchIcon) => {\n return (\n <span className=\"sledge-icon__search\">\n <svg width={width} height={height} viewBox=\"0 0 20 21\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.78283 2.16669C14.2578 2.16669 17.8978 5.80669 17.8978 10.2817C17.8978 12.393 17.0876 14.3186 15.7617 15.7638L18.3707 18.3673C18.6148 18.6114 18.6157 19.0064 18.3715 19.2506C18.2498 19.3739 18.089 19.4348 17.929 19.4348C17.7698 19.4348 17.6098 19.3739 17.4873 19.2523L14.8469 16.6192C13.4579 17.7316 11.6967 18.3975 9.78283 18.3975C5.30783 18.3975 1.66699 14.7567 1.66699 10.2817C1.66699 5.80669 5.30783 2.16669 9.78283 2.16669ZM9.78283 3.41669C5.99699 3.41669 2.91699 6.49585 2.91699 10.2817C2.91699 14.0675 5.99699 17.1475 9.78283 17.1475C13.5678 17.1475 16.6478 14.0675 16.6478 10.2817C16.6478 6.49585 13.5678 3.41669 9.78283 3.41669Z\"\n fill={color}\n />\n </svg>\n </span>\n );\n};\n","export interface IMessageAddIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const MessageAddIcon = ({ width, height, color }: IMessageAddIcon) => {\n return (\n <span className=\"sledge-icon__message-add\">\n <svg width={width} height={height} viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"vuesax/bold/message-add\">\n <g id=\"message-add\">\n <path\n id=\"Vector\"\n d=\"M11.1666 1.33301H5.83325C3.16659 1.33301 1.83325 2.66634 1.83325 5.33301V13.9997C1.83325 14.3663 2.13325 14.6663 2.49992 14.6663H11.1666C13.8333 14.6663 15.1666 13.333 15.1666 10.6663V5.33301C15.1666 2.66634 13.8333 1.33301 11.1666 1.33301ZM10.8333 8.49967H8.99992V10.333C8.99992 10.6063 8.77325 10.833 8.49992 10.833C8.22658 10.833 7.99992 10.6063 7.99992 10.333V8.49967H6.16658C5.89325 8.49967 5.66658 8.27301 5.66658 7.99967C5.66658 7.72634 5.89325 7.49967 6.16658 7.49967H7.99992V5.66634C7.99992 5.39301 8.22658 5.16634 8.49992 5.16634C8.77325 5.16634 8.99992 5.39301 8.99992 5.66634V7.49967H10.8333C11.1066 7.49967 11.3333 7.72634 11.3333 7.99967C11.3333 8.27301 11.1066 8.49967 10.8333 8.49967Z\"\n fill={color}\n />\n </g>\n </g>\n </svg>\n </span>\n );\n};\n","export interface ISwapIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const SwapIcon = ({ width, height, color }: ISwapIcon) => {\n return (\n <span className=\"sledge-icon__swap\">\n <svg width={width} height={height} viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"Swap\">\n <g id=\"Iconly/Light-Outline/Swap\">\n <g id=\"Swap_2\">\n <path\n id=\"Combined-Shape\"\n d=\"M11.7263 3.864C11.9795 3.864 12.1887 4.0521 12.2218 4.29616L12.2263 4.364L12.2262 12.2307L14.0904 10.359C14.2852 10.1633 14.6018 10.1626 14.7975 10.3574C14.9754 10.5345 14.9922 10.8122 14.8474 11.0083L14.7991 11.0645L12.0806 13.7956C12.0642 13.8117 12.0476 13.8263 12.03 13.8398L12.0806 13.7956C12.0561 13.8203 12.0296 13.8418 12.0017 13.8603C11.992 13.8663 11.9819 13.8725 11.9715 13.8784C11.9619 13.8842 11.9522 13.8892 11.9423 13.894C11.9325 13.8983 11.9226 13.9027 11.9125 13.9067C11.8998 13.9122 11.8866 13.9168 11.8734 13.9209C11.8656 13.9229 11.8576 13.9252 11.8495 13.9272C11.8351 13.9312 11.8206 13.9342 11.8061 13.9365C11.7993 13.9373 11.7921 13.9383 11.7849 13.9391C11.7685 13.9414 11.7522 13.9425 11.7359 13.9428C11.7327 13.9425 11.7295 13.9425 11.7263 13.9425L11.7166 13.9428C11.7003 13.9425 11.684 13.9414 11.6678 13.9395L11.7263 13.9425C11.6991 13.9425 11.6724 13.9403 11.6463 13.9362C11.6319 13.9342 11.6174 13.9312 11.6031 13.9276C11.5955 13.9253 11.5879 13.9232 11.5804 13.9209C11.566 13.9169 11.5518 13.9118 11.5378 13.9061C11.5301 13.9026 11.5227 13.8994 11.5154 13.896C11.5038 13.891 11.4923 13.8851 11.4809 13.8787C11.4707 13.8725 11.4606 13.8663 11.4508 13.8598C11.4431 13.8552 11.4355 13.8499 11.428 13.8443L11.4227 13.8398C11.4051 13.8263 11.3884 13.8117 11.3728 13.7961L11.3719 13.7956L8.65336 11.0645C8.45855 10.8688 8.45928 10.5522 8.65499 10.3574C8.83292 10.1803 9.11073 10.1648 9.30613 10.3105L9.3621 10.359L11.2262 12.232L11.2263 4.364C11.2263 4.08786 11.4502 3.864 11.7263 3.864ZM5.10736 2.05497L5.1171 2.05469C5.13339 2.055 5.14967 2.05611 5.16588 2.058L5.10736 2.05497C5.1346 2.05497 5.16133 2.05714 5.18739 2.06133C5.20164 2.06328 5.21594 2.06623 5.23012 2.0698C5.23846 2.07225 5.24696 2.07463 5.25536 2.07723C5.26849 2.08093 5.2812 2.08543 5.29374 2.09046C5.30281 2.0945 5.31199 2.09851 5.32103 2.10279C5.33176 2.10743 5.34234 2.11289 5.35274 2.11876C5.36166 2.12425 5.37048 2.12959 5.37912 2.1352C5.38801 2.14048 5.39691 2.14667 5.40565 2.15318L5.4618 2.20186L8.18032 4.93297C8.37513 5.12868 8.3744 5.44527 8.17869 5.64008C8.00077 5.81718 7.72295 5.83267 7.52755 5.68698L7.47158 5.63844L5.60692 3.76469L5.60736 11.6335C5.60736 11.9096 5.3835 12.1335 5.10736 12.1335C4.85423 12.1335 4.64503 11.9454 4.61192 11.7013L4.60736 11.6335L4.60692 3.76535L2.74329 5.63844C2.56618 5.81636 2.28845 5.83314 2.09237 5.68836L2.03618 5.64008C1.85826 5.46298 1.84148 5.18524 1.98626 4.98916L2.03455 4.93297L4.75306 2.20186L4.78251 2.17486C4.78942 2.16895 4.7965 2.16322 4.80373 2.15768L4.75306 2.20186C4.77759 2.17722 4.80405 2.15567 4.83195 2.13721C4.84168 2.13115 4.8518 2.12496 4.86214 2.11912C4.87175 2.11333 4.88152 2.10825 4.8914 2.10352C4.90117 2.0992 4.91107 2.09484 4.92114 2.09079C4.93393 2.08533 4.94704 2.0807 4.9603 2.07663C4.96836 2.07446 4.97662 2.07215 4.98496 2.07006C4.99839 2.06637 5.01197 2.06355 5.02562 2.06129C5.03383 2.06027 5.04188 2.05915 5.04999 2.05822C5.06542 2.0561 5.08126 2.05503 5.0971 2.0547C5.1006 2.055 5.10398 2.05497 5.10736 2.05497Z\"\n fill={color}\n />\n </g>\n </g>\n </g>\n </svg>\n </span>\n );\n};\n","export interface INoteIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const NoteIcon = ({ width, height, color }: INoteIcon) => {\n return (\n <span className=\"sledge-icon__note\">\n <svg width={width} height={height} viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"vuesax/bold/note-2\">\n <path\n id=\"Vector\"\n d=\"M8.95178 13.3046C9.13494 13.3473 9.15172 13.5871 8.97332 13.6466L7.91998 13.9933C5.27332 14.8466 3.87998 14.1333 3.01998 11.4866L2.16665 8.85328C1.31332 6.20661 2.01998 4.80661 4.66665 3.95328L4.67731 3.94975C5.08018 3.81633 5.48102 4.22359 5.37901 4.63553C5.37264 4.66126 5.3663 4.68718 5.35998 4.71328L4.70665 7.50661C3.97332 10.6466 5.04665 12.3799 8.18665 13.1266L8.95178 13.3046Z\"\n fill={color}\n />\n <path\n id=\"Vector_2\"\n d=\"M11.9467 2.14033L10.8334 1.88033C8.6067 1.35366 7.28004 1.787 6.50004 3.40033C6.30004 3.807 6.14004 4.30033 6.00671 4.867L5.35337 7.66033C4.70004 10.447 5.56004 11.8203 8.34004 12.4803L9.46004 12.747C9.8467 12.8403 10.2067 12.9003 10.54 12.927C12.62 13.127 13.7267 12.1537 14.2867 9.747L14.94 6.96033C15.5934 4.17366 14.74 2.79366 11.9467 2.14033ZM10.6934 8.887C10.6334 9.11366 10.4334 9.26033 10.2067 9.26033C10.1667 9.26033 10.1267 9.25366 10.08 9.247L8.14004 8.75366C7.87337 8.687 7.71337 8.41366 7.78004 8.147C7.84671 7.88033 8.12004 7.72033 8.38671 7.787L10.3267 8.28033C10.6 8.347 10.76 8.62033 10.6934 8.887ZM12.6467 6.63366C12.5867 6.86033 12.3867 7.007 12.16 7.007C12.12 7.007 12.08 7.00033 12.0334 6.99366L8.80004 6.17366C8.53337 6.107 8.37337 5.83366 8.44004 5.567C8.50671 5.30033 8.78004 5.14033 9.04671 5.207L12.28 6.027C12.5534 6.087 12.7134 6.36033 12.6467 6.63366Z\"\n fill={color}\n />\n </g>\n </svg>\n </span>\n );\n};\n","export interface IFilterIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const FilterIcon = ({ width, height, color }: IFilterIcon) => {\n return (\n <span className=\"sledge-icon__filter\">\n <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M22 6.5H16\" stroke={color} strokeWidth=\"1.5\" strokeMiterlimit={10} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M6 6.5H2\" stroke={color} strokeWidth=\"1.5\" strokeMiterlimit={10} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path\n d=\"M10 10C11.933 10 13.5 8.433 13.5 6.5C13.5 4.567 11.933 3 10 3C8.067 3 6.5 4.567 6.5 6.5C6.5 8.433 8.067 10 10 10Z\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeMiterlimit={10}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M22 17.5H18\" stroke={color} strokeWidth=\"1.5\" strokeMiterlimit={10} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M8 17.5H2\" stroke={color} strokeWidth=\"1.5\" strokeMiterlimit={10} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path\n d=\"M14 21C15.933 21 17.5 19.433 17.5 17.5C17.5 15.567 15.933 14 14 14C12.067 14 10.5 15.567 10.5 17.5C10.5 19.433 12.067 21 14 21Z\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeMiterlimit={10}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n );\n};\n","export interface IInfoCircleIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const InfoCircleIcon = ({ width, height, color }: IInfoCircleIcon) => {\n return (\n <span className=\"sledge-icon__info-circle\">\n <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M12 2.00293C6.49 2.00293 2 6.49293 2 12.0029C2 17.5129 6.49 22.0029 12 22.0029C17.51 22.0029 22 17.5129 22 12.0029C22 6.49293 17.51 2.00293 12 2.00293ZM11.25 8.00293C11.25 7.59293 11.59 7.25293 12 7.25293C12.41 7.25293 12.75 7.59293 12.75 8.00293V13.0029C12.75 13.4129 12.41 13.7529 12 13.7529C11.59 13.7529 11.25 13.4129 11.25 13.0029V8.00293ZM12.92 16.3829C12.87 16.5129 12.8 16.6129 12.71 16.7129C12.61 16.8029 12.5 16.8729 12.38 16.9229C12.26 16.9729 12.13 17.0029 12 17.0029C11.87 17.0029 11.74 16.9729 11.62 16.9229C11.5 16.8729 11.39 16.8029 11.29 16.7129C11.2 16.6129 11.13 16.5129 11.08 16.3829C11.03 16.2629 11 16.1329 11 16.0029C11 15.8729 11.03 15.7429 11.08 15.6229C11.13 15.5029 11.2 15.3929 11.29 15.2929C11.39 15.2029 11.5 15.1329 11.62 15.0829C11.86 14.9829 12.14 14.9829 12.38 15.0829C12.5 15.1329 12.61 15.2029 12.71 15.2929C12.8 15.3929 12.87 15.5029 12.92 15.6229C12.97 15.7429 13 15.8729 13 16.0029C13 16.1329 12.97 16.2629 12.92 16.3829Z\"\n fill={color}\n />\n </svg>\n </span>\n );\n};\n","import React from 'react';\n\nimport './Button.css';\n\nexport const Button = React.forwardRef((props: any, buttonRef) => {\n const { className = '', children, colorType = 'light', fullWidth = false, elementType = 'button', link = '', isActive, ...otherProps } = props;\n\n return elementType === 'hyperlink' && link?.length ? (\n <a href={link} className={`sledge__button ${className || ''}`} data-button-color-type={colorType} data-button-full-width={fullWidth} ref={buttonRef} {...otherProps}>\n {children}\n </a>\n ) : (\n <button\n className={`sledge__button ${className || ''} ${isActive ? 'sledge__button-active' : ''}`}\n data-button-color-type={colorType}\n data-button-full-width={fullWidth}\n ref={buttonRef}\n {...otherProps}\n >\n {children}\n </button>\n );\n});\n","import React from 'react';\n\nimport './SearchInputField.css';\nimport { CloseIcon } from '@core/components';\n\nexport const SearchInputField = React.memo((props: any) => {\n const { className = '', icon, value = '', withClearField, onChange, onResetField, fieldRef, ...otherProps } = props;\n\n const inputRef = React.useRef(null);\n\n const handleResetField = React.useCallback(() => {\n const elementCurrent = fieldRef?.current || inputRef?.current;\n elementCurrent?.focus?.();\n\n onChange && onChange({ value: '' });\n onResetField && onResetField();\n }, []);\n\n const handleChangeField = React.useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n onChange && onChange({ value: e.target.value });\n }, []);\n\n return (\n <div className={`sledge__search-input-field-wrapper ${className || ''}`}>\n {!icon ? null : <div className=\"sledge__search-input-field-icon\">{icon}</div>}\n <input className=\"sledge__search-input-field\" value={value} onChange={(e) => handleChangeField(e)} ref={fieldRef || inputRef} {...otherProps} />\n {value && withClearField ? (\n <div className=\"sledge__clear-field-wrapper\">\n <button className=\"sledge__clear-field\" type=\"button\" onClick={handleResetField}>\n <CloseIcon width={14} height={14} color=\"#393d4e\" />\n </button>\n </div>\n ) : null}\n </div>\n );\n});\n","export const ROTATE_FILTER_ARROW_ANIMATION = {\n open: { rotate: 180 },\n closed: { rotate: 0 },\n transition: {\n type: 'spring',\n duration: 0.2\n }\n};\n\nexport const VISIBLE_ANIMATION = {\n hidden: { opacity: 0, scale: 0 },\n visible: (custom: any) => {\n const { duration } = custom || {};\n\n return {\n opacity: 1,\n scale: 1,\n transition: {\n type: 'spring',\n duration: duration || 0.7\n }\n };\n }\n};\n\nexport const VISIBLE_CUSTOM_ANIMATION = {\n hidden: { opacity: 0, scale: 0 },\n visible: (custom: any) => ({\n opacity: 1,\n scale: 1,\n transition: {\n type: 'spring',\n duration: 0.7,\n delay: custom * 0.13\n }\n })\n};\n","import React from 'react';\n\nimport './SelectField.css';\n\nimport { ChevronArrowDownIcon, Popover } from '@core/components';\nimport { motion } from 'framer-motion';\nimport { ROTATE_FILTER_ARROW_ANIMATION } from '@core/lib/animation';\n\nexport const SelectField = (props: any) => {\n const {\n className = '',\n placeholder = null,\n overridePlaceholderOnMobile = null,\n prefixLabel = null,\n prefixSelectedLabel = '',\n align = 'end',\n onChange,\n value = '',\n options = [],\n LinkComponent,\n link\n } = props;\n\n const [isOpen, setIsOpen] = React.useState(false);\n\n const handleChangeField = (label: string, value: string) => {\n onChange && onChange({ label: label, value: value });\n setIsOpen(false);\n };\n\n const selectedLabel = placeholder && !value ? placeholder : options?.filter(({ value: optionValue }: any) => optionValue === value)[0]?.label;\n\n const selectedLabelComponent = <span>{prefixSelectedLabel?.length ? `${prefixSelectedLabel} ${selectedLabel}` : selectedLabel}</span>;\n\n return (\n <div className={`sledge__select-field-wrapper ${className || ''}`}>\n <Popover\n trigger={\n <button type=\"button\" className=\"sledge__button sledge__select-field\" data-button-color-type=\"light\" data-button-full-width=\"true\">\n {!prefixLabel ? null : <span className=\"sledge__select-field-icon\">{prefixLabel}</span>}\n\n {overridePlaceholderOnMobile ? (\n <>\n <span className=\"sledge__hide-element-mobile-on-md\">{overridePlaceholderOnMobile}</span>\n <span className=\"sledge__hide-element-md-on-mobile\">{selectedLabelComponent}</span>\n </>\n ) : (\n selectedLabelComponent\n )}\n\n <motion.div initial=\"closed\" animate={isOpen ? 'open' : 'closed'} variants={ROTATE_FILTER_ARROW_ANIMATION} className=\"sort-trigger-icon\">\n <ChevronArrowDownIcon width={18} height={18} color=\"#000000\" />\n </motion.div>\n </button>\n }\n content={\n <ul className=\"sledge__select-field-option\">\n {options?.map((option: any, index: number) => {\n const { label, value: optionValue } = option;\n\n const Item = () => (\n <li\n key={index}\n onClick={() => handleChangeField(label, optionValue)}\n {...(optionValue === value && {\n ['data-selected']: true\n })}\n >\n {label}\n </li>\n );\n\n return LinkComponent ? (\n <LinkComponent scroll={false} to={link?.replace('value', optionValue)} href={link?.replace('value', optionValue)} key={index}>\n <Item />\n </LinkComponent>\n ) : (\n <Item key={index} />\n );\n })}\n </ul>\n }\n isOpen={isOpen}\n setIsOpen={setIsOpen}\n hideCloseIcon\n align={align}\n className=\"sledge__select-field-option-content\"\n withArrow={false}\n />\n </div>\n );\n};\n","interface ObjectConstructor {\n hasOwn(o: object, v: PropertyKey): boolean;\n}\n\nif (!Object.hasOwn) {\n Object.hasOwn = function (obj: object, prop: PropertyKey): boolean {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n };\n}\n","import { fetchApi, sanitizeDataId } from '@core/lib/helper';\n\ndeclare global {\n interface Window {\n Shopify: any;\n }\n}\n\ninterface IAddToCartShopifyData {\n id: string | number;\n quantity: number;\n}\n\nexport const addToCart: any = async (data: Array<IAddToCartShopifyData>) => {\n let items: Array<IAddToCartShopifyData> = [];\n data.map((item) => {\n const { id, quantity } = item;\n\n items.push({\n id: sanitizeDataId(id),\n quantity: quantity\n });\n });\n\n if (typeof window === 'undefined' || !window?.Shopify?.routes?.root) return;\n\n let url = `${window.Shopify.routes.root}cart/add.js`;\n let headers = {\n 'Content-Type': 'application/json'\n };\n let payload = {\n items: items\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n payload,\n headers,\n isSimpleRequest: false\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n","import { API_URL, LOCAL_STORAGE_KEY } from '@core/lib/const';\nimport { fetchApi, sanitizeDataId } from '@core/lib/helper';\n\nexport const getWishlist: any = async (query?: any, token?: string) => {\n let sledgeAuthApp = token ? token : typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let queryParams =\n '?' +\n new URLSearchParams({\n ...(query || {})\n }).toString();\n\n let url = `${API_URL}/wishlist${queryParams}`;\n\n return await fetchApi({\n url,\n method: 'GET',\n authorization: sledgeAuthApp\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const addWishlist: any = async (data: {\n productId?: string;\n productVariantId?: string;\n productName?: string;\n productVendor?: string;\n productSku?: string;\n productVariantName?: string;\n productLink?: string;\n productImage?: string;\n productCurrency?: string;\n productPrice?: any;\n type?: 'add' | 'remove' | 'toggle';\n}) => {\n const { productId, productVariantId, productName, productVendor, productSku, productVariantName, productLink, productImage, productCurrency, productPrice, type = 'toggle' } = data;\n\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/wishlist`;\n let payload = {\n product: JSON.stringify({\n id: sanitizeDataId(productId),\n variant_id: sanitizeDataId(productVariantId),\n name: productName,\n vendor: productVendor,\n sku: productSku,\n variant_name: productVariantName,\n url: productLink,\n image_url: productImage,\n currency: productCurrency,\n price: productPrice\n }),\n type: type === 'toggle' ? '' : type\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeAuthApp,\n payload\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const bulkAddWishlist: any = async (\n data: Array<{\n productId?: string;\n productVariantId?: string;\n productName?: string;\n productVariantName?: string;\n productLink?: string;\n productImage?: string;\n productCurrency?: string;\n productPrice?: any;\n }>\n) => {\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let products = data.map((item: any) => {\n const { productId, productVariantId, productName, productVariantName, productLink, productImage, productCurrency, productPrice } = item;\n\n return {\n id: sanitizeDataId(productId),\n variant_id: sanitizeDataId(productVariantId),\n name: productName,\n variant_name: productVariantName,\n url: productLink,\n image_url: productImage,\n currency: productCurrency,\n price: productPrice\n };\n });\n\n let url = `${API_URL}/wishlist/bulk`;\n let headers = {\n 'Content-Type': 'application/json'\n };\n let payload = {\n products: products\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeAuthApp,\n payload,\n headers,\n isSimpleRequest: false\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const getWishlistInfo: any = async ({ token = '', query = null }: { token?: string; query?: any }) => {\n let sledgeAuthApp = token ? token : typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let queryParams =\n '?' +\n new URLSearchParams({\n ...query\n }).toString();\n\n let url = `${API_URL}/wishlist/info${queryParams}`;\n\n return await fetchApi({\n url,\n method: 'GET',\n authorization: sledgeAuthApp\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const checkWishlist: any = async ({ id, variantId = '', query = null }: { id: any; variantId?: any; query?: any }) => {\n let convertId = sanitizeDataId(id);\n let convertVariantId = variantId ? sanitizeDataId(variantId) : '';\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let queryParams =\n '?' +\n new URLSearchParams({\n variant_id: convertVariantId,\n ...query\n }).toString();\n\n let url = `${API_URL}/wishlist/check/${convertId}${queryParams}`;\n\n return await fetchApi({\n url,\n method: 'GET',\n authorization: sledgeAuthApp\n })\n .then((result) => {\n return Boolean(result.data);\n })\n .catch(() => {\n return;\n });\n};\n\nexport const clearWishlist: any = async () => {\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/wishlist/clear`;\n\n return await fetchApi({\n url,\n method: 'DELETE',\n authorization: sledgeAuthApp\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const addToCartTrigger: any = async (data: { productId?: string | number }) => {\n const { productId } = data;\n\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/wishlist/cart`;\n let payload = {\n product: JSON.stringify({\n id: sanitizeDataId(productId)\n })\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeAuthApp,\n payload\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n","import { getWishlistInfo } from '@core/api/wishlist';\nimport { DEFAULT_WISHLIST_URL } from '@core/lib/const';\n\nexport const wishlistInfo = async ({ callback, wishlistPreviewSettings }: { callback(props: { totalWishlist: any; proxyUrl: any; data: any }): void; wishlistPreviewSettings?: any }) => {\n let response: any;\n let run: boolean = false;\n let valueTotalWishlist: number;\n let valueProxyUrl: string;\n let queryParam = {\n ...(wishlistPreviewSettings\n ? {\n is_preview: true\n }\n : {})\n };\n\n response = await getWishlistInfo({\n query: queryParam\n });\n run = response?.status?.code === 200 || false;\n\n valueTotalWishlist = !response?.data?.total_data ? 0 : response.data.total_data;\n valueProxyUrl = DEFAULT_WISHLIST_URL;\n\n if (run)\n callback({\n totalWishlist: valueTotalWishlist,\n proxyUrl: valueProxyUrl,\n data: response?.data\n });\n};\n","import React from 'react';\nimport { LOCAL_STORAGE_KEY } from '@core/lib/const';\nimport { SledgeContext, ISledgeContext } from '@sledge-app/core';\nimport { wishlistInfo } from './utils';\n\nexport interface IBadgeCounterProps {\n data?: any;\n previewSettings?: any;\n}\n\nexport const BadgeCounter = (props: IBadgeCounterProps) => {\n const { data: propsData, previewSettings: previewSettingsProp } = props;\n\n const { isRenderApp, triggerRenderMultipleComponent, sledgeAnonymId, isJsVersion } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { wishlist: isRenderAppWishlist } = isRenderApp || {};\n const { value: valueRenderWishlistBadge, trigger: triggerRenderWishlistBadge } = triggerRenderMultipleComponent?.wishlist?.badge || {};\n\n const [totalWishlist, setTotalWishlist] = React.useState(propsData?.total_data || 0);\n const [isFirstLoading, setIsFirstLoading] = React.useState(!propsData);\n const [isLoading, setIsLoading] = React.useState(!propsData);\n const [isMaximizeTotalWishlist, setIsMaximizeTotalWishlist] = React.useState(false);\n const [dataSettings, setDataSettings] = React.useState<any>({});\n const [isRequiredLogin, setIsRequiredLogin] = React.useState(false);\n\n const handleGetWishlistInfo = async () => {\n if (!propsData || (propsData && !Object.keys(propsData).length)) {\n await wishlistInfo({\n callback: ({ totalWishlist: valueTotalWishlist }) => {\n setTotalWishlist(valueTotalWishlist);\n setIsMaximizeTotalWishlist(valueTotalWishlist > 99);\n setIsFirstLoading(false);\n setIsLoading(false);\n\n localStorage?.setItem(LOCAL_STORAGE_KEY.WISHLIST_BADGE_COUNTER, valueTotalWishlist);\n }\n });\n } else {\n localStorage?.setItem(LOCAL_STORAGE_KEY.WISHLIST_BADGE_COUNTER, totalWishlist);\n }\n };\n\n const handleSettings = async (LOCAL_STORAGE_WISHLIST_SETTING: any) => {\n let response: any;\n\n response = JSON.parse(LOCAL_STORAGE_WISHLIST_SETTING as string);\n\n if (!response) return;\n\n const { is_required_login } = response || {};\n\n setDataSettings(response);\n setIsRequiredLogin(sledgeAnonymId && is_required_login);\n };\n\n React.useEffect(() => {\n if (!isRenderAppWishlist) return;\n\n handleSettings(localStorage.getItem(LOCAL_STORAGE_KEY.WISHLIST_SETTING) || null);\n }, [isRenderAppWishlist]);\n\n React.useEffect(() => {\n if (!dataSettings?.launch_point || !isRenderAppWishlist) return;\n\n handleGetWishlistInfo();\n }, [dataSettings, isRenderAppWishlist]);\n\n React.useEffect(() => {\n if (!valueRenderWishlistBadge || !isRenderAppWishlist) return;\n\n if (triggerRenderWishlistBadge) triggerRenderWishlistBadge(false);\n\n handleGetWishlistInfo();\n }, [valueRenderWishlistBadge, isRenderAppWishlist]);\n\n const defaultTotalWishlist = isJsVersion ? localStorage?.getItem(LOCAL_STORAGE_KEY.WISHLIST_BADGE_COUNTER) || null : null;\n const contentTotalWishlist = isFirstLoading ? defaultTotalWishlist : isLoading || isRequiredLogin ? 0 : `${isMaximizeTotalWishlist ? '99+' : totalWishlist}` || 0;\n\n return <span data-wishlist-counter={contentTotalWishlist}>{contentTotalWishlist}</span>;\n};\n","import React from 'react';\nimport { Button, SkeletonLoading } from '@core/components';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\n\nexport interface IWidgetHeaderClearTriggerProps {\n buttonText?: string;\n shareId?: string;\n dataSettings?: any;\n isFirstLoading?: boolean;\n}\n\nexport const WidgetHeaderClearTrigger = ({ buttonText, shareId, dataSettings, isFirstLoading }: IWidgetHeaderClearTriggerProps) => {\n const { sledgeAnonymId } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { is_required_login } = dataSettings?.display?.global || {};\n const {\n text_color: display_button_clear_all_text_color,\n border_color: display_button_clear_all_border_color,\n border_radius: display_button_clear_all_border_radius,\n padding_top: display_button_clear_all_padding_top,\n padding_bottom: display_button_clear_all_padding_bottom,\n padding_left: display_button_clear_all_padding_left,\n padding_right: display_button_clear_all_padding_right,\n background_color: display_button_clear_all_background_color,\n font_size: display_button_clear_all_font_size,\n font_weight: display_button_clear_all_font_weight,\n text_transform: display_button_clear_all_text_transform\n } = dataSettings?.display?.widget?.button_clear_all || {};\n const { title_confirm_clear_all_wishlist, text_confirm_clear_all_wishlist, button_submit_confirm_clear_all_wishlist, button_cancel_confirm_clear_all_wishlist } =\n dataSettings?.languages?.popup || {};\n const { button_clear_all } = dataSettings?.languages?.widget || {};\n\n const [isRequiredLogin, setIsRequiredLogin] = React.useState(false);\n\n const display_button_clear_all_style = {\n ...(display_button_clear_all_text_color && { color: display_button_clear_all_text_color }),\n ...(display_button_clear_all_border_color && { borderColor: display_button_clear_all_border_color }),\n ...(display_button_clear_all_border_radius && { borderRadius: display_button_clear_all_border_radius }),\n ...(display_button_clear_all_padding_top && { paddingTop: display_button_clear_all_padding_top }),\n ...(display_button_clear_all_padding_bottom && { paddingBottom: display_button_clear_all_padding_bottom }),\n ...(display_button_clear_all_padding_left && { paddingLeft: display_button_clear_all_padding_left }),\n ...(display_button_clear_all_padding_right && { paddingRight: display_button_clear_all_padding_right }),\n ...(display_button_clear_all_background_color && { backgroundColor: display_button_clear_all_background_color }),\n ...(display_button_clear_all_font_size && { fontSize: display_button_clear_all_font_size }),\n ...(display_button_clear_all_font_weight && { fontWeight: display_button_clear_all_font_weight }),\n ...(display_button_clear_all_text_transform && { textTransform: display_button_clear_all_text_transform })\n };\n\n React.useEffect(() => {\n setIsRequiredLogin(sledgeAnonymId && is_required_login);\n }, [sledgeAnonymId]);\n\n const handleClick = () => {\n if (typeof window !== 'undefined' && window.sledgeConfirmationPopup)\n window.sledgeConfirmationPopup({\n title: title_confirm_clear_all_wishlist,\n message: text_confirm_clear_all_wishlist,\n textSubmit: button_submit_confirm_clear_all_wishlist,\n buttonSubmitType: 'danger',\n onSubmit: window.sledgeWishlistWidgetClearList || {}\n });\n };\n\n return (\n <>\n {!isRequiredLogin && (\n <>\n {!shareId && (\n <>\n {isFirstLoading ? (\n <SkeletonLoading.Item width=\"132px\" height=\"46px\" color=\"lighten\" rounded=\"md\" />\n ) : (\n <div className=\"sledge-wishlist__widget-header-item sledge-wishlist__widget-header-clear-all-trigger\">\n <Button type=\"button\" colorType=\"danger\" onClick={handleClick} style={display_button_clear_all_style}>\n {buttonText ? buttonText : button_clear_all || 'Clear Wishlist'}\n </Button>\n </div>\n )}\n </>\n )}\n </>\n )}\n </>\n );\n};\n","import React from 'react';\nimport { bulkAddWishlist } from '@core/api/wishlist';\nimport { Button, HeartIcon, LoadingDots, SkeletonLoading } from '@core/components';\nimport { SledgeContext, ISledgeContext } from '@sledge-app/core';\nimport { BadgeCounterInitSelector, BadgeInitSelector } from '@react-wishlist/components';\nimport { watchElement } from '@core/lib/helper';\nimport { OBJECT_DATA_STRING_KEY } from '@core/lib/const';\n\nexport interface IWidgetHeaderShareTriggerProps {\n wishlistData?: any;\n buttonText?: string;\n showShareTrigger?: boolean;\n shareLink?: string;\n shareId?: string;\n dataSettings?: any;\n isFirstLoading?: boolean;\n triggerBadge?: 'default' | 'rerender';\n}\n\nexport const WidgetHeaderShareTrigger = ({ wishlistData, buttonText, showShareTrigger, shareLink, shareId, dataSettings, isFirstLoading, triggerBadge }: IWidgetHeaderShareTriggerProps) => {\n const { triggerRenderMultipleComponent, sledgeAnonymId, isJsVersion } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { trigger: triggerRenderWishlistBadge } = triggerRenderMultipleComponent?.wishlist?.badge || {};\n\n const { is_required_login } = dataSettings?.display?.global || {};\n const {\n text_color: display_button_share_text_color,\n border_color: display_button_share_border_color,\n border_radius: display_button_share_border_radius,\n padding_top: display_button_share_padding_top,\n padding_bottom: display_button_share_padding_bottom,\n padding_left: display_button_share_padding_left,\n padding_right: display_button_share_padding_right,\n background_color: display_button_share_background_color,\n font_size: display_button_share_font_size,\n font_weight: display_button_share_font_weight,\n text_transform: display_button_share_text_transform\n } = dataSettings?.display?.widget?.button_share || {};\n const { title_share_wishlist, title_confirm_add_to_your_wishlist, text_confirm_add_to_your_wishlist, button_confirm_add_to_your_wishlist } = dataSettings?.languages?.popup || {};\n const { button_share, button_add_to_your_wishlist } = dataSettings?.languages?.widget || {};\n const { show: show_notification, location: location_notification } = dataSettings?.display?.notification || {};\n const { title_added_all_to_wishlist, text_added_all_to_wishlist, title_fail_add_to_wishlist, text_fail_add_to_wishlist } = dataSettings?.languages?.notification || {};\n\n const [isRequiredLogin, setIsRequiredLogin] = React.useState(false);\n\n const display_button_share_style = {\n ...(display_button_share_text_color && { color: display_button_share_text_color }),\n ...(display_button_share_border_color && { borderColor: display_button_share_border_color }),\n ...(display_button_share_border_radius && { borderRadius: display_button_share_border_radius }),\n ...(display_button_share_padding_top && { paddingTop: display_button_share_padding_top }),\n ...(display_button_share_padding_bottom && { paddingBottom: display_button_share_padding_bottom }),\n ...(display_button_share_padding_left && { paddingLeft: display_button_share_padding_left }),\n ...(display_button_share_padding_right && { paddingRight: display_button_share_padding_right }),\n ...(display_button_share_background_color && { backgroundColor: display_button_share_background_color }),\n ...(display_button_share_font_size && { fontSize: display_button_share_font_size }),\n ...(display_button_share_font_weight && { fontWeight: display_button_share_font_weight }),\n ...(display_button_share_text_transform && { textTransform: display_button_share_text_transform })\n };\n\n const [isLoadingBulkAdd, setIsLoadingBulkAdd] = React.useState(false);\n\n let clipboardIcon = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"vuesax/linear/copy\">\n <g id=\"copy\">\n <path id=\"Vector\" d=\"M16 12.9V17.1C16 20.6 14.6 22 11.1 22H6.9C3.4 22 2 20.6 2 17.1V12.9C2 9.4 3.4 8 6.9 8H11.1C14.6 8 16 9.4 16 12.9Z\" stroke=\"#767676\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path id=\"Vector_2\" d=\"M22 6.9V11.1C22 14.6 20.6 16 17.1 16H16V12.9C16 9.4 14.6 8 11.1 8H8V6.9C8 3.4 9.4 2 12.9 2H17.1C20.6 2 22 3.4 22 6.9Z\" stroke=\"#767676\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </g>\n </g>\n </svg>\n `;\n let checkIcon = `<svg width=\"20\" height=\"20\" viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.4669 3.72684C11.7558 3.91574 11.8369 4.30308 11.648 4.59198L7.39799 11.092C7.29783 11.2452 7.13556 11.3467 6.95402 11.3699C6.77247 11.3931 6.58989 11.3355 6.45446 11.2124L3.70446 8.71241C3.44905 8.48022 3.43023 8.08494 3.66242 7.82953C3.89461 7.57412 4.28989 7.55529 4.5453 7.78749L6.75292 9.79441L10.6018 3.90792C10.7907 3.61902 11.178 3.53795 11.4669 3.72684Z\" fill=\"currentColor\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"></path></svg>`;\n\n const handleBulkAddWishlist = async () => {\n setIsLoadingBulkAdd(true);\n let data = wishlistData.map((item: any) => {\n const { id, variant_id, name, variant_name, url, image_url, currency, price } = item.product;\n\n return {\n productId: id,\n productVariantId: variant_id,\n productName: name,\n productVariantName: variant_name,\n productLink: url,\n productImage: image_url,\n productCurrency: currency,\n productPrice: price\n };\n });\n\n let resBulkAddWishlist = await bulkAddWishlist(data);\n if (resBulkAddWishlist?.status?.code === 200) {\n if (typeof window !== 'undefined') {\n // Trigger update for react module\n if (triggerRenderWishlistBadge) triggerRenderWishlistBadge(true);\n\n // Trigger update for javascript\n if (isJsVersion) {\n if (triggerBadge === 'rerender') {\n BadgeInitSelector({ reload: true });\n } else {\n BadgeCounterInitSelector({ reload: true });\n }\n }\n\n if (window.sledgeInfoPopup)\n window.sledgeInfoPopup({\n title: title_added_all_to_wishlist,\n message: text_added_all_to_wishlist\n });\n }\n\n setIsLoadingBulkAdd(false);\n } else {\n if (typeof window !== 'undefined' && window.sledgeToastNotification && show_notification)\n window.sledgeToastNotification({\n title: title_fail_add_to_wishlist || 'Failed',\n message: text_fail_add_to_wishlist || 'Failed add to wishlist, please try again',\n location: location_notification,\n type: 'failed',\n icon: <HeartIcon width={40} height={40} color=\"black\" type=\"outline\" />,\n className: 'sledge-toast__wishlist-widget'\n });\n }\n };\n\n const handleCopyShareLink = () => {\n let running = true;\n\n let boxCopyElement = document.querySelector('.sledge-wishlist__widget-box-copy');\n\n if (boxCopyElement && running) {\n running = false;\n let copyTriggerElement = document.querySelector('.sledge-wishlist__widget-box-copy-icon');\n\n copyTriggerElement?.addEventListener('click', () => {\n let shareLink = document.querySelector('.sledge-wishlist__widget-box-copy-content')?.textContent;\n\n if (shareLink) {\n navigator.clipboard.writeText(shareLink);\n\n if (copyTriggerElement) {\n copyTriggerElement.classList.add('active');\n copyTriggerElement.innerHTML = checkIcon;\n setTimeout(() => {\n if (copyTriggerElement) {\n copyTriggerElement.classList.remove('active');\n copyTriggerElement.innerHTML = clipboardIcon;\n }\n }, 2500);\n }\n }\n });\n }\n };\n\n const handleClick = async () => {\n let getMessage = text_confirm_add_to_your_wishlist;\n if (getMessage) getMessage = getMessage.replaceAll(OBJECT_DATA_STRING_KEY.TOTAL_WISHLIST, wishlistData.length);\n\n if (shareId && wishlistData.length) {\n window.sledgeConfirmationPopup({\n title: title_confirm_add_to_your_wishlist || 'Are you sure want to add this to your wishlist item?',\n message: getMessage || `This action cannot be undone. This will adding <strong>${wishlistData.length}</strong> item to your wishlist page.`,\n textSubmit: button_confirm_add_to_your_wishlist || 'Add to your wishlist',\n buttonSubmitType: 'info',\n onSubmit: handleBulkAddWishlist || {}\n });\n } else {\n if (typeof window !== 'undefined' && window.sledgeInfoPopup) {\n window.sledgeInfoPopup({\n title: title_share_wishlist,\n message: shareLink\n ? `<div class=\"sledge-wishlist__widget-box-copy\">\n <div class=\"sledge-wishlist__widget-box-copy-icon\" title=\"Copy to clipboard\">\n ${clipboardIcon}\n </div>\n <div class=\"sledge-wishlist__widget-box-copy-content\">${shareLink}</div>\n </div>`\n : ''\n });\n }\n }\n };\n\n React.useEffect(() => {\n setIsRequiredLogin(sledgeAnonymId && is_required_login);\n }, [sledgeAnonymId]);\n\n watchElement({\n selector: '.sledge-wishlist__widget-box-copy',\n init: handleCopyShareLink\n });\n\n return (\n <>\n {!isRequiredLogin && (\n <>\n {showShareTrigger && (\n <>\n {isFirstLoading ? (\n <SkeletonLoading.Item width=\"136px\" height=\"46px\" color=\"lighten\" rounded=\"md\" />\n ) : (\n <div className=\"sledge-wishlist__widget-header-item sledge-wishlist__widget-header-share-trigger\">\n <Button\n type=\"button\"\n style={display_button_share_style}\n {...((shareId && !wishlistData.length) || isLoadingBulkAdd\n ? {\n disabled: true\n }\n : {\n onClick: handleClick\n })}\n >\n {shareId ? (\n <>\n <span className=\"sledge-wishlist__badge-counter sledge-wishlist__badge-counter-top-right\">{wishlistData.length}</span>\n {isLoadingBulkAdd ? <LoadingDots /> : null}\n {button_add_to_your_wishlist || 'Add to your wishlist'}\n </>\n ) : buttonText ? (\n buttonText\n ) : (\n button_share || 'Share Wishlist'\n )}\n </Button>\n </div>\n )}\n </>\n )}\n </>\n )}\n </>\n );\n};\n","import React from 'react';\nimport { SearchIcon, SearchInputField } from '@core/components';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\n\nexport interface IWidgetHeaderSearchFormProps {\n setIsLoading?(value: React.SetStateAction<boolean>): void;\n setKeyword?(value: React.SetStateAction<string>): void;\n keyword?: string;\n placeholder?: string;\n dataSettings?: any;\n}\n\nexport const WidgetHeaderSearchForm = ({ setIsLoading, setKeyword, keyword, placeholder, dataSettings }: IWidgetHeaderSearchFormProps) => {\n const { sledgeAnonymId } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { is_required_login } = dataSettings?.display?.global || {};\n const { search_form_placeholder } = dataSettings?.languages?.widget || {};\n\n const [isRequiredLogin, setIsRequiredLogin] = React.useState(false);\n\n const searchFieldRef = React.useRef<HTMLInputElement>(null);\n\n const handleResetField = () => {\n setIsLoading && setIsLoading(true);\n setKeyword && setKeyword('');\n\n searchFieldRef?.current?.focus();\n };\n\n const handleChangeField = (value: string) => {\n setKeyword && setKeyword(value);\n };\n\n React.useEffect(() => {\n setIsRequiredLogin(sledgeAnonymId && is_required_login);\n }, [sledgeAnonymId]);\n\n return (\n <>\n {!isRequiredLogin && (\n <SearchInputField\n type=\"text\"\n icon={<SearchIcon width={18} height={18} color=\"#868686\" />}\n placeholder={placeholder ? placeholder : search_form_placeholder || 'Search product...'}\n value={keyword}\n fieldRef={searchFieldRef}\n onChange={({ value }: any) => handleChangeField(value)}\n onResetField={handleResetField}\n className=\"sledge-wishlist__widget-header-item sledge-wishlist__widget-search-form\"\n withClearField\n />\n )}\n </>\n );\n};\n","export interface IWidgetHeaderTitleProps {\n text?: string;\n dataSettings?: any;\n}\n\nexport const WidgetHeaderTitle = ({ text, dataSettings }: IWidgetHeaderTitleProps) => {\n const {\n color: display_header_title_color,\n font_size: display_header_title_font_size,\n font_weight: display_header_title_font_weight,\n text_transform: display_header_title_text_transform\n } = dataSettings?.display?.widget?.header_title || {};\n const { header_title: language_header_title } = dataSettings?.languages?.widget || {};\n\n const display_header_title_style = {\n ...(display_header_title_color && { color: display_header_title_color }),\n ...(display_header_title_font_size && { fontSize: display_header_title_font_size }),\n ...(display_header_title_font_weight && { fontWeight: display_header_title_font_weight }),\n ...(display_header_title_text_transform && { textTransform: display_header_title_text_transform })\n };\n\n return (\n <div className=\"sledge-wishlist__widget-header-item\">\n <h1 style={display_header_title_style}>{text ? text : language_header_title || 'My Wishlist'}</h1>\n </div>\n );\n};\n","import React from 'react';\nimport { SelectField } from '@core/components';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\n\nexport interface IWidgetHeaderLimitProps {\n limitOptions?: string[] | number[];\n selectedLimit?: string;\n setSelectedLimit?(value: React.SetStateAction<string | number>): void;\n setIsRefreshWidgetList?(value: React.SetStateAction<boolean>): void;\n dataSettings?: any;\n}\n\nexport const WidgetHeaderLimit = ({ limitOptions, selectedLimit, setSelectedLimit, setIsRefreshWidgetList, dataSettings }: IWidgetHeaderLimitProps) => {\n const { sledgeAnonymId } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { is_required_login } = dataSettings?.display?.global || {};\n\n const [isRequiredLogin, setIsRequiredLogin] = React.useState(false);\n\n const handleChangeLimit = (value: string | number) => {\n setSelectedLimit && setSelectedLimit(value);\n setIsRefreshWidgetList && setIsRefreshWidgetList(true);\n };\n\n React.useEffect(() => {\n setIsRequiredLogin(sledgeAnonymId && is_required_login);\n }, [sledgeAnonymId]);\n\n return (\n <>\n {!isRequiredLogin ? (\n <>\n {limitOptions && Boolean(limitOptions?.length) && (\n <div className=\"sledge-wishlist__widget-header-item sledge-wishlist__widget-header-limit-option\">\n <SelectField\n align=\"end\"\n options={limitOptions.map((item: any) => {\n return {\n label: item,\n value: item\n };\n })}\n value={selectedLimit || limitOptions[0]}\n onChange={({ value }: any) => handleChangeLimit(value)}\n />\n </div>\n )}\n </>\n ) : null}\n </>\n );\n};\n","import React from 'react';\nimport { SelectField } from '@core/components';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\n\nexport interface IWidgetHeaderSortProps {\n wishlistSort?: any;\n selectedSort?: string;\n setSelectedSort?(value: React.SetStateAction<string>): void;\n setIsRefreshWidgetList?(value: React.SetStateAction<boolean>): void;\n dataSettings?: any;\n generalDataSettings?: any;\n}\n\nexport const WidgetHeaderSort = ({ wishlistSort, selectedSort, setSelectedSort, setIsRefreshWidgetList, dataSettings, generalDataSettings }: IWidgetHeaderSortProps) => {\n const { sledgeAnonymId } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { is_required_login } = dataSettings?.display?.global || {};\n\n const { sort_placeholder } = generalDataSettings?.languages || {};\n\n const [isRequiredLogin, setIsRequiredLogin] = React.useState(false);\n\n const handleChangeSort = (value: string) => {\n setSelectedSort && setSelectedSort(value);\n setIsRefreshWidgetList && setIsRefreshWidgetList(true);\n };\n\n React.useEffect(() => {\n setIsRequiredLogin(sledgeAnonymId && is_required_login);\n }, [sledgeAnonymId]);\n\n return (\n <>\n {!isRequiredLogin ? (\n <>\n {wishlistSort && Boolean(wishlistSort?.length) && (\n <div className=\"sledge-wishlist__widget-header-item sledge-wishlist__widget-header-sort-option\">\n <SelectField\n align=\"end\"\n options={wishlistSort.map((item: any) => {\n const { name, value } = item;\n return {\n label: name,\n value: value\n };\n })}\n value={selectedSort}\n onChange={({ value }: any) => handleChangeSort(value)}\n placeholder={sort_placeholder || '- Select -'}\n />\n </div>\n )}\n </>\n ) : null}\n </>\n );\n};\n","import React from 'react';\nimport { IWidgetHeaderClearTriggerProps, WidgetHeaderClearTrigger } from './WidgetHeaderClearTrigger';\nimport { IWidgetHeaderShareTriggerProps, WidgetHeaderShareTrigger } from './WidgetHeaderShareTrigger';\nimport { IWidgetHeaderSearchFormProps, WidgetHeaderSearchForm } from './WidgetHeaderSearchForm';\nimport { IWidgetHeaderTitleProps, WidgetHeaderTitle } from './WidgetHeaderTitle';\nimport { IWidgetHeaderLimitProps, WidgetHeaderLimit } from './WidgetHeaderLimit';\nimport { IWidgetHeaderSortProps, WidgetHeaderSort } from './WidgetHeaderSort';\nimport { SkeletonLoading } from '@core/components';\n\nexport interface IWidgetHeaderProps {\n isLoading?: boolean;\n isFirstLoading?: boolean;\n wishlistData?: any;\n wishlistSort?: any;\n selectedSort?: string;\n selectedLimit?: string;\n keyword?: string;\n setSelectedSort?(value: React.SetStateAction<string>): void;\n setSelectedLimit?(value: React.SetStateAction<string | number>): void;\n setKeyword?(value: React.SetStateAction<string>): void;\n text?: string;\n limitOptions?: string[] | number[];\n children?: JSX.Element | JSX.Element[];\n}\n\ntype WidgetHeaderComponent = React.FunctionComponent<IWidgetHeaderProps> & {\n Title: React.FC<IWidgetHeaderTitleProps>;\n SearchForm: React.FC<IWidgetHeaderSearchFormProps>;\n ClearTrigger: React.FC<IWidgetHeaderClearTriggerProps>;\n ShareTrigger: React.FC<IWidgetHeaderShareTriggerProps>;\n Sort: React.FC<IWidgetHeaderSortProps>;\n Limit: React.FC<IWidgetHeaderLimitProps>;\n};\n\nexport const WidgetHeader: WidgetHeaderComponent = ({ isFirstLoading, ...props }: IWidgetHeaderProps) => {\n return (\n <div className=\"sledge-wishlist__widget-header\">\n {isFirstLoading ? (\n <div\n style={{\n display: 'flex',\n gap: '8px',\n width: '100%',\n justifyContent: 'space-between'\n }}\n >\n <SkeletonLoading.Item width=\"190px\" height=\"46px\" color=\"lighten\" rounded=\"md\" />\n\n <div\n style={{\n display: 'flex',\n gap: '8px'\n }}\n >\n <SkeletonLoading.Item width=\"440px\" height=\"46px\" color=\"lighten\" rounded=\"md\" />\n <SkeletonLoading.Item width=\"132px\" height=\"46px\" color=\"lighten\" rounded=\"md\" />\n <SkeletonLoading.Item width=\"136px\" height=\"46px\" color=\"lighten\" rounded=\"md\" />\n </div>\n\n <div\n style={{\n display: 'flex',\n gap: '26px'\n }}\n >\n <SkeletonLoading.Item width=\"190px\" height=\"46px\" color=\"lighten\" rounded=\"md\" />\n <SkeletonLoading.Item width=\"190px\" height=\"46px\" color=\"lighten\" rounded=\"md\" />\n </div>\n </div>\n ) : (\n React.Children.count(props.children) &&\n React.Children.map(props.children, (child: any) =>\n React.cloneElement(child, {\n ...props\n })\n )\n )}\n </div>\n );\n};\n\nWidgetHeader.Title = WidgetHeaderTitle;\nWidgetHeader.SearchForm = WidgetHeaderSearchForm;\nWidgetHeader.ShareTrigger = WidgetHeaderShareTrigger;\nWidgetHeader.ClearTrigger = WidgetHeaderClearTrigger;\nWidgetHeader.Sort = WidgetHeaderSort;\nWidgetHeader.Limit = WidgetHeaderLimit;\n","import React from 'react';\nimport { ArrowRightIcon, Button, HeartIcon, ProductGrid, SkeletonLoading } from '@core/components';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\nimport { SHOPIFY_GID_PRODUCT_ID } from '@core/lib/const';\n\nconst defaultGridType = 'large';\n\nexport interface IWidgetListProps {\n isLoading?: boolean;\n wishlistData?: any;\n currentPage?: number;\n setCurrentPage?(value: React.SetStateAction<number>): void;\n totalPage?: number;\n keyword?: string;\n onSearch?: boolean;\n shareId?: string;\n dataSettings?: any;\n isRequiredLogin?: boolean;\n gridType?: 'small' | 'medium' | 'large';\n productCardsComponent?: any;\n onAfterAddToCart?(state: 'success' | 'failed'): void;\n onAfterAddWishlist?(state: 'success' | 'failed'): void;\n onAfterRemoveWishlist?(state: 'success' | 'failed'): void;\n onAfterRenderProduct?(state: 'success' | 'failed'): void;\n dataReviews?: any;\n generalDataSettings?: any;\n previewSettings?: any;\n isFlyout?: boolean;\n}\n\nexport const WidgetList = (props: IWidgetListProps) => {\n const { sledgeAnonymId } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { isLoading, wishlistData, dataSettings, gridType = defaultGridType, isFlyout } = props || {};\n\n const { is_required_login } = dataSettings?.display?.global || {};\n\n const [isRequiredLogin, setIsRequiredLogin] = React.useState(false);\n\n React.useEffect(() => {\n setIsRequiredLogin(sledgeAnonymId && is_required_login);\n }, [sledgeAnonymId]);\n\n return (\n <>\n {isLoading ? (\n <SkeletonLoading.ProductGrid count={8} type={gridType} isFlyout={isFlyout} />\n ) : (\n <div className=\"sledge-wishlist__widget-product-wrapper\">\n {!wishlistData?.length || isRequiredLogin ? <WidgetListEmpty {...props} isRequiredLogin={isRequiredLogin} /> : <ProductWrapper {...props} />}\n </div>\n )}\n </>\n );\n};\n\nconst WidgetListEmpty = (props: IWidgetListProps) => {\n const { onSearch, keyword, dataSettings, isRequiredLogin } = props || {};\n const { title_no_result, text_no_result, title_search_no_result, text_search_no_result, login_button, continue_shopping, alert, alert_login } = dataSettings?.languages?.widget || {};\n\n const [title, setTitle] = React.useState('');\n const [description, setDescription] = React.useState('');\n const [showButton, setShowButton] = React.useState(false);\n const [textButton, setTextButton] = React.useState('');\n const [urlButton, setUrlButton] = React.useState('');\n\n React.useEffect(() => {\n if (isRequiredLogin) {\n setTitle(alert_login || 'Login required!');\n setDescription(alert || 'Please login to save your wishlist across devices.');\n setShowButton(true);\n setTextButton(login_button || 'Login');\n setUrlButton('/account/login');\n } else {\n if (!onSearch) {\n setTitle(keyword ? title_search_no_result || 'No products found' : title_no_result);\n setDescription(keyword ? text_search_no_result || 'Your search did not match any products. <br/> Please try again' : text_no_result);\n setShowButton(!keyword);\n setTextButton(continue_shopping || 'Continue Shopping');\n setUrlButton('/');\n }\n }\n }, [onSearch, dataSettings]);\n\n return (\n <div className=\"sledge-wishlist__widget-product-empty\">\n <div className=\"sledge-wishlist__widget-product-empty-icon\">\n <HeartIcon width={32} height={32} type=\"outline\" color=\"#000000\" />\n </div>\n <div className=\"sledge-wishlist__widget-product-empty-title\" dangerouslySetInnerHTML={{ __html: title }}></div>\n <div className=\"sledge-wishlist__widget-product-empty-description\" dangerouslySetInnerHTML={{ __html: description }}></div>\n {showButton && (\n <div className=\"sledge-wishlist__widget-button-wrapper\">\n <a href={urlButton} className=\"sledge__button sledge-wishlist__widget-product-empty-button-shopping\" data-button-color-type=\"light\">\n <span>{textButton}</span> <ArrowRightIcon width={16.195} height={16.195} color=\"black\" />\n </a>\n </div>\n )}\n </div>\n );\n};\n\nconst ProductWrapper = (props: IWidgetListProps) => {\n const { isJsVersion } = React.useContext<ISledgeContext>(SledgeContext);\n\n const {\n wishlistData,\n currentPage,\n setCurrentPage,\n totalPage,\n shareId,\n dataSettings,\n gridType = defaultGridType,\n productCardsComponent,\n onAfterAddToCart,\n onAfterAddWishlist,\n onAfterRemoveWishlist,\n onAfterRenderProduct,\n dataReviews,\n generalDataSettings,\n previewSettings,\n isFlyout\n } = props || {};\n const { show_add_to_cart, redirect_add_to_cart } = dataSettings?.display?.widget || {};\n const {\n text_color: display_button_add_to_cart_text_color,\n border_color: display_button_add_to_cart_border_color,\n border_radius: display_button_add_to_cart_border_radius,\n padding_top: display_button_add_to_cart_padding_top,\n padding_bottom: display_button_add_to_cart_padding_bottom,\n padding_left: display_button_add_to_cart_padding_left,\n padding_right: display_button_add_to_cart_padding_right,\n background_color: display_button_add_to_cart_background_color,\n font_size: display_button_add_to_cart_font_size,\n font_weight: display_button_add_to_cart_font_weight,\n text_transform: display_button_add_to_cart_text_transform\n } = dataSettings?.display?.widget?.button_add_to_cart || {};\n const {\n color: display_price_color,\n font_size: display_price_font_size,\n font_weight: display_price_font_weight,\n text_transform: display_price_text_transform\n } = dataSettings?.display?.widget?.price || {};\n const {\n color: display_product_name_color,\n font_size: display_product_name_font_size,\n font_weight: display_product_name_font_weight,\n text_transform: display_product_name_text_transform\n } = dataSettings?.display?.widget?.product_name || {};\n const { button_add_to_cart: language_button_add_to_cart } = dataSettings?.languages?.widget || {};\n const { button_load_more, button_loading } = generalDataSettings?.languages || {};\n\n const display_button_add_to_cart_style = {\n ...(display_button_add_to_cart_text_color && { color: display_button_add_to_cart_text_color }),\n ...(display_button_add_to_cart_border_color && { borderColor: display_button_add_to_cart_border_color }),\n ...(display_button_add_to_cart_border_radius && { borderRadius: display_button_add_to_cart_border_radius }),\n ...(display_button_add_to_cart_padding_top && { paddingTop: display_button_add_to_cart_padding_top }),\n ...(display_button_add_to_cart_padding_bottom && { paddingBottom: display_button_add_to_cart_padding_bottom }),\n ...(display_button_add_to_cart_padding_left && { paddingLeft: display_button_add_to_cart_padding_left }),\n ...(display_button_add_to_cart_padding_right && { paddingRight: display_button_add_to_cart_padding_right }),\n ...(display_button_add_to_cart_background_color && { backgroundColor: display_button_add_to_cart_background_color }),\n ...(display_button_add_to_cart_font_size && { fontSize: display_button_add_to_cart_font_size }),\n ...(display_button_add_to_cart_font_weight && { fontWeight: display_button_add_to_cart_font_weight }),\n ...(display_button_add_to_cart_text_transform && { textTransform: display_button_add_to_cart_text_transform })\n };\n\n const display_price_style = {\n ...(display_price_color && { color: display_price_color }),\n ...(display_price_font_size && { fontSize: display_price_font_size }),\n ...(display_price_font_weight && { fontWeight: display_price_font_weight }),\n ...(display_price_text_transform && { textTransform: display_price_text_transform })\n };\n\n const display_product_name_style = {\n ...(display_product_name_color && { color: display_product_name_color }),\n ...(display_product_name_font_size && { fontSize: display_product_name_font_size }),\n ...(display_product_name_font_weight && { fontWeight: display_product_name_font_weight }),\n ...(display_product_name_text_transform && { textTransform: display_product_name_text_transform })\n };\n\n let getCurrentPage = currentPage || 0;\n let getTotalPage = totalPage || 0;\n\n const [isLoadingButtonLoadMore, setIsLoadingButtonLoadMore] = React.useState(false);\n const [isVisibleLoadMore, setIsVisibleLoadMore] = React.useState(false);\n\n const handleLoadMore = () => {\n setCurrentPage && currentPage && setCurrentPage(currentPage + 1);\n setIsLoadingButtonLoadMore(true);\n };\n\n React.useEffect(() => {\n if (getTotalPage === getCurrentPage && !isLoadingButtonLoadMore) {\n setIsVisibleLoadMore(false);\n } else {\n setIsVisibleLoadMore(getTotalPage >= getCurrentPage);\n }\n }, [isLoadingButtonLoadMore]);\n\n React.useEffect(() => {\n setIsLoadingButtonLoadMore(false);\n }, [wishlistData]);\n\n let dataWishlists: any = {};\n for (const v of wishlistData) dataWishlists[v.product.id] = true;\n\n return (\n <>\n {wishlistData?.length ? (\n <ProductGrid\n sourceApp=\"wishlist\"\n type={gridType}\n data={wishlistData.map((item: any) => {\n const { id, variant_id, name, variant_name, url, image_url, currency, price, vendor, sku, variants, ...other_product } = item?.product || {};\n const productUrl = new URL(url);\n const arrProductUrlPathname = productUrl.pathname.split('/');\n const handle = arrProductUrlPathname[arrProductUrlPathname.length - 1];\n\n return {\n product: {\n id,\n admin_graphql_api_id: `${SHOPIFY_GID_PRODUCT_ID}${id}`,\n handle,\n title: name,\n image: { src: image_url },\n url,\n vendor,\n currency,\n ...other_product\n },\n variants\n };\n })}\n setting={{\n show_vendor: true,\n show_sku: true,\n show_price: true,\n show_add_to_cart: show_add_to_cart,\n redirect_add_to_cart: redirect_add_to_cart,\n language_button_add_to_cart: language_button_add_to_cart,\n display_product_name_style: display_product_name_style,\n display_price_style: display_price_style,\n display_button_add_to_cart_style: display_button_add_to_cart_style\n }}\n showOptionOutOfStock={false}\n triggerPropAdditional={{\n forceActive: true,\n ...(shareId && {\n hidden: true\n })\n }}\n isComponentJsVersion={isJsVersion}\n cards={productCardsComponent}\n onAfterAddToCart={onAfterAddToCart}\n onAfterAddWishlist={onAfterAddWishlist}\n onAfterRemoveWishlist={onAfterRemoveWishlist}\n onAfterRenderProduct={onAfterRenderProduct}\n dataReviews={dataReviews}\n dataWishlists={dataWishlists}\n previewSettings={previewSettings}\n isFlyout={isFlyout}\n />\n ) : (\n <></>\n )}\n {isVisibleLoadMore && (\n <div className=\"sledge-wishlist__widget-button-load-more\">\n <Button\n type=\"button\"\n role=\"button\"\n colorType=\"light\"\n disabled={isLoadingButtonLoadMore}\n onClick={handleLoadMore}\n style={{\n ...(isLoadingButtonLoadMore && {\n cursor: 'wait'\n })\n }}\n >\n {isLoadingButtonLoadMore ? button_loading || 'Loading...' : button_load_more || 'Load More'}\n </Button>\n </div>\n )}\n </>\n );\n};\n","import React from 'react';\n\nimport { DEFAULT_LIMIT_VALUE, DEFAULT_MAX_WIDTH_COMPONENT, DEFAULT_QUERY_PARAM } from '@core/lib/const';\nimport { clearWishlist, getWishlist, getWishlistInfo } from '@core/api/wishlist';\nimport { useEffectOnChange, usePreviewSettings, usePrevious } from '@core/hooks';\nimport { LOCAL_STORAGE_KEY } from '@core/lib/const';\nimport { SkeletonLoading } from '@core/components';\nimport { SledgeContext, ISledgeContext } from '@sledge-app/core';\nimport { isFunction, selectedLocaleJs } from '@core/lib/helper';\nimport { BadgeCounterInitSelector, BadgeInitSelector } from '@react-wishlist/components';\n\ndeclare global {\n interface Window {\n sledgeWishlistWidgetListUpdate(): void;\n sledgeWishlistFlyoutWidgetListUpdate(): void;\n sledgeWishlistWidgetClearList(): void;\n }\n}\n\nexport interface IWidgetRootProps {\n children: JSX.Element | JSX.Element[];\n width?: string;\n query?: {\n shareId: string;\n };\n params?:\n | {\n shareId?: string | '';\n }\n | undefined;\n onAfterAddToCart?(state: 'success' | 'failed'): void;\n onAfterAddWishlist?(state: 'success' | 'failed'): void;\n onAfterRemoveWishlist?(state: 'success' | 'failed'): void;\n onAfterRenderProduct?(state: 'success' | 'failed'): void;\n data?: any;\n dataInfo?: any;\n dataReviews?: any;\n limitOptions?: string[] | number[];\n triggerBadge?: 'default' | 'rerender';\n previewSettings?: any;\n isFlyout?: boolean;\n}\n\nexport const WidgetRoot = (props: IWidgetRootProps) => {\n const {\n children,\n width = DEFAULT_MAX_WIDTH_COMPONENT,\n query,\n params,\n onAfterAddToCart,\n onAfterAddWishlist,\n onAfterRemoveWishlist,\n onAfterRenderProduct,\n data: propsData,\n dataInfo,\n dataReviews,\n limitOptions = DEFAULT_LIMIT_VALUE,\n triggerBadge = 'default',\n previewSettings: previewSettingsProp,\n isFlyout\n } = props;\n\n const queryShareId = query?.shareId ? query.shareId : DEFAULT_QUERY_PARAM.SHARE_ID;\n\n const { isRenderApp, triggerRenderMultipleComponent, sledgeAnonymId, isJsVersion, locale } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { wishlist: isRenderAppWishlist } = isRenderApp || {};\n const { trigger: triggerRenderWishlistBadge } = triggerRenderMultipleComponent?.wishlist?.badge || {};\n\n const { generalPreviewSettings, wishlistPreviewSettings, previewSettings } = usePreviewSettings({\n defaultSettings: previewSettingsProp,\n nestedProperty: 'sledge.wishlist.widget.preview'\n });\n\n const [isFirstLoading, setIsFirstLoading] = React.useState(!propsData);\n const [isLoading, setIsLoading] = React.useState(!propsData);\n const [wishlistData, setWishlistData] = React.useState(propsData?.data || []);\n const [wishlistSort, setWishlistSort] = React.useState(propsData?.sorts || []);\n const [isRefreshWidgetList, setIsRefreshWidgetList] = React.useState(false);\n const [selectedSort, setSelectedSort] = React.useState('');\n const [selectedLimit, setSelectedLimit] = React.useState(limitOptions[0]);\n const [keyword, setKeyword] = React.useState('');\n const [currentPage, setCurrentPage] = React.useState(1);\n const [totalPage, setTotalPage] = React.useState(propsData?.page?.total_page || 0);\n const [onSearch, setOnSearch] = React.useState(false);\n const [showShareTrigger, setShowShareTrigger] = React.useState(!!propsData);\n const [shareLink, setShareLink] = React.useState('');\n const [shareId, setShareId] = React.useState<any>(null);\n const [proxyUrl, setProxyUrl] = React.useState('');\n const [dataSettings, setDataSettings] = React.useState<any>({});\n const [generalDataSettings, setGeneralDataSettings] = React.useState<any>({});\n const [isRequiredLogin, setIsRequiredLogin] = React.useState<boolean | '' | null | undefined>(!!propsData);\n\n const previousState: any = usePrevious({ keyword, currentPage });\n\n const { alert, alert_login } = dataSettings?.languages?.widget || {};\n\n const handleClearWishlist = async () => {\n setIsLoading(true);\n\n let response: any;\n let run: boolean = false;\n\n response = await clearWishlist();\n\n run = response?.status?.code === 200;\n\n if (run) {\n await handleSetWishlistData();\n\n // Trigger update for react module\n if (triggerRenderWishlistBadge) triggerRenderWishlistBadge(true);\n\n // Trigger update for javascript\n if (isJsVersion) {\n if (triggerBadge === 'rerender') {\n BadgeInitSelector({ reload: true, previewSettings });\n } else {\n BadgeCounterInitSelector({ reload: true, previewSettings });\n }\n }\n } else {\n if (typeof window !== 'undefined' && window.sledgeToastNotification)\n window.sledgeToastNotification({\n title: 'Failed',\n message: 'failed clear all wishlist',\n type: 'failed',\n className: 'sledge-toast__wishlist-widget'\n });\n }\n };\n\n const handleSetWishlistData = async (isLoadMore = false, init = false) => {\n const searchParams = new URLSearchParams(document.location.search);\n const getShareId = params?.shareId ? params.shareId : searchParams?.get(queryShareId) || '';\n\n setIsLoading(isRefreshWidgetList ? true : !isLoadMore);\n\n // Reset data if not Load More\n if (!isLoadMore) {\n setCurrentPage(1);\n setWishlistData([]);\n }\n\n let response: any;\n let run: boolean = false;\n let valueWishlistData: any;\n let valueWishlistSort: any;\n let valueTotalPage: number = 0;\n let queryParam = {\n page: isLoadMore ? currentPage : 1,\n limit: selectedLimit,\n sort: selectedSort,\n keyword: keyword,\n shareId: getShareId,\n locale: isJsVersion ? selectedLocaleJs() : locale,\n ...(wishlistPreviewSettings\n ? {\n is_preview: true\n }\n : {})\n };\n\n if (propsData && init) {\n response = propsData;\n } else response = await getWishlist(queryParam);\n\n run = response?.status?.code === 200 || false;\n valueWishlistData = !response.data?.length ? [] : (prevState: any) => (wishlistData?.length && isLoadMore ? [...prevState, ...response.data] : response.data);\n valueWishlistSort = !response.sorts?.length ? [] : response.sorts;\n valueTotalPage = response?.page?.total_page || 1;\n\n if (run) {\n setWishlistData(valueWishlistData);\n setWishlistSort(valueWishlistSort);\n setTotalPage(valueTotalPage);\n setIsLoading(false);\n setIsRefreshWidgetList(false);\n }\n };\n\n const handleShareData = async () => {\n let customRoutePage = '';\n\n if (typeof window !== 'undefined' && window?.location?.pathname) customRoutePage = window.location.pathname;\n\n setShowShareTrigger(false);\n\n let response: any;\n let run: boolean = false;\n let valueProxyUrl: string;\n let valueShareLink: string;\n let valueShareId: string;\n let queryParam = {\n ...(wishlistPreviewSettings\n ? {\n is_preview: true\n }\n : {})\n };\n\n if (dataInfo) {\n response = { data: dataInfo };\n run = true;\n } else {\n response = await getWishlistInfo({\n query: queryParam\n });\n run = response?.status?.code === 200 || false;\n }\n\n valueProxyUrl = response?.data?.proxy_url || '';\n valueShareId = response?.data?.share_id || '';\n valueShareLink = `${customRoutePage}?${queryShareId}=${valueShareId}`;\n\n if (run) {\n setProxyUrl(valueProxyUrl);\n setShareLink(window.location.origin + valueShareLink);\n setShowShareTrigger(true);\n }\n };\n\n const handleSettings = async (LOCAL_STORAGE_WISHLIST_SETTING: any) => {\n let response: any;\n let responseGeneral: any;\n\n response = wishlistPreviewSettings || JSON.parse(LOCAL_STORAGE_WISHLIST_SETTING as string);\n responseGeneral = generalPreviewSettings || JSON.parse((localStorage.getItem(LOCAL_STORAGE_KEY.GENERAL_SETTING) || null) as string);\n\n if (!response) return;\n\n setDataSettings(response);\n\n if (responseGeneral) setGeneralDataSettings(responseGeneral);\n };\n\n useEffectOnChange(() => {\n handleSettings(localStorage.getItem(LOCAL_STORAGE_KEY.WISHLIST_SETTING) || null);\n }, [previewSettings]);\n\n React.useEffect(() => {\n if (!isRenderAppWishlist) return;\n\n let isLoadMore = Boolean(previousState && previousState?.currentPage !== currentPage);\n\n if (previousState && previousState?.keyword !== keyword) {\n setOnSearch(true);\n const delayDebounceFn = setTimeout(() => {\n setOnSearch(false);\n handleSetWishlistData();\n }, 500);\n return () => clearTimeout(delayDebounceFn);\n } else {\n handleSetWishlistData(isLoadMore, true);\n }\n }, [isRenderAppWishlist, keyword, currentPage]);\n\n React.useEffect(() => {\n if (!isRenderAppWishlist || !isRefreshWidgetList) return;\n\n handleSetWishlistData();\n }, [isRefreshWidgetList]);\n\n React.useEffect(() => {\n if (!isRenderAppWishlist) return;\n\n const searchParams = new URLSearchParams(document.location.search);\n setShareId(params?.shareId ? params.shareId : searchParams?.get(queryShareId) || '');\n\n if (typeof window !== 'undefined') {\n // For trigger update on wishlist flyout widget\n if (isFlyout) {\n window.sledgeWishlistFlyoutWidgetListUpdate = () => {\n handleSetWishlistData();\n };\n } else {\n window.sledgeWishlistWidgetListUpdate = () => {\n handleSetWishlistData();\n };\n }\n\n window.sledgeWishlistWidgetClearList = () => {\n handleClearWishlist();\n };\n }\n\n handleShareData();\n handleSettings(localStorage.getItem(LOCAL_STORAGE_KEY.WISHLIST_SETTING) || null);\n setIsFirstLoading(false);\n }, [isRenderAppWishlist]);\n\n React.useEffect(() => {\n const { is_required_login } = dataSettings?.display?.global || {};\n\n setIsRequiredLogin(sledgeAnonymId && !is_required_login);\n }, [sledgeAnonymId, dataSettings]);\n\n // Separate Components\n let productCardsComponent: any = null;\n let wishlistWidgetAlertComponent: any = null;\n\n React.Children.map(children, (child) => {\n if (React.isValidElement(child) && isFunction(child.type)) {\n const { productCard, wishlistWidgetAlert }: any = child?.props || {};\n\n if (productCard && isFunction(productCard)) productCardsComponent = productCard;\n if (wishlistWidgetAlert && isFunction(wishlistWidgetAlert)) wishlistWidgetAlertComponent = wishlistWidgetAlert;\n }\n });\n\n const WishlistWidgetAlert = wishlistWidgetAlertComponent;\n\n const wrapperStyle = {\n maxWidth: width\n };\n\n return (\n <>\n <div className=\"sledge-wishlist__widget-wrapper\" style={wrapperStyle}>\n {isFlyout ? null : (\n <>\n {isRequiredLogin && (\n <>\n {isFirstLoading ? (\n <SkeletonLoading.Item\n width=\"99.5%\"\n height=\"72px\"\n color=\"lighten\"\n rounded=\"none\"\n style={{\n margin: '0 auto'\n }}\n />\n ) : WishlistWidgetAlert ? (\n <React.Fragment>{isJsVersion ? <div dangerouslySetInnerHTML={{ __html: WishlistWidgetAlert() }}></div> : <WishlistWidgetAlert />}</React.Fragment>\n ) : (\n <div className=\"sledge-wishlist__widget-alert\">\n <div className=\"sledge-wishlist__widget-alert-text\">\n {alert || 'Please login to save your wishlist across devices.'}{' '}\n <a href=\"/account/login\" className=\"sledge-wishlist__widget-alert-link\">\n {alert_login || 'Login Here'}\n </a>\n </div>\n </div>\n )}\n </>\n )}\n </>\n )}\n\n {React.Children.count(children) &&\n React.Children.map(children, (child) => {\n return React.cloneElement(child, {\n isLoading,\n isFirstLoading,\n wishlistData,\n wishlistSort,\n selectedSort,\n selectedLimit,\n keyword,\n currentPage,\n totalPage,\n limitOptions,\n onSearch,\n showShareTrigger,\n shareLink,\n shareId,\n proxyUrl,\n dataSettings,\n generalDataSettings,\n productCardsComponent,\n query,\n setIsLoading,\n setIsRefreshWidgetList,\n setSelectedSort,\n setSelectedLimit,\n setKeyword,\n setCurrentPage,\n onAfterAddToCart,\n onAfterAddWishlist,\n onAfterRemoveWishlist,\n onAfterRenderProduct,\n dataReviews,\n triggerBadge,\n previewSettings,\n isFlyout\n });\n })}\n </div>\n </>\n );\n};\n","import React from 'react';\nimport { WidgetHeader, IWidgetHeaderProps } from './WidgetHeader';\nimport { WidgetList, IWidgetListProps } from './WidgetList';\nimport { WidgetRoot, IWidgetRootProps } from './WidgetRoot';\n\nexport interface IWidgetProps {\n children: JSX.Element | JSX.Element[];\n}\n\ntype WidgetComponent = React.FunctionComponent<IWidgetProps> & {\n Root: React.FC<IWidgetRootProps>;\n Header: React.FC<IWidgetHeaderProps>;\n List: React.FC<IWidgetListProps>;\n};\n\nexport const Widget: WidgetComponent = ({ children }: IWidgetProps): JSX.Element => (\n <>{React.Children.count(children) && React.Children.map(children, (child: JSX.Element) => React.cloneElement(child, {}))}</>\n);\n\nWidget.Root = WidgetRoot;\nWidget.Header = WidgetHeader;\nWidget.List = WidgetList;\n","import React from 'react';\nimport { INTERNAL_SELECTOR_VALUE, LOCAL_STORAGE_KEY } from '@core/lib/const';\nimport { SledgeContext, ISledgeContext, CustomComponents } from '@sledge-app/core';\nimport { Button, FlyoutSidebar, HeartIcon } from '@core/components';\nimport { wishlistInfo } from './utils';\nimport { BadgeCounter } from './BadgeCounter';\nimport { useEffectOnChange, usePreviewSettings } from '@core/hooks';\nimport { Widget } from '@react-wishlist/components/Widget';\nimport { isFunction } from '@core/lib/helper';\n\nexport interface IBadgeProps {\n children?: JSX.Element | JSX.Element[];\n useProxyUrl?: boolean;\n useWishlistFlyout?: boolean;\n data?: any;\n position?: 'none' | 'left' | 'right' | 'bottom-left' | 'bottom-right';\n urlWishlistWidget?: string;\n previewSettings?: any;\n}\n\nexport const Badge = (props: IBadgeProps) => {\n const {\n children,\n useProxyUrl = false,\n useWishlistFlyout: useWishlistFlyoutProp = false,\n data: propsData,\n position: positionProp,\n urlWishlistWidget: urlWishlistWidgetProp = '',\n previewSettings: previewSettingsProp\n } = props;\n\n const { isRenderApp, triggerRenderMultipleComponent, sledgeAnonymId, isJsVersion } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { wishlist: isRenderAppWishlist } = isRenderApp || {};\n const { value: valueRenderWishlistBadge, trigger: triggerRenderWishlistBadge } = triggerRenderMultipleComponent?.wishlist?.badge || {};\n\n const defaultColorIcon = 'currentColor';\n\n const { wishlistPreviewSettings, generalPreviewSettings, previewSettings } = usePreviewSettings({\n defaultSettings: previewSettingsProp,\n nestedProperty: 'sledge.wishlist.badge.preview'\n });\n\n const [colorIcon, setColorIcon] = React.useState(defaultColorIcon);\n const [isFirstLoading, setIsFirstLoading] = React.useState(!propsData);\n const [isMaximizeTotalWishlist, setIsMaximizeTotalWishlist] = React.useState(false);\n const [proxyUrl, setProxyUrl] = React.useState(propsData?.proxy_url || '');\n const [dataSettings, setDataSettings] = React.useState<any>({});\n const [isRequiredLogin, setIsRequiredLogin] = React.useState(false);\n const [data, setData] = React.useState<any>({});\n const [openFlyoutWishlistWidget, setOpenFlyoutWishlistWidget] = React.useState(false);\n\n const { use_wishlist_flyout } = dataSettings?.display?.widget || {};\n const { floating_button_type } = dataSettings?.launch_point || {};\n const { alert_login, alert, login_button, header_title: language_header_title, see_all_wishlist } = dataSettings?.languages?.widget || {};\n\n const defaultPosition = positionProp || floating_button_type;\n const position = defaultPosition ? defaultPosition : 'none';\n const urlWishlistWidget = urlWishlistWidgetProp || proxyUrl;\n const useWishlistFlyout = useWishlistFlyoutProp || use_wishlist_flyout;\n\n const handleGetWishlistInfo = async () => {\n await wishlistInfo({\n callback: ({ totalWishlist: valueTotalWishlist, proxyUrl: valueProxyUrl, data: valueData }) => {\n setIsMaximizeTotalWishlist(valueTotalWishlist > 99);\n setProxyUrl(valueProxyUrl);\n setData(valueData);\n\n localStorage?.setItem(LOCAL_STORAGE_KEY.WISHLIST_BADGE_COUNTER, valueTotalWishlist);\n },\n wishlistPreviewSettings\n });\n };\n\n const handleSettings = async (LOCAL_STORAGE_WISHLIST_SETTING: any) => {\n let response: any;\n\n response = wishlistPreviewSettings || JSON.parse(LOCAL_STORAGE_WISHLIST_SETTING as string);\n\n if (!response) return;\n\n const { is_required_login } = response || {};\n\n setDataSettings(response);\n setIsRequiredLogin(sledgeAnonymId && is_required_login);\n setIsFirstLoading(false);\n };\n\n const handleConfirmationPopup = (props?: any) => {\n if (typeof window !== 'undefined' && window.sledgeConfirmationPopup)\n window.sledgeConfirmationPopup({\n title: alert_login || 'Login required!',\n message: alert || 'Please login to save your wishlist across devices.',\n textSubmit: login_button || 'Login',\n buttonSubmitType: 'info',\n onSubmit: () => (window.location.href = '/account/login'),\n generalPreviewSettings,\n ...(props || {})\n });\n };\n\n const handleRequiredLogin = (e: any) => {\n if (isRequiredLogin) {\n e.preventDefault();\n e.stopPropagation();\n\n handleConfirmationPopup();\n } else {\n if (useWishlistFlyout) {\n setOpenFlyoutWishlistWidget(true);\n } else {\n if (useProxyUrl) window.location.href = proxyUrl || '/';\n }\n }\n };\n\n useEffectOnChange(() => {\n handleSettings(localStorage.getItem(LOCAL_STORAGE_KEY.WISHLIST_SETTING) || null);\n handleConfirmationPopup({\n isPreviewSettings: true\n });\n }, [previewSettings]);\n\n React.useEffect(() => {\n if (!isRenderAppWishlist) return;\n\n handleSettings(localStorage.getItem(LOCAL_STORAGE_KEY.WISHLIST_SETTING) || null);\n }, [isRenderAppWishlist]);\n\n React.useEffect(() => {\n if (!dataSettings?.launch_point || !isRenderAppWishlist) return;\n\n handleGetWishlistInfo();\n }, [dataSettings, isRenderAppWishlist]);\n\n React.useEffect(() => {\n if (!valueRenderWishlistBadge || !isRenderAppWishlist) return;\n\n if (triggerRenderWishlistBadge) triggerRenderWishlistBadge(false);\n\n handleGetWishlistInfo();\n }, [valueRenderWishlistBadge, isRenderAppWishlist]);\n\n const mainClassName = 'sledge-wishlist__badge-wrapper';\n\n // Separate Components\n let productCardsComponent: any = null;\n\n if (React.Children.count(children)) {\n React.Children.map(children, (child) => {\n if (React.isValidElement(child) && isFunction(child.type)) {\n const { productCard }: any = child?.props || {};\n\n if (productCard && isFunction(productCard)) productCardsComponent = productCard;\n }\n });\n }\n\n const HeaderMenu = () => {\n return (\n <span className={`${mainClassName} sledge-wishlist__badge`} onClick={handleRequiredLogin} onMouseEnter={() => setColorIcon('#F85538')} onMouseLeave={() => setColorIcon(defaultColorIcon)}>\n <HeartIcon width={20} height={20} type=\"outline\" color={colorIcon} />\n {!isFirstLoading && (\n <span\n className={`sledge-wishlist__badge-counter sledge-wishlist__badge-counter-header-menu ${isMaximizeTotalWishlist ? 'sledge-wishlist__badge-fit-content' : ''}`}\n data-component={INTERNAL_SELECTOR_VALUE.WISHLIST.ELEMENT_BADGE_COUNTER}\n >\n <div data-component={INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET}>\n <BadgeCounter\n data={\n isJsVersion\n ? {\n ...data,\n ...{\n total_data: localStorage?.getItem(LOCAL_STORAGE_KEY.WISHLIST_BADGE_COUNTER) || data?.total_data\n }\n }\n : data\n }\n />\n </div>\n </span>\n )}\n </span>\n );\n };\n\n const FloatingFull = () => {\n return (\n <div className={`${mainClassName} sledge-wishlist__badge-floating sledge__badge-floating-${position}`}>\n <span onClick={handleRequiredLogin} className=\"sledge-wishlist__badge-floating-icon-link\">\n <span className=\"sledge-wishlist__badge-floating-text\">My Wishlist</span>\n <span className=\"sledge-wishlist__badge-icon\">\n <HeartIcon width={18} height={18} type=\"fill\" color=\"#000000\" />\n {!isFirstLoading && (\n <span\n className={`sledge-wishlist__badge-counter sledge-wishlist__badge-counter-bottom-right ${isMaximizeTotalWishlist ? 'sledge-wishlist__badge-fit-content' : ''}`}\n data-component={INTERNAL_SELECTOR_VALUE.WISHLIST.ELEMENT_BADGE_COUNTER}\n >\n <div data-component={INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET}>\n <BadgeCounter\n data={\n isJsVersion\n ? {\n ...data,\n ...{\n total_data: localStorage?.getItem(LOCAL_STORAGE_KEY.WISHLIST_BADGE_COUNTER) || data?.total_data\n }\n }\n : data\n }\n />\n </div>\n </span>\n )}\n </span>\n </span>\n </div>\n );\n };\n\n const FloatingIcon = () => {\n return (\n <div className={`${mainClassName} sledge-wishlist__badge-floating-icon sledge-wishlist__badge-floating-${position}`}>\n <span onClick={handleRequiredLogin} className=\"sledge-wishlist__badge-floating-icon-link\">\n <span className=\"sledge-wishlist__badge-icon\">\n <HeartIcon width={27.01} height={25.73} type=\"outline\" color=\"#000000\" />\n {!isFirstLoading && (\n <span\n className={`sledge-wishlist__badge-counter sledge-wishlist__badge-counter-bottom-right ${isMaximizeTotalWishlist ? 'sledge-wishlist__badge-fit-content' : ''}`}\n data-component={INTERNAL_SELECTOR_VALUE.WISHLIST.ELEMENT_BADGE_COUNTER}\n >\n <div data-component={INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET}>\n <BadgeCounter\n data={\n isJsVersion\n ? {\n ...data,\n ...{\n total_data: localStorage?.getItem(LOCAL_STORAGE_KEY.WISHLIST_BADGE_COUNTER) || data?.total_data\n }\n }\n : data\n }\n />\n </div>\n </span>\n )}\n </span>\n </span>\n </div>\n );\n };\n\n return (\n <>\n {useWishlistFlyout ? (\n <FlyoutSidebar\n title={\n <div className=\"sledge-flyout-widget__wishlist-title\">\n <span>{language_header_title || 'My Wishlist'}</span>\n\n <span\n className={`sledge-wishlist__badge-counter ${isMaximizeTotalWishlist ? 'sledge-wishlist__badge-fit-content' : ''}`}\n data-component={INTERNAL_SELECTOR_VALUE.WISHLIST.ELEMENT_BADGE_COUNTER}\n >\n <div data-component={INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET}>\n <BadgeCounter\n data={\n isJsVersion\n ? {\n ...data,\n ...{\n total_data: localStorage?.getItem(LOCAL_STORAGE_KEY.WISHLIST_BADGE_COUNTER) || data?.total_data\n }\n }\n : data\n }\n />\n </div>\n </span>\n </div>\n }\n content={\n <div className=\"sledge-flyout-widget__wishlist-content\">\n <Widget.Root isFlyout={useWishlistFlyout}>\n <CustomComponents productCard={productCardsComponent} />\n <Widget.List />\n </Widget.Root>\n </div>\n }\n footer={\n <div className=\"sledge-flyout-widget__wishlist-footer\">\n <a href={urlWishlistWidget} className=\"sledge-flyout-widget__wishlist-see-all-button\">\n <Button type=\"button\" colorType=\"success\" fullWidth={true}>\n {see_all_wishlist || 'See All Wishlist'}\n </Button>\n </a>\n </div>\n }\n open={openFlyoutWishlistWidget}\n setOpen={setOpenFlyoutWishlistWidget}\n position=\"right\"\n className=\"sledge-flyout-widget__wishlist\"\n withBlurEffect\n />\n ) : null}\n\n {isFirstLoading ? null : <>{position === 'none' ? <HeaderMenu /> : String(position).includes('bottom') ? <FloatingIcon /> : <FloatingFull />}</>}\n </>\n );\n};\n","import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport { Badge } from './Badge';\nimport { DATASET_ATTRIBUTE_KEY, LOCAL_STORAGE_KEY, SELECTOR } from '@core/lib/const';\nimport { SELECTOR_ATTRIBUTE_KEY } from '@core/lib/const';\nimport { INTERNAL_SELECTOR_VALUE } from '@core/lib/const';\nimport { CustomComponents, SledgeContext } from '@sledge-app/core';\nimport { BadgeCounter } from './BadgeCounter';\nimport { objectPresent, stringToFunction } from '@core/lib/helper';\n\nexport const BadgeCounterInitSelector = (props?: { selector?: string; reload?: boolean; previewSettings?: any }) => {\n const { selector = '', reload = false, previewSettings = null } = props || {};\n const getSelector = selector || SELECTOR.WISHLIST.ELEMENT_BADGE_COUNTER;\n\n let element: Array<HTMLElement> = Array.from(document.querySelectorAll(getSelector));\n\n let isElementDetected = !element || (element && !element.length);\n\n if (isElementDetected) return;\n\n element.map((item: any) => {\n if (item) {\n if (item?.hasAttribute('loaded') && !reload) return;\n\n item.setAttribute('loaded', '');\n\n // Re-render with remove element logic\n const getElementContainerWidgetQuery = item.querySelector(`[${SELECTOR_ATTRIBUTE_KEY}=\"${INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET}\"]`);\n if (getElementContainerWidgetQuery) getElementContainerWidgetQuery.remove();\n\n // For container react root element\n let elementContainerWidget = document.createElement('div');\n elementContainerWidget.setAttribute(SELECTOR_ATTRIBUTE_KEY, INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET);\n item.appendChild(elementContainerWidget);\n\n ReactDOM.createRoot(elementContainerWidget).render(\n <React.StrictMode>\n <SledgeContext.Provider\n value={{\n isRenderApp: {\n wishlist: true,\n productReview: true,\n instantSearch: true\n },\n sledgeAnonymId: localStorage.getItem(LOCAL_STORAGE_KEY.ANONYM_ID) || '',\n isJsVersion: true\n }}\n >\n <BadgeCounter previewSettings={previewSettings} />\n </SledgeContext.Provider>\n </React.StrictMode>\n );\n }\n });\n};\n\nexport const BadgeInitSelector = (props?: { selector?: string; reload?: boolean; previewSettings?: any }) => {\n const { selector = '', reload = false, previewSettings = null } = props || {};\n const getSelector = selector || SELECTOR.WISHLIST.ELEMENT_BADGE;\n const LOCAL_STORAGE_WISHLIST_SETTING = localStorage.getItem(LOCAL_STORAGE_KEY.WISHLIST_SETTING) ? JSON.parse((localStorage.getItem(LOCAL_STORAGE_KEY.WISHLIST_SETTING) || null) as string) : null;\n const sledgeWishlistSettings = objectPresent(previewSettings?.settings?.wishlist) || LOCAL_STORAGE_WISHLIST_SETTING;\n\n let element: Array<HTMLElement> = Array.from(document.querySelectorAll(getSelector));\n\n let isElementDetected = !element || (element && !element.length);\n\n if (!sledgeWishlistSettings || isElementDetected) return;\n\n const { floating_button_type } = sledgeWishlistSettings?.launch_point || {};\n\n const isBottomFloatingType = String(floating_button_type).includes('bottom');\n\n if (floating_button_type !== 'none') {\n if (isBottomFloatingType) {\n element.map((item: any, index: number) => {\n if (item && !index) {\n if (item?.hasAttribute('loaded') && !reload) return;\n\n item.setAttribute('loaded', '');\n\n // TODO: Temporary solution for preloaded element\n const elementPreload = item.querySelector(`[${SELECTOR_ATTRIBUTE_KEY}=\"preload\"]`);\n if (elementPreload) elementPreload.remove();\n\n // Re-render with remove element logic\n const getElementContainerWidgetQuery = item.querySelector(`[${SELECTOR_ATTRIBUTE_KEY}=\"${INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET}\"]`);\n if (getElementContainerWidgetQuery) getElementContainerWidgetQuery.remove();\n\n // For container react root element\n let elementContainerWidget = document.createElement('div');\n elementContainerWidget.setAttribute(SELECTOR_ATTRIBUTE_KEY, INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET);\n item.appendChild(elementContainerWidget);\n\n const USE_PROXY_URL = item.getAttribute(DATASET_ATTRIBUTE_KEY.WISHLIST.USE_PROXY_URL);\n const USE_WISHLIST_FLYOUT = item.getAttribute(DATASET_ATTRIBUTE_KEY.WISHLIST.USE_WISHLIST_FLYOUT);\n const URL_WISHLIST_WIDGET = item.getAttribute(DATASET_ATTRIBUTE_KEY.WISHLIST.URL_WISHLIST_WIDGET);\n const PRODUCT_CARDS = item.querySelector(SELECTOR.GLOBAL.ELEMENT_CUSTOM_COMPONENTS)?.getAttribute(DATASET_ATTRIBUTE_KEY.GLOBAL.RENDER_PRODUCT_CARD);\n\n ReactDOM.createRoot(elementContainerWidget).render(\n <React.StrictMode>\n <SledgeContext.Provider\n value={{\n isRenderApp: {\n wishlist: true,\n productReview: true,\n instantSearch: true\n },\n sledgeAnonymId: localStorage.getItem(LOCAL_STORAGE_KEY.ANONYM_ID) || '',\n isJsVersion: true\n }}\n >\n <Badge\n previewSettings={previewSettings}\n useProxyUrl={Boolean(USE_PROXY_URL && USE_PROXY_URL === 'true')}\n useWishlistFlyout={Boolean(USE_WISHLIST_FLYOUT && USE_WISHLIST_FLYOUT === 'true')}\n position={floating_button_type}\n urlWishlistWidget={URL_WISHLIST_WIDGET}\n >\n <CustomComponents productCard={stringToFunction(PRODUCT_CARDS)} />\n </Badge>\n </SledgeContext.Provider>\n </React.StrictMode>\n );\n }\n });\n } else {\n element.map((item: any, index: number) => {\n if (item && !index) {\n if (item?.hasAttribute('loaded') && !reload) return;\n\n item.setAttribute('loaded', '');\n\n // TODO: Temporary solution for preloaded element\n const elementPreload = item.querySelector(`[${SELECTOR_ATTRIBUTE_KEY}=\"preload\"]`);\n if (elementPreload) elementPreload.remove();\n\n // Re-render with remove element logic\n const getElementContainerWidgetQuery = item.querySelector(`[${SELECTOR_ATTRIBUTE_KEY}=\"${INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET}\"]`);\n if (getElementContainerWidgetQuery) getElementContainerWidgetQuery.remove();\n\n // For container react root element\n let elementContainerWidget = document.createElement('div');\n elementContainerWidget.setAttribute(SELECTOR_ATTRIBUTE_KEY, INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET);\n item.appendChild(elementContainerWidget);\n\n const USE_PROXY_URL = item.getAttribute(DATASET_ATTRIBUTE_KEY.WISHLIST.USE_PROXY_URL);\n const USE_WISHLIST_FLYOUT = item.getAttribute(DATASET_ATTRIBUTE_KEY.WISHLIST.USE_WISHLIST_FLYOUT);\n const URL_WISHLIST_WIDGET = item.getAttribute(DATASET_ATTRIBUTE_KEY.WISHLIST.URL_WISHLIST_WIDGET);\n const PRODUCT_CARDS = item.querySelector(SELECTOR.GLOBAL.ELEMENT_CUSTOM_COMPONENTS)?.getAttribute(DATASET_ATTRIBUTE_KEY.GLOBAL.RENDER_PRODUCT_CARD);\n\n ReactDOM.createRoot(elementContainerWidget).render(\n <React.StrictMode>\n <SledgeContext.Provider\n value={{\n isRenderApp: {\n wishlist: true,\n productReview: true,\n instantSearch: true\n },\n sledgeAnonymId: localStorage.getItem(LOCAL_STORAGE_KEY.ANONYM_ID) || '',\n isJsVersion: true\n }}\n >\n <Badge\n previewSettings={previewSettings}\n useProxyUrl={Boolean(USE_PROXY_URL && USE_PROXY_URL === 'true')}\n useWishlistFlyout={Boolean(USE_WISHLIST_FLYOUT && USE_WISHLIST_FLYOUT === 'true')}\n position={floating_button_type}\n urlWishlistWidget={URL_WISHLIST_WIDGET}\n >\n <CustomComponents productCard={stringToFunction(PRODUCT_CARDS)} />\n </Badge>\n </SledgeContext.Provider>\n </React.StrictMode>\n );\n }\n });\n }\n } else {\n element.map((item: any) => {\n if (item) {\n if (item?.hasAttribute('loaded') && !reload) return;\n\n item.setAttribute('loaded', '');\n\n const USE_PROXY_URL = item.getAttribute(DATASET_ATTRIBUTE_KEY.WISHLIST.USE_PROXY_URL);\n const USE_WISHLIST_FLYOUT = item.getAttribute(DATASET_ATTRIBUTE_KEY.WISHLIST.USE_WISHLIST_FLYOUT);\n const URL_WISHLIST_WIDGET = item.getAttribute(DATASET_ATTRIBUTE_KEY.WISHLIST.URL_WISHLIST_WIDGET);\n const PRODUCT_CARDS = item.querySelector(SELECTOR.GLOBAL.ELEMENT_CUSTOM_COMPONENTS)?.getAttribute(DATASET_ATTRIBUTE_KEY.GLOBAL.RENDER_PRODUCT_CARD);\n\n // TODO: Temporary solution for preloaded element\n const elementPreload = item.querySelector(`[${SELECTOR_ATTRIBUTE_KEY}=\"preload\"]`);\n if (elementPreload) elementPreload.remove();\n\n // Re-render with remove element logic\n const getElementContainerWidgetQuery = item.querySelector(`[${SELECTOR_ATTRIBUTE_KEY}=\"${INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET}\"]`);\n if (getElementContainerWidgetQuery) getElementContainerWidgetQuery.remove();\n\n // For container react root element\n let elementContainerWidget = document.createElement('div');\n elementContainerWidget.setAttribute(SELECTOR_ATTRIBUTE_KEY, INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET);\n item.appendChild(elementContainerWidget);\n\n ReactDOM.createRoot(elementContainerWidget).render(\n <React.StrictMode>\n <SledgeContext.Provider\n value={{\n isRenderApp: {\n wishlist: true,\n productReview: true,\n instantSearch: true\n },\n sledgeAnonymId: localStorage.getItem(LOCAL_STORAGE_KEY.ANONYM_ID) || '',\n isJsVersion: true\n }}\n >\n <Badge\n previewSettings={previewSettings}\n useProxyUrl={Boolean(USE_PROXY_URL && USE_PROXY_URL === 'true')}\n useWishlistFlyout={Boolean(USE_WISHLIST_FLYOUT && USE_WISHLIST_FLYOUT === 'true')}\n urlWishlistWidget={URL_WISHLIST_WIDGET}\n >\n <CustomComponents productCard={stringToFunction(PRODUCT_CARDS)} />\n </Badge>\n </SledgeContext.Provider>\n </React.StrictMode>\n );\n }\n });\n }\n};\n","import React from 'react';\nimport { addWishlist, checkWishlist } from '@core/api/wishlist';\nimport { CUSTOM_EVENT_NAMES, LOCAL_STORAGE_KEY } from '@core/lib/const';\nimport { HeartIcon } from '@core/components';\nimport { SledgeContext, ISledgeContext } from '@sledge-app/core';\nimport { BadgeCounterInitSelector, BadgeInitSelector } from '@react-wishlist/components';\nimport { useEffectOnChange, useIntersectionObserver, usePreviewSettings } from '@core/hooks';\nimport { dispatchCustomEvent } from '@core/lib/helper';\nimport { IAddWishlistParams } from '@core/api/global';\n\ndeclare global {\n interface Window {\n sledgeWishlistTriggerUpdate(): void;\n }\n}\n\nexport interface ITriggerProps {\n params: IAddWishlistParams;\n forceActive?: boolean;\n hidden?: boolean;\n onAfterAddWishlist?(state: 'success' | 'failed'): void;\n onAfterRemoveWishlist?(state: 'success' | 'failed'): void;\n wishlistChecked?: boolean;\n triggerBadge?: 'default' | 'rerender';\n reload?: boolean;\n previewSettings?: any;\n}\n\nexport const Trigger: React.FunctionComponent<ITriggerProps> = (props) => {\n const {\n params,\n forceActive = false,\n hidden = false,\n onAfterAddWishlist,\n onAfterRemoveWishlist,\n wishlistChecked,\n triggerBadge = 'default',\n reload = false,\n previewSettings: previewSettingsProp\n } = props;\n const { productId, productVariantId } = params || {};\n\n const { isRenderApp, triggerRenderMultipleComponent, sledgeAnonymId, isJsVersion } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { wishlist: isRenderAppWishlist } = isRenderApp || {};\n const { trigger: triggerRenderWishlistBadge } = triggerRenderMultipleComponent?.wishlist?.badge || {};\n\n const defaultColorIcon = '#767676';\n const defaultTypeIcon = 'outline';\n const activeColorIcon = '#F85538';\n const activeTypeIcon = 'fill';\n const activeToDefaultTypeIcon = 'half-fill';\n\n const wishlistCheckedFilled = typeof wishlistChecked === 'boolean';\n const isWishlisted = wishlistCheckedFilled ? wishlistChecked : false;\n\n const { wishlistPreviewSettings, generalPreviewSettings, previewSettings } = usePreviewSettings({\n defaultSettings: previewSettingsProp,\n nestedProperty: 'sledge.wishlist.trigger.preview'\n });\n\n const [colorIcon, setColorIcon] = React.useState(isWishlisted ? activeColorIcon : defaultColorIcon);\n const [typeIcon, setTypeIcon] = React.useState<'fill' | 'half-fill' | 'outline'>(isWishlisted ? activeTypeIcon : defaultTypeIcon);\n\n const [isWishlist, setIsWishlist] = React.useState(!!wishlistChecked);\n const [mouseEnter, setMouseEnter] = React.useState(false);\n const [isLoading, setIsLoading] = React.useState(!wishlistCheckedFilled);\n const [dataSettings, setDataSettings] = React.useState<any>({});\n const [handleFunctions, _setHandleFunctions] = React.useState({\n onAfterAddWishlist: onAfterAddWishlist,\n onAfterRemoveWishlist: onAfterRemoveWishlist\n });\n const [isRequiredLogin, setIsRequiredLogin] = React.useState(false);\n const [isFirstTime, setIsFirstTime] = React.useState(true);\n const [hasEntry, setHasEntry] = React.useState(reload);\n\n const [rootRef, rootEntry] = useIntersectionObserver({\n threshold: 0,\n root: null,\n rootMargin: '0px'\n });\n\n const { is_required_login } = dataSettings?.display?.global || {};\n const { show: show_notification, location: location_notification } = dataSettings?.display?.notification || {};\n const { title_added_to_wishlist, text_added_to_wishlist, title_removed_to_wishlist, text_removed_to_wishlist, title_fail_add_to_wishlist, text_fail_add_to_wishlist } =\n dataSettings?.languages?.notification || {};\n const { alert_login, alert, login_button } = dataSettings?.languages?.widget || {};\n\n const handleCheckWishlist = async () => {\n let response: any;\n let queryParam = {\n ...(wishlistPreviewSettings\n ? {\n is_preview: true\n }\n : {})\n };\n\n if (typeof wishlistChecked === 'boolean' && isFirstTime) {\n response = wishlistChecked;\n setIsFirstTime(false);\n } else {\n response = await checkWishlist({\n id: productId,\n variantId: productVariantId,\n query: queryParam\n });\n }\n\n setIsWishlist(forceActive ? forceActive : response);\n };\n\n const handleConfirmationPopup = (props?: any) => {\n if (typeof window !== 'undefined' && window.sledgeConfirmationPopup)\n window.sledgeConfirmationPopup({\n title: alert_login || 'Login required!',\n message: alert || 'Please login to save your wishlist across devices.',\n textSubmit: login_button || 'Login',\n buttonSubmitType: 'info',\n onSubmit: () => (window.location.href = '/account/login'),\n generalPreviewSettings,\n ...(props || {})\n });\n };\n\n const handleClick = async (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (isRequiredLogin) {\n handleConfirmationPopup();\n return;\n }\n\n let resAddWishlist = await addWishlist(\n wishlistPreviewSettings && !params?.productId\n ? {\n productId: '1234567890',\n productVariantId: '',\n productName: '',\n productVendor: '',\n productSku: '',\n productVariantName: '',\n productLink: '',\n productImage: '',\n productCurrency: '',\n productPrice: ''\n }\n : params\n );\n\n const { status, data } = resAddWishlist || {};\n const { code } = status || {};\n const { product } = data || {};\n\n let run = code === 200;\n\n dispatchCustomEvent(!isWishlist ? CUSTOM_EVENT_NAMES.AFTER_ADD_WISHLIST : CUSTOM_EVENT_NAMES.AFTER_REMOVE_WISHLIST, {\n state: run ? 'success' : 'failed',\n product\n });\n\n if (run) {\n setIsWishlist(!isWishlist);\n\n // Trigger update for react module\n if (triggerRenderWishlistBadge) triggerRenderWishlistBadge(true);\n\n // Trigger update for javascript\n if (isJsVersion) {\n if (triggerBadge === 'rerender') {\n BadgeInitSelector({ reload: true });\n } else {\n BadgeCounterInitSelector({ reload: true });\n }\n }\n\n if (typeof window !== 'undefined') {\n if (window.sledgeWishlistWidgetListUpdate) window.sledgeWishlistWidgetListUpdate();\n if (window.sledgeWishlistFlyoutWidgetListUpdate) window.sledgeWishlistFlyoutWidgetListUpdate();\n if (window.sledgeWishlistButtonDetailUpdate) window.sledgeWishlistButtonDetailUpdate();\n }\n\n handleCheckWishlist();\n\n if (!isWishlist) {\n handleFunctions.onAfterAddWishlist && handleFunctions.onAfterAddWishlist('success');\n } else {\n handleFunctions.onAfterRemoveWishlist && handleFunctions.onAfterRemoveWishlist('success');\n }\n\n if (typeof window !== 'undefined' && window.sledgeToastNotification && show_notification)\n window.sledgeToastNotification({\n title: !isWishlist ? title_added_to_wishlist : title_removed_to_wishlist,\n message: !isWishlist ? text_added_to_wishlist : text_removed_to_wishlist,\n location: location_notification,\n type: 'success',\n icon: <HeartIcon width={40} height={40} color=\"black\" type=\"outline\" />,\n className: 'sledge-toast__wishlist-trigger'\n });\n } else {\n if (!isWishlist) {\n handleFunctions.onAfterAddWishlist && handleFunctions.onAfterAddWishlist('failed');\n } else {\n handleFunctions.onAfterRemoveWishlist && handleFunctions.onAfterRemoveWishlist('failed');\n }\n\n if (typeof window !== 'undefined' && window.sledgeToastNotification && show_notification)\n window.sledgeToastNotification({\n title: title_fail_add_to_wishlist || 'Failed',\n message: text_fail_add_to_wishlist || 'Failed add to wishlist, please try again',\n location: location_notification,\n type: 'failed',\n icon: <HeartIcon width={40} height={40} color=\"black\" type=\"outline\" />,\n className: 'sledge-toast__wishlist-trigger'\n });\n }\n };\n\n const handleSettings = async (LOCAL_STORAGE_WISHLIST_SETTING: any) => {\n setIsLoading(true);\n\n let response: any;\n\n response = wishlistPreviewSettings || JSON.parse(LOCAL_STORAGE_WISHLIST_SETTING as string);\n\n if (!response) return;\n\n const { is_required_login } = response?.display?.global || {};\n\n setDataSettings(response);\n setIsLoading(false);\n\n setIsRequiredLogin(sledgeAnonymId && is_required_login);\n };\n\n useEffectOnChange(() => {\n handleSettings(localStorage.getItem(LOCAL_STORAGE_KEY.WISHLIST_SETTING) || null);\n handleConfirmationPopup({\n isPreviewSettings: true\n });\n }, [previewSettings]);\n\n React.useEffect(() => {\n if (!hasEntry && rootEntry?.isIntersecting) setHasEntry(rootEntry?.isIntersecting);\n }, [rootEntry]);\n\n React.useEffect(() => {\n if (!isRenderAppWishlist || !hasEntry) return;\n\n if (typeof window !== 'undefined') {\n window.sledgeWishlistTriggerUpdate = () => {\n handleCheckWishlist();\n };\n }\n\n handleSettings(localStorage.getItem(LOCAL_STORAGE_KEY.WISHLIST_SETTING) || null);\n }, [isRenderAppWishlist, hasEntry]);\n\n useEffectOnChange(() => {\n setIsRequiredLogin(sledgeAnonymId && is_required_login);\n }, [sledgeAnonymId]);\n\n React.useEffect(() => {\n if (!isRenderAppWishlist || !hasEntry) return;\n\n handleCheckWishlist();\n }, [isRenderAppWishlist, hasEntry, productVariantId]);\n\n const isActive = (isWishlist || forceActive) && !isRequiredLogin;\n const wishlistActive = isActive || mouseEnter;\n\n React.useEffect(() => {\n if (isActive) {\n setColorIcon(activeColorIcon);\n setTypeIcon(activeTypeIcon);\n } else {\n setColorIcon(defaultColorIcon);\n setTypeIcon(defaultTypeIcon);\n }\n }, [isWishlist]);\n\n return (\n <div ref={rootRef} className=\"sledge-wishlist__trigger-root\">\n {!isLoading && !hidden && (\n <div\n className=\"sledge-wishlist__trigger-block\"\n {...(wishlistActive && {\n ['wishlist-active']: ''\n })}\n >\n <span\n className=\"sledge-wishlist__trigger\"\n onClick={(e) => handleClick(e)}\n onMouseEnter={() => {\n setColorIcon(activeColorIcon);\n setTypeIcon(isActive ? activeToDefaultTypeIcon : activeTypeIcon);\n setMouseEnter(true);\n }}\n onMouseLeave={() => {\n if (isActive) {\n setColorIcon(activeColorIcon);\n setTypeIcon(activeTypeIcon);\n } else {\n setColorIcon(defaultColorIcon);\n setTypeIcon(defaultTypeIcon);\n }\n\n setMouseEnter(false);\n }}\n >\n <HeartIcon width={16.67} height={15.83} type={typeIcon} color={colorIcon} />\n </span>\n </div>\n )}\n </div>\n );\n};\n","import { API_URL, LOCAL_STORAGE_KEY, PAYLOAD_API_ALIASES } from '@core/lib/const';\nimport { fetchApi, sanitizeDataId } from '@core/lib/helper';\n\nexport const getReview: any = async ({ productId = null, query = null, token = '', ignoreSWR }: { productId?: any; query?: any; token?: string; ignoreSWR?: boolean }) => {\n let convertId = productId ? sanitizeDataId(productId) : '';\n let sledgeAuthApp = token ? token : typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let queryParams =\n '?' +\n new URLSearchParams({\n [PAYLOAD_API_ALIASES.Authorization]: sledgeAuthApp,\n ...query\n }).toString();\n\n let url = `${API_URL}/review/${convertId}${queryParams}`;\n\n return await fetchApi({\n url,\n method: 'GET',\n authorization: sledgeAuthApp,\n isSimpleRequest: false,\n ignoreSWR\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const getReviewInfo: any = async (props: { productId?: any; query?: any }) => {\n const { productId = null, query = null } = props || {};\n\n let convertId = productId ? sanitizeDataId(productId) : '';\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let queryParams =\n '?' +\n new URLSearchParams({\n [PAYLOAD_API_ALIASES.Authorization]: sledgeAuthApp,\n ...query\n }).toString();\n\n let url = `${API_URL}/review/info/${convertId}${queryParams}`;\n\n return await fetchApi({\n url,\n method: 'GET',\n authorization: sledgeAuthApp,\n isSimpleRequest: false\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const getReviewSnippet: any = async (props: { productId?: any; query?: any }) => {\n const { productId = null, query = null } = props || {};\n\n let convertId = productId ? sanitizeDataId(productId) : '';\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let queryParams =\n '?' +\n new URLSearchParams({\n [PAYLOAD_API_ALIASES.Authorization]: sledgeAuthApp,\n ...query\n }).toString();\n\n let url = `${API_URL}/review/snippet/${convertId}${queryParams}`;\n\n return await fetchApi({\n url,\n method: 'GET',\n authorization: sledgeAuthApp,\n isSimpleRequest: false\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const getProductsReviewInfo: any = async (ids: any, token?: string) => {\n let convertIds = ids.map((v: string) => sanitizeDataId(v));\n let sledgeAuthApp = token ? token : typeof localStorage !== 'undefined' ? localStorage?.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/review/info/ids/${convertIds.join(',')}?${PAYLOAD_API_ALIASES.Authorization}=${sledgeAuthApp}`;\n\n return await fetchApi({\n url,\n method: 'GET',\n authorization: sledgeAuthApp,\n isSimpleRequest: false\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const getReviewMedia: any = async () => {\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/review/usermedia`;\n\n return await fetchApi({\n url,\n method: 'GET',\n authorization: sledgeAuthApp\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const addReviewMedia: any = async (files: FileList) => {\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/review/media`;\n let headers = {};\n let payload = {\n files\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeAuthApp,\n payload,\n headers,\n isSimpleRequest: false,\n isUploadFile: true\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const deleteReviewMedia: any = async (id: any) => {\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/review/usermedia/${id}`;\n\n return await fetchApi({\n url,\n method: 'DELETE',\n authorization: sledgeAuthApp\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const addReview: any = async (data: {\n userFirstName: string;\n userLastName: string;\n userEmail: string;\n productId: string;\n productVariantId: string;\n rating: number;\n title: string;\n review: string;\n mediaIds: [];\n}) => {\n const { userFirstName, userLastName, userEmail, productId, productVariantId, rating, title, review, mediaIds } = data;\n\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/review`;\n let payload = {\n user: JSON.stringify({\n name: `${userFirstName}${userLastName ? ` ${userLastName}` : ''}`,\n email: userEmail\n }),\n review: JSON.stringify({\n rating: rating,\n title: title,\n review: review,\n media_ids: mediaIds\n }),\n ...(productId && {\n product: JSON.stringify({\n id: sanitizeDataId(productId),\n variant_id: sanitizeDataId(productVariantId)\n })\n })\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeAuthApp,\n payload\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n","import React from 'react';\nimport { getReviewInfo } from '@core/api/product-review';\nimport { ELEMENT_ID, LOCAL_STORAGE_KEY } from '@core/lib/const';\nimport { SkeletonLoading } from '@core/components';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\nimport { useEffectOnChange, useIntersectionObserver, usePreviewSettings, usePrevious } from '@core/hooks';\nimport { getFillRating, getUnixTimestamp, scrollToElement } from '@core/lib/helper';\n\nexport interface IRatingProps {\n total?: any | undefined;\n average?: any | undefined;\n size?:\n | 'xs'\n | 'sm'\n | 'md'\n | {\n width?: number;\n height?: number;\n };\n params?:\n | {\n productId?: string | '';\n }\n | undefined;\n withSkeletonLoading?: boolean;\n withTotal?: boolean;\n isScrollToElementWidget?: boolean;\n data?: any;\n sledgeSettings?: any;\n fillColor?: string;\n outlineColor?: string;\n withOutlineColor?: boolean;\n customComponentId?: string;\n numberOfIcons?: number;\n reload?: boolean;\n previewSettings?: any;\n}\n\nexport const Rating = (props: IRatingProps) => {\n const {\n total,\n average,\n size = 'sm',\n params,\n withSkeletonLoading = true,\n withTotal = true,\n isScrollToElementWidget = true,\n data: propsData,\n sledgeSettings,\n fillColor = '',\n outlineColor = '',\n withOutlineColor = true,\n customComponentId = '',\n numberOfIcons = 5,\n reload = false,\n previewSettings: previewSettingsProp\n } = props;\n const { productId } = params || {};\n\n const { isRenderApp, triggerRenderMultipleComponent } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { productReview: isRenderAppProductReview } = isRenderApp || {};\n const { value: valueRenderProductReviewRating, trigger: triggerRenderProductReviewRating } = triggerRenderMultipleComponent?.productReview?.rating || {};\n\n const { productReviewPreviewSettings, previewSettings } = usePreviewSettings({\n defaultSettings: previewSettingsProp,\n nestedProperty: 'sledge.productReview.rating.preview'\n });\n\n const initLoading = propsData || typeof total !== 'undefined' || typeof average !== 'undefined' ? false : true;\n const [isFirstLoading, setIsFirstLoading] = React.useState(initLoading);\n const [isLoading, setIsLoading] = React.useState(initLoading);\n const [sizing, setSizing] = React.useState(\n propsData || typeof total !== 'undefined' || typeof average !== 'undefined'\n ? size && typeof size === 'string'\n ? getSizing(size)\n : {\n width: size?.width,\n height: size?.height\n }\n : {\n width: 0,\n height: 0\n }\n );\n const [totalReview, setTotalReview] = React.useState(propsData?.review_count || total || 0);\n const [averageReview, setAverageReview] = React.useState(propsData?.rating?.average || average || '0');\n const [dataSettings, setDataSettings] = React.useState<any>(sledgeSettings?.review || {});\n const [isFirstTime, setIsFirstTime] = React.useState(true);\n const [hasEntry, setHasEntry] = React.useState(reload);\n\n const previousState: any = usePrevious({ productId });\n\n const [rootRef, rootEntry] = useIntersectionObserver({\n threshold: 0,\n root: null,\n rootMargin: '0px'\n });\n\n const { fill_color = '#23BC45', outline_color = '#8D9196' } = dataSettings?.display?.rating || {};\n\n const unixTimestamp = getUnixTimestamp();\n\n const handleProductRatingInfo = async (paramsProductId: any, isTriggerMultiComponent = false) => {\n if (paramsProductId !== productId) return;\n\n let response: any;\n let run: boolean = false;\n let valueTotalReview: number = 0;\n let valueAverageReview: any;\n let queryParam = {\n ...(productReviewPreviewSettings\n ? {\n is_preview: true\n }\n : {})\n };\n\n let data;\n if (propsData && isFirstTime) {\n data = propsData;\n run = true;\n setIsFirstTime(false);\n } else {\n response = await getReviewInfo({\n productId: paramsProductId,\n query: queryParam\n });\n\n if (!response) return;\n\n const { status } = response;\n data = response.data;\n const { code } = status;\n\n run = code === 200 || false;\n }\n\n valueTotalReview = data?.review_count ? data.review_count : 0;\n valueAverageReview = data?.rating?.average ? data.rating.average : 0;\n\n if (run) {\n setTotalReview(valueTotalReview);\n setAverageReview(valueAverageReview);\n setIsLoading(false);\n setIsFirstLoading(false);\n\n if (isTriggerMultiComponent && valueRenderProductReviewRating && triggerRenderProductReviewRating) triggerRenderProductReviewRating('');\n }\n };\n\n const handleRefreshProductRating = async () => {\n if (typeof total !== 'undefined' || typeof average !== 'undefined') {\n setIsLoading(false);\n } else {\n handleProductRatingInfo(productId);\n }\n };\n\n const handleSettings = async ({ LOCAL_STORAGE_PRODUCT_REVIEW_SETTING, isPreviewSettings = false }: { LOCAL_STORAGE_PRODUCT_REVIEW_SETTING: any; isPreviewSettings?: boolean }) => {\n if (!isPreviewSettings) setIsLoading(true);\n\n let response: any;\n\n response = productReviewPreviewSettings || JSON.parse(LOCAL_STORAGE_PRODUCT_REVIEW_SETTING as string);\n\n if (!response) return;\n\n setDataSettings(response);\n\n if (!isPreviewSettings) await handleRefreshProductRating();\n };\n\n const handleOnClick = () => {\n if (!isScrollToElementWidget) return;\n\n setTimeout(() => {\n scrollToElement({\n element: document.getElementById(ELEMENT_ID.PRODUCT_REVIEW.ELEMENT_WIDGET),\n headerOffset: 50\n });\n }, 200);\n };\n\n useEffectOnChange(() => {\n handleSettings({\n LOCAL_STORAGE_PRODUCT_REVIEW_SETTING: localStorage.getItem(LOCAL_STORAGE_KEY.PRODUCT_REVIEW_SETTING) || null,\n isPreviewSettings: true\n });\n }, [previewSettings]);\n\n React.useEffect(() => {\n if (!hasEntry && rootEntry?.isIntersecting) setHasEntry(rootEntry?.isIntersecting);\n }, [rootEntry]);\n\n React.useEffect(() => {\n if (!isRenderAppProductReview || !hasEntry) return;\n\n if (size === 'xs') {\n setSizing({\n width: 14,\n height: 14\n });\n } else if (size === 'sm') {\n setSizing({\n width: 20,\n height: 20\n });\n } else if (size === 'md') {\n setSizing({\n width: 32,\n height: 32\n });\n }\n\n let isProductIdChanged = Boolean(previousState && previousState?.productId !== productId);\n\n if (isProductIdChanged) setIsFirstLoading(true);\n\n handleSettings({\n LOCAL_STORAGE_PRODUCT_REVIEW_SETTING: localStorage.getItem(LOCAL_STORAGE_KEY.PRODUCT_REVIEW_SETTING) || null\n });\n }, [isRenderAppProductReview, hasEntry, productId]);\n\n React.useEffect(() => {\n if (!productId || (productId && valueRenderProductReviewRating !== productId)) return;\n\n if (triggerRenderProductReviewRating) triggerRenderProductReviewRating('');\n\n setIsFirstLoading(true);\n\n handleProductRatingInfo(valueRenderProductReviewRating, true);\n }, [productId, valueRenderProductReviewRating]);\n\n return (\n <div\n className=\"sledge-product-review__rating\"\n onClick={handleOnClick}\n {...(typeof size === 'string'\n ? {\n ['data-rating-size']: size\n }\n : {})}\n ref={rootRef}\n >\n {isFirstLoading && withSkeletonLoading ? (\n <SkeletonLoading.Item width=\"230px\" height=\"28px\" color=\"lighten\" rounded=\"md\" />\n ) : (\n <>\n {!isLoading && (\n <>\n {[1, 2, 3, 4, 5].map((item, index) => {\n if (!(item <= numberOfIcons)) return;\n\n const { strokeGradientId, suffixGradientId, offset, fillGradientId, fillOther } = getFillRating({\n average: averageReview,\n item,\n index,\n productId,\n unixTimestamp,\n customComponentId\n });\n\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" {...sizing} viewBox=\"0 0 32 32\" key={suffixGradientId} className=\"sledge-product-review__rating-icon\">\n <defs>\n <linearGradient id={strokeGradientId}>\n <stop offset={offset} stopColor={fillColor || fill_color} className=\"sledge-product-review__rating-icon-fill-color\" />\n <stop\n offset={offset}\n stopColor={fillOther === 'full' ? fillColor || fill_color : outlineColor || outline_color}\n className={fillOther === 'full' ? 'sledge-product-review__rating-icon-fill-color' : 'sledge-product-review__rating-icon-outline-color'}\n />\n </linearGradient>\n <linearGradient id={fillGradientId}>\n <stop offset={offset} stopColor={fillColor || fill_color} className=\"sledge-product-review__rating-icon-fill-color\" />\n <stop offset={offset} stopColor=\"transparent\" />\n </linearGradient>\n </defs>\n <path\n fill={`url(#${fillGradientId})`}\n d=\"M9.18817 19.8162L9.25542 19.4179L8.94431 19.1604L3.14591 14.3604L3.14598 14.3603L3.13673 14.3529C2.5294 13.8672 2.784 12.8955 3.54372 12.7636L11.7291 12.3989L12.1807 12.3788L12.3481 11.959L15.8472 3.18648C15.977 2.94796 16.2257 2.79961 16.4979 2.79961C16.769 2.79961 17.0185 2.94848 17.1489 3.18698L20.6478 11.959L20.8152 12.3788L21.2668 12.3989L29.4522 12.7636C30.2119 12.8955 30.4665 13.8672 29.8592 14.3529L29.8591 14.3528L29.85 14.3604L24.0516 19.1604L23.7405 19.4179L23.8077 19.8162L25.3884 29.1774C25.4834 29.8833 24.7613 30.4104 24.1224 30.1159L16.8734 25.5088L16.498 25.2702L16.1226 25.5088L8.87373 30.1141C8.23317 30.409 7.51248 29.8817 7.60746 29.1758L9.18817 19.8162Z\"\n {...(withOutlineColor\n ? {\n stroke: `url(#${strokeGradientId})`,\n strokeWidth: '1.4'\n }\n : {})}\n ></path>\n </svg>\n );\n })}\n {withTotal ? <div className=\"sledge-product-review__rating-summary-total\">({totalReview})</div> : <></>}\n </>\n )}\n </>\n )}\n </div>\n );\n};\n\nconst getSizing = (size: ('xs' | 'sm' | 'md') | string) => {\n if (size === 'xs') {\n return {\n width: 14,\n height: 14\n };\n } else if (size === 'sm') {\n return {\n width: 20,\n height: 20\n };\n } else {\n return {\n width: 32,\n height: 32\n };\n }\n};\n","import { Button, MessageAddIcon, SkeletonLoading } from '@core/components';\n\nexport interface IWidgetHeaderAddTriggerProps {\n isFirstLoadingHeader?: boolean;\n text?: string;\n dataSettings?: any;\n generalDataSettings?: any;\n params?:\n | {\n productId?: string | '';\n productVariantId?: string | '';\n }\n | undefined;\n onAfterAddReview?(state: 'success' | 'failed'): void;\n tabIndex?: string;\n}\n\nexport const WidgetHeaderAddTrigger = ({ isFirstLoadingHeader, text, dataSettings, generalDataSettings, params, onAfterAddReview, tabIndex }: IWidgetHeaderAddTriggerProps) => {\n const {\n text_color: display_button_write_review_text_color,\n border_color: display_button_write_review_border_color,\n border_radius: display_button_write_review_border_radius,\n padding_top: display_button_write_review_padding_top,\n padding_bottom: display_button_write_review_padding_bottom,\n padding_left: display_button_write_review_padding_left,\n padding_right: display_button_write_review_padding_right,\n background_color: display_button_write_review_background_color,\n font_size: display_button_write_review_font_size,\n font_weight: display_button_write_review_font_weight,\n text_transform: display_button_write_review_text_transform\n } = dataSettings?.display?.widget?.button_write_review || {};\n const { button_write_review } = dataSettings?.languages?.widget || {};\n\n const display_button_write_review_style = {\n ...(display_button_write_review_text_color && { color: display_button_write_review_text_color }),\n ...(display_button_write_review_border_color && { borderColor: display_button_write_review_border_color }),\n ...(display_button_write_review_border_radius && { borderRadius: display_button_write_review_border_radius }),\n ...(display_button_write_review_padding_top && { paddingTop: display_button_write_review_padding_top }),\n ...(display_button_write_review_padding_bottom && { paddingBottom: display_button_write_review_padding_bottom }),\n ...(display_button_write_review_padding_left && { paddingLeft: display_button_write_review_padding_left }),\n ...(display_button_write_review_padding_right && { paddingRight: display_button_write_review_padding_right }),\n ...(display_button_write_review_background_color && { backgroundColor: display_button_write_review_background_color }),\n ...(display_button_write_review_font_size && { fontSize: display_button_write_review_font_size }),\n ...(display_button_write_review_font_weight && { fontWeight: display_button_write_review_font_weight }),\n ...(display_button_write_review_text_transform && { textTransform: display_button_write_review_text_transform })\n };\n\n return (\n <div className=\"sledge-product-review__widget-header-item\">\n {isFirstLoadingHeader ? (\n <SkeletonLoading.Item width=\"134px\" height=\"42px\" rounded=\"lg\" color=\"lighten\" />\n ) : (\n <Button\n type=\"button\"\n colorType=\"success\"\n className=\"sledge-product-review__widget-header-add-trigger\"\n onClick={() =>\n typeof window !== 'undefined' &&\n window.sledgeProductReviewWidgetFormAdd &&\n window.sledgeProductReviewWidgetFormAdd({\n params,\n onAfterAddReview,\n tabIndex,\n productReviewPreviewSettings: dataSettings,\n generalPreviewSettings: generalDataSettings\n })\n }\n style={display_button_write_review_style}\n >\n <MessageAddIcon width={16} height={16} color=\"currentColor\" />\n {text ? text : button_write_review || 'Add review'}\n </Button>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { SelectField, SkeletonLoading, SwapIcon } from '@core/components';\n\nexport interface IWidgetHeaderSortProps {\n isFirstLoadingHeader?: boolean;\n productReviewSort?: any;\n dataSettings?: any;\n setSelectedSort?(value: React.SetStateAction<string>): void;\n setIsRefreshWidgetList?(value: React.SetStateAction<boolean>): void;\n data?: any;\n}\n\nexport const WidgetHeaderSort = ({ isFirstLoadingHeader, productReviewSort, dataSettings, setSelectedSort, setIsRefreshWidgetList }: IWidgetHeaderSortProps) => {\n const { default_sort, show_sorting_options } = dataSettings?.display?.widget || {};\n const { sort_by: language_sort_by } = dataSettings?.languages?.widget || {};\n\n const [clickedSortId, setClickedSortId] = React.useState<string | number | null>(default_sort || null);\n\n const handleChangeSort = (value: string) => {\n setClickedSortId(value);\n setIsRefreshWidgetList && setIsRefreshWidgetList(true);\n setSelectedSort && setSelectedSort(value);\n };\n\n const getSelectedSort = clickedSortId || productReviewSort[0]?.value;\n\n return (\n <>\n {!show_sorting_options ? null : (\n <div className=\"sledge-product-review__widget-header-item\">\n {isFirstLoadingHeader ? (\n <SkeletonLoading.Item width=\"134px\" height=\"42px\" rounded=\"lg\" color=\"lighten\" />\n ) : (\n <SelectField\n align=\"end\"\n prefixLabel={<SwapIcon width={16} height={16} color=\"currentColor\" />}\n prefixSelectedLabel={language_sort_by || 'Sort by'}\n options={productReviewSort.map((item: any) => {\n const { name, value } = item;\n return {\n label: name,\n value: value\n };\n })}\n value={getSelectedSort}\n onChange={({ value }: any) => handleChangeSort(value)}\n link=\"?page=1&sort=value\"\n className=\"sledge-product-review__widget-header-sort-option\"\n />\n )}\n </div>\n )}\n </>\n );\n};\n","import React from 'react';\nimport { motion } from 'framer-motion';\nimport { Popover, Progress, SkeletonLoading } from '@core/components';\nimport { Rating } from '@react-product-review/components/Rating';\nimport { ROTATE_FILTER_ARROW_ANIMATION } from '@core/lib/animation';\nimport { getReviewInfo } from '@core/api/product-review';\nimport { usePrevious } from '@core/hooks';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\n\ndeclare global {\n interface Window {\n sledgeProductReviewWidgetSummaryUpdate(): void;\n }\n}\n\nexport interface IWidgetHeaderSummaryProps {\n params?:\n | {\n productId?: string | '';\n }\n | undefined;\n dataSettings?: any;\n summaryData?: any;\n sledgeSettings?: any;\n productReviewPreviewSettings?: any;\n}\n\nexport const WidgetHeaderSummary = (props: IWidgetHeaderSummaryProps) => {\n const { isRenderApp } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { productReview: isRenderAppProductReview } = isRenderApp || {};\n\n const { params, dataSettings, summaryData, sledgeSettings, productReviewPreviewSettings } = props;\n const { productId } = params || {};\n const { fill_color: display_summary_bar_fill_color, outline_color: display_summary_bar_outline_color } = dataSettings?.display?.widget?.summary_bar || {};\n const { fill_color = '#23BC45', outline_color = '#8D9196' } = dataSettings?.display?.rating || {};\n const { review_singular, review_plural } = dataSettings?.languages?.widget || {};\n\n const [isFirstLoading, setIsFirstLoading] = React.useState(true);\n const [isFirstLoadingSummary, setIsFirstLoadingSummary] = React.useState(true);\n const [isLoading, setIsLoading] = React.useState(true);\n const [isRefreshRating, setIsRefreshRating] = React.useState(summaryData ? false : true);\n const [isOpen, setIsOpen] = React.useState(false);\n const [totalReview, setTotalReview] = React.useState(summaryData?.review_count || 0);\n const [ratingList, setRatingList] = React.useState<{ [key: number]: number }>(\n summaryData?.rating || {\n 5: 0,\n 4: 0,\n 3: 0,\n 2: 0,\n 1: 0\n }\n );\n const [averageReview, setAverageReview] = React.useState(summaryData?.rating?.average || '0');\n const [isFirstTime, setIsFirstTime] = React.useState(true);\n\n const previousState: any = usePrevious({ productId });\n\n const handleProductReviewInfo = async () => {\n let response: any;\n let data: any;\n let run: boolean = false;\n let valueTotalReview: number = 0;\n let valueRatingList: { [key: number]: number };\n let valueAverageReview: any;\n let queryParam = {\n ...(productReviewPreviewSettings\n ? {\n is_preview: true\n }\n : {})\n };\n\n if (summaryData && isFirstTime) {\n data = summaryData;\n run = true;\n setIsFirstTime(false);\n } else {\n response = await getReviewInfo({\n productId,\n query: queryParam\n });\n\n if (!response) return;\n\n const { status } = response;\n const { code } = status;\n data = response.data;\n\n run = code === 200 || false;\n }\n\n valueTotalReview = data?.review_count ? data.review_count : 0;\n valueRatingList = data?.rating\n ? {\n 5: data.rating['5'] || 0,\n 4: data.rating['4'] || 0,\n 3: data.rating['3'] || 0,\n 2: data.rating['2'] || 0,\n 1: data.rating['1'] || 0\n }\n : ratingList;\n valueAverageReview = data?.rating?.average ? data.rating.average : '0';\n\n if (run) {\n setTotalReview(valueTotalReview);\n setRatingList(valueRatingList);\n setAverageReview(valueAverageReview);\n setIsLoading(false);\n setIsRefreshRating(false);\n setIsFirstLoading(false);\n isOpen && setIsFirstLoadingSummary(false);\n }\n };\n\n React.useEffect(() => {\n if (!isRenderAppProductReview) return;\n\n if (typeof window !== 'undefined') {\n window.sledgeProductReviewWidgetSummaryUpdate = () => {\n setIsRefreshRating(true);\n handleProductReviewInfo();\n };\n }\n\n let isProductIdChanged = Boolean(previousState && previousState?.productId !== productId);\n\n if (isProductIdChanged) setIsFirstLoading(true);\n\n handleProductReviewInfo();\n }, [isOpen, productId, isRenderAppProductReview]);\n\n const additionalRatingProps = productReviewPreviewSettings\n ? {\n fillColor: fill_color,\n outlineColor: outline_color\n }\n : {};\n\n return (\n <div className=\"sledge-product-review__widget-summary\">\n {isFirstLoading && !summaryData ? (\n <SkeletonLoading.Item width=\"630px\" height=\"42px\" color=\"lighten\" rounded=\"md\" />\n ) : isLoading && !summaryData ? null : (\n <Popover\n trigger={\n <motion.div initial={false} animate={isOpen ? 'open' : 'closed'} className=\"sledge-product-review__widget-summary-trigger\">\n <div className=\"sledge-product-review__widget-summary-average\">{averageReview}</div>\n <div className=\"sledge-product-review__widget-summary-rating\">\n {!isRefreshRating && (\n <Rating\n data={summaryData}\n sledgeSettings={sledgeSettings}\n average={String(averageReview)}\n size=\"md\"\n withSkeletonLoading={false}\n withTotal={false}\n isScrollToElementWidget={false}\n {...additionalRatingProps}\n />\n )}\n </div>\n <div className=\"sledge-product-review__widget-summary-total\">\n {totalReview}\n <span className=\"sledge-product-review__widget-summary-total-desc\">{totalReview > 1 ? review_plural || 'Reviews' : review_singular || 'Review'}</span>\n </div>\n <motion.div variants={ROTATE_FILTER_ARROW_ANIMATION} className=\"sledge-product-review__widget-summary-trigger-icon summary-trigger-icon\">\n <svg width={20} height={20} viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n </motion.div>\n </motion.div>\n }\n content={\n isFirstLoadingSummary ? (\n <div className=\"sledge-product-review__widget-summary-dist-progress\">\n {[5, 4, 3, 2, 1].map((index: number) => {\n return (\n <div className=\"sledge-product-review__widget-summary-dist-progress-item\" key={index}>\n <SkeletonLoading.Item width=\"108px\" height=\"22px\" color=\"lighten\" rounded=\"md\" />\n <SkeletonLoading.Item\n width=\"128px\"\n height=\"22px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n marginLeft: '13px',\n marginRight: '12px'\n }}\n />\n <SkeletonLoading.Item width=\"38px\" height=\"22px\" color=\"lighten\" rounded=\"md\" />\n </div>\n );\n })}\n </div>\n ) : (\n <div className=\"sledge-product-review__widget-summary-dist\">\n <div className=\"sledge-product-review__widget-summary-dist-progress\">\n {[5, 4, 3, 2, 1].map((item, index) => {\n return (\n <div className=\"sledge-product-review__widget-summary-dist-progress-item\" key={index}>\n <Rating\n data={summaryData}\n sledgeSettings={sledgeSettings}\n average={item}\n size=\"sm\"\n withSkeletonLoading={false}\n withTotal={false}\n isScrollToElementWidget={false}\n {...additionalRatingProps}\n />\n <Progress\n value={String(ratingList[item])}\n total={totalReview}\n fillColor={display_summary_bar_fill_color}\n outlineColor={display_summary_bar_outline_color}\n />\n <small>({ratingList[item]})</small>\n </div>\n );\n })}\n </div>\n </div>\n )\n }\n setIsOpen={setIsOpen}\n hideCloseIcon\n align=\"end\"\n alignOffset={-170}\n className=\"sledge-product-review__widget-summary-content\"\n withArrow={false}\n />\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { IWidgetHeaderAddTriggerProps, WidgetHeaderAddTrigger } from './WidgetHeaderAddTrigger';\nimport { IWidgetHeaderSortProps, WidgetHeaderSort } from './WidgetHeaderSort';\nimport { IWidgetHeaderSummaryProps, WidgetHeaderSummary } from './WidgetHeaderSummary';\n\nexport interface IWidgetHeaderProps {\n children?: JSX.Element | JSX.Element[];\n data?: any;\n}\n\ntype WidgetHeaderComponent = React.FunctionComponent<IWidgetHeaderProps> & {\n Sort: React.FC<IWidgetHeaderSortProps>;\n AddTrigger: React.FC<IWidgetHeaderAddTriggerProps>;\n Summary: React.FC<IWidgetHeaderSummaryProps>;\n};\n\nexport const WidgetHeader: WidgetHeaderComponent = (props: IWidgetHeaderProps) => {\n const [isLoading, setIsLoading] = React.useState(!props.data);\n\n React.useEffect(() => {\n setIsLoading(false);\n }, []);\n\n return (\n <>\n {!isLoading && (\n <div className=\"sledge-product-review__widget-header\">\n {React.Children.count(props.children) &&\n React.Children.map(props.children, (child: any) =>\n React.cloneElement(child, {\n ...props\n })\n )}\n </div>\n )}\n </>\n );\n};\n\nWidgetHeader.Sort = WidgetHeaderSort;\nWidgetHeader.AddTrigger = WidgetHeaderAddTrigger;\nWidgetHeader.Summary = WidgetHeaderSummary;\n","import { API_URL, INSTANT_SEARCH_ENGINE_URL, LOCAL_STORAGE_KEY } from '@core/lib/const';\nimport { sanitizeDataId, fetchApi } from '@core/lib/helper';\n\nexport const search = async (index: any, payload: any) => {\n let sledgeInstantSearchAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_AUTH_APP) || '' : '';\n\n let url = `${INSTANT_SEARCH_ENGINE_URL}/indexes/${index}/search`;\n let headers = {\n 'Content-Type': 'application/json'\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeInstantSearchAuthApp,\n payload,\n headers,\n isSimpleRequest: false\n })\n .then((result) => result)\n .catch(() => {\n return;\n });\n};\n\nexport const multiSearch = async (payload: any, token?: string) => {\n let sledgeInstantSearchAuthApp = token ? token : typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_AUTH_APP) || '' : '';\n\n let url = `${INSTANT_SEARCH_ENGINE_URL}/multi-search`;\n let headers = {\n 'Content-Type': 'application/json'\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeInstantSearchAuthApp,\n payload,\n headers,\n isSimpleRequest: false\n })\n .then((result) => result)\n .catch(() => {\n return;\n });\n};\n\nexport const getFacets = async (index: string, token?: string) => {\n let sledgeInstantSearchAuthApp = token ? token : typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_AUTH_APP) || '' : '';\n\n let url = `${INSTANT_SEARCH_ENGINE_URL}/indexes/${index}/settings/filterable-attributes`;\n let payload = {};\n let headers = {};\n\n return await fetchApi({\n url,\n method: 'GET',\n authorization: sledgeInstantSearchAuthApp,\n payload,\n headers,\n isSimpleRequest: false\n })\n .then((result) => result)\n .catch(() => {\n return;\n });\n};\n\nexport const searchTrigger: any = async (data: { keyword?: string; resultCount?: any }) => {\n const { keyword, resultCount } = data;\n\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/instantsearch/statistics/search`;\n let headers = {\n 'Content-Type': 'application/json'\n };\n let payload = {\n keyword: keyword,\n result_count: resultCount\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeAuthApp,\n payload,\n headers,\n isSimpleRequest: false\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const productClickTrigger: any = async (data: { productId?: string }) => {\n const { productId } = data;\n\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/instantsearch/statistics/click`;\n let headers = {\n 'Content-Type': 'application/json'\n };\n let payload = {\n product: {\n id: sanitizeDataId(productId)\n }\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeAuthApp,\n payload,\n headers,\n isSimpleRequest: false\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const addToCartTrigger: any = async (data: { productId?: string }) => {\n const { productId } = data;\n\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/instantsearch/statistics/cart`;\n let headers = {\n 'Content-Type': 'application/json'\n };\n let payload = {\n product: {\n id: sanitizeDataId(productId)\n }\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeAuthApp,\n payload,\n headers,\n isSimpleRequest: false\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n","import { API_URL, LOCAL_STORAGE_KEY } from '@core/lib/const';\nimport { fetchApi, sanitizeDataId } from '@core/lib/helper';\n\nexport const productRecommendationSourceApps = ['recently-viewed', 'related-product', 'hand-picked', 'new-arrival', 'personalized-curated'] as const;\n\ntype PRSourceAppsType = (typeof productRecommendationSourceApps)[number];\n\nexport interface IProductRecommendationSourceApp {\n productId?: string;\n sourceApp?: PRSourceAppsType;\n}\n\nexport const productClickTrigger: any = async (data: IProductRecommendationSourceApp) => {\n const { productId, sourceApp } = data;\n\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/product-recommendation/statistics/click`;\n let headers = {\n 'Content-Type': 'application/json'\n };\n\n let payload = {\n product_id: sanitizeDataId(productId),\n widget: sourceApp\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeAuthApp,\n payload,\n headers,\n isSimpleRequest: false\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const addToCartTrigger: any = async (data: IProductRecommendationSourceApp) => {\n const { productId, sourceApp } = data;\n\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/product-recommendation/statistics/cart`;\n let headers = {\n 'Content-Type': 'application/json'\n };\n\n let payload = {\n product_id: sanitizeDataId(productId),\n widget: sourceApp\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeAuthApp,\n payload,\n headers,\n isSimpleRequest: false\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n","import React from 'react';\nimport './ProductGrid.css';\n\nimport '@core/lib/polyfills';\n\nimport { CDN_URL, CUSTOM_EVENT_NAMES, LOCAL_STORAGE_KEY } from '@core/lib/const';\nimport { addToCart as shopifyAddToCart } from '@core/api/shopify';\nimport { BagIcon, Button, LoadingDots, Carousel } from '@core/components';\nimport { Trigger } from '@react-wishlist/components';\nimport { Rating } from '@react-product-review/components';\nimport { addToCartTrigger as wishlistAddToCartTrigger } from '@core/api/wishlist';\nimport { addToCartTrigger as instantSearchAddToCartTrigger, productClickTrigger as instantSearchProductClickTrigger } from '@core/api/instant-search';\nimport {\n addToCartTrigger as productRecommendationAddToCartTrigger,\n productClickTrigger as productRecommendationProductClickTrigger,\n productRecommendationSourceApps,\n IProductRecommendationSourceApp\n} from '@core/api/product-recommendation';\nimport { dispatchCustomEvent, objectPresent, setElementAttribute, shopifyFormatMoney, stringToSlug } from '@core/lib/helper';\nimport { useIntersectionObserver } from '@core/hooks';\nimport { renderToComponent, TSchemaNode } from '@core/lib/jsonSchemaToComponent';\n\nexport interface IProductGrid {\n className?: string;\n type?: 'small' | 'medium' | 'large';\n data?: any;\n setting?: {\n show_vendor?: boolean;\n show_sku?: boolean;\n show_price?: boolean;\n show_add_to_cart?: boolean;\n redirect_add_to_cart?: boolean;\n language_button_add_to_cart?: any;\n language_button_out_of_stock?: any;\n display_product_name_style?: any;\n display_price_style?: any;\n display_button_add_to_cart_style?: any;\n };\n showOptionOutOfStock?: boolean;\n triggerPropAdditional?: any;\n sourceApp?: 'wishlist' | 'product-review' | 'instant-search' | IProductRecommendationSourceApp['sourceApp'] | null;\n isComponentJsVersion?: any;\n cards?: any;\n onAfterAddToCart?(state: 'success' | 'failed'): void;\n onAfterAddWishlist?(state: 'success' | 'failed'): void;\n onAfterRemoveWishlist?(state: 'success' | 'failed'): void;\n onAfterRenderProduct?(state: 'success' | 'failed'): void;\n showPopupComponent?: boolean;\n setShowPopupComponent?(value: boolean): void;\n dataReviews?: any;\n dataWishlists?: any;\n useSlider?: boolean;\n previewSettings?: any;\n currentColumnGrid?: any;\n isFlyout?: boolean;\n}\n\ninterface IProductCard extends IProductGrid {\n item?: any;\n handleAddToCart?(data: { id: string | number; quantity: number }): Promise<void>;\n clickedAddToCartId?: string | number | null;\n generalDataSettings?: any;\n}\n\ninterface IVariantSelector {\n data: any;\n setSelectedVariantId?(value: React.SetStateAction<any>): void;\n setSelectedVariantStock?(value: React.SetStateAction<any>): void;\n setSelectedVariantInventoryManagement?(value: React.SetStateAction<any>): void;\n setSelectedVariantInventoryPolicy?(value: React.SetStateAction<any>): void;\n}\n\nconst VariantSelector = (props: IVariantSelector) => {\n const { data, setSelectedVariantId, setSelectedVariantStock, setSelectedVariantInventoryManagement, setSelectedVariantInventoryPolicy } = props;\n\n const { product } = data || {};\n const { variants } = product || {};\n const { id, handle } = product || {};\n\n const options = product?.options ? Object.entries(product.options) : [];\n const images = product?.images ?? [];\n\n const defaultSelected: any = {};\n\n function setDefaultFunction() {\n if (!variants?.length) return;\n\n defaultSelected['data-product-id'] = id;\n defaultSelected['data-product-handle'] = handle;\n defaultSelected['data-selected-option1'] = variants[0].option1;\n if (variants[0].option2) {\n defaultSelected['data-selected-option2'] = variants[0].option2;\n }\n defaultSelected['data-variant-id'] = variants[0].admin_graphql_api_id;\n defaultSelected['data-inventory-quantity'] = variants[0].inventory_quantity;\n defaultSelected['data-inventory-management'] = variants[0].inventory_management;\n defaultSelected['data-inventory-policy'] = variants[0].inventory_policy;\n }\n\n setDefaultFunction();\n\n function setSelectedOption(element: any, optionName: any) {\n const optionsButton = element.target.offsetParent.querySelector(`.options-button-${stringToSlug(optionName)}`).querySelectorAll(`button`);\n\n const defaultSelectedClassChanger = () => {\n optionsButton.forEach((button: any, index: any) => {\n button.classList.remove('sledge__product-variant-size-swatch-active');\n element.target.className += ' sledge__product-variant-size-swatch-active';\n });\n };\n\n const colorSelectedClassChanger = () => {\n optionsButton.forEach((button: any, index: any) => {\n button.classList.remove('sledge__product-variant-color-swatch-active');\n element.target.className += ' sledge__product-variant-color-swatch-active';\n });\n };\n\n switch (optionName) {\n case 'Color':\n colorSelectedClassChanger();\n break;\n case 'Size':\n defaultSelectedClassChanger();\n break;\n default:\n defaultSelectedClassChanger();\n }\n }\n\n function setSelectedVariant(element: any, value: any, optionIndex: number) {\n const parentCard = element.target.offsetParent;\n const selectedInput = parentCard.querySelector(`.sledge__product-grid-card-selected-option[data-product-id='${id}']`);\n\n setElementAttribute({\n element: selectedInput,\n attributeName: `data-selected-option${optionIndex}`,\n value: value\n });\n\n // define option1 and option 2\n const option1 = `[data-option-1=\"${stringToSlug(selectedInput?.attributes?.['data-selected-option1']?.value)}\"]`;\n const option2 = `${selectedInput?.attributes?.['data-selected-option2'] ? `[data-option-2=\"${stringToSlug(selectedInput?.attributes?.['data-selected-option2']?.value)}\"]` : ''}`;\n\n // define selected option\n const selectOption = parentCard.querySelector(`select option${option1}${option2}`);\n const variantId = selectOption.attributes['data-graphql-id'].value;\n const imageId = selectOption.attributes['data-image-id']?.value;\n const inventoryQuantity = selectOption.attributes['data-inventory-quantity']?.value;\n const inventoryManagement = selectOption.attributes['data-inventory-management']?.value;\n const inventoryPolicy = selectOption.attributes['data-inventory-policy']?.value;\n\n const setOther = () => {\n //set data-variant-id attribute\n setElementAttribute({\n element: selectedInput,\n attributeName: 'data-variant-id',\n value: selectOption?.attributes?.['data-graphql-id']?.value || ''\n });\n setElementAttribute({\n element: selectedInput,\n attributeName: 'data-inventory-quantity',\n value: inventoryQuantity || ''\n });\n setElementAttribute({\n element: selectedInput,\n attributeName: 'data-inventory-management',\n value: inventoryManagement || ''\n });\n setElementAttribute({\n element: selectedInput,\n attributeName: 'data-inventory-policy',\n value: inventoryPolicy || ''\n });\n\n if (variantId) setSelectedVariantId?.(variantId);\n if (inventoryQuantity) setSelectedVariantStock?.(inventoryQuantity);\n if (inventoryManagement) setSelectedVariantInventoryManagement?.(inventoryManagement);\n if (inventoryPolicy) setSelectedVariantInventoryPolicy?.(inventoryPolicy);\n\n //change product image by variant\n if (imageId)\n parentCard.querySelector(`img.sledge__product-grid-card-image-featured-image`).src = parentCard.querySelector(\n `div.sledge__product-grid-card-variant-images img[id=\"${imageId}\"]`\n ).src;\n };\n\n setOther();\n\n const result = {\n variantId,\n imageId\n };\n\n return result;\n }\n\n return (\n <div className=\"sledge__product-grid-card-variant-swatch\">\n {/* variant trigger */}\n <input type=\"hidden\" {...defaultSelected} className=\"sledge__product-grid-card-selected-option\" />\n <select className=\"variant-picker sledge__product-grid-card-variant-picker\">\n {variants?.map((variant: any) => {\n const { title, option1, option2, position, id, admin_graphql_api_id, image_id, inventory_quantity, inventory_management, inventory_policy }: any = variant;\n\n let optionAttributes = {\n 'data-option-1': option1,\n 'data-option-2': option2,\n 'data-inventory-quantity': inventory_quantity,\n 'data-inventory-management': inventory_management,\n 'data-inventory-policy': inventory_policy,\n 'data-position': position,\n 'data-id': id,\n 'data-graphql-id': admin_graphql_api_id,\n 'data-image-id': image_id\n };\n\n return (\n <option key={id} {...optionAttributes}>\n {title}\n </option>\n );\n })}\n </select>\n <div className=\"sledge__product-grid-card-variant-images\">\n {images?.map((image: any) => (\n <input type=\"hidden\" key={image?.id} id={image?.id} value={image?.src} />\n ))}\n </div>\n\n {/* variant picker */}\n {options?.map((option: any, optionParentIndex: number) => {\n const optionName = option[0];\n const optionValues = option[1];\n\n let selectedOption = optionValues[0];\n\n return (\n <>\n {optionValues[0] !== 'Default Title' && (\n <div className={`sledge__product-variant-size-swatch-flex options-button-${stringToSlug(optionName)}`} key={optionParentIndex}>\n {optionValues.map((item: any, index: number) => {\n const defaultOptionClass = `\n${selectedOption === item ? 'sledge__product-variant-size-swatch-active' : ''} sledge__product-variant-size-swatch`;\n\n const colorOptionClass = `${selectedOption === item ? 'sledge__product-variant-color-swatch-active' : ''} sledge__product-variant-color-swatch`;\n const colorDataSettings = JSON.parse(localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) as any)?.colors || [];\n const getColorSwatch = colorDataSettings?.filter(({ name }: any) => name === item)[0] || {};\n const colorSwatch = getColorSwatch?.image ? `url(${getColorSwatch?.image})` : getColorSwatch?.rgb || item;\n\n return (\n <button\n type=\"button\"\n key={index}\n className={optionName === 'Color' ? colorOptionClass : defaultOptionClass}\n style={{\n background: optionName === 'Color' ? colorSwatch : null,\n backgroundSize: 'contain'\n }}\n onClick={(el) => {\n setSelectedVariant(el, item, optionParentIndex + 1);\n setSelectedOption(el, optionName);\n }}\n title={optionName === 'Color' ? null : item}\n >\n {optionName === 'Color' ? null : item}\n </button>\n );\n })}\n </div>\n )}\n </>\n );\n })}\n </div>\n );\n};\n\nconst ProductCard = React.memo((props: IProductCard) => {\n const {\n item,\n handleAddToCart,\n clickedAddToCartId,\n setting,\n showOptionOutOfStock = false,\n triggerPropAdditional,\n sourceApp = null,\n isComponentJsVersion = false,\n cards: CardsComponent,\n onAfterAddWishlist,\n onAfterRemoveWishlist,\n showPopupComponent,\n setShowPopupComponent,\n dataReviews,\n dataWishlists,\n generalDataSettings,\n previewSettings,\n isFlyout\n } = props;\n\n const {\n show_vendor = true,\n show_sku = true,\n show_price = true,\n show_add_to_cart = true,\n language_button_add_to_cart,\n language_button_out_of_stock,\n display_product_name_style = {},\n display_price_style = {},\n display_button_add_to_cart_style = {}\n } = setting || {};\n\n const { product, variants } = item || {};\n const { id, title, image, url, vendor = '', currency, handle } = product || {};\n const {\n id: variant_id = '',\n admin_graphql_api_id: variant_admin_graphql_api_id = '',\n title: variant_title = '',\n price = '',\n compare_at_price = '',\n sku = ''\n } = variants?.length ? variants[0] : {};\n\n const defaultSelectedVariantId = variant_admin_graphql_api_id ? variant_admin_graphql_api_id : '';\n const defaultSelectedVariantStock = variants?.length && Object.hasOwn(variants[0], 'inventory_quantity') ? variants[0].inventory_quantity : 0;\n const defaultSelectedVariantInventoryManagement = variants?.length && Object.hasOwn(variants[0], 'inventory_management') ? variants[0].inventory_management : null;\n const defaultSelectedVariantInventoryPolicy = variants?.length && Object.hasOwn(variants[0], 'inventory_policy') ? variants[0].inventory_policy : '';\n\n const [selectedVariantId, setSelectedVariantId] = React.useState(defaultSelectedVariantId);\n const [selectedVariantStock, setSelectedVariantStock] = React.useState(defaultSelectedVariantStock);\n const [selectedVariantInventoryManagement, setSelectedVariantInventoryManagement] = React.useState(defaultSelectedVariantInventoryManagement);\n const [selectedVariantInventoryPolicy, setSelectedVariantInventoryPolicy] = React.useState(defaultSelectedVariantInventoryPolicy);\n const [hasEntryImage, setHasEntryImage] = React.useState(false);\n\n const [imageRef, imageEntry] = useIntersectionObserver({\n threshold: 0.1,\n root: null,\n rootMargin: '0px'\n });\n\n React.useEffect(() => {\n if (!hasEntryImage && imageEntry?.isIntersecting) setHasEntryImage(imageEntry?.isIntersecting);\n }, [imageEntry]);\n\n let isLoadingAddToCart = clickedAddToCartId == selectedVariantId;\n let isOutOfStock = showOptionOutOfStock ? !Boolean(selectedVariantStock > 0 || selectedVariantInventoryManagement === null || selectedVariantInventoryPolicy === 'continue') : false;\n let isOnSale = parseFloat(String(compare_at_price)) ? parseFloat(String(compare_at_price)) > parseFloat(String(price)) : false;\n\n const { money_format } = generalDataSettings || {};\n\n let component = null;\n\n if (CardsComponent) {\n const CardsProps = {\n product: {\n ...product,\n ...{\n variants: variants?.map((variant: any, index: number) => {\n const isInventoryQuantity = Object.hasOwn(variants[index], 'inventory_quantity') ? variants[index].inventory_quantity > 0 : false;\n const isInventoryManagement = Object.hasOwn(variants[index], 'inventory_management') ? variants[index].inventory_management === null : false;\n const isInventoryPolicy = Object.hasOwn(variants[index], 'inventory_policy') ? variants[index].inventory_policy === 'continue' : false;\n\n return {\n ...variant,\n is_out_of_stock: !Boolean(isInventoryQuantity || isInventoryManagement || isInventoryPolicy)\n };\n })\n },\n ...(dataReviews && Object.keys(dataReviews).length\n ? {\n review: {\n total: dataReviews?.[id]?.review_count ? dataReviews?.[id].review_count : 0,\n average: dataReviews?.[id]?.rating?.average ? dataReviews?.[id].rating.average : 0\n }\n }\n : {})\n },\n showPopupComponent,\n setShowPopupComponent,\n sourceApp\n };\n\n component = <>{isComponentJsVersion ? <div dangerouslySetInnerHTML={{ __html: CardsComponent({ ...CardsProps }) }}></div> : <CardsComponent {...CardsProps} />}</>;\n } else {\n component = (\n <>\n {isFlyout ? (\n <div className=\"sledge__product-grid-card-flyout\">\n <div className=\"sledge__product-grid-card-flyout-wishlist-trigger\">\n <Trigger\n params={{\n productId: id,\n productVariantId: variant_id,\n productName: title,\n productVendor: vendor,\n productSku: sku,\n productVariantName: variant_title,\n productLink: url,\n productImage: image?.src || `${CDN_URL}/images/blank-image.png`,\n productCurrency: currency,\n productPrice: price\n }}\n {...triggerPropAdditional}\n onAfterAddWishlist={onAfterAddWishlist}\n onAfterRemoveWishlist={onAfterRemoveWishlist}\n wishlistChecked={dataWishlists?.[id]}\n />\n </div>\n\n <div className=\"sledge__product-grid-card-image-flyout\">\n <a\n href={url}\n onClick={() => {\n if (sourceApp === 'instant-search') {\n instantSearchProductClickTrigger({\n productId: id\n });\n } else if (productRecommendationSourceApps.includes(sourceApp as any)) {\n productRecommendationProductClickTrigger({\n productId: id,\n sourceApp\n });\n }\n }}\n className=\"sledge__product-grid-card-image-link-flyout\"\n >\n <img\n ref={imageRef}\n {...{\n src: image?.src || `${CDN_URL}/images/blank-image.png`,\n ['loaded']: ''\n }}\n alt=\"sledge-card-image\"\n loading=\"lazy\"\n className=\"sledge__product-grid-card-image-featured-image-flyout\"\n onError={({ currentTarget }) => {\n if (!currentTarget) return;\n\n currentTarget.onerror = null;\n currentTarget.src = `${CDN_URL}/images/blank-image.png`;\n }}\n />\n </a>\n </div>\n\n <div className=\"sledge__product-grid-card-desc-flyout\">\n {title ? (\n <a\n href={url}\n onClick={() => {\n if (sourceApp === 'instant-search') {\n instantSearchProductClickTrigger({\n productId: id\n });\n } else if (productRecommendationSourceApps.includes(sourceApp as any)) {\n productRecommendationProductClickTrigger({\n productId: id,\n sourceApp\n });\n }\n }}\n >\n <h3 className=\"sledge__product-grid-card-product-name-flyout\" style={display_product_name_style}>\n {title}\n </h3>\n </a>\n ) : null}\n\n {show_price ? (\n <div className=\"sledge__product-grid-card-price-flyout\">\n <div style={display_price_style} dangerouslySetInnerHTML={{ __html: shopifyFormatMoney(price * 100, money_format) }}></div>\n {isOnSale && (\n <div\n className=\"sledge__product-grid-card-compare-at-price-flyout\"\n dangerouslySetInnerHTML={{ __html: shopifyFormatMoney(compare_at_price * 100, money_format) }}\n ></div>\n )}\n </div>\n ) : null}\n </div>\n </div>\n ) : (\n <div className=\"sledge__product-grid-card\">\n <div className=\"sledge__product-grid-content\">\n <div className=\"sledge__product-grid-card-image\">\n <a\n href={url}\n onClick={() => {\n if (sourceApp === 'instant-search') {\n instantSearchProductClickTrigger({\n productId: id\n });\n } else if (productRecommendationSourceApps.includes(sourceApp as any)) {\n productRecommendationProductClickTrigger({\n productId: id,\n sourceApp\n });\n }\n }}\n className=\"sledge__product-grid-card-image-link\"\n >\n {isOnSale && <div className=\"sledge__product-grid-badge-on-sale\">ON SALE</div>}\n <Trigger\n params={{\n productId: id,\n productVariantId: variant_id,\n productName: title,\n productVendor: vendor,\n productSku: sku,\n productVariantName: variant_title,\n productLink: url,\n productImage: image?.src || `${CDN_URL}/images/blank-image.png`,\n productCurrency: currency,\n productPrice: price\n }}\n {...triggerPropAdditional}\n onAfterAddWishlist={onAfterAddWishlist}\n onAfterRemoveWishlist={onAfterRemoveWishlist}\n wishlistChecked={dataWishlists?.[id]}\n />\n <div className=\"sledge__product-grid-card-featured-image-element\">\n <img\n ref={imageRef}\n {...(hasEntryImage\n ? {\n src: image?.src || `${CDN_URL}/images/blank-image.png`,\n ['loaded']: ''\n }\n : {\n ['data-src']: image?.src || `${CDN_URL}/images/blank-image.png`\n })}\n alt=\"sledge-card-image\"\n loading=\"lazy\"\n className=\"sledge__product-grid-card-image-featured-image\"\n onError={({ currentTarget }) => {\n if (!currentTarget) return;\n\n currentTarget.onerror = null;\n currentTarget.src = `${CDN_URL}/images/blank-image.png`;\n }}\n />\n </div>\n <div className=\"sledge__product-grid-card-variant-images\">\n {product?.images?.map?.((image: any) => (\n <img\n key={image?.id}\n decoding=\"async\"\n id={image?.id}\n height=\"270\"\n loading=\"lazy\"\n src={image?.src}\n alt={product?.title}\n width={269.92}\n style={{ aspectRatio: 269.92 / 270 }}\n />\n ))}\n </div>\n </a>\n {isOutOfStock ? <div className=\"sledge__product-grid-card-out-of-stock\">{language_button_out_of_stock || 'Sold out'}</div> : null}\n </div>\n <div className=\"sledge__product-grid-card-desc\">\n <div className=\"sledge__product-grid-card-title\">\n {show_price ? (\n <div className=\"sledge__product-grid-card-price\">\n <div style={display_price_style} dangerouslySetInnerHTML={{ __html: shopifyFormatMoney(price * 100, money_format) }}></div>\n {isOnSale && (\n <div\n className=\"sledge__product-grid-card-compare-at-price\"\n dangerouslySetInnerHTML={{ __html: shopifyFormatMoney(compare_at_price * 100, money_format) }}\n ></div>\n )}\n </div>\n ) : null}\n\n {show_vendor && vendor ? (\n <div className=\"sledge__product-grid-badge-vendor\" title={vendor}>\n Vendor: {vendor}\n </div>\n ) : null}\n </div>\n <div className=\"sledge__product-grid-card-rating\">\n <Rating\n params={{\n productId: id\n }}\n size=\"xs\"\n withSkeletonLoading={false}\n isScrollToElementWidget={false}\n data={dataReviews?.[id]}\n />\n </div>\n {title ? (\n <a\n href={url}\n onClick={() => {\n if (sourceApp === 'instant-search') {\n instantSearchProductClickTrigger({\n productId: id\n });\n } else if (productRecommendationSourceApps.includes(sourceApp as any)) {\n productRecommendationProductClickTrigger({\n productId: id,\n sourceApp\n });\n }\n }}\n >\n <h3 className=\"sledge__product-grid-card-product-name\" style={display_product_name_style}>\n {title}\n </h3>\n </a>\n ) : null}\n <div className=\"sledge__product-grid-card-text\">{show_sku && sku ? <div>SKU: {sku}</div> : null}</div>\n <VariantSelector\n data={{\n product: {\n ...product,\n variants\n }\n }}\n setSelectedVariantId={setSelectedVariantId}\n setSelectedVariantStock={setSelectedVariantStock}\n setSelectedVariantInventoryManagement={setSelectedVariantInventoryManagement}\n setSelectedVariantInventoryPolicy={setSelectedVariantInventoryPolicy}\n />\n </div>\n </div>\n {show_add_to_cart ? (\n <div className=\"sledge__product-grid-button-wrapper\">\n <Button\n type=\"button\"\n colorType=\"light\"\n className=\"sledge__product-grid-button-add-to-cart\"\n style={{\n ...display_button_add_to_cart_style,\n ...(isLoadingAddToCart && {\n cursor: 'wait'\n })\n }}\n {...(isLoadingAddToCart || isOutOfStock\n ? {\n disabled: true\n }\n : {\n onClick: () => {\n handleAddToCart &&\n handleAddToCart({\n id: selectedVariantId,\n quantity: 1\n });\n }\n })}\n >\n {isOutOfStock ? (\n <>\n <BagIcon width={15} height={15} color=\"currentColor\" />\n <span>{language_button_out_of_stock || 'Sold out'}</span>\n </>\n ) : (\n <>\n {isLoadingAddToCart ? <LoadingDots /> : null}\n <BagIcon width={15} height={15} color=\"currentColor\" />\n <span>{language_button_add_to_cart || 'Add To Cart'}</span>\n </>\n )}\n </Button>\n </div>\n ) : null}\n </div>\n )}\n </>\n );\n }\n\n return <React.Fragment key={id}>{component}</React.Fragment>;\n});\n\nexport const ProductGrid = React.memo((props: IProductGrid) => {\n const { type, className = '', data, setting, sourceApp = null, useSlider = false, isFlyout = false, onAfterAddToCart, onAfterRenderProduct, currentColumnGrid } = props;\n const { redirect_add_to_cart = true } = setting || {};\n\n const [clickedAddToCartId, setClickedAddToCartId] = React.useState<string | number | null>(null);\n const [generalDataSettings, setGeneralDataSettings] = React.useState<any>({});\n\n const handleAddToCart = async (data: { id: string | number; quantity: number }) => {\n const { id, quantity } = data;\n\n setClickedAddToCartId(id);\n let resShopifyAddToCart = await shopifyAddToCart([\n {\n id: id,\n quantity: quantity\n }\n ]);\n\n if (resShopifyAddToCart?.items?.length) {\n if (sourceApp === 'wishlist') {\n await wishlistAddToCartTrigger({\n productId: id\n });\n } else if (sourceApp === 'instant-search') {\n await instantSearchAddToCartTrigger({\n productId: id\n });\n } else if (productRecommendationSourceApps.includes(sourceApp as any)) {\n await productRecommendationAddToCartTrigger({\n productId: id,\n sourceApp\n });\n }\n\n setClickedAddToCartId(null);\n onAfterAddToCart && onAfterAddToCart('success');\n\n if (redirect_add_to_cart) {\n window.location.href = '/cart';\n } else {\n window.sledgeToastNotification({\n title: 'Cart added',\n message: 'Successfully added to wishlist',\n type: 'success',\n icon: <BagIcon width={40} height={40} color=\"black\" />\n });\n }\n } else {\n onAfterAddToCart && onAfterAddToCart('failed');\n\n setTimeout(() => {\n setClickedAddToCartId(null);\n if (typeof window !== 'undefined' && window.sledgeToastNotification)\n window.sledgeToastNotification({\n title: 'Failed',\n message: resShopifyAddToCart?.description?.length ? resShopifyAddToCart.description : 'failed add to cart, please try again',\n type: 'failed',\n icon: <BagIcon width={40} height={40} color=\"black\" />\n });\n }, 1000);\n }\n };\n\n const handleSettings = () => {\n let responseGeneral: any;\n\n responseGeneral = JSON.parse((localStorage.getItem(LOCAL_STORAGE_KEY.GENERAL_SETTING) || null) as string);\n\n if (responseGeneral) setGeneralDataSettings(responseGeneral);\n };\n\n const Container = useSlider ? Carousel : 'div';\n\n const carouselSourceProp: any =\n (useSlider && {\n carouselSourceWidget: 'productGrid'\n }) ||\n null;\n\n React.useEffect(() => {\n dispatchCustomEvent(CUSTOM_EVENT_NAMES.AFTER_RENDER_PRODUCT, {\n state: 'success'\n });\n\n onAfterRenderProduct && onAfterRenderProduct('success');\n handleSettings();\n }, []);\n\n return (\n <Container\n className={`sledge__product-grid ${className}`}\n {...carouselSourceProp}\n data-grid-type={type}\n data-grid-desktop-column={currentColumnGrid?.desktop}\n data-grid-mobile-column={currentColumnGrid?.mobile}\n data-custom-card={Boolean(props?.cards)}\n data-flyout={isFlyout}\n >\n {data?.map((item: any, index: number) => {\n return (\n <ProductCard\n item={item}\n key={`sledge-product-card_${index}`}\n handleAddToCart={handleAddToCart}\n clickedAddToCartId={clickedAddToCartId}\n generalDataSettings={generalDataSettings}\n {...props}\n />\n );\n })}\n </Container>\n );\n});\n","import React from 'react';\n\nimport './InputField.css';\n\nimport * as Form from '@radix-ui/react-form';\n\nexport const InputField = (props: any) => {\n const { className = '', value = '', onChange, required, type, name = '', ...otherProps } = props;\n\n const handleChangeField = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange && onChange(e);\n };\n\n return (\n <div className={`sledge__input-field-wrapper ${className || ''}`}>\n <Form.Field className=\"FormField\" name={name}>\n <Form.Control asChild>\n <input\n className=\"sledge__input-field\"\n type={type}\n value={value}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => handleChangeField(e)}\n {...(required\n ? {\n required\n }\n : {})}\n {...otherProps}\n />\n </Form.Control>\n {required && (\n <Form.Message className=\"FormMessage\" match=\"valueMissing\">\n Required field\n </Form.Message>\n )}\n {type === 'email' && (\n <Form.Message className=\"FormMessage\" match=\"typeMismatch\">\n Please fill a valid email address\n </Form.Message>\n )}\n </Form.Field>\n </div>\n );\n};\n","import React from 'react';\nimport './CollectionGrid.css';\n\nimport { CDN_URL, CUSTOM_EVENT_NAMES } from '@core/lib/const';\nimport { dispatchCustomEvent, stripTags } from '@core/lib/helper';\n\nexport interface ICollectionGrid {\n className?: string;\n data: any;\n cards?: any;\n isComponentJsVersion?: any;\n onAfterRenderCollection?(state: 'success' | 'failed'): void;\n}\n\nexport const CollectionGrid = ({ className = '', data, cards: CardsComponent, isComponentJsVersion, onAfterRenderCollection }: ICollectionGrid) => {\n React.useEffect(() => {\n dispatchCustomEvent(CUSTOM_EVENT_NAMES.AFTER_RENDER_COLLECTION, {\n state: 'success'\n });\n\n onAfterRenderCollection && onAfterRenderCollection('success');\n }, []);\n\n return (\n <>\n {!data?.length ? null : (\n <div className={`sledge__collection-grid ${className}`}>\n {data.map((item: any, index: number) => {\n const { id, title, body_html, url, image } = item;\n\n if (CardsComponent) {\n const CardsProps = { data: item };\n\n return (\n <React.Fragment key={index}>\n {isComponentJsVersion ? <div dangerouslySetInnerHTML={{ __html: CardsComponent({ ...CardsProps }) }}></div> : <CardsComponent {...CardsProps} />}\n </React.Fragment>\n );\n } else {\n return (\n <a href={url} key={index}>\n <div className=\"sledge__collection-grid-card\">\n <div className=\"sledge__collection-grid-card-image-wrapper\">\n <div className=\"sledge__collection-grid-card-image\">\n <img src={image?.src || `${CDN_URL}/images/blank-image.png`} alt=\"sledge-card-image\" loading=\"lazy\" />\n </div>\n </div>\n <div className=\"sledge__collection-grid-card-content\">\n <div className=\"sledge__collection-grid-card-content-title\">{title}</div>\n {body_html ? <div className=\"sledge__collection-grid-card-content-description\">{stripTags(body_html)}</div> : null}\n </div>\n </div>\n </a>\n );\n }\n })}\n </div>\n )}\n </>\n );\n};\n","import React from 'react';\nimport './PageGrid.css';\n\nimport { CDN_URL, CUSTOM_EVENT_NAMES } from '@core/lib/const';\nimport { dispatchCustomEvent, stripTags } from '@core/lib/helper';\n\nexport interface IPageGrid {\n className?: string;\n data: any;\n cards?: any;\n isComponentJsVersion?: any;\n onAfterRenderPage?(state: 'success' | 'failed'): void;\n}\n\nexport const PageGrid = ({ className = '', data, cards: CardsComponent, isComponentJsVersion, onAfterRenderPage }: IPageGrid) => {\n React.useEffect(() => {\n dispatchCustomEvent(CUSTOM_EVENT_NAMES.AFTER_RENDER_PAGE, {\n state: 'success'\n });\n\n onAfterRenderPage && onAfterRenderPage('success');\n }, []);\n\n return (\n <>\n {!data?.length ? null : (\n <div className={`sledge__page-grid ${className}`}>\n {data.map((item: any, index: number) => {\n const { id, title, body_html, url, image } = item;\n\n if (CardsComponent) {\n const CardsProps = { data: item };\n\n return (\n <React.Fragment key={index}>\n {isComponentJsVersion ? <div dangerouslySetInnerHTML={{ __html: CardsComponent({ ...CardsProps }) }}></div> : <CardsComponent {...CardsProps} />}\n </React.Fragment>\n );\n } else {\n return (\n <a href={url} key={index}>\n <div className=\"sledge__page-grid-card\">\n <div className=\"sledge__page-grid-card-image-wrapper\">\n <div className=\"sledge__page-grid-card-image\">\n <img src={image?.src || `${CDN_URL}/images/blank-image.png`} alt=\"sledge-card-image\" loading=\"lazy\" />\n </div>\n </div>\n <div className=\"sledge__page-grid-card-content\">\n <div className=\"sledge__page-grid-card-content-title\">{title}</div>\n {body_html ? <div className=\"sledge__page-grid-card-content-description\">{stripTags(body_html)}</div> : null}\n </div>\n </div>\n </a>\n );\n }\n })}\n </div>\n )}\n </>\n );\n};\n","import React from 'react';\nimport './BlogGrid.css';\n\nimport { CDN_URL, CUSTOM_EVENT_NAMES } from '@core/lib/const';\nimport { Button, NoteIcon } from '@core/components';\nimport { convertDate, dispatchCustomEvent } from '@core/lib/helper';\n\nexport interface IBlogGrid {\n className?: string;\n data: any;\n cards?: any;\n isComponentJsVersion?: any;\n onAfterRenderBlog?(state: 'success' | 'failed'): void;\n}\n\nexport const BlogGrid = ({ className = '', data, cards: CardsComponent, isComponentJsVersion, onAfterRenderBlog }: IBlogGrid) => {\n React.useEffect(() => {\n dispatchCustomEvent(CUSTOM_EVENT_NAMES.AFTER_RENDER_BLOG, {\n state: 'success'\n });\n\n onAfterRenderBlog && onAfterRenderBlog('success');\n }, []);\n\n return (\n <>\n {!data?.length ? null : (\n <div className={`sledge__blog-grid ${className}`}>\n {data?.map((item: any, index: number) => {\n const { id, title, created_at, url, image } = item;\n\n if (CardsComponent) {\n const CardsProps = { data: item };\n\n return (\n <React.Fragment key={index}>\n {isComponentJsVersion ? <div dangerouslySetInnerHTML={{ __html: CardsComponent({ ...CardsProps }) }}></div> : <CardsComponent {...CardsProps} />}\n </React.Fragment>\n );\n } else {\n return (\n <div className=\"sledge__blog-grid-card\" key={index}>\n <div className=\"sledge__blog-grid-content\">\n <div className=\"sledge__blog-grid-card-image\">\n <a href={url}>\n <img src={image?.src || `${CDN_URL}/images/blank-image.png`} alt=\"sledge-card-image\" loading=\"lazy\" />\n </a>\n </div>\n <div className=\"sledge__blog-grid-card-desc\">\n <a href={url}>\n <div className=\"sledge__blog-grid-card-title\">{title}</div>\n </a>\n {created_at ? <div className=\"sledge__blog-grid-badge-vendor\">{convertDate(created_at)}</div> : null}\n </div>\n </div>\n <div className=\"sledge__blog-grid-button-wrapper\">\n <a href={url}>\n <Button type=\"button\" colorType=\"light\">\n <NoteIcon width={16} height={16} color=\"#000000\" />\n <span>View Blog</span>\n </Button>\n </a>\n </div>\n </div>\n );\n }\n })}\n </div>\n )}\n </>\n );\n};\n","import React from 'react';\nimport './ArticleGrid.css';\n\nimport { CDN_URL, CUSTOM_EVENT_NAMES } from '@core/lib/const';\nimport { Button, NoteIcon } from '@core/components';\nimport { convertDate, dispatchCustomEvent, stripTags } from '@core/lib/helper';\n\nexport interface IArticleGrid {\n className?: string;\n data: any;\n cards?: any;\n isComponentJsVersion?: any;\n onAfterRenderArticle?(state: 'success' | 'failed'): void;\n}\n\nexport const ArticleGrid = ({ className = '', data, cards: CardsComponent, isComponentJsVersion, onAfterRenderArticle }: IArticleGrid) => {\n React.useEffect(() => {\n dispatchCustomEvent(CUSTOM_EVENT_NAMES.AFTER_RENDER_ARTICLE, {\n state: 'success'\n });\n\n onAfterRenderArticle && onAfterRenderArticle('success');\n }, []);\n\n return (\n <>\n {!data?.length ? null : (\n <div className={`sledge__article-grid ${className}`}>\n {data?.map((item: any, index: number) => {\n const { id, title, created_at, summary_html, url, image } = item;\n\n if (CardsComponent) {\n const CardsProps = { data: item };\n\n return (\n <React.Fragment key={index}>\n {isComponentJsVersion ? <div dangerouslySetInnerHTML={{ __html: CardsComponent({ ...CardsProps }) }}></div> : <CardsComponent {...CardsProps} />}\n </React.Fragment>\n );\n } else {\n return (\n <div className=\"sledge__article-grid-card\" key={index}>\n <div className=\"sledge__article-grid-content\">\n <div className=\"sledge__article-grid-card-image\">\n <a href={url}>\n <img src={image?.src || `${CDN_URL}/images/blank-image.png`} alt=\"sledge-card-image\" loading=\"lazy\" />\n </a>\n </div>\n <div className=\"sledge__article-grid-card-desc\">\n <a href={url}>\n <div className=\"sledge__article-grid-card-title\">{title}</div>\n </a>\n {created_at ? <div className=\"sledge__article-grid-badge-vendor\">{convertDate(created_at)}</div> : null}\n {summary_html ? <div className=\"sledge__article-grid-card-text\">{stripTags(summary_html)}</div> : null}\n </div>\n </div>\n <div className=\"sledge__article-grid-button-wrapper\">\n <a href={url}>\n <Button type=\"button\" colorType=\"light\">\n <NoteIcon width={16} height={16} color=\"#000000\" />\n <span>View Article</span>\n </Button>\n </a>\n </div>\n </div>\n );\n }\n })}\n </div>\n )}\n </>\n );\n};\n","import React from 'react';\nimport * as TooltipElement from '@radix-ui/react-tooltip';\n\nimport './Tooltip.css';\n\nexport interface ITooltipProps {\n children: React.ReactNode;\n content?: React.ReactNode;\n innerHTMLContent?: string;\n withArrow?: boolean;\n customArrow?: string;\n sideOffset?: number;\n alignOffset?: number;\n wrapTrigger?: boolean;\n}\n\nexport const Tooltip = ({ children, content = null, innerHTMLContent = '', withArrow = true, customArrow = '', sideOffset = 5, alignOffset = 0, wrapTrigger = true }: ITooltipProps) => {\n const [open, setOpen] = React.useState(false);\n\n React.useEffect(() => {\n let arrowElement = document?.querySelector('.sledge__tooltip-arrow')?.parentElement;\n\n if (arrowElement && customArrow?.length) {\n arrowElement.classList.add('sledge__tooltip-arrow-parent');\n arrowElement.innerHTML = customArrow;\n }\n }, [open]);\n\n return (\n <TooltipElement.Provider delayDuration={0}>\n <TooltipElement.Root onOpenChange={setOpen}>\n <TooltipElement.Trigger asChild>{wrapTrigger ? <span>{children}</span> : children}</TooltipElement.Trigger>\n <TooltipElement.Portal>\n <TooltipElement.Content className=\"sledge__tooltip-content\" sideOffset={sideOffset} alignOffset={alignOffset}>\n {content}\n {innerHTMLContent && <div dangerouslySetInnerHTML={{ __html: innerHTMLContent }}></div>}\n\n {withArrow ? <TooltipElement.Arrow className=\"sledge__tooltip-arrow\" /> : null}\n </TooltipElement.Content>\n </TooltipElement.Portal>\n </TooltipElement.Root>\n </TooltipElement.Provider>\n );\n};\n","import React from 'react';\nimport * as ScrollAreaElement from '@radix-ui/react-scroll-area';\n\nimport './ScrollArea.css';\n\nexport interface IScrollAreaProps {\n children: React.ReactNode;\n isLoading?: boolean;\n className?: string;\n}\n\nexport const ScrollArea = ({ children, isLoading = false, className = '' }: IScrollAreaProps) => {\n return (\n <ScrollAreaElement.Root className={`sledge__scroll-area-root ${className}`}>\n <ScrollAreaElement.Viewport className={`sledge__scroll-area-viewport ${isLoading ? 'sledge__scroll-area-viewport-loading' : ''}`}>{children}</ScrollAreaElement.Viewport>\n {!isLoading && (\n <>\n <ScrollAreaElement.Scrollbar className=\"sledge__scroll-area-scrollbar\" orientation=\"vertical\">\n <ScrollAreaElement.Thumb className=\"sledge__scroll-area-thumb\" />\n </ScrollAreaElement.Scrollbar>\n <ScrollAreaElement.Scrollbar className=\"sledge__scroll-area-scrollbar\" orientation=\"horizontal\">\n <ScrollAreaElement.Thumb className=\"sledge__scroll-area-thumb\" />\n </ScrollAreaElement.Scrollbar>\n </>\n )}\n </ScrollAreaElement.Root>\n );\n};\n","import React from 'react';\nimport { LOCAL_STORAGE_KEY } from '@core/lib/const';\n\nexport interface ISkeletonItemProps {\n width: string;\n height: string;\n rounded: 'none' | 'sm' | 'md' | 'lg' | 'full';\n color: 'lighten' | 'darken';\n style?: React.CSSProperties;\n className?: string;\n}\n\nexport const SkeletonItem = ({ width, height, rounded, color, style = {}, className = '', ...otherProps }: ISkeletonItemProps) => {\n const [dataSettings, setDataSettings] = React.useState<any>({});\n\n const handleSettings = async (LOCAL_STORAGE_GENERAL_SETTING: any) => {\n let response: any;\n\n response = JSON.parse(LOCAL_STORAGE_GENERAL_SETTING as string);\n\n if (!response) return;\n\n setDataSettings(response);\n };\n\n React.useEffect(() => {\n handleSettings(localStorage.getItem(LOCAL_STORAGE_KEY.GENERAL_SETTING) || null);\n }, []);\n\n return (\n <>\n {dataSettings?.skeleton?.enable ? (\n <div\n className={`sledge__skeleton-item sledge__skeleton-item-animation ${className}`}\n style={{\n ...{\n width: width,\n height: height\n },\n ...(dataSettings?.skeleton?.colors?.main_color && {\n background: dataSettings?.skeleton?.colors?.main_color\n }),\n ...style\n }}\n data-skeleton-rounded={rounded}\n data-skeleton-color={color}\n {...otherProps}\n ></div>\n ) : null}\n </>\n );\n};\n","import React from 'react';\nimport { SkeletonItem } from './SkeletonItem';\nimport { LOCAL_STORAGE_KEY } from '@core/lib/const';\n\nexport interface ISkeletonProductGridProps {\n count: number;\n type: 'small' | 'medium' | 'large';\n currentColumnGrid?: any;\n isFlyout?: boolean;\n}\n\nexport const SkeletonProductGrid = ({ count, type, isFlyout = false, currentColumnGrid }: ISkeletonProductGridProps) => {\n const [dataSettings, setDataSettings] = React.useState<any>({});\n\n const handleSettings = async (LOCAL_STORAGE_GENERAL_SETTING: any) => {\n let response: any;\n\n response = JSON.parse(LOCAL_STORAGE_GENERAL_SETTING as string);\n\n if (!response) return;\n\n setDataSettings(response);\n };\n\n React.useEffect(() => {\n handleSettings(localStorage.getItem(LOCAL_STORAGE_KEY.GENERAL_SETTING) || null);\n }, []);\n\n let components = [];\n\n for (let i = 0; i < count; i++) {\n components.push(\n isFlyout ? (\n <div className=\"sledge__product-grid-card-flyout sledge__skeleton-product-grid-card-flyout\">\n <div className=\"sledge__product-grid-card-flyout-wishlist-trigger\">\n <SkeletonItem width=\"32px\" height=\"32px\" color=\"darken\" rounded=\"sm\" />\n </div>\n <div className=\"sledge__product-grid-card-image-flyout\">\n <SkeletonItem width=\"64px\" height=\"64px\" color=\"lighten\" rounded=\"sm\" />\n </div>\n <div className=\"sledge__product-grid-card-desc-flyout\">\n <SkeletonItem width=\"100px\" height=\"20px\" color=\"lighten\" rounded=\"md\" />\n <div className=\"sledge__product-grid-card-price-flyout\">\n <SkeletonItem width=\"80px\" height=\"18px\" color=\"lighten\" rounded=\"md\" />\n </div>\n </div>\n </div>\n ) : (\n <div className=\"sledge__product-grid-card\" key={i}>\n <div className=\"sledge__product-grid-content\">\n <div className=\"sledge__product-grid-card-image sledge__skeleton-product-grid-card-image\">\n <div className=\"sledge-wishlist__trigger-block\">\n <SkeletonItem width=\"32px\" height=\"32px\" color=\"darken\" rounded=\"sm\" />\n </div>\n <SkeletonItem\n width=\"100%\"\n height=\"100%\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0\n }}\n />\n </div>\n <div className=\"sledge__product-grid-card-desc\">\n <div className=\"sledge__product-grid-card-title\">\n <SkeletonItem width=\"79px\" height=\"28px\" color=\"lighten\" rounded=\"md\" />\n <SkeletonItem width=\"80px\" height=\"28px\" color=\"lighten\" rounded=\"md\" />\n </div>\n <div className=\"sledge__product-grid-card-rating\">\n <SkeletonItem width=\"134px\" height=\"25px\" color=\"lighten\" rounded=\"md\" />\n </div>\n <div className=\"sledge__product-grid-card-text\">\n <SkeletonItem\n width=\"100%\"\n height=\"35px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n marginBottom: '16px'\n }}\n />\n </div>\n </div>\n </div>\n <div className=\"sledge__product-grid-button-wrapper\">\n <SkeletonItem width=\"100%\" height=\"40px\" color=\"lighten\" rounded=\"md\" />\n </div>\n </div>\n )\n );\n }\n\n return (\n <>\n {dataSettings?.skeleton?.enable ? (\n <div\n className=\"sledge__product-grid sledge__skeleton-product-grid sledge__skeleton-pointer-events-none\"\n data-grid-type={type}\n data-grid-desktop-column={currentColumnGrid?.desktop}\n data-grid-mobile-column={currentColumnGrid?.mobile}\n >\n {components}\n </div>\n ) : null}\n </>\n );\n};\n","import Masonry, { ResponsiveMasonry } from 'react-responsive-masonry';\nimport { SkeletonItem } from './SkeletonItem';\n\nexport interface ISkeletonReviewGridProps {\n count: number;\n type: 'grid' | 'list' | 'image_grid';\n gridItemHeights?: string[];\n}\n\nexport const SkeletonReviewGrid = ({ count, type, gridItemHeights = [] }: ISkeletonReviewGridProps) => {\n let components = [];\n\n for (let i = 0; i < count; i++) {\n components.push(\n <div className=\"sledge-product-review__widget-review-card\" key={i}>\n <SkeletonItem\n width=\"100%\"\n height={type === 'list' || ((type === 'grid' || type === 'image_grid') && !gridItemHeights?.length) ? '111px' : gridItemHeights[i]}\n color=\"lighten\"\n rounded=\"md\"\n />\n </div>\n );\n }\n\n return (\n <ResponsiveMasonry\n columnsCountBreakPoints={type === 'list' ? { 350: 1 } : { 350: 1, 750: 3, 1024: 4 }}\n className=\"sledge-product-review__widget-review-grid sledge__skeleton-review-grid sledge__skeleton-pointer-events-none\"\n >\n <Masonry gutter=\"30px\">{components}</Masonry>\n </ResponsiveMasonry>\n );\n};\n","import { SkeletonItem } from './SkeletonItem';\n\nexport interface ISkeletonCollectionGridProps {\n count: number;\n}\n\nexport const SkeletonCollectionGrid = ({ count }: ISkeletonCollectionGridProps) => {\n let components = [];\n\n for (let i = 0; i < count; i++) {\n components.push(\n <div className=\"sledge__collection-grid-card\" key={i}>\n <div className=\"sledge__collection-grid-card-content\">\n <div className=\"sledge__collection-grid-card-content-title\">\n <SkeletonItem width=\"139px\" height=\"32px\" color=\"darken\" rounded=\"md\" />\n </div>\n <div className=\"sledge__collection-grid-card-content-description\">\n <SkeletonItem width=\"238px\" height=\"48px\" color=\"darken\" rounded=\"md\" />\n </div>\n </div>\n </div>\n );\n }\n\n return <div className=\"sledge__collection-grid sledge__skeleton-collection-grid sledge__skeleton-pointer-events-none\">{components}</div>;\n};\n","import { SkeletonItem } from './SkeletonItem';\n\nexport interface ISkeletonPageGridProps {\n count: number;\n}\n\nexport const SkeletonPageGrid = ({ count }: ISkeletonPageGridProps) => {\n let components = [];\n\n for (let i = 0; i < count; i++) {\n components.push(\n <div className=\"sledge__page-grid-card\" key={i}>\n <div className=\"sledge__page-grid-card-content\">\n <div className=\"sledge__page-grid-card-content-title\">\n <SkeletonItem width=\"139px\" height=\"32px\" color=\"darken\" rounded=\"md\" />\n </div>\n <div className=\"sledge__page-grid-card-content-description\">\n <SkeletonItem width=\"238px\" height=\"48px\" color=\"darken\" rounded=\"md\" />\n </div>\n </div>\n </div>\n );\n }\n\n return <div className=\"sledge__page-grid sledge__skeleton-page-grid sledge__skeleton-pointer-events-none\">{components}</div>;\n};\n","import { SkeletonItem } from './SkeletonItem';\n\nexport interface ISkeletonBlogGridProps {\n count: number;\n}\n\nexport const SkeletonBlogGrid = ({ count }: ISkeletonBlogGridProps) => {\n let components = [];\n\n for (let i = 0; i < count; i++) {\n components.push(\n <div className=\"sledge__blog-grid-card\" key={i}>\n <div className=\"sledge__blog-grid-content\">\n <div className=\"sledge__blog-grid-card-image sledge__skeleton-blog-grid-card-image\">\n <SkeletonItem\n width=\"100%\"\n height=\"100%\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0\n }}\n />\n </div>\n <div className=\"sledge__blog-grid-card-desc\">\n <SkeletonItem width=\"100%\" height=\"40px\" color=\"lighten\" rounded=\"md\" />\n <SkeletonItem\n width=\"79px\"\n height=\"26px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n marginTop: '12px',\n marginBottom: '16px'\n }}\n />\n <SkeletonItem width=\"100%\" height=\"72px\" color=\"lighten\" rounded=\"md\" />\n </div>\n </div>\n <div className=\"sledge__blog-grid-button-wrapper\">\n <SkeletonItem width=\"100%\" height=\"40px\" color=\"lighten\" rounded=\"md\" />\n </div>\n </div>\n );\n }\n\n return <div className=\"sledge__blog-grid sledge__skeleton-blog-grid sledge__skeleton-pointer-events-none\">{components}</div>;\n};\n","import { SkeletonItem } from './SkeletonItem';\n\nexport interface ISkeletonArticleGridProps {\n count: number;\n}\n\nexport const SkeletonArticleGrid = ({ count }: ISkeletonArticleGridProps) => {\n let components = [];\n\n for (let i = 0; i < count; i++) {\n components.push(\n <div className=\"sledge__article-grid-card\" key={i}>\n <div className=\"sledge__article-grid-content\">\n <div className=\"sledge__article-grid-card-image sledge__skeleton-article-grid-card-image\">\n <SkeletonItem\n width=\"100%\"\n height=\"100%\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0\n }}\n />\n </div>\n <div className=\"sledge__article-grid-card-desc\">\n <SkeletonItem width=\"100%\" height=\"40px\" color=\"lighten\" rounded=\"md\" />\n <SkeletonItem\n width=\"79px\"\n height=\"26px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n marginTop: '12px',\n marginBottom: '16px'\n }}\n />\n <SkeletonItem width=\"100%\" height=\"72px\" color=\"lighten\" rounded=\"md\" />\n </div>\n </div>\n <div className=\"sledge__article-grid-button-wrapper\">\n <SkeletonItem width=\"100%\" height=\"40px\" color=\"lighten\" rounded=\"md\" />\n </div>\n </div>\n );\n }\n\n return <div className=\"sledge__article-grid sledge__skeleton-article-grid sledge__skeleton-pointer-events-none\">{components}</div>;\n};\n","import './SkeletonLoading.css';\n\nimport { SkeletonItem } from './SkeletonItem';\nimport { SkeletonProductGrid } from './SkeletonProductGrid';\nimport { SkeletonReviewGrid } from './SkeletonReviewGrid';\nimport { SkeletonCollectionGrid } from './SkeletonCollectionGrid';\nimport { SkeletonPageGrid } from './SkeletonPageGrid';\nimport { SkeletonBlogGrid } from './SkeletonBlogGrid';\nimport { SkeletonArticleGrid } from './SkeletonArticleGrid';\n\nexport const SkeletonLoading = {\n Item: SkeletonItem,\n ReviewGrid: SkeletonReviewGrid,\n ProductGrid: SkeletonProductGrid,\n CollectionGrid: SkeletonCollectionGrid,\n PageGrid: SkeletonPageGrid,\n BlogGrid: SkeletonBlogGrid,\n ArticleGrid: SkeletonArticleGrid\n};\n","import './LoadingDots.css';\n\nexport const LoadingDots = () => {\n return (\n <div className=\"sledge__loading-dots\">\n <div className=\"sledge__loading-icon-dot\"></div>\n <div className=\"sledge__loading-icon-dot\"></div>\n <div className=\"sledge__loading-icon-dot\"></div>\n </div>\n );\n};\n","import React from 'react';\nimport { IProductGrid } from '@core/components';\nimport useEmblaCarousel, { EmblaOptionsType as CarouselOptionsType, EmblaCarouselType as CarouselType } from 'embla-carousel-react';\nimport './Carousel.css';\n\nexport interface CarouselPropType {\n options?: CarouselOptionsType;\n children: React.ReactNode[];\n className?: string;\n 'data-grid-type'?: IProductGrid['type'];\n carouselSourceWidget?: 'productGrid' | 'blogGrid' | 'articleGrid' | 'collectionGrid' | 'pageGrid';\n}\n\nexport const Carousel = (props: CarouselPropType) => {\n const { children, className = '', 'data-grid-type': dataGridType, carouselSourceWidget } = props;\n const [active, setActive] = React.useState<boolean>(true);\n\n const {\n options = {\n slidesToScroll: 'auto',\n align: 'start',\n dragFree: true,\n duration: 35\n }\n } = props;\n\n const [carouselRef, carouselApi] = useEmblaCarousel(options);\n const [prevBtnDisabled, setPrevBtnDisabled] = React.useState(true);\n const [nextBtnDisabled, setNextBtnDisabled] = React.useState(true);\n const [selectedIndex, setSelectedIndex] = React.useState(0);\n const [scrollSnaps, setScrollSnaps] = React.useState<number[]>([]);\n\n const scrollPrev = React.useCallback(() => carouselApi && carouselApi.scrollPrev(), [carouselApi]);\n const scrollNext = React.useCallback(() => carouselApi && carouselApi.scrollNext(), [carouselApi]);\n const scrollTo = React.useCallback((index: number) => carouselApi && carouselApi.scrollTo(index), [carouselApi]);\n\n const onSelect = React.useCallback((carouselApi: CarouselType) => {\n setSelectedIndex(carouselApi.selectedScrollSnap());\n setPrevBtnDisabled(!carouselApi.canScrollPrev());\n setNextBtnDisabled(!carouselApi.canScrollNext());\n }, []);\n\n const onInit = React.useCallback((carouselApi: CarouselType) => {\n setScrollSnaps(carouselApi.scrollSnapList());\n }, []);\n\n //init carousel\n React.useEffect(() => {\n if (!carouselApi) return;\n\n onInit(carouselApi);\n onSelect(carouselApi);\n\n carouselApi.on('reInit', onInit);\n carouselApi.on('reInit', onSelect);\n carouselApi.on('select', onSelect);\n }, [carouselApi, onSelect]);\n\n //trigger active carousel\n React.useEffect(() => {\n if (!carouselApi) return;\n\n if (prevBtnDisabled && nextBtnDisabled) setActive(false);\n else setActive(true);\n }, [carouselApi, prevBtnDisabled, nextBtnDisabled]);\n\n //trigger when children added\n React.useEffect(() => {\n if (!carouselApi) return;\n\n carouselApi.reInit(options);\n }, [carouselApi, React.Children.count(children)]);\n\n //trigger draggable\n React.useEffect(() => {\n if (!carouselApi) return;\n\n if (!active) carouselApi?.internalEngine().dragHandler.destroy();\n else carouselApi?.internalEngine().dragHandler.init(carouselApi);\n }, [active]);\n\n let carouselAttributes: React.HTMLAttributes<HTMLDivElement> | CarouselPropType | { active?: boolean } = {};\n\n //attributes for different widget\n switch (carouselSourceWidget) {\n case 'productGrid':\n carouselAttributes = {\n className: 'sledge__carousel-container sledge__product-grid',\n 'data-grid-type': dataGridType\n };\n break;\n default:\n carouselAttributes = {\n className: 'sledge__carousel-container'\n };\n break;\n }\n\n return (\n <div className={`sledge__carousel ${className}`}>\n <Navigation\n state={{\n prevBtnDisabled,\n nextBtnDisabled\n }}\n position=\"left\"\n disabled={prevBtnDisabled}\n onClick={scrollPrev}\n className=\"sledge__carousel-button-prev\"\n />\n <div className={`sledge__carousel-viewport ${(active && 'is-active') || ''}`} ref={carouselRef}>\n <div {...carouselAttributes}>{children}</div>\n </div>\n <Navigation\n state={{\n prevBtnDisabled,\n nextBtnDisabled\n }}\n position=\"right\"\n disabled={nextBtnDisabled}\n onClick={scrollNext}\n className=\"sledge__carousel-button-next\"\n />\n <div className=\"sledge__carousel-dots\">\n {scrollSnaps.map((_, index) => (\n <DotButton key={index} onClick={() => scrollTo(index)} className={'sledge__carousel-dot'.concat(index === selectedIndex ? ' sledge__carousel-dot--selected' : '')} />\n ))}\n </div>\n </div>\n );\n};\n\nexport const Navigation: React.FC<any> = (props) => {\n const { children, state, className, position, ...restProps } = props;\n const { prevBtnDisabled, nextBtnDisabled } = state;\n\n if (prevBtnDisabled && nextBtnDisabled) return null;\n\n const LeftIcon = (\n <svg width={16} height={16} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10.6875 2.97945C10.865 3.15697 10.8812 3.43474 10.7359 3.63048L10.6875 3.68656L6.37465 7.99967L10.6875 12.3128C10.865 12.4903 10.8812 12.7681 10.7359 12.9638L10.6875 13.0199C10.51 13.1974 10.2323 13.2135 10.0365 13.0683L9.98043 13.0199L5.31377 8.35323C5.13625 8.17572 5.12012 7.89794 5.26535 7.7022L5.31377 7.64612L9.98043 2.97945C10.1757 2.78419 10.4923 2.78419 10.6875 2.97945Z\"\n fill=\"#767676\"\n />\n </svg>\n );\n\n const RightIcon = (\n <svg width={17} height={17} viewBox=\"0 0 17 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.60738 13.1299C5.42987 12.9524 5.41374 12.6746 5.55897 12.4789L5.60738 12.4228L9.92027 8.1097L5.60738 3.79659C5.42987 3.61908 5.41374 3.3413 5.55897 3.14556L5.60738 3.08948C5.7849 2.91197 6.06267 2.89583 6.25841 3.04107L6.31449 3.08948L10.9812 7.75615C11.1587 7.93366 11.1748 8.21143 11.0296 8.40718L10.9812 8.46325L6.31449 13.1299C6.11923 13.3252 5.80265 13.3252 5.60738 13.1299Z\"\n fill=\"#767676\"\n />\n </svg>\n );\n\n const Icon = () => (position === 'left' ? LeftIcon : RightIcon);\n\n return (\n <button className={`sledge__carousel-button ${className}`} type=\"button\" {...restProps}>\n <Icon />\n </button>\n );\n};\n\nexport const DotButton: React.FC<any> = (props) => {\n const { children, ...restProps } = props;\n\n return (\n <button type=\"button\" {...restProps}>\n {children}\n </button>\n );\n};\n","import React from 'react';\nimport './FlyoutSidebar.css';\nimport { CloseIcon } from '@core/components';\n\nexport interface IFlyoutSidebarProps {\n title: React.ReactNode;\n content: React.ReactNode;\n footer?: React.ReactNode;\n open: boolean;\n setOpen(value: React.SetStateAction<boolean>): void;\n position?: 'left' | 'right' | 'top' | 'bottom';\n className?: string;\n withBlurEffect?: boolean;\n}\n\nexport const FlyoutSidebar = ({ title, content, footer = null, open, setOpen, position = 'left', className = '', withBlurEffect = false }: IFlyoutSidebarProps) => {\n const [isLoading, setIsLoading] = React.useState(true);\n const [isScrollAtBottom, setIsScrollAtBottom] = React.useState(false);\n\n const contentContainerRef = React.useRef(null);\n\n React.useLayoutEffect(() => {\n if (!withBlurEffect) return;\n\n const container: any = contentContainerRef.current;\n if (!container) return;\n\n const checkScroll = () => {\n const bottomPosition = container.scrollHeight - container.scrollTop;\n const isBottom = bottomPosition <= container.clientHeight + 1;\n setIsScrollAtBottom(isBottom);\n };\n\n container.addEventListener('scroll', checkScroll);\n window.addEventListener('resize', checkScroll);\n\n return () => {\n container.removeEventListener('scroll', checkScroll);\n window.removeEventListener('resize', checkScroll);\n };\n }, []);\n\n React.useEffect(() => {\n // Trigger Re-render on open change\n if (!open) return;\n\n setIsLoading(true);\n setTimeout(() => {\n setIsLoading(false);\n }, 0);\n }, [open]);\n\n const showBlurEffect = withBlurEffect && !isScrollAtBottom;\n\n return (\n <div className={`sledge__flyout-mobile ${className}`} data-open={open} data-position={position}>\n <div className=\"sledge__flyout-overlay\" onClick={() => setOpen(false)} />\n <div className=\"sledge__flyout-mobile-wrapper\">\n <div className=\"sledge__flyout-header\">\n <div className=\"sledge__flyout-mobile-title\">{title}</div>\n <div className=\"sledge__flyout-close-field-wrapper\">\n <button className=\"sledge__flyout-close-field\" type=\"button\" onClick={() => setOpen(false)}>\n <CloseIcon width={14} height={14} color=\"#393d4e\" />\n </button>\n </div>\n </div>\n <div ref={contentContainerRef} className={`sledge__flyout-mobile-content ${showBlurEffect ? 'sledge__flyout-mobile-content-blur-effect' : ''}`}>\n {isLoading ? null : content}\n </div>\n {footer ? <div className=\"sledge__flyout-mobile-footer\">{isLoading ? null : footer}</div> : null}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { VirtualItem, useVirtualizer } from '@tanstack/react-virtual';\n\nexport interface IVirtualizedListProps {\n scrollElement?: Element | (Window & typeof globalThis) | undefined | null;\n rowCount: number;\n rowRenderer: (props: VirtualItem) => React.ReactNode;\n selector?: string;\n parentRef?: any;\n}\n\nconst getElement = ({ selector, setUsedScrollElement }: { selector: string; setUsedScrollElement: any }) => {\n const element: Element | (Window & typeof globalThis) | null = document.querySelector(selector);\n if (!element)\n setTimeout(() => {\n getElement({ selector, setUsedScrollElement });\n }, 10);\n else setUsedScrollElement(element);\n};\n\nexport const VirtualizedList = ({ scrollElement, rowCount, rowRenderer, selector, parentRef = null }: IVirtualizedListProps) => {\n const [usedScrollElement, setUsedScrollElement]: any = React.useState(scrollElement);\n\n if (!usedScrollElement && selector) getElement({ selector, setUsedScrollElement });\n\n const virtualizer = useVirtualizer({\n count: rowCount,\n getScrollElement: () => parentRef?.current || usedScrollElement,\n estimateSize: () => 45\n });\n\n const items = virtualizer.getVirtualItems();\n\n return (\n <div\n style={{\n height: virtualizer.getTotalSize(),\n width: '100%',\n position: 'relative'\n }}\n className=\"sledge__virtualized-wrapper\"\n >\n <div\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n transform: `translateY(${items[0]?.start ?? 0}px)`\n }}\n className=\"sledge__virtualized-list\"\n >\n {items.map((virtualRow) => (\n <div key={virtualRow.key} data-index={virtualRow.index} ref={virtualizer.measureElement} className=\"sledge__virtualized-measure-element\">\n {rowRenderer(virtualRow)}\n </div>\n ))}\n </div>\n </div>\n );\n};","import './Alert.css';\n\nexport interface IAlertProps {\n children: any;\n className?: string;\n type: 'info';\n icon?: any;\n}\n\nexport const Alert = ({ children, className = '', type, icon = null }: IAlertProps) => {\n return (\n <div className={`sledge__alert ${className}`} data-alert-type={type}>\n {icon && <div>{icon}</div>}\n\n <div>{children}</div>\n </div>\n );\n};\n","import React from 'react';\nimport { SearchIcon } from '@core/components';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\nimport { isFunction } from '@core/lib/helper';\nimport { useEffectOnChange, usePreviewSettings } from '@core/hooks';\n\nexport interface ISearchIconWidgetProps {\n query?: {\n keyword: string;\n };\n size?: 'xs' | 'sm' | 'md' | string;\n children?: any;\n onAfterAddToCart?(state: 'success' | 'failed'): void;\n onAfterAddWishlist?(state: 'success' | 'failed'): void;\n onAfterRemoveWishlist?(state: 'success' | 'failed'): void;\n onAfterRenderProduct?(state: 'success' | 'failed'): void;\n urlSearchResult?: string;\n previewSettings?: any;\n}\n\nexport const SearchIconWidget = (props: ISearchIconWidgetProps) => {\n const { isRenderApp, isJsVersion, componentRef } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { instantSearch: isRenderAppInstantSearch } = isRenderApp || {};\n const { searchIconWidget: searchIconWidgetRef } = componentRef || {};\n\n const { size = 'sm', children, onAfterAddToCart, onAfterAddWishlist, onAfterRemoveWishlist, onAfterRenderProduct, urlSearchResult, query, previewSettings: previewSettingsProp } = props || {};\n\n // Separate Components\n let productCardsComponent: any = null;\n let suggestionKeywordListsComponent: any = null;\n let otherIndexListsComponent: any = null;\n let searchViewMoreResultComponent: any = null;\n React.Children.map(children, (child) => {\n if (React.isValidElement(child) && isFunction(child.type)) {\n const { productCard, suggestionKeywordList, otherIndexList, searchViewMoreResult }: any = child?.props || {};\n\n if (productCard && isFunction(productCard)) productCardsComponent = productCard;\n if (suggestionKeywordList && isFunction(suggestionKeywordList)) suggestionKeywordListsComponent = suggestionKeywordList;\n if (otherIndexList && isFunction(otherIndexList)) otherIndexListsComponent = otherIndexList;\n if (searchViewMoreResult && isFunction(searchViewMoreResult)) searchViewMoreResultComponent = searchViewMoreResult;\n }\n });\n\n const { instantSearchPreviewSettings, previewSettings } = usePreviewSettings({\n defaultSettings: previewSettingsProp,\n nestedProperty: 'sledge.instantSearch.searchIconPopup.preview'\n });\n\n const [sizing, setSizing] = React.useState({\n width: 0,\n height: 0\n });\n\n React.useEffect(() => {\n if (!isRenderAppInstantSearch) return;\n\n if (size === 'xs') {\n setSizing({\n width: 14,\n height: 14\n });\n } else if (size === 'sm') {\n setSizing({\n width: 20,\n height: 20\n });\n } else {\n setSizing({\n width: 25,\n height: 25\n });\n }\n }, [isRenderAppInstantSearch]);\n\n useEffectOnChange(() => {\n handleShowWidget({\n isPreviewSettings: true\n });\n }, [previewSettings]);\n\n const handleShowWidget = (props?: any) => {\n if (typeof window !== 'undefined' && window.sledgeInstantSearchIconWidgetPopup)\n window.sledgeInstantSearchIconWidgetPopup({\n onAfterAddToCart,\n onAfterAddWishlist,\n onAfterRemoveWishlist,\n onAfterRenderProduct,\n isJsVersion,\n productCardsComponent,\n suggestionKeywordListsComponent,\n otherIndexListsComponent,\n searchViewMoreResultComponent,\n urlSearchResult,\n query,\n instantSearchPreviewSettings,\n previewSettings,\n ...(props || {})\n });\n };\n\n return (\n <span className=\"sledge-instant-search__icon-widget\" onClick={handleShowWidget} ref={searchIconWidgetRef}>\n <SearchIcon {...sizing} color=\"currentColor\" />\n </span>\n );\n};\n","import React from 'react';\n\nexport const OtherIndexLists = ({\n listsComponent: ListsComponent,\n name,\n type,\n items,\n isComponentJsVersion,\n showPopupComponent,\n setShowPopupComponent,\n languageSettings\n}: {\n listsComponent?: any;\n name?: string;\n type?: string;\n items?: any[];\n isComponentJsVersion?: any;\n showPopupComponent?: boolean;\n setShowPopupComponent?(value: boolean): void;\n languageSettings?: any;\n}) => {\n if (ListsComponent) {\n const ListsProps = { name, type, items, showPopupComponent, setShowPopupComponent };\n\n return <React.Fragment>{isComponentJsVersion ? <div dangerouslySetInnerHTML={{ __html: ListsComponent({ ...ListsProps }) }}></div> : <ListsComponent {...ListsProps} />}</React.Fragment>;\n } else {\n return (\n <>\n <div className=\"sledge-instant-search__icon-widget-search-form-result-title\">{name}</div>\n {items?.length ? (\n <ul className=\"sledge-instant-search__icon-widget-search-form-result-list\">\n {items.map((hit: any, index: number) => {\n const { title, url } = hit;\n\n return (\n <li key={index}>\n <a href={url} className=\"sledge-instant-search__icon-widget-search-form-result-list-link\">\n {title}\n </a>\n </li>\n );\n })}\n </ul>\n ) : (\n <ul className=\"sledge-instant-search__icon-widget-search-form-result-list\">\n <li className=\"sledge-instant-search__icon-widget-search-form-result-item-disabled\">{languageSettings?.title_no_result || `No ${name?.toLowerCase()} were found`}</li>\n </ul>\n )}\n </>\n );\n }\n};\n","import React from 'react';\nimport { SearchIcon } from '@core/components';\nimport { DEFAULT_QUERY_PARAM, DEFAULT_SEARCH_RESULT_URL } from '@core/lib/const';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\n\nexport const SuggestionKeywordLists = ({\n listsComponent: ListsComponent,\n keywords,\n isComponentJsVersion = false,\n showPopupComponent,\n setShowPopupComponent,\n urlSearchResult = '',\n query\n}: {\n listsComponent?: any;\n keywords?: any[];\n isComponentJsVersion?: any;\n showPopupComponent?: boolean;\n setShowPopupComponent?(value: boolean): void;\n urlSearchResult?: string;\n query?: {\n keyword?: string;\n };\n}) => {\n if (ListsComponent) {\n const { triggerRenderMultipleComponent } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { trigger: triggerRenderInstantSearchResult } = triggerRenderMultipleComponent?.instantSearch?.searchResult || {};\n\n const setRenderSearchResult = (value: any) => {\n if (triggerRenderInstantSearchResult) triggerRenderInstantSearchResult(value);\n };\n\n const ListsProps = { keywords, showPopupComponent, setShowPopupComponent, setRenderSearchResult };\n\n return <React.Fragment>{isComponentJsVersion ? <div dangerouslySetInnerHTML={{ __html: ListsComponent({ ...ListsProps }) }}></div> : <ListsComponent {...ListsProps} />}</React.Fragment>;\n } else {\n const queryKeyword = query?.keyword ? query.keyword : DEFAULT_QUERY_PARAM.KEYWORD;\n\n return (\n <>\n <div className=\"sledge-instant-search__icon-widget-search-form-result-title\">Suggestions</div>\n <ul className=\"sledge-instant-search__icon-widget-search-form-result-list\">\n {keywords?.map((keyword: string, index: number) => {\n return (\n <li key={index}>\n <a\n href={`${urlSearchResult || DEFAULT_SEARCH_RESULT_URL}?${queryKeyword}=${keyword}`}\n className=\"sledge-instant-search__icon-widget-search-form-result-list-link sledge-instant-search__icon-widget-search-form-result-list-link-suggestion\"\n >\n <SearchIcon width={12} height={12} color=\"#677487\" /> {keyword}\n </a>\n </li>\n );\n })}\n </ul>\n </>\n );\n }\n};\n","import React from 'react';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\nimport { DEFAULT_QUERY_PARAM, DEFAULT_SEARCH_RESULT_URL } from '@core/lib/const';\n\nexport const SearchViewMoreResult = ({\n component: Component,\n keyword,\n isComponentJsVersion = false,\n showPopupComponent,\n setShowPopupComponent,\n urlSearchResult = '',\n redirectObjectDirection = '',\n query,\n languageSettings\n}: {\n component?: any;\n keyword?: string;\n isComponentJsVersion?: any;\n showPopupComponent?: boolean;\n setShowPopupComponent?(value: boolean): void;\n urlSearchResult?: string;\n redirectObjectDirection?: string;\n query?: {\n keyword?: string;\n };\n languageSettings?: any;\n}) => {\n if (Component) {\n const { triggerRenderMultipleComponent } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { trigger: triggerRenderInstantSearchResult } = triggerRenderMultipleComponent?.instantSearch?.searchResult || {};\n\n const setRenderSearchResult = (value: any) => {\n if (triggerRenderInstantSearchResult) triggerRenderInstantSearchResult(value);\n };\n\n const ComponentProps = { keyword, showPopupComponent, setShowPopupComponent, setRenderSearchResult, redirectObjectDirection };\n\n return <React.Fragment>{isComponentJsVersion ? <div dangerouslySetInnerHTML={{ __html: Component({ ...ComponentProps }) }}></div> : <Component {...ComponentProps} />}</React.Fragment>;\n } else {\n const queryKeyword = query?.keyword ? query.keyword : DEFAULT_QUERY_PARAM.KEYWORD;\n\n return (\n <a\n href={redirectObjectDirection ? redirectObjectDirection : `${urlSearchResult || DEFAULT_SEARCH_RESULT_URL}?${queryKeyword}=${keyword}`}\n className=\"sledge-instant-search__icon-widget-button-more\"\n >\n {languageSettings?.view_more_result || 'View More Result'}\n </a>\n );\n }\n};\n","import { OtherIndexLists } from './OtherIndexLists';\nimport { SuggestionKeywordLists } from './SuggestionKeywordLists';\nimport { SearchViewMoreResult } from './SearchViewMoreResult';\n\nexport const Global = {\n OtherIndexLists,\n SuggestionKeywordLists,\n SearchViewMoreResult\n};\n","import React from 'react';\nimport * as Dialog from '@radix-ui/react-dialog';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\nimport { multiSearch, searchTrigger } from '@core/api/instant-search';\nimport { DEFAULT_QUERY_PARAM, DEFAULT_QUERY_PRODUCT_MEILISEARCH, DEFAULT_SEARCH_RESULT_URL, LOCAL_STORAGE_KEY, OBJECT_DATA_STRING_KEY } from '@core/lib/const';\nimport { useEffectOnChange, usePrevious } from '@core/hooks';\nimport { ProductGrid, SearchInputField, SearchIcon, ScrollArea, SkeletonLoading, Alert, InfoCircleIcon } from '@core/components';\nimport { Global } from '@react-instant-search/components/Global';\nimport { getProductsReviewInfo } from '@core/api/product-review';\n\ndeclare global {\n interface Window {\n sledgeInstantSearchIconWidgetPopup(props: {\n onAfterAddToCart?(state: 'success' | 'failed'): void;\n onAfterAddWishlist?(state: 'success' | 'failed'): void;\n onAfterRemoveWishlist?(state: 'success' | 'failed'): void;\n onAfterRenderProduct?(state: 'success' | 'failed'): void;\n isJsVersion?: any;\n productCardsComponent?: any;\n suggestionKeywordListsComponent?: any;\n otherIndexListsComponent?: any;\n searchViewMoreResultComponent?: any;\n urlSearchResult?: string;\n query?: {\n keyword?: string;\n };\n instantSearchPreviewSettings?: any;\n previewSettings?: any;\n forceShowInfo?: boolean;\n isPreviewSettings?: boolean;\n }): void;\n }\n}\n\nexport const SearchIconWidgetPopup = () => {\n const { isRenderApp } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { instantSearch: isRenderAppInstantSearch } = isRenderApp || {};\n\n const [isLoading, setIsLoading] = React.useState(true);\n const [showInfo, setShowInfo] = React.useState(false);\n const [keyword, setKeyword] = React.useState('');\n const [searchResultProduct, setSearchResultProduct] = React.useState([]);\n const [searchResultOther, setSearchResultOther] = React.useState([]);\n const [dataReviews, setDataReviews] = React.useState({});\n const [displaySettings, setDisplaySettings] = React.useState<any>({});\n const [suggestionSettings, setSuggestionSettings] = React.useState<any>({});\n const [suggestionIndex, setSuggestionIndex] = React.useState('');\n const [urlSearchResult, setUrlSearchResult] = React.useState('');\n const [languageSettings, setLanguageSettings] = React.useState<any>({});\n const [redirectsSettings, setRedirectsSettings] = React.useState([]);\n const [redirectObject, setRedirectObject] = React.useState<any>({});\n const [isRedirect, setIsRedirect] = React.useState(false);\n const [handleFunctions, setHandleFunctions] = React.useState<any>({\n onAfterAddToCart: (state: 'success' | 'failed') => {},\n onAfterAddWishlist: (state: 'success' | 'failed') => {},\n onAfterRemoveWishlist: (state: 'success' | 'failed') => {},\n onAfterRenderProduct: (state: 'success' | 'failed') => {},\n isJsVersion: null,\n productCardsComponent: null,\n suggestionKeywordListsComponent: null,\n otherIndexListsComponent: null,\n searchViewMoreResultComponent: null,\n query: {},\n instantSearchPreviewSettings: null,\n previewSettings: null\n });\n const [totalHitsProduct, setTotalHitsProduct] = React.useState(0);\n const [instantSearchSettings, setInstantSearchSettings] = React.useState<any>({});\n\n const searchFieldRef = React.useRef<HTMLInputElement>(null);\n\n const previousState: any = usePrevious({ keyword });\n\n const { direction: redirectObjectDirection } = redirectObject || {};\n\n const handleMultiSearch = async (params: { data: any; onSearch?: boolean; withFetchReviewInfo?: boolean }) => {\n const { data, onSearch = false, withFetchReviewInfo = false } = params;\n\n const valueRedirectObject: any = redirectsSettings.find(({ keyword: redirectKeyword }) => String(redirectKeyword)?.toLowerCase() === keyword);\n const valueIsRedirect = Boolean(valueRedirectObject?.direction?.length);\n\n setRedirectObject(valueRedirectObject);\n setIsRedirect(valueIsRedirect);\n\n setIsLoading(true);\n\n const { index_product, tabs, hidden_tags, display, show_out_of_stock, attributes_to_retrieve, default_sort, search_use_default_sort, collections_all_id } = data;\n const suggestion = display?.search?.suggestion || {};\n const instantSearchLimit = Number(display?.search?.instantsearch_limit || 6);\n\n let response: any;\n let body = {\n queries: tabs.map((tab: any) => {\n const { index } = tab;\n\n let isProductIndex = index.includes(index_product);\n let additionalFilter = DEFAULT_QUERY_PRODUCT_MEILISEARCH;\n\n if (hidden_tags?.length) additionalFilter.push(`tags NOT IN [${hidden_tags}]`);\n if (!show_out_of_stock) additionalFilter.push(`'availability' IN ${JSON.stringify(['in stock'])}`);\n\n let sort: string[] = [];\n if (isProductIndex && search_use_default_sort && default_sort) {\n if (String(default_sort).includes(OBJECT_DATA_STRING_KEY.COLLECTION_ID)) {\n sort = collections_all_id ? [String(default_sort).replaceAll(OBJECT_DATA_STRING_KEY.COLLECTION_ID, String(collections_all_id))] : [];\n } else {\n sort = [default_sort];\n }\n } else {\n sort = [];\n }\n\n return {\n indexUid: index,\n q: keyword,\n sort,\n hitsPerPage: isProductIndex ? instantSearchLimit : 4,\n filter: isProductIndex ? [...new Set(additionalFilter)].join(' AND ') : '',\n attributesToRetrieve: attributes_to_retrieve\n };\n })\n };\n\n response = await multiSearch(body);\n\n if (!response) return;\n\n const { results } = response;\n\n let valueSearchResultProduct = results?.filter(({ indexUid }: any) => indexUid?.includes(index_product));\n\n setTotalHitsProduct(valueSearchResultProduct[0]?.totalHits || 0);\n\n if (onSearch && keyword?.length) {\n searchTrigger({\n keyword: keyword,\n resultCount: valueSearchResultProduct[0]?.totalHits || 0\n });\n }\n\n let valueSearchResultOther =\n results\n ?.filter(({ indexUid }: any) => !indexUid?.includes(index_product))\n ?.map((result: any) => {\n const { indexUid } = result;\n\n const { name, type } = tabs?.find(({ index }: any) => index.includes(indexUid));\n\n return {\n ...result,\n ...{\n name: name || '',\n type: type || ''\n }\n };\n }) || [];\n\n let getValueSearchResultProduct = valueSearchResultProduct?.length ? valueSearchResultProduct[0]?.hits : [];\n let valueSuggestionIndex = !keyword.length ? 'zero_character' : !getValueSearchResultProduct?.length ? 'no_result' : '';\n\n let isPriorityZeroCharacter = Boolean(\n !keyword.length && Object.keys(suggestion).length && suggestion[valueSuggestionIndex]?.products?.active && suggestion[valueSuggestionIndex]?.products?.list?.length\n );\n\n let dataSearchResultProduct = isPriorityZeroCharacter ? suggestion[valueSuggestionIndex]?.products?.list : getValueSearchResultProduct;\n\n if (withFetchReviewInfo) {\n let searchResultProductIds = dataSearchResultProduct.map(({ id }: any) => id);\n let valueDataReviews = await getProductsReviewInfo(searchResultProductIds);\n\n if (valueDataReviews?.status?.code === 200) setDataReviews(valueDataReviews?.data);\n } else {\n setDataReviews({});\n }\n\n setSearchResultProduct(dataSearchResultProduct);\n setSearchResultOther(valueSearchResultOther);\n setSuggestionIndex(valueSuggestionIndex);\n setIsLoading(false);\n };\n\n const handleSettings = async ({ LOCAL_STORAGE_INSTANT_SEARCH_SETTING, isPreviewSettings = false }: { LOCAL_STORAGE_INSTANT_SEARCH_SETTING: any; isPreviewSettings?: boolean }) => {\n let response: any;\n\n response = handleFunctions?.instantSearchPreviewSettings || JSON.parse(LOCAL_STORAGE_INSTANT_SEARCH_SETTING as string);\n\n if (!response) return;\n\n setInstantSearchSettings(response);\n\n const { display, languages, redirects } = response;\n\n setDisplaySettings(display);\n setSuggestionSettings(display?.search?.suggestion);\n setLanguageSettings(languages);\n setRedirectsSettings(redirects);\n\n if (!isPreviewSettings)\n await handleMultiSearch({\n data: response,\n withFetchReviewInfo: true\n });\n };\n\n React.useEffect(() => {\n if (!isRenderAppInstantSearch) return;\n\n if (typeof window !== 'undefined') {\n window.sledgeInstantSearchIconWidgetPopup = ({\n onAfterAddToCart = () => {},\n onAfterAddWishlist = () => {},\n onAfterRemoveWishlist = () => {},\n onAfterRenderProduct = () => {},\n isJsVersion = null,\n productCardsComponent = () => {},\n suggestionKeywordListsComponent = () => {},\n otherIndexListsComponent = () => {},\n searchViewMoreResultComponent = () => {},\n urlSearchResult = '',\n query = {},\n instantSearchPreviewSettings = null,\n previewSettings = null,\n forceShowInfo = true,\n isPreviewSettings = false\n }) => {\n setHandleFunctions({\n onAfterAddToCart,\n onAfterAddWishlist,\n onAfterRemoveWishlist,\n onAfterRenderProduct,\n isJsVersion,\n productCardsComponent,\n suggestionKeywordListsComponent,\n otherIndexListsComponent,\n searchViewMoreResultComponent,\n query,\n instantSearchPreviewSettings,\n previewSettings\n });\n\n if (isPreviewSettings) return;\n\n setShowInfo(forceShowInfo);\n setUrlSearchResult(urlSearchResult);\n };\n }\n\n handleSettings({\n LOCAL_STORAGE_INSTANT_SEARCH_SETTING: localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || null\n });\n }, [isRenderAppInstantSearch]);\n\n React.useEffect(() => {\n // Firefox\n showInfo ? document.body.classList.add('sledge__open-popup-state') : document.body.classList.remove('sledge__open-popup-state');\n }, [showInfo]);\n\n React.useEffect(() => {\n if (Boolean(previousState && previousState?.keyword !== keyword)) {\n const INSTANT_SEARCH_SETTING = handleFunctions?.instantSearchPreviewSettings || JSON.parse((localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || null) as string);\n\n const delayDebounceFn = setTimeout(() => {\n if (INSTANT_SEARCH_SETTING)\n handleMultiSearch({\n data: INSTANT_SEARCH_SETTING,\n onSearch: true\n });\n }, 500);\n return () => clearTimeout(delayDebounceFn);\n }\n }, [keyword]);\n\n useEffectOnChange(() => {\n handleSettings({\n LOCAL_STORAGE_INSTANT_SEARCH_SETTING: localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || null,\n isPreviewSettings: true\n });\n }, [handleFunctions?.instantSearchPreviewSettings]);\n\n const alertFirstSyncComponent =\n !isLoading && !totalHitsProduct && instantSearchSettings?.first_sync ? (\n <Alert className=\"sledge-instant-search__icon-widget-popup-alert-first-sync\" type=\"info\" icon={<InfoCircleIcon width={24} height={24} color=\"#003a5a\" />}>\n <div>Products and Collections indexing is in progress. Product Filter and Instant Search widgets may appear empty during this process.</div>\n <p></p>\n <div>The products and collections will become visible in the widgets once indexing is complete.</div>\n </Alert>\n ) : null;\n\n return (\n <Dialog.Root open={showInfo} onOpenChange={setShowInfo}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"sledge__popup-overlay\" />\n <Dialog.Overlay className=\"sledge__popup-overlay-blur\" />\n <Dialog.Content className=\"sledge-instant-search__icon-widget-popup-detail-content\" data-layout-type={displaySettings?.search?.layout || ''}>\n {alertFirstSyncComponent}\n\n <SearchInputField\n type=\"text\"\n icon={<SearchIcon width={20} height={20} color=\"#000000\" />}\n placeholder={languageSettings?.search_form_placeholder?.widget || 'Search anything...'}\n value={keyword}\n fieldRef={searchFieldRef}\n onChange={({ value }: any) => setKeyword(value)}\n onKeyDown={(event: KeyboardEvent) => {\n // TODO: This method just for js version, find a way to add additional function after enter key on headless (maybe we can expose onEnterKey)\n if (event.key === 'Enter') {\n const query: any = handleFunctions.query;\n const queryKeyword = query?.keyword ? query.keyword : DEFAULT_QUERY_PARAM.KEYWORD;\n const urlToSearchResult = isRedirect ? redirectObjectDirection : `${urlSearchResult || DEFAULT_SEARCH_RESULT_URL}?${queryKeyword}=${keyword}`;\n\n window.location.href = urlToSearchResult;\n }\n }}\n className=\"sledge-instant-search__icon-widget-search-form-field\"\n withClearField\n />\n\n <div className=\"sledge-instant-search__icon-widget-search-form-result\">\n {isLoading ? (\n <ScrollArea>\n <div className=\"sledge-instant-search__icon-widget-search-form-result-wrapper\">\n <div className=\"sledge-instant-search__icon-widget-search-form-result-flex\">\n <div className=\"sledge-instant-search__icon-widget-search-form-result-flex-item-other sledge-instant-search__icon-widget-search-form-result-flex-item-other-skeleton\">\n {[0, 1, 2].map((index: number) => (\n <React.Fragment key={index}>\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"42px\"\n color=\"lighten\"\n rounded=\"md\"\n {...(Boolean(index) && {\n style: { marginTop: '12px' }\n })}\n />\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n gap: '12px',\n marginTop: '12px'\n }}\n >\n {[1, 2, 3].map((index: number) => (\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n key={index}\n style={{\n maxWidth: '140px'\n }}\n />\n ))}\n </div>\n </React.Fragment>\n ))}\n </div>\n <div className=\"sledge-instant-search__icon-widget-search-form-result-flex-item-product\">\n <SkeletonLoading.ProductGrid count={6} type=\"medium\" />\n </div>\n </div>\n </div>\n </ScrollArea>\n ) : (\n <ScrollArea>\n <div className=\"sledge-instant-search__icon-widget-search-form-result-wrapper\">\n <div className=\"sledge-instant-search__icon-widget-search-form-result-flex\">\n <div className=\"sledge-instant-search__icon-widget-search-form-result-flex-item-other\">\n {Object.keys(suggestionSettings).length &&\n suggestionSettings[suggestionIndex]?.keywords?.active &&\n suggestionSettings[suggestionIndex]?.keywords?.list?.length ? (\n <Global.SuggestionKeywordLists\n listsComponent={handleFunctions.suggestionKeywordListsComponent}\n keywords={suggestionSettings[suggestionIndex].keywords.list}\n isComponentJsVersion={handleFunctions.isJsVersion}\n showPopupComponent={showInfo}\n setShowPopupComponent={setShowInfo}\n urlSearchResult={urlSearchResult}\n query={handleFunctions.query}\n />\n ) : null}\n\n {searchResultOther &&\n searchResultOther.map((item: any, index: number) => {\n const { hits, name, type } = item;\n\n return (\n <React.Fragment key={index}>\n <Global.OtherIndexLists\n listsComponent={handleFunctions.otherIndexListsComponent}\n name={name}\n type={type}\n items={hits}\n isComponentJsVersion={handleFunctions.isJsVersion}\n showPopupComponent={showInfo}\n setShowPopupComponent={setShowInfo}\n languageSettings={languageSettings}\n />\n </React.Fragment>\n );\n })}\n </div>\n <div className=\"sledge-instant-search__icon-widget-search-form-result-flex-item-product\">\n {searchResultProduct?.length ? (\n <div className=\"sledge-instant-search__icon-widget-search-form-result-product\">\n <ProductGrid\n sourceApp=\"instant-search\"\n type=\"medium\"\n data={searchResultProduct.map((item: any) => {\n const { variants, ...product } = item || {};\n\n return {\n product,\n variants\n };\n })}\n setting={{\n show_vendor: displaySettings?.search?.show_vendor,\n show_sku: displaySettings?.search?.show_sku,\n show_price: displaySettings?.search?.show_price,\n language_button_add_to_cart: languageSettings?.add_to_cart,\n language_button_out_of_stock: languageSettings && languageSettings['out of stock'] ? languageSettings['out of stock'] : ''\n }}\n showOptionOutOfStock={true}\n isComponentJsVersion={handleFunctions.isJsVersion}\n cards={handleFunctions.productCardsComponent}\n onAfterAddToCart={handleFunctions.onAfterAddToCart}\n onAfterAddWishlist={handleFunctions.onAfterAddWishlist}\n onAfterRemoveWishlist={handleFunctions.onAfterRemoveWishlist}\n onAfterRenderProduct={handleFunctions.onAfterRenderProduct}\n showPopupComponent={showInfo}\n setShowPopupComponent={setShowInfo}\n dataReviews={dataReviews}\n previewSettings={handleFunctions?.previewSettings}\n />\n </div>\n ) : Object.keys(suggestionSettings).length &&\n suggestionSettings[suggestionIndex]?.products?.active &&\n suggestionSettings[suggestionIndex]?.products?.list?.length ? (\n <>\n <div className=\"sledge-instant-search__icon-widget-search-form-result-product-suggestion-no-result-text\">\n <span>Sorry</span>, nothing found for <span>{keyword}</span>. Did you mean:\n </div>\n <ProductGrid\n sourceApp=\"instant-search\"\n type=\"medium\"\n data={suggestionSettings[suggestionIndex].products.list.map((item: any) => {\n const { variants, ...product } = item || {};\n\n return {\n product,\n variants\n };\n })}\n setting={{\n show_vendor: displaySettings?.search?.show_vendor,\n show_sku: displaySettings?.search?.show_sku,\n show_price: displaySettings?.search?.show_price,\n language_button_add_to_cart: languageSettings?.add_to_cart,\n language_button_out_of_stock: languageSettings && languageSettings['out of stock'] ? languageSettings['out of stock'] : ''\n }}\n showOptionOutOfStock={true}\n isComponentJsVersion={handleFunctions.isJsVersion}\n cards={handleFunctions.productCardsComponent}\n onAfterAddToCart={handleFunctions.onAfterAddToCart}\n onAfterAddWishlist={handleFunctions.onAfterAddWishlist}\n onAfterRemoveWishlist={handleFunctions.onAfterRemoveWishlist}\n onAfterRenderProduct={handleFunctions.onAfterRenderProduct}\n showPopupComponent={showInfo}\n setShowPopupComponent={setShowInfo}\n previewSettings={handleFunctions?.previewSettings}\n />\n </>\n ) : (\n <>\n <div className=\"sledge-instant-search__icon-widget-search-form-result-title\">{languageSettings?.product || 'Products'}</div>\n <div className=\"sledge-instant-search__icon-widget-search-form-result-item-disabled\">\n {languageSettings?.text_no_result || 'No product were found'}\n </div>\n </>\n )}\n {searchResultProduct?.length ||\n (Object.keys(suggestionSettings).length &&\n suggestionSettings[suggestionIndex]?.products?.active &&\n suggestionSettings[suggestionIndex]?.products?.list?.length) ? (\n <div className=\"sledge-instant-search__icon-widget-button-more-wrapper\">\n <Global.SearchViewMoreResult\n component={handleFunctions.searchViewMoreResultComponent}\n keyword={keyword}\n isComponentJsVersion={handleFunctions.isJsVersion}\n showPopupComponent={showInfo}\n setShowPopupComponent={setShowInfo}\n urlSearchResult={urlSearchResult}\n redirectObjectDirection={redirectObjectDirection}\n query={handleFunctions.query}\n languageSettings={languageSettings}\n />\n </div>\n ) : null}\n </div>\n </div>\n </div>\n </ScrollArea>\n )}\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n","import '@core/lib/polyfills';\n\nimport {\n DEFAULT_QUERY_PRODUCT_MEILISEARCH,\n DEFAULT_QUERY_PUBLISHED_FILTER,\n HIERARCHICAL_FACET_OBJECT_ALIASES,\n LOCAL_STORAGE_KEY,\n MAX_LIMIT_HIERARCHICAL,\n SEPARATOR_HIERARCHICAL_FACET\n} from '@core/lib/const';\nimport { multiSearch, search } from '@core/api/instant-search';\n\ninterface IDetectQueryStringFilter {\n facets: any;\n facetsQueryStringObject: any;\n callback(facetsQueryStringObject: any): void;\n}\n\ninterface ICreateQueryFilter extends IDetectQueryStringFilter {\n additional?: any[];\n allowedFilterSlider?: any[];\n separator: string;\n separatorCollection: string;\n hierarchicalFacetAliases?: any[];\n defaultFilterItems?: any[];\n}\n\ninterface ICreateHierarchicalFacet {\n indexValue: any;\n filter: any;\n searchResultFacets: any;\n separator: string;\n separatorCollection: string;\n clickedFacetsObject: any;\n hiddens: any[];\n hiddensCollection: any[];\n displaySettings: any;\n searchFacetDistribution: any;\n hierarchicalFacetAliases?: any[];\n hierarchicalCollectionsSettings?: any;\n}\n\nconst sortFacets = ({ facets, sortingOrder }: { facets: any[]; sortingOrder: any[] }) => {\n // Handle edge cases\n if (!facets?.length || !sortingOrder?.length) return facets;\n\n const sortRecursively = (objects: any[], orderArray: any[]): any[] => {\n // Determine sorting type based on first object structure\n const isCollectionIdSort = objects?.[0]?.parseObject?.collection_id !== undefined;\n const sortKey = isCollectionIdSort ? 'collection_id' : 'name';\n\n // Create map for quick lookups\n const objectsMap = new Map(objects.map((obj: any) => [isCollectionIdSort ? obj.parseObject[sortKey] : obj[sortKey], obj]));\n\n const sorted: any[] = [];\n const usedKeys = new Set<string>();\n\n // Sort according to order array\n orderArray.forEach((sortItem: any) => {\n const lookupKey = isCollectionIdSort ? sortItem?.id : sortItem;\n const matchingObject = objectsMap.get(lookupKey);\n\n if (lookupKey && matchingObject) {\n usedKeys.add(lookupKey);\n\n // Check if both objects have children before recursive call\n const hasMatchingChildren = matchingObject?.children?.length > 0 && sortItem?.children?.length > 0;\n\n sorted.push({\n ...matchingObject,\n ...(hasMatchingChildren\n ? {\n children: hasMatchingChildren ? sortRecursively(matchingObject?.children, sortItem?.children) : matchingObject?.children?.length ? matchingObject?.children : []\n }\n : {})\n });\n }\n });\n\n // Add remaining items that weren't in sorting order\n objects.forEach((obj: any) => {\n const objKey = isCollectionIdSort ? obj.parseObject[sortKey] : obj[sortKey];\n if (!usedKeys.has(objKey)) {\n sorted.push(obj);\n }\n });\n\n return sorted;\n };\n\n try {\n // Handle root level sorting\n const rootObjects = facets;\n const rootSortOrder = sortingOrder;\n\n // Check for root level matches and sort\n const sorted = sortRecursively(rootObjects, rootSortOrder);\n\n return sorted;\n } catch (error) {\n return facets;\n }\n};\n\nexport const parseFacetObject = ({ facet = '' }: { facet: string }) => {\n if (facet && String(facet)?.includes(SEPARATOR_HIERARCHICAL_FACET)) return JSON.parse(String(facet)?.replaceAll(SEPARATOR_HIERARCHICAL_FACET, ',')) as any;\n return null;\n};\n\nexport const detectQueryStringFilter = ({ facets, facetsQueryStringObject, callback }: IDetectQueryStringFilter) => {\n const searchParams = new URLSearchParams(document.location.search);\n const searchParamsObject = Object.fromEntries(searchParams);\n\n for (const searchParamsKey in searchParamsObject) {\n let ifFacetsQueryStringObject = facets?.length && facets.includes(searchParamsKey);\n\n if (ifFacetsQueryStringObject) facetsQueryStringObject[searchParamsKey] = searchParamsObject[searchParamsKey].split(',');\n }\n\n if (Object.keys(facetsQueryStringObject).length) callback(facetsQueryStringObject);\n\n return facetsQueryStringObject;\n};\n\nexport const detectArrFacetHierarchical = ({\n clickedFacetsObject,\n separator,\n separatorCollection,\n hierarchicalFacetAliases\n}: {\n clickedFacetsObject: any;\n separator: string;\n separatorCollection: string;\n hierarchicalFacetAliases?: any[];\n}) => {\n let facetHierarchical = hierarchicalFacetAliases?.reduce((item, key) => {\n let defaultLevelHierarchical: any = {};\n\n for (let iLevel = 0; iLevel < MAX_LIMIT_HIERARCHICAL; iLevel++) {\n defaultLevelHierarchical[`lvl${iLevel}`] = [];\n }\n\n return { ...item, [key]: defaultLevelHierarchical };\n }, {});\n\n Object.entries(clickedFacetsObject).map((facet: any) => {\n if (facet?.length && facet[1].length) {\n const isCollection = String(facet[0])?.includes(HIERARCHICAL_FACET_OBJECT_ALIASES.collections);\n\n let isHierarchical = hierarchicalFacetAliases?.includes(facet[0]);\n\n if (isHierarchical)\n facet[1]?.map((item: any) => {\n const arrItem = String(item).split(isCollection ? separatorCollection : separator);\n\n if (arrItem?.length && Object.hasOwn(facetHierarchical[facet[0]], `lvl${arrItem.length - 1}`)) facetHierarchical[facet[0]][`lvl${arrItem.length - 1}`].push(item);\n });\n }\n });\n\n return facetHierarchical;\n};\n\nexport const createQueryFilter = ({\n facets,\n facetsQueryStringObject,\n callback,\n additional = [],\n separator,\n separatorCollection,\n allowedFilterSlider,\n hierarchicalFacetAliases,\n defaultFilterItems\n}: ICreateQueryFilter) => {\n let filters = additional?.filter((item) => item);\n\n let detectClickedFacets = detectQueryStringFilter({\n facets,\n facetsQueryStringObject,\n callback\n });\n let facetHierarchical = detectArrFacetHierarchical({\n clickedFacetsObject: detectClickedFacets,\n separator,\n separatorCollection,\n hierarchicalFacetAliases\n });\n\n const facetEntries = Object.entries(detectClickedFacets) || [];\n\n for (const facetEntry of facetEntries) {\n const detectClickedFacet: any = facetEntry;\n\n if (!(detectClickedFacet?.length && detectClickedFacet[1].length)) continue;\n\n let isCustom = ['variants.inventory_quantity'].includes(detectClickedFacet[0]);\n let isRange = allowedFilterSlider?.includes(detectClickedFacet[0]);\n let isHierarchical = hierarchicalFacetAliases?.includes(detectClickedFacet[0]);\n let filterSettings = defaultFilterItems?.find(({ value }: any) => value === detectClickedFacet[0])?.settings;\n\n const { query_filter } = filterSettings || {};\n\n if (isHierarchical) {\n let arrItemHierarchicals: any = [];\n Object.entries(facetHierarchical[detectClickedFacet[0]]).map((itemHierarchical: any) => {\n if (itemHierarchical[1]?.length) arrItemHierarchicals.push([`${detectClickedFacet[0]}.${itemHierarchical[0]}`, itemHierarchical[1]]);\n });\n\n let filterItemHierarchicals = arrItemHierarchicals\n ?.map((filterHierarchical: any) => {\n if (query_filter === 'AND') {\n return filterHierarchical?.[1]?.length ? filterHierarchical?.[1]?.map?.((item: any) => `'${filterHierarchical[0]}' = ${JSON.stringify(item)}`)?.join?.(' AND ') : '';\n } else {\n return `'${filterHierarchical[0]}' IN ${JSON.stringify(filterHierarchical[1])}`;\n }\n })\n .join(' AND ');\n\n filters.push(filterItemHierarchicals);\n } else {\n let filterItem = '';\n if (query_filter === 'AND') {\n filterItem = detectClickedFacet?.[1]?.length ? detectClickedFacet?.[1]?.map?.((item: any) => `'${detectClickedFacet[0]}' = ${JSON.stringify(item)}`)?.join?.(' AND ') : '';\n } else {\n filterItem = `'${detectClickedFacet[0]}' IN ${JSON.stringify(detectClickedFacet[1])}`;\n }\n\n if (isRange) filterItem = `'${detectClickedFacet[0]}' >= ${detectClickedFacet[1][0]} AND '${detectClickedFacet[0]}' <= ${detectClickedFacet[1][1]}`;\n if (isCustom) {\n if (Array.isArray(detectClickedFacet[1]) && detectClickedFacet[1]?.length > 1) {\n filterItem = `(${detectClickedFacet[1]\n ?.map((item: any) => {\n return `'${detectClickedFacet[0]}' ${item}`;\n })\n .join(' OR ')})`;\n } else {\n filterItem = `'${detectClickedFacet[0]}' ${detectClickedFacet[1]}`;\n }\n }\n\n filters.push(filterItem);\n }\n }\n\n return [...new Set(filters.concat(DEFAULT_QUERY_PRODUCT_MEILISEARCH))].join(' AND ');\n};\n\nexport const createHierarchicalFacet = ({\n indexValue,\n filter,\n searchResultFacets,\n separator,\n separatorCollection,\n clickedFacetsObject,\n hiddens,\n hiddensCollection,\n displaySettings,\n searchFacetDistribution,\n hierarchicalFacetAliases,\n hierarchicalCollectionsSettings\n}: ICreateHierarchicalFacet) => {\n const { hide_unrelated } = filter;\n\n const { hidden_ids: hierarchical_collections_hidden_ids, structure: hierarchical_collections_structure } = hierarchicalCollectionsSettings || {};\n\n const isCollection = String(indexValue)?.includes(HIERARCHICAL_FACET_OBJECT_ALIASES.collections);\n const hiddensProp = isCollection ? hiddensCollection : hiddens;\n\n let arrSelectedFacetHierarchical = detectArrFacetHierarchical({\n clickedFacetsObject,\n separator,\n separatorCollection,\n hierarchicalFacetAliases\n });\n\n let hierarchicalFacets: any = [];\n for (let level = 0; level < MAX_LIMIT_HIERARCHICAL; level++) {\n let facets = searchResultFacets[`${indexValue}.lvl${level}`];\n\n let isHideFacetWhenZeroValue = displaySettings?.filter?.hide_when_zero_value;\n if (isHideFacetWhenZeroValue) {\n let filteredFacets = searchFacetDistribution?.[`${indexValue}.lvl${level}`] || {};\n facets = Object.keys(filteredFacets).map((item) => {\n return {\n name: item,\n value: item,\n total: filteredFacets[item] || 0\n };\n });\n }\n\n // If facets not found\n if (!facets || (facets && !Object.keys(facets).length)) continue;\n\n let parent = hierarchicalFacets;\n\n for (let facet of facets) {\n const names = facet.name.split(isCollection ? separatorCollection : separator);\n const name = names?.[names.length - 1]?.trim?.();\n const parseObject = parseFacetObject({ facet: name });\n const isFacetObject = Boolean(parseObject?.collection_id);\n const selectedFacetHierarchical = arrSelectedFacetHierarchical[indexValue][`lvl${level}`];\n const isWhenSelectedHideSiblings = hide_unrelated && selectedFacetHierarchical?.length && !selectedFacetHierarchical.includes(facet.value);\n\n let isHidden = false;\n if (isCollection && isFacetObject && hierarchical_collections_hidden_ids?.length) {\n isHidden = hierarchical_collections_hidden_ids?.includes(parseObject?.collection_id);\n } else {\n isHidden = hiddensProp?.find((hierarchical_hidden: any) => facet.value?.startsWith(hierarchical_hidden));\n }\n\n // Hide item tree\n if (isWhenSelectedHideSiblings || isHidden) continue;\n\n if (level > 0) {\n parent = hierarchicalFacets;\n\n for (let i = 0; i < names.length - 1; i++) {\n let foundIndex = parent?.findIndex((f: any) => f.name.trim().toLowerCase() === names[i].trim().toLowerCase());\n\n parent = parent?.[foundIndex]?.children;\n }\n\n parent?.push({\n ...facet,\n name,\n level,\n parseObject,\n children: []\n });\n }\n\n if (level === 0)\n parent?.push({\n ...facet,\n name,\n level: 0,\n parseObject,\n children: []\n });\n }\n }\n\n // User-based sorting\n if (isCollection) {\n hierarchicalFacets = sortFacets({\n facets: hierarchicalFacets,\n sortingOrder: hierarchical_collections_structure\n });\n }\n\n return hierarchicalFacets;\n};\n\nexport const handleConditionNotUpdateFacetDistribution = ({\n value,\n clickedFacets,\n keepCounterFacets,\n allowedFilterSlider,\n filterSettings\n}: {\n value: any;\n clickedFacets: any;\n keepCounterFacets: any;\n allowedFilterSlider?: any;\n filterSettings?: any;\n}) => {\n const { query_filter } = filterSettings || {};\n\n let arrFacetSelected: any[] = [];\n Object.entries(clickedFacets).map((facet: any) => {\n if (facet?.length && facet[1].length) {\n arrFacetSelected.push(facet[0]);\n }\n });\n\n let isHasFacetSelected = arrFacetSelected?.length;\n let isNoneFacetSelected = !isHasFacetSelected;\n let isOnFacetSelectedOne = isHasFacetSelected && arrFacetSelected.includes(value) && isHasFacetSelected === 1;\n let isSelectedFacetWithPrice = false;\n allowedFilterSlider?.map((filterSlider: any) => {\n if (!filterSlider) return;\n\n isSelectedFacetWithPrice = arrFacetSelected.includes(filterSlider);\n });\n\n let isPriorityFacet = isHasFacetSelected && !isOnFacetSelectedOne && keepCounterFacets?.includes(value) && !isSelectedFacetWithPrice;\n\n // Always update when query filter logic is AND\n return query_filter === 'AND' ? false : isNoneFacetSelected || isOnFacetSelectedOne || isPriorityFacet;\n};\n\nexport const handleFacetValues = ({\n filter,\n items,\n languageSettings,\n clickedFacets,\n searchFacetDistribution,\n displaySettings,\n settings,\n keepCounterFacets,\n allowedFilterSlider\n}: {\n filter?: any;\n items?: any;\n languageSettings?: any;\n clickedFacets?: any;\n searchFacetDistribution?: any;\n displaySettings?: any;\n settings?: any;\n keepCounterFacets?: any;\n allowedFilterSlider?: any;\n}): any => {\n const { value, settings: filterSettings } = filter;\n\n let aliases: any = {};\n if (filter.value === HIERARCHICAL_FACET_OBJECT_ALIASES.product_type) aliases = settings.productTypeAliases || {};\n if (filter.value === HIERARCHICAL_FACET_OBJECT_ALIASES.collections) aliases = settings.collectionAliases || {};\n\n const isCollection = String(filter?.value)?.includes(HIERARCHICAL_FACET_OBJECT_ALIASES.collections);\n\n const isHideFacetWhenZeroValue = displaySettings?.filter?.hide_when_zero_value;\n\n const { prefix, filter_list, delete_prefix, selected_filter, structure, hiddens } = filterSettings || {};\n\n let facetValues: any[] = [];\n\n if (!items?.length) return facetValues;\n\n for (const item of items) {\n const isManualFilter = item && filter_list === 'manual' && !selected_filter?.includes(item?.value);\n const isPrefixFilter = item && filter_list === 'prefix' && !prefix?.find((prefixItem: any) => item?.value?.startsWith(prefixItem));\n const isHidden = hiddens?.includes?.(item?.value);\n\n if (!item || isManualFilter || isPrefixFilter || isHidden) continue;\n\n const isFacetHierarchical = Object.hasOwn(item, 'children');\n\n let labelName = item.name;\n if (isFacetHierarchical && isCollection) labelName = parseFacetObject({ facet: labelName })?.collection_title || labelName;\n\n let getValue = isFacetHierarchical ? `${value}.lvl${item.level}` : value;\n\n if (languageSettings && (languageSettings[item.value] || languageSettings[item.name])) labelName = languageSettings[item.value] || languageSettings[item.name];\n\n let counter = handleConditionNotUpdateFacetDistribution({\n value: getValue,\n clickedFacets,\n keepCounterFacets,\n allowedFilterSlider,\n filterSettings\n })\n ? item?.total || 0\n : searchFacetDistribution?.[getValue] && searchFacetDistribution?.[getValue]?.[item.value]\n ? searchFacetDistribution[getValue][item.value]\n : 0;\n\n let getLabelName = aliases[labelName] || labelName;\n delete_prefix?.map((deletePrefix: any) => {\n if (String(getLabelName).startsWith(deletePrefix)) getLabelName = String(getLabelName).replace(deletePrefix, '');\n });\n\n if (!(isHideFacetWhenZeroValue && !counter))\n facetValues.push({\n ...item,\n labelName: getLabelName,\n counter\n });\n }\n\n facetValues = sortFacets({\n facets: facetValues,\n sortingOrder: structure\n });\n\n return facetValues;\n};\n\nexport const keyOpenFilters = ({ items = [] }: { items?: any }) => {\n return items?.length\n ? items\n .map((props: any, index: number) => {\n const { value, settings } = props;\n const { collapse } = settings || {};\n\n return collapse ? null : `${value}-${index}`;\n })\n .filter((item: any) => item)\n : [];\n};\n\nexport const handleSearchResponse = async (props: {\n layoutType?: 'product-filter' | 'default';\n clickedTabIndexId?: string | number | null;\n clickedTabIndexType?: string | null;\n keyword?: string;\n sort?: any[];\n page?: any;\n limit?: any;\n isUseMultiSearch?: boolean;\n facets?: any[];\n attributesToRetrieve?: any;\n clickedFacets?: any;\n setClickedFacets?(value: React.SetStateAction<any>): void;\n allowedFilterSlider?: any[];\n hierarchicalFacetAliases?: any[];\n defaultFilterItems?: any[];\n setValueFilterPriceChange?(value: React.SetStateAction<number[]>): void;\n setValueFilterOnSaleChange?(value: React.SetStateAction<number[]>): void;\n setValueFilterSliderOthers?(value: React.SetStateAction<any>): void;\n collectionId?: string | number | '';\n hiddenTags?: [];\n showOutOfStock?: boolean;\n hierarchicalProductTypeSettings?: any;\n hierarchicalCollectionsSettings?: any;\n usePublishedFilter?: boolean;\n tabs?: any[];\n}) => {\n const {\n layoutType = 'default',\n clickedTabIndexId,\n clickedTabIndexType = 'product',\n keyword,\n sort = [],\n page = 1,\n limit = 1,\n isUseMultiSearch,\n facets,\n attributesToRetrieve = [],\n clickedFacets,\n setClickedFacets,\n allowedFilterSlider,\n hierarchicalFacetAliases,\n defaultFilterItems,\n setValueFilterPriceChange,\n setValueFilterOnSaleChange,\n setValueFilterSliderOthers,\n collectionId,\n hiddenTags,\n showOutOfStock,\n hierarchicalProductTypeSettings,\n hierarchicalCollectionsSettings,\n usePublishedFilter,\n tabs = []\n } = props;\n\n const isResultForProduct = clickedTabIndexType === 'product';\n\n const isTypeCategoryHasPublished = ({ usePublishedFilter, type }: { usePublishedFilter?: boolean; type?: any }) =>\n Boolean(usePublishedFilter && type && ['collection', 'page', 'article'].includes(type));\n\n const { separator: hierarchical_separator, hiddens: hierarchical_hiddens } = hierarchicalProductTypeSettings || {};\n const {\n separator: hierarchical_collections_separator,\n hiddens: hierarchical_collections_hiddens,\n hidden_ids: hierarchical_collections_hidden_ids,\n structure: hierarchical_collections_structure\n } = hierarchicalCollectionsSettings || {};\n\n let response: any;\n let filterProduct: any = createQueryFilter({\n facets,\n facetsQueryStringObject: clickedFacets,\n callback: (facetsQueryStringObject) => {\n setClickedFacets?.(facetsQueryStringObject);\n\n if (facetsQueryStringObject['variants.price']) setValueFilterPriceChange?.(facetsQueryStringObject['variants.price']);\n if (facetsQueryStringObject['variants.sale_percent']) setValueFilterOnSaleChange?.(facetsQueryStringObject['variants.sale_percent']);\n\n // Set value filter slider others\n allowedFilterSlider?.map((filterSlider: any) => {\n if (!filterSlider || (filterSlider && ['variants.price', 'variants.sale_percent'].includes(filterSlider))) return;\n\n if (facetsQueryStringObject[filterSlider]) setValueFilterSliderOthers?.((prevState: any) => ({ ...prevState, [filterSlider]: facetsQueryStringObject[filterSlider] }));\n });\n },\n separator: hierarchical_separator,\n separatorCollection: hierarchical_collections_separator,\n additional: [\n hiddenTags?.length ? `'tags' NOT IN ${JSON.stringify(hiddenTags)}` : null,\n collectionId ? `'collections.id' = '${collectionId}'` : null,\n !showOutOfStock ? `'availability' IN ${JSON.stringify(['in stock'])}` : null\n ],\n allowedFilterSlider,\n hierarchicalFacetAliases,\n defaultFilterItems\n });\n\n let filterCategory = '';\n if (isTypeCategoryHasPublished({ usePublishedFilter, type: clickedTabIndexType })) {\n filterCategory = DEFAULT_QUERY_PUBLISHED_FILTER;\n }\n\n let bodyProductOrCategory = isResultForProduct\n ? {\n q: keyword,\n sort,\n page,\n hitsPerPage: limit,\n facets,\n attributesToRetrieve,\n filter: filterProduct\n }\n : {\n q: keyword,\n sort,\n page,\n hitsPerPage: 12,\n filter: filterCategory\n };\n\n if (isResultForProduct && layoutType === 'product-filter') {\n response = await search(clickedTabIndexId, bodyProductOrCategory);\n } else {\n if (isUseMultiSearch) {\n let getTabs = isUseMultiSearch ? tabs : tabs.filter(({ index }: any) => index?.includes(clickedTabIndexId));\n let body = {\n queries: getTabs.map((tab: any) => {\n const { index, type } = tab;\n\n let isCurrentIndex = index.includes(clickedTabIndexId);\n let isProductIndex = type === 'product';\n\n return {\n indexUid: index,\n ...(isCurrentIndex\n ? bodyProductOrCategory\n : {\n q: keyword || '',\n hitsPerPage: 1,\n filter: isTypeCategoryHasPublished({ usePublishedFilter: usePublishedFilter, type }) ? DEFAULT_QUERY_PUBLISHED_FILTER : isProductIndex ? filterProduct : '',\n attributesToRetrieve: [],\n limit: 0,\n page: 0,\n ...(isProductIndex\n ? {\n facets\n }\n : {})\n })\n };\n })\n };\n\n response = await multiSearch(body);\n } else {\n response = await search(clickedTabIndexId, bodyProductOrCategory);\n }\n }\n\n return response;\n};\n","import React from 'react';\nimport { SelectField } from '@core/components';\n\nexport const Sort = React.memo(\n (props: {\n label?: string;\n options?: Array<{\n label: string;\n value: string;\n }>;\n clickedOption?: any;\n handleChangeOption?: any;\n overridePlaceholderOnMobile?: any;\n }) => {\n const { label = '', options = [], clickedOption = '', handleChangeOption = null, overridePlaceholderOnMobile = null } = props;\n\n return (\n <>\n {options?.length ? (\n <>\n <span className=\"sledge-instant-search__result-data-summary-select-field-sort\">{label || 'Sort by'}:</span>\n <SelectField\n align=\"end\"\n prefixLabel={\n <svg width={18} height={18} viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M12.6296 4.34737C12.9144 4.34737 13.1497 4.55898 13.1869 4.83354L13.1921 4.90987L13.192 13.7599L15.2892 11.6543C15.5083 11.4341 15.8645 11.4333 16.0847 11.6525C16.2848 11.8517 16.3037 12.1641 16.1408 12.3847L16.0865 12.4479L13.0282 15.5204C13.0097 15.5386 12.991 15.555 12.9712 15.5701L13.0282 15.5204C13.0006 15.5482 12.9708 15.5724 12.9394 15.5932C12.9285 15.6 12.9171 15.607 12.9055 15.6135C12.8946 15.62 12.8837 15.6258 12.8725 15.6311C12.8615 15.6359 12.8504 15.6408 12.8391 15.6454C12.8247 15.6515 12.8099 15.6568 12.795 15.6613C12.7862 15.6637 12.7772 15.6662 12.7681 15.6685C12.7519 15.673 12.7357 15.6763 12.7193 15.6789C12.7116 15.6798 12.7036 15.6809 12.6955 15.6819C12.677 15.6844 12.6587 15.6857 12.6404 15.686C12.6368 15.6857 12.6332 15.6857 12.6296 15.6857L12.6186 15.686C12.6003 15.6857 12.582 15.6844 12.5637 15.6823L12.6296 15.6857C12.5989 15.6857 12.5689 15.6833 12.5396 15.6785C12.5233 15.6763 12.5071 15.673 12.4909 15.6689C12.4824 15.6663 12.4738 15.6639 12.4654 15.6614C12.4493 15.6569 12.4332 15.6512 12.4174 15.6448C12.4088 15.6408 12.4005 15.6372 12.3922 15.6333C12.3793 15.6278 12.3663 15.6211 12.3535 15.6139C12.342 15.6069 12.3307 15.6 12.3196 15.5926C12.3109 15.5875 12.3024 15.5815 12.294 15.5752L12.288 15.5701C12.2682 15.555 12.2494 15.5386 12.2318 15.5209L12.2308 15.5204L9.1725 12.4479C8.95334 12.2278 8.95416 11.8716 9.17434 11.6525C9.3745 11.4532 9.68704 11.4358 9.90687 11.5997L9.96983 11.6543L12.067 13.7614L12.0671 4.90987C12.0671 4.59921 12.3189 4.34737 12.6296 4.34737ZM5.18325 2.3122L5.19421 2.31189C5.21254 2.31224 5.23085 2.31348 5.24908 2.31562L5.18325 2.3122C5.21389 2.3122 5.24396 2.31465 5.27328 2.31937C5.28931 2.32156 5.3054 2.32487 5.32136 2.32889C5.33074 2.33164 5.3403 2.33433 5.34975 2.33725C5.36452 2.34142 5.37882 2.34648 5.39293 2.35213C5.40313 2.35668 5.41346 2.36119 5.42362 2.366C5.4357 2.37123 5.4476 2.37737 5.45931 2.38397C5.46933 2.39014 5.47926 2.39616 5.48898 2.40246C5.49898 2.40841 5.50899 2.41537 5.51882 2.42269L5.582 2.47746L8.64033 5.54996C8.85949 5.77013 8.85867 6.12629 8.63849 6.34545C8.43833 6.54469 8.12579 6.56212 7.90596 6.39822L7.843 6.34361L5.74525 4.23564L5.74575 13.088C5.74575 13.3987 5.49391 13.6505 5.18325 13.6505C4.89848 13.6505 4.66313 13.4389 4.62588 13.1644L4.62075 13.088L4.62025 4.23639L2.52367 6.34361C2.32443 6.54377 2.01197 6.56265 1.79139 6.39977L1.72817 6.34545C1.52801 6.14621 1.50914 5.83376 1.67202 5.61317L1.72633 5.54996L4.78467 2.47746L4.81779 2.44709C4.82557 2.44043 4.83353 2.43399 4.84167 2.42776L4.78467 2.47746C4.81226 2.44974 4.84202 2.42549 4.87341 2.40473C4.88436 2.39791 4.89574 2.39094 4.90738 2.38438C4.91819 2.37787 4.92917 2.37215 4.9403 2.36682C4.95128 2.36196 4.96242 2.35706 4.97375 2.35251C4.98814 2.34636 5.00289 2.34115 5.0178 2.33657C5.02687 2.33414 5.03616 2.33154 5.04555 2.32918C5.06066 2.32503 5.07593 2.32186 5.09129 2.31932C5.10053 2.31817 5.10959 2.31691 5.11871 2.31586C5.13607 2.31348 5.15388 2.31227 5.17171 2.3119C5.17564 2.31224 5.17944 2.3122 5.18325 2.3122Z\"\n fill=\"black\"\n />\n </svg>\n }\n options={options.map((item: any) => {\n const { label, value } = item;\n return {\n label: label,\n value: value\n };\n })}\n value={clickedOption}\n onChange={({ value }: any) => handleChangeOption?.(value)}\n overridePlaceholderOnMobile={overridePlaceholderOnMobile}\n className=\"sledge-instant-search__result-select-field-sort\"\n />\n </>\n ) : null}\n </>\n );\n }\n);\n","import React from 'react';\nimport { SelectField } from '@core/components';\n\nexport const Limit = React.memo(\n (props: {\n label?: string;\n options?: Array<{\n label: string;\n value: string;\n }>;\n clickedOption?: any;\n handleChangeOption?: any;\n overridePlaceholderOnMobile?: any;\n }) => {\n const { label = '', options = [], clickedOption = '', handleChangeOption = null, overridePlaceholderOnMobile = null } = props;\n\n return (\n <>\n {options?.length ? (\n <>\n <span className=\"sledge-instant-search__result-data-summary-select-field-limit\">{label || 'Limit'}:</span>\n <SelectField\n align=\"end\"\n options={options.map((item: any) => {\n return {\n label: item,\n value: Number(item)\n };\n })}\n value={Number(clickedOption)}\n onChange={({ value }: any) => handleChangeOption?.(value)}\n overridePlaceholderOnMobile={overridePlaceholderOnMobile}\n className=\"sledge-instant-search__result-select-field-limit\"\n />\n </>\n ) : null}\n </>\n );\n }\n);\n","import React from 'react';\nimport { SearchIcon, SearchInputField } from '@core/components';\n\nexport const Search = React.memo((props: { placeholder?: string; value?: string; handleChangeSearch?: any }) => {\n const { placeholder = '', value = '', handleChangeSearch = null } = props;\n\n return (\n <SearchInputField\n type=\"text\"\n icon={<SearchIcon width={18} height={18} color=\"#868686\" />}\n placeholder={placeholder || 'Search products...'}\n value={value || ''}\n onChange={({ value }: any) => handleChangeSearch?.(value)}\n onResetField={() => handleChangeSearch?.('')}\n className=\"sledge-instant-search__result-data-keyword-form\"\n withClearField\n />\n );\n});\n","export const Tab = (props: {\n items?: Array<{\n name: string;\n index: string;\n type: string;\n total: number;\n }>;\n layoutType?: 'product-filter' | 'default';\n clickedTabIndexId?: string | number | null;\n handleChangeTab?: any;\n}) => {\n const { items = [], layoutType = 'default', clickedTabIndexId = null, handleChangeTab = null } = props;\n\n return (\n <>\n {layoutType === 'default' && items?.length ? (\n <div className=\"sledge-instant-search__result-tab\">\n <ul className=\"sledge-instant-search__result-tab-list\">\n {items.map((item: any) => {\n const { name, index, type, total } = item;\n\n let isActive = clickedTabIndexId === index;\n\n return (\n <li\n onClick={(e) =>\n handleChangeTab?.({\n id: index,\n name,\n type\n })\n }\n className={`${isActive ? 'sledge-instant-search__result-tab-list-item-active' : ''}`}\n key={index}\n >\n {name}\n <span className=\"sledge-instant-search__result-tab-total\">{total || 0}</span>\n </li>\n );\n })}\n </ul>\n </div>\n ) : null}\n </>\n );\n};\n","import React from 'react';\nimport { useIntersectionObserver } from '@core/hooks';\nimport { Button, Pagination, Progress } from '@core/components';\nimport { OBJECT_DATA_STRING_KEY } from '@core/lib/const';\n\nconst ButtonLoadMore = ({ text, onClick, isInfiniteScroll, currentPage, totalPage, totalResult, pageInfo: pageInfoProp, isVisibleLoadMore, ...otherProps }: any) => {\n const [ref, entry] = useIntersectionObserver({\n threshold: 0,\n root: null,\n rootMargin: '0px'\n });\n\n const [pageInfo, setPageInfo] = React.useState<any>(null);\n\n const handlePageInfo = () => {\n const defaultPageInfo = (\n <>\n Page {currentPage} of {totalPage} - total {totalResult} result\n </>\n );\n\n if (pageInfoProp) {\n pageInfoProp = pageInfoProp.replaceAll(OBJECT_DATA_STRING_KEY.CURRENT_PAGE, String(currentPage));\n pageInfoProp = pageInfoProp.replaceAll(OBJECT_DATA_STRING_KEY.TOTAL_PAGE, String(totalPage));\n pageInfoProp = pageInfoProp.replaceAll(OBJECT_DATA_STRING_KEY.TOTAL_RESULT, String(totalResult));\n }\n\n setPageInfo(pageInfoProp ? pageInfoProp : defaultPageInfo);\n };\n\n React.useEffect(() => {\n handlePageInfo();\n\n if (isInfiniteScroll && isVisibleLoadMore && entry?.isIntersecting) {\n const delay = setTimeout(() => onClick?.(), 250);\n return () => clearTimeout(delay);\n }\n }, [entry]);\n\n return (\n <div className=\"sledge__pagination\" ref={ref}>\n {entry?.isIntersecting && (\n <div className=\"sledge-instant-search__load-more\">\n <span>{pageInfo}</span>\n <Progress value={currentPage} total={totalPage} delay={0} />\n {isVisibleLoadMore && (\n <Button type=\"button\" role=\"button\" colorType=\"light\" onClick={onClick} {...otherProps}>\n {text}\n </Button>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport const PaginationOrLoadMore = (props: {\n type?: string;\n isLoadMore?: boolean;\n isLoadingButtonLoadMore?: boolean;\n handleLoadMore?: any;\n buttonLoadMoreText?: string;\n isInfiniteScroll?: boolean;\n currentPage?: number;\n totalPage?: number;\n totalResult?: any;\n pageInfo?: any;\n isVisibleLoadMore?: boolean;\n handlePageChange?: any;\n}) => {\n const {\n type,\n isLoadMore = false,\n isLoadingButtonLoadMore = false,\n handleLoadMore = null,\n buttonLoadMoreText = 'Load More',\n isInfiniteScroll = false,\n currentPage = 1,\n totalPage = 1,\n totalResult = 0,\n pageInfo = null,\n isVisibleLoadMore = false,\n handlePageChange = null\n } = props;\n\n return (\n <>\n {isLoadMore ? (\n <ButtonLoadMore\n disabled={isLoadingButtonLoadMore}\n onClick={handleLoadMore}\n style={{\n ...(isLoadingButtonLoadMore && {\n cursor: 'wait'\n })\n }}\n text={buttonLoadMoreText}\n isInfiniteScroll={isInfiniteScroll}\n currentPage={currentPage}\n totalPage={totalPage}\n totalResult={totalResult}\n pageInfo={pageInfo}\n isVisibleLoadMore={isVisibleLoadMore}\n />\n ) : (\n <Pagination type={type} currentPage={currentPage} totalPage={totalPage} totalResult={totalResult} onChange={(page: number) => handlePageChange?.(page)} pageInfo={pageInfo} />\n )}\n </>\n );\n};\n","import React from 'react';\nimport { HIERARCHICAL_FACET_OBJECT_ALIASES } from '@core/lib/const';\nimport { shopifyFormatMoney } from '@core/lib/helper';\nimport { parseFacetObject } from '@react-instant-search/components/SearchResultWidget/utils';\n\nexport interface IFacetBlockSelectedProps {\n defaultFilterItems?: any[];\n languageSettings?: any;\n generalDataSettings?: any;\n hierarchicalCollectionsSettings?: any;\n hierarchicalProductTypeSettings?: any;\n displaySettings?: any;\n settings?: any;\n handleFilterChange?(props: any): void;\n allowedFilterSlider?: any[];\n}\n\nexport const FacetBlockSelected = React.memo(\n (\n props: {\n label: any;\n name: any;\n value: any;\n index: number;\n } & IFacetBlockSelectedProps\n ) => {\n const {\n label,\n name,\n value: valueProp,\n index,\n defaultFilterItems = [],\n generalDataSettings = {},\n languageSettings = {},\n hierarchicalCollectionsSettings = {},\n hierarchicalProductTypeSettings = {},\n displaySettings = {},\n settings = {},\n handleFilterChange,\n allowedFilterSlider\n } = props;\n\n const { money_format } = generalDataSettings || {};\n const { separator: hierarchical_collections_separator } = hierarchicalCollectionsSettings || {};\n const {\n color: filter_option_color,\n font_size: filter_option_font_size,\n font_weight: filter_option_font_weight,\n text_transform: filter_option_text_transform\n } = displaySettings?.filter?.option || {};\n\n const filter_option_style = {\n ...(filter_option_color && { color: filter_option_color }),\n ...(filter_option_font_size && { fontSize: filter_option_font_size }),\n ...(filter_option_font_weight && { fontWeight: filter_option_font_weight }),\n ...(filter_option_text_transform && { textTransform: filter_option_text_transform })\n };\n\n let value = valueProp;\n\n // Parse facet object\n if (name === HIERARCHICAL_FACET_OBJECT_ALIASES.collections) {\n if (String(value)?.includes(hierarchical_collections_separator)) {\n let arrValue = String(value).split(hierarchical_collections_separator);\n value = arrValue?.length ? arrValue.map((item: any) => parseFacetObject({ facet: item })?.collection_title || item).join(hierarchical_collections_separator) : valueProp;\n } else {\n value = parseFacetObject({ facet: valueProp })?.collection_title || valueProp;\n }\n }\n\n let valueText = languageSettings?.[value] || value;\n let isRange = allowedFilterSlider?.includes(name);\n let getLabel = label;\n let getSettings: any = {};\n let isPriceValue = false;\n let isSalePercent = false;\n if (name === 'variants.price') {\n isPriceValue = true;\n } else if (name === 'variants.sale_percent') {\n isSalePercent = true;\n }\n\n if (defaultFilterItems?.length) {\n defaultFilterItems.map((defaultFilterItem) => {\n const { label: defaultFilterItemLabel, items, settings: defaultFilterItemSettings } = defaultFilterItem;\n\n if (items?.includes(value)) {\n getLabel = defaultFilterItemLabel;\n getSettings = defaultFilterItemSettings;\n }\n });\n }\n\n getSettings?.delete_prefix?.map((deletePrefix: any) => {\n if (String(valueText).startsWith(deletePrefix)) valueText = String(valueText).replace(deletePrefix, '');\n });\n\n if (isRange) {\n // Detect same value on array\n const getValueRange = new Set(value).size === 1 ? [value[0]] : value;\n\n valueText = getValueRange?.map((valueItem: any) => (isPriceValue ? shopifyFormatMoney(valueItem * 100, money_format) : isSalePercent ? `${valueItem}%` : valueItem))?.join(' - ');\n } else {\n valueText = String(valueText)?.replaceAll(hierarchical_collections_separator, ' > ');\n }\n\n valueText = String(valueText)?.replaceAll('_', ' ');\n\n let aliases: any = {};\n let aliasValue: string = '';\n let aliasSeparator = '';\n if (name === HIERARCHICAL_FACET_OBJECT_ALIASES.collections) {\n aliases = settings.collectionAliases || {};\n aliasSeparator = hierarchicalCollectionsSettings.separator;\n }\n if (name === HIERARCHICAL_FACET_OBJECT_ALIASES.product_type) {\n aliases = settings.productTypeAliases || {};\n aliasSeparator = hierarchicalProductTypeSettings.separator;\n }\n if ([HIERARCHICAL_FACET_OBJECT_ALIASES.collections, HIERARCHICAL_FACET_OBJECT_ALIASES.product_type].includes(name) && aliasSeparator) {\n const splitedValues = value.split(aliasSeparator);\n let newSplitedValues = [];\n for (const splitedValue of splitedValues) {\n newSplitedValues.push(aliases[splitedValue.trim()] || splitedValue);\n }\n aliasValue = newSplitedValues.join(' > ');\n }\n\n return (\n <div key={index} className=\"sledge-instant-search__result-filter-item-refine-selected\" style={filter_option_style}>\n <span\n className=\"sledge-instant-search__result-filter-item-title-refine-list\"\n data-value={`${getLabel}: ${aliasValue || valueText}`}\n dangerouslySetInnerHTML={{ __html: `${getLabel}: ${aliasValue || valueText}` }}\n ></span>\n <span\n className=\"sledge-instant-search__result-filter-item-refine-title-clear\"\n onClick={() =>\n handleFilterChange?.({\n parentId: name,\n value\n })\n }\n >\n <svg width={12} height={12} viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n </span>\n </div>\n );\n }\n);\n","import { motion } from 'framer-motion';\nimport { stringToSlug } from '@core/lib/helper';\nimport { ROTATE_FILTER_ARROW_ANIMATION } from '@core/lib/animation';\nimport { ChevronArrowDownIcon, SkeletonLoading } from '@core/components';\nimport { FacetBlockSelected, IFacetBlockSelectedProps } from './FacetBlockSelected';\n\nexport interface IFilterVerticalProps extends IFacetBlockSelectedProps {\n items?: any[];\n filterSettings?: any;\n filterTitleStyle?: any;\n handleOpenFilterVertical?: any;\n clickedOpenFilters?: any;\n filterLayoutType?: 'standard' | 'flyout';\n layoutType?: 'product-filter' | 'default';\n collectionId?: string | number | '';\n dataClickedFacets?: any;\n handleFilterReset?: any;\n isSkeleton?: boolean;\n}\n\nconst FilterItem = (props: {\n filter: {\n value: any;\n label: string;\n display: string;\n };\n filterSettings(props: {\n filter: {\n value: any;\n label: string;\n display: string;\n indexFilter: number;\n };\n scrollElementSelector?: string;\n }): { isRender: boolean; classesUlElement: string[]; getFacetComponent(props?: { ulClasses?: string }): any; isLastIndex: boolean };\n indexFilter: number;\n filterTitleStyle?: any;\n handleOpenFilterVertical(id: string | number): void;\n clickedOpenFilters: any;\n filterLayoutType: 'standard' | 'flyout';\n layoutType?: 'product-filter' | 'default';\n collectionId?: string | number | '';\n}) => {\n const { filter, filterSettings, indexFilter, filterTitleStyle = {}, handleOpenFilterVertical, clickedOpenFilters, filterLayoutType, layoutType, collectionId } = props;\n\n const { value, label } = filter;\n\n const getValue = `${value}-${indexFilter}`;\n\n const filterItemId = `filter-${indexFilter}-${layoutType}-${collectionId || 'all'}-${filterLayoutType}-${stringToSlug(getValue)}`;\n\n const { isRender, classesUlElement, getFacetComponent } = filterSettings({\n filter: {\n ...filter,\n indexFilter\n },\n scrollElementSelector: `#${filterItemId} .sledge-instant-search__result-filter-item-list`\n });\n\n return isRender ? (\n <div className=\"sledge-instant-search__result-filter-item\" id={filterItemId} key={indexFilter}>\n <div className=\"sledge-instant-search__result-filter-item-title\" onClick={() => handleOpenFilterVertical(getValue)}>\n <span className=\"sledge-instant-search__result-filter-title\" style={filterTitleStyle}>\n {label}\n </span>\n <motion.div initial={false} animate={clickedOpenFilters.includes(getValue) ? 'open' : 'closed'} variants={ROTATE_FILTER_ARROW_ANIMATION}>\n <ChevronArrowDownIcon width={15} height={15} color=\"#000000\" />\n </motion.div>\n </div>\n {clickedOpenFilters.includes(getValue) && (\n <div className=\"sledge-instant-search__result-filter-item-wrapper\">\n {getFacetComponent({\n ulClasses: classesUlElement.join(' ')\n })}\n </div>\n )}\n </div>\n ) : null;\n};\n\nconst FilterSelected = (\n props: {\n items?: any[];\n handleFilterReset?: any;\n } & IFacetBlockSelectedProps\n) => {\n const {\n items = [],\n handleFilterReset = null,\n defaultFilterItems = [],\n generalDataSettings = {},\n languageSettings = {},\n hierarchicalCollectionsSettings = {},\n hierarchicalProductTypeSettings = {},\n displaySettings = {},\n settings = {},\n handleFilterChange,\n allowedFilterSlider\n } = props;\n\n const { language_filter, language_clear_filter } = languageSettings || {};\n\n return (\n <>\n {Boolean(items?.length && displaySettings?.filter?.show_refine_by_block) ? (\n <div className=\"sledge-instant-search__result-filter-item\">\n <div className=\"sledge-instant-search__result-filter-item-title-refine\">\n <strong className=\"sledge-instant-search__result-filter-item-title-refine-heading\">{language_filter || 'Filter'}</strong>\n <span className=\"sledge-instant-search__result-filter-item-title-refine-clear\" onClick={handleFilterReset}>\n {language_clear_filter || 'Clear All'}\n </span>\n </div>\n <div className=\"sledge-instant-search__result-filter-item-refine-selected-flex\">\n {items.map((item: any, index: number) => {\n const { label, name, value } = item;\n\n return (\n <FacetBlockSelected\n label={label}\n name={name}\n value={value}\n index={index}\n defaultFilterItems={defaultFilterItems}\n generalDataSettings={generalDataSettings}\n languageSettings={languageSettings}\n hierarchicalCollectionsSettings={hierarchicalCollectionsSettings}\n hierarchicalProductTypeSettings={hierarchicalProductTypeSettings}\n displaySettings={displaySettings}\n settings={settings}\n handleFilterChange={handleFilterChange}\n allowedFilterSlider={allowedFilterSlider}\n />\n );\n })}\n </div>\n </div>\n ) : null}\n </>\n );\n};\n\nexport const FilterVertical = (props: IFilterVerticalProps) => {\n const {\n items = [],\n filterSettings = null,\n filterTitleStyle = {},\n handleOpenFilterVertical = null,\n clickedOpenFilters = [],\n filterLayoutType = 'standard',\n layoutType = 'default',\n collectionId = '',\n dataClickedFacets = [],\n handleFilterReset,\n isSkeleton,\n defaultFilterItems = [],\n generalDataSettings = {},\n languageSettings = {},\n hierarchicalCollectionsSettings = {},\n hierarchicalProductTypeSettings = {},\n displaySettings = {},\n settings = {},\n handleFilterChange,\n allowedFilterSlider\n } = props;\n\n return (\n <div className=\"sledge-instant-search__result-filter\">\n {isSkeleton ? (\n <>\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: '8px',\n justifyContent: 'space-between',\n marginBottom: '23px'\n }}\n >\n <SkeletonLoading.Item width=\"117px\" height=\"28px\" color=\"lighten\" rounded=\"md\" />\n <SkeletonLoading.Item width=\"80px\" height=\"28px\" color=\"lighten\" rounded=\"md\" />\n </div>\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '18px'\n }}\n />\n {[1, 2, 3].map((index: number) => (\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n key={index}\n style={{\n maxWidth: '163px',\n marginBottom: '9px'\n }}\n />\n ))}\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '163px',\n marginBottom: '18px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '14px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '163px',\n marginBottom: '9px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '163px',\n marginBottom: '17px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '38px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '35px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '12px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '163px',\n marginBottom: '9px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '163px',\n marginBottom: '20px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '12px'\n }}\n />\n {[1, 2, 3].map((index: number) => (\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n key={index}\n style={{\n maxWidth: '163px',\n marginBottom: '9px'\n }}\n />\n ))}\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '11px'\n }}\n />\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: '12px'\n }}\n >\n {[1, 2, 3, 4, 5, 6, 7, 8, 9].map((index: number) => (\n <SkeletonLoading.Item width=\"34px\" height=\"34px\" color=\"lighten\" rounded=\"full\" key={index} />\n ))}\n </div>\n </>\n ) : items?.length ? (\n <>\n <FilterSelected\n items={dataClickedFacets}\n handleFilterReset={handleFilterReset}\n defaultFilterItems={defaultFilterItems}\n generalDataSettings={generalDataSettings}\n languageSettings={languageSettings}\n hierarchicalCollectionsSettings={hierarchicalCollectionsSettings}\n hierarchicalProductTypeSettings={hierarchicalProductTypeSettings}\n displaySettings={displaySettings}\n settings={settings}\n handleFilterChange={handleFilterChange}\n allowedFilterSlider={allowedFilterSlider}\n />\n\n {items.map((filter: any, indexFilter) => (\n <FilterItem\n filter={filter}\n filterSettings={filterSettings}\n indexFilter={indexFilter}\n filterTitleStyle={filterTitleStyle}\n handleOpenFilterVertical={handleOpenFilterVertical}\n clickedOpenFilters={clickedOpenFilters}\n filterLayoutType={filterLayoutType}\n layoutType={layoutType}\n collectionId={collectionId}\n />\n ))}\n </>\n ) : null}\n </div>\n );\n};\n","import React from 'react';\nimport { motion } from 'framer-motion';\nimport { stringToSlug } from '@core/lib/helper';\nimport { ROTATE_FILTER_ARROW_ANIMATION } from '@core/lib/animation';\nimport { Button, ChevronArrowDownIcon, Popover, SkeletonLoading } from '@core/components';\nimport { FacetBlockSelected, IFacetBlockSelectedProps } from './FacetBlockSelected';\n\nexport interface IFilterHorizontalProps extends IFacetBlockSelectedProps {\n items?: any[];\n filterSettings?: any;\n deviceType?: 'mobile' | 'desktop';\n clickedOpenFilterHorizontalId?: string | number | null | '';\n setClickedOpenFilterHorizontalId?(value: React.SetStateAction<string | number | null | ''>): void;\n clickedOpenFilterHorizontalMobileId?: string | number | null | '';\n setClickedOpenFilterHorizontalMobileId?(value: React.SetStateAction<string | number | null | ''>): void;\n layoutType?: 'product-filter' | 'default';\n collectionId?: string | number | '';\n dataClickedFacets?: any;\n handleFilterReset?: any;\n isSkeleton?: boolean;\n isHorizontalGroup?: boolean;\n showOnlyItems?: boolean;\n components?:\n | {\n sort?: any;\n }\n | any;\n}\n\nconst FilterItem = (props: {\n filter: {\n value: any;\n label: string;\n display: string;\n };\n filterSettings(props: {\n filter: {\n value: any;\n label: string;\n display: string;\n indexFilter: number;\n };\n scrollElementSelector?: string;\n }): { isRender: boolean; classesUlElement: string[]; getFacetComponent(props?: { ulClasses?: string }): any; isLastIndex: boolean };\n indexFilter: number;\n deviceType: 'mobile' | 'desktop';\n clickedOpenFilterHorizontalId?: string | number | null | '';\n setClickedOpenFilterHorizontalId?(value: React.SetStateAction<string | number | null | ''>): void;\n clickedOpenFilterHorizontalMobileId?: string | number | null | '';\n setClickedOpenFilterHorizontalMobileId?(value: React.SetStateAction<string | number | null | ''>): void;\n allowedFilter?: any[];\n layoutType?: 'product-filter' | 'default';\n collectionId?: string | number | '';\n isHorizontalGroup?: boolean;\n}) => {\n const {\n filter,\n filterSettings,\n indexFilter,\n deviceType,\n clickedOpenFilterHorizontalId,\n setClickedOpenFilterHorizontalId,\n clickedOpenFilterHorizontalMobileId,\n setClickedOpenFilterHorizontalMobileId,\n allowedFilter = [],\n layoutType,\n collectionId,\n isHorizontalGroup = false\n } = props;\n\n const { value, label } = filter;\n\n const filterItemId = `filter-${indexFilter}-${layoutType}-${collectionId || 'all'}-${deviceType}-${stringToSlug(value)}`;\n\n const getValueOpenFilterId = deviceType === 'mobile' ? clickedOpenFilterHorizontalMobileId : clickedOpenFilterHorizontalId;\n const valueOpenFilterHorizontal = `${value}-${indexFilter}`;\n\n const isOpenFilterHorizontal = getValueOpenFilterId === valueOpenFilterHorizontal;\n\n const { isRender, classesUlElement, getFacetComponent, isLastIndex } = filterSettings({\n filter: {\n ...filter,\n indexFilter\n },\n scrollElementSelector: `#${filterItemId} .sledge-instant-search__result-filter-item-list`\n });\n\n return isRender ? (\n <React.Fragment key={indexFilter}>\n <Popover\n trigger={\n <Button\n type=\"button\"\n onClick={() => {\n if (deviceType === 'mobile') {\n setClickedOpenFilterHorizontalMobileId?.(valueOpenFilterHorizontal);\n } else {\n setClickedOpenFilterHorizontalId?.(valueOpenFilterHorizontal);\n }\n }}\n className={\n isHorizontalGroup\n ? 'sledge-instant-search__result-filter-trigger-horizontal-group'\n : `${isLastIndex ? (allowedFilter?.length % 2 ? 'sledge-instant-search__result-filter-trigger-odd' : 'sledge-instant-search__result-filter-trigger-even') : ''}`\n }\n >\n {label}\n <motion.div initial=\"closed\" animate={isOpenFilterHorizontal ? 'open' : 'closed'} variants={ROTATE_FILTER_ARROW_ANIMATION} className=\"sort-trigger-icon\">\n <ChevronArrowDownIcon width={20} height={20} color=\"#000000\" />\n </motion.div>\n </Button>\n }\n content={\n <div className=\"sledge-instant-search__result-filter-horizontal-facet\" id={filterItemId}>\n {isOpenFilterHorizontal && (\n <div className=\"sledge-instant-search__result-filter-item-wrapper\">\n {getFacetComponent({\n ulClasses: classesUlElement.join(' ')\n })}\n </div>\n )}\n </div>\n }\n withOpenState\n isOpen={isOpenFilterHorizontal}\n setIsOpen={(open) => {\n if (deviceType === 'mobile') {\n setClickedOpenFilterHorizontalMobileId?.(!open ? '' : valueOpenFilterHorizontal);\n } else {\n setClickedOpenFilterHorizontalId?.(!open ? '' : valueOpenFilterHorizontal);\n }\n }}\n hideCloseIcon\n align=\"center\"\n className=\"sledge-instant-search__filter-horizontal-facet-content\"\n customArrow={`<svg style=\"transform: rotate(180deg); margin-bottom: 3px; stroke-dasharray: 0,0,36;\" width=\"44\" height=\"12\" viewBox=\"0 0 44 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M23.2222 1.99825e-06C23.2222 11.9998 4.88979 11.9999 0.000354767 12L23.2222 12L44 12C23.2222 12 23.2222 1.99825e-06 23.2222 1.99825e-06Z\" fill=\"white\" stroke=\"#393d4e\" stroke-width=\"1px\" /></svg>`}\n />\n </React.Fragment>\n ) : null;\n};\n\nconst FilterSelected = (\n props: {\n items?: any[];\n handleFilterReset?: any;\n } & IFacetBlockSelectedProps\n) => {\n const {\n items = [],\n handleFilterReset = null,\n defaultFilterItems = [],\n generalDataSettings = {},\n languageSettings = {},\n hierarchicalCollectionsSettings = {},\n hierarchicalProductTypeSettings = {},\n displaySettings = {},\n settings = {},\n handleFilterChange,\n allowedFilterSlider\n } = props;\n\n const { language_clear_filter } = languageSettings || {};\n\n return (\n <>\n {Boolean(items?.length && displaySettings?.filter?.show_refine_by_block) ? (\n <div className=\"sledge-instant-search__result-filter-horizontal\">\n <div className=\"sledge-instant-search__result-filter-horizontal-refine-item sledge-instant-search__result-filter-horizontal-refine-item-clear-all\" onClick={handleFilterReset}>\n {language_clear_filter || 'Clear All'}\n </div>\n {items.map((item: any, index: number) => {\n const { label, name, value } = item;\n\n return (\n <FacetBlockSelected\n label={label}\n name={name}\n value={value}\n index={index}\n defaultFilterItems={defaultFilterItems}\n generalDataSettings={generalDataSettings}\n languageSettings={languageSettings}\n hierarchicalCollectionsSettings={hierarchicalCollectionsSettings}\n hierarchicalProductTypeSettings={hierarchicalProductTypeSettings}\n displaySettings={displaySettings}\n settings={settings}\n handleFilterChange={handleFilterChange}\n allowedFilterSlider={allowedFilterSlider}\n />\n );\n })}\n </div>\n ) : null}\n </>\n );\n};\n\nexport const FilterHorizontal = (props: IFilterHorizontalProps) => {\n const {\n items = [],\n filterSettings = null,\n deviceType = 'desktop',\n clickedOpenFilterHorizontalId,\n setClickedOpenFilterHorizontalId,\n clickedOpenFilterHorizontalMobileId,\n setClickedOpenFilterHorizontalMobileId,\n layoutType = 'default',\n collectionId = '',\n dataClickedFacets = [],\n handleFilterReset,\n isSkeleton,\n defaultFilterItems = [],\n generalDataSettings = {},\n languageSettings = {},\n hierarchicalCollectionsSettings = {},\n hierarchicalProductTypeSettings = {},\n displaySettings = {},\n settings = {},\n handleFilterChange,\n showOnlyItems = false,\n components = {},\n isHorizontalGroup = false,\n allowedFilterSlider\n } = props;\n\n const { sort = null } = components;\n\n const wrapperAdditionalProps = {\n ...(isHorizontalGroup && { 'horizontal-group': '' })\n };\n\n return (\n <>\n {isSkeleton ? (\n <div className=\"sledge-instant-search__result-filter-horizontal-skeleton\" {...wrapperAdditionalProps}>\n {[1, 2, 3, 4, 5, 6, 7].map((index: number) => (\n <SkeletonLoading.Item width=\"106px\" height=\"42px\" rounded=\"md\" color=\"lighten\" key={index} />\n ))}\n </div>\n ) : items?.length ? (\n <div className=\"sledge-instant-search__result-filter-horizontal-wrapper\" {...wrapperAdditionalProps}>\n <div\n className={`sledge-instant-search__result-filter-horizontal ${\n isHorizontalGroup ? 'sledge-instant-search__result-filter-flex-horizontal-group' : 'sledge-instant-search__result-filter-horizontal-component'\n }`}\n >\n {items.map((filter: any, indexFilter) => (\n <FilterItem\n filter={filter}\n filterSettings={filterSettings}\n indexFilter={indexFilter}\n deviceType={deviceType}\n clickedOpenFilterHorizontalId={clickedOpenFilterHorizontalId}\n setClickedOpenFilterHorizontalId={setClickedOpenFilterHorizontalId}\n clickedOpenFilterHorizontalMobileId={clickedOpenFilterHorizontalMobileId}\n setClickedOpenFilterHorizontalMobileId={setClickedOpenFilterHorizontalMobileId}\n allowedFilter={items}\n layoutType={layoutType}\n collectionId={collectionId}\n isHorizontalGroup={isHorizontalGroup}\n />\n ))}\n <div className=\"sledge-instant-search__result-filter-horizontal-sort\">{sort}</div>\n </div>\n\n {showOnlyItems ? null : (\n <FilterSelected\n items={dataClickedFacets}\n handleFilterReset={handleFilterReset}\n defaultFilterItems={defaultFilterItems}\n generalDataSettings={generalDataSettings}\n languageSettings={languageSettings}\n hierarchicalCollectionsSettings={hierarchicalCollectionsSettings}\n hierarchicalProductTypeSettings={hierarchicalProductTypeSettings}\n displaySettings={displaySettings}\n settings={settings}\n handleFilterChange={handleFilterChange}\n allowedFilterSlider={allowedFilterSlider}\n />\n )}\n </div>\n ) : null}\n </>\n );\n};\n","import { SkeletonLoading } from '@core/components';\nimport { FacetBlockSelected, IFacetBlockSelectedProps } from './FacetBlockSelected';\n\nexport interface IFilterActiveProps extends IFacetBlockSelectedProps {\n items?: any[];\n deviceType?: 'mobile' | 'desktop';\n dataClickedFacets?: any;\n handleFilterReset?: any;\n isSkeleton?: boolean;\n}\n\nconst FilterSelected = (\n props: {\n items?: any[];\n handleFilterReset?: any;\n } & IFacetBlockSelectedProps\n) => {\n const {\n items = [],\n handleFilterReset = null,\n defaultFilterItems = [],\n generalDataSettings = {},\n languageSettings = {},\n hierarchicalCollectionsSettings = {},\n hierarchicalProductTypeSettings = {},\n displaySettings = {},\n settings = {},\n handleFilterChange,\n allowedFilterSlider\n } = props;\n\n const { language_clear_filter } = languageSettings || {};\n\n return (\n <>\n {Boolean(items?.length && displaySettings?.filter?.show_refine_by_block) ? (\n <div className=\"sledge-instant-search__result-filter-horizontal sledge-instant-search__result-filter-active\">\n <div className=\"sledge-instant-search__result-filter-horizontal-refine-item sledge-instant-search__result-filter-horizontal-refine-item-clear-all\" onClick={handleFilterReset}>\n {language_clear_filter || 'Clear All'}\n </div>\n {items.map((item: any, index: number) => {\n const { label, name, value } = item;\n\n return (\n <FacetBlockSelected\n label={label}\n name={name}\n value={value}\n index={index}\n defaultFilterItems={defaultFilterItems}\n generalDataSettings={generalDataSettings}\n languageSettings={languageSettings}\n hierarchicalCollectionsSettings={hierarchicalCollectionsSettings}\n hierarchicalProductTypeSettings={hierarchicalProductTypeSettings}\n displaySettings={displaySettings}\n settings={settings}\n handleFilterChange={handleFilterChange}\n allowedFilterSlider={allowedFilterSlider}\n />\n );\n })}\n </div>\n ) : null}\n </>\n );\n};\n\nexport const FilterActive = (props: IFilterActiveProps) => {\n const {\n items = [],\n dataClickedFacets = [],\n handleFilterReset,\n isSkeleton,\n defaultFilterItems = [],\n generalDataSettings = {},\n languageSettings = {},\n hierarchicalCollectionsSettings = {},\n hierarchicalProductTypeSettings = {},\n displaySettings = {},\n settings = {},\n handleFilterChange,\n allowedFilterSlider\n } = props;\n\n return (\n <>\n {isSkeleton ? (\n <div className=\"sledge-instant-search__result-filter-horizontal-skeleton\">\n {[1, 2, 3, 4, 5, 6, 7].map((index: number) => (\n <SkeletonLoading.Item width=\"106px\" height=\"42px\" rounded=\"md\" color=\"lighten\" key={index} />\n ))}\n </div>\n ) : items?.length ? (\n <div className=\"sledge-instant-search__result-filter-horizontal-wrapper sledge-instant-search__result-filter-active-wrapper\">\n <FilterSelected\n items={dataClickedFacets}\n handleFilterReset={handleFilterReset}\n defaultFilterItems={defaultFilterItems}\n generalDataSettings={generalDataSettings}\n languageSettings={languageSettings}\n hierarchicalCollectionsSettings={hierarchicalCollectionsSettings}\n hierarchicalProductTypeSettings={hierarchicalProductTypeSettings}\n displaySettings={displaySettings}\n settings={settings}\n handleFilterChange={handleFilterChange}\n allowedFilterSlider={allowedFilterSlider}\n />\n </div>\n ) : null}\n </>\n );\n};\n","import React from 'react';\n\nimport '@core/lib/polyfills';\n\nimport { motion } from 'framer-motion';\nimport { Checkbox, ChevronArrowDownIcon, ColorSwatch, RadioGroup, SearchIcon, SearchInputField, Select, Slider, VirtualizedList } from '@core/components';\nimport { handleFacetValues } from '@react-instant-search/components/SearchResultWidget/utils';\nimport { ROTATE_FILTER_ARROW_ANIMATION } from '@core/lib/animation';\nimport { getTextBetween, shopifyFormatMoney, stringToSlug } from '@core/lib/helper';\nimport { DEFAULT_FACET_LIMIT, OBJECT_DATA_STRING_KEY } from '@core/lib/const';\nimport { usePrevious } from '@core/hooks';\n\nexport const Facet = (props: {\n filter: { value: any; label: string; display: string; indexFilter: number; items: any; settings?: any };\n isFirstLoading: boolean | undefined;\n displaySettings: any;\n generalDataSettings: any;\n searchFacetDistribution: any;\n clickedFacets: any;\n setClickedFacets?(value: React.SetStateAction<any>): void;\n handleFilterChange(props: any): void;\n defaultFacetStats: any;\n valueFilterPriceChange?: number[];\n setValueFilterPriceChange?(value: React.SetStateAction<number[]>): void;\n valueFilterOnSaleChange?: number[];\n setValueFilterOnSaleChange?(value: React.SetStateAction<number[]>): void;\n valueFilterSliderOthers?: any;\n setValueFilterSliderOthers?(value: React.SetStateAction<any>): void;\n separatedFilterItem: any;\n setSeparatedFilterItem?(value: React.SetStateAction<any>): void;\n settings?: any;\n scrollElementSelector?: string;\n layoutType?: 'product-filter' | 'default';\n collectionId?: string | number | '';\n colorSwatches?: any[];\n ulClasses?: string;\n languageSettings?: any;\n triggerClickedFacets?: boolean;\n setTriggerClickedFacets?(value: React.SetStateAction<boolean>): void;\n handleQueryStringFilter?(value: any): void;\n previousStateFromOutside?: any;\n keepCounterFacets?: any;\n allowedFilterSlider?: any;\n}) => {\n const {\n filter,\n isFirstLoading,\n displaySettings,\n generalDataSettings,\n searchFacetDistribution,\n clickedFacets,\n setClickedFacets,\n handleFilterChange,\n defaultFacetStats,\n valueFilterPriceChange,\n setValueFilterPriceChange,\n valueFilterOnSaleChange,\n setValueFilterOnSaleChange,\n valueFilterSliderOthers,\n setValueFilterSliderOthers,\n separatedFilterItem,\n setSeparatedFilterItem,\n settings,\n scrollElementSelector,\n layoutType,\n collectionId,\n colorSwatches,\n ulClasses = '',\n languageSettings,\n triggerClickedFacets,\n setTriggerClickedFacets,\n handleQueryStringFilter,\n previousStateFromOutside,\n keepCounterFacets,\n allowedFilterSlider\n } = props;\n\n const [keywordFacet, setKeywordFacet] = React.useState('');\n const [showFacet, setShowFacet] = React.useState(false);\n\n const searchFacetRef = React.useRef<any>(null);\n const ulListRef = React.useRef<any>(null);\n\n const previousState: any = usePrevious({ keywordFacet });\n\n const { money_format, default_currency_symbol } = generalDataSettings || {};\n const { button_load_more } = generalDataSettings?.languages || {};\n\n const { search_filter_placeholder, search_filter_show_more_result, search_filter_no_result, filter_select_placeholder, highest_price_info } = languageSettings || {};\n\n const {\n color: filter_option_color,\n font_size: filter_option_font_size,\n font_weight: filter_option_font_weight,\n text_transform: filter_option_text_transform\n } = displaySettings?.filter?.option || {};\n\n const { item_pagination: is_item_pagination = true, item_pagination_limit = DEFAULT_FACET_LIMIT } = displaySettings?.filter || {};\n\n const filter_option_style = {\n ...(filter_option_color && { color: filter_option_color }),\n ...(filter_option_font_size && { fontSize: filter_option_font_size }),\n ...(filter_option_font_weight && { fontWeight: filter_option_font_weight }),\n ...(filter_option_text_transform && { textTransform: filter_option_text_transform })\n };\n\n let { value, label, display, indexFilter, items, settings: filterSettings } = filter;\n const { show_search, auto_select_search, hide_filter_list } = filterSettings || {};\n\n const show_filter_list_when_search = !hide_filter_list;\n\n if (isFirstLoading) return null;\n\n let blockComponent = null;\n\n const isShowNumberMatchingProduct = displaySettings?.filter?.show_number_matching_product;\n const isDisplaySlider = ['slider', 'input_range', 'slider_with_input_range'].includes(display.toLowerCase());\n const isDisplayInputRange = display.toLowerCase() === 'input_range';\n const getValue = `${value}-${indexFilter}`;\n\n if (show_search && keywordFacet && !isDisplaySlider) items = items?.filter(({ name }: any) => String(name)?.toLowerCase()?.includes(keywordFacet?.toLowerCase()));\n\n const handleFacetValuesProps = {\n filter,\n languageSettings,\n clickedFacets,\n searchFacetDistribution,\n displaySettings,\n settings,\n keepCounterFacets,\n allowedFilterSlider\n };\n\n const handleFacetLoadMore = ({ facetItems }: { facetItems: any }): { haveNextPage: boolean; currentItems: any; totalItems?: number } => {\n const arrFacetValues = isDisplaySlider\n ? facetItems\n : handleFacetValues({\n ...handleFacetValuesProps,\n items: facetItems\n });\n\n if (!is_item_pagination || isDisplaySlider) {\n return {\n haveNextPage: false,\n currentItems: arrFacetValues\n };\n }\n\n const lastItemLimit = separatedFilterItem[getValue] || Number(item_pagination_limit);\n\n let haveNextPage = Boolean(lastItemLimit < arrFacetValues?.length);\n let sliced: any = arrFacetValues;\n if (haveNextPage) sliced = sliced.slice(0, lastItemLimit);\n\n let currentItems = sliced;\n\n return {\n haveNextPage,\n currentItems,\n totalItems: Number(arrFacetValues?.length)\n };\n };\n\n const handleSearchShowMore = () => {\n setShowFacet(true);\n\n searchFacetRef?.current && searchFacetRef?.current?.focus?.();\n };\n\n const { haveNextPage, currentItems, totalItems } = handleFacetLoadMore({\n facetItems: items\n });\n\n const filterSearchShowMoreId = stringToSlug(`filter-search-show-more-${getValue}`);\n\n React.useEffect(() => {\n if (!show_search) return;\n\n setTimeout(() => document.querySelector(`#${filterSearchShowMoreId}`)?.addEventListener('click', () => handleSearchShowMore()), 100);\n\n let isKeywordFacetChanged = Boolean(previousState && previousState.keywordFacet !== keywordFacet);\n let isPreviousStateFromOutsideChanged = Boolean(previousStateFromOutside && previousStateFromOutside?.clickedFacets !== clickedFacets);\n\n if (keywordFacet && isKeywordFacetChanged) {\n const delayDebounceFn = setTimeout(() => {\n const isAutoSelectFacet = Boolean(auto_select_search && totalItems && Number(totalItems) === 1);\n\n let autoSelectFacets = currentItems\n ?.map(({ value: itemValue }: any) => {\n return clickedFacets?.[value]?.includes?.(itemValue) ? null : itemValue;\n })\n ?.filter((item: any) => item);\n\n if (isAutoSelectFacet && autoSelectFacets?.length) {\n let valueClickedFacets = {\n ...clickedFacets,\n ...{\n [value]: [...new Set([...(clickedFacets?.[value]?.length ? clickedFacets?.[value] : []), ...autoSelectFacets])]\n }\n };\n\n let handleQueryStringFilterProp = valueClickedFacets;\n\n // Hide the additional filter in query param\n if (Object.hasOwn(handleQueryStringFilterProp, 'variants.inventory_quantity')) delete handleQueryStringFilterProp?.['variants.inventory_quantity'];\n\n handleQueryStringFilter?.(handleQueryStringFilterProp);\n\n setClickedFacets?.(valueClickedFacets);\n setTriggerClickedFacets?.(!triggerClickedFacets);\n }\n }, 500);\n return () => clearTimeout(delayDebounceFn);\n }\n if (!(showFacet && isPreviousStateFromOutsideChanged)) setShowFacet(false);\n }, [keywordFacet, clickedFacets]);\n\n const loadMoreComponent = (\n <div\n className=\"sledge-instant-search__result-filter-item-show-more\"\n onClick={() =>\n setSeparatedFilterItem?.((old: any) => {\n const fixState = {\n ...old,\n [getValue]: (old[getValue] || Number(item_pagination_limit)) + Number(item_pagination_limit)\n };\n\n return fixState;\n })\n }\n >\n {button_load_more || 'Load More'}\n <ChevronArrowDownIcon width={15} height={15} color=\"#000000\" />\n </div>\n );\n\n const handleFacetCheckbox = (props: { facetValues: any; virtualized?: any }) => {\n const { facetValues, virtualized } = props;\n const { index, key } = virtualized || {};\n\n return handleFacetValues({\n ...handleFacetValuesProps,\n items: virtualized && Object.keys(virtualized)?.length ? [facetValues[index]] : facetValues\n })?.map((facetValue: any) => {\n const { labelName, value: itemValue, counter, children, level } = facetValue;\n\n const isFacetHierarchical = Object.hasOwn(facetValue, 'children');\n const isHasChildren = isFacetHierarchical && children?.length;\n const isChecked = Boolean(clickedFacets && clickedFacets[value]?.includes(itemValue));\n\n const { haveNextPage, currentItems } = handleFacetLoadMore({\n facetItems: children\n });\n\n const blockComponentChildren = handleFacetCheckbox({\n facetValues: currentItems\n });\n\n const content = (\n <Checkbox\n id={`${getValue}_${index}${isFacetHierarchical ? `_${stringToSlug(itemValue)}` : ''}`}\n name={value}\n value={itemValue}\n label={\n <>\n <span>{`${labelName}${counter !== undefined && isShowNumberMatchingProduct ? ` (${counter})` : ''}`}</span>\n {isHasChildren ? (\n <motion.div\n initial={false}\n animate={isChecked ? 'open' : 'closed'}\n variants={ROTATE_FILTER_ARROW_ANIMATION}\n className=\"sledge-instant-search__result-filter-checkbox-item-level-arrow\"\n >\n <ChevronArrowDownIcon width={15} height={15} color=\"#000000\" />\n </motion.div>\n ) : null}\n </>\n }\n onClick={(e) => {\n e.stopPropagation();\n\n handleFilterChange({\n parentId: value,\n value: e.currentTarget.value\n });\n }}\n checked={isChecked}\n labelStyle={filter_option_style}\n />\n );\n\n return (\n <>\n <li\n key={key}\n className={`sledge-instant-search__result-filter-checkbox-item ${\n isFacetHierarchical ? `sledge-instant-search__result-filter-checkbox-item-level sledge-instant-search__result-filter-checkbox-item-level-${level}` : ''\n }`}\n onClick={(e) => {\n e.preventDefault();\n\n handleFilterChange({\n parentId: value,\n value: itemValue\n });\n }}\n >\n {content}\n </li>\n {isHasChildren && isChecked\n ? haveNextPage\n ? React.cloneElement(\n <>\n {blockComponentChildren}\n {loadMoreComponent}\n </>\n )\n : blockComponentChildren\n : null}\n </>\n );\n });\n };\n\n let scrollElement = document.querySelector(\n scrollElementSelector || `#filter-${indexFilter}-${layoutType}-${collectionId || 'all'}-standard-${stringToSlug(value)} .sledge-instant-search__result-filter-item-list`\n );\n\n const isShowSearch = Boolean(\n show_search && (display.toLowerCase() === 'checkbox' || display.toLowerCase() === 'tree' || display.toLowerCase() === 'radio') && (totalItems || (keywordFacet && !totalItems))\n );\n\n const defaultSearchShowMoreFilter = (\n <>\n {totalItems} items found,{' '}\n <span className=\"sledge-instant-search__result-filter-search-text-action\" id={filterSearchShowMoreId} onClick={() => setShowFacet(true)}>\n click here\n </span>{' '}\n to show\n </>\n );\n\n let searchFilterShowMoreResult = search_filter_show_more_result;\n if (searchFilterShowMoreResult) {\n const getActionText = getTextBetween({\n start: '<action>',\n end: '</action>',\n text: search_filter_show_more_result\n });\n\n searchFilterShowMoreResult = searchFilterShowMoreResult.replaceAll(OBJECT_DATA_STRING_KEY.TOTAL_FILTER_ITEM, String(Number(totalItems)));\n searchFilterShowMoreResult = searchFilterShowMoreResult.replaceAll(\n `<action>${getActionText}</action>`,\n `\n <span class=\"sledge-instant-search__result-filter-search-text-action\" id=\"${filterSearchShowMoreId}\">\n ${getActionText}\n </span>`\n );\n }\n\n if (isDisplaySlider) {\n items = defaultFacetStats?.[value] && Object.keys(defaultFacetStats[value]).length ? defaultFacetStats[value] : {};\n if (items && Object.keys(items)?.length) {\n items = {\n min: items?.min < 0 ? 0 : items?.min,\n max: items?.max\n };\n }\n\n let valueFilterSliderChange: any = [];\n let isPriceValue = false;\n let isSalePercent = false;\n if (value === 'variants.price') {\n valueFilterSliderChange = valueFilterPriceChange;\n isPriceValue = true;\n } else if (value === 'variants.sale_percent') {\n valueFilterSliderChange = valueFilterOnSaleChange;\n isSalePercent = true;\n } else {\n valueFilterSliderChange = valueFilterSliderOthers?.[value];\n }\n\n let defaultValueMin = valueFilterSliderChange?.[0] || items?.min;\n let defaultValueMax = valueFilterSliderChange?.[1] || items?.max;\n\n // Filtering slider value when hit before min or after max\n const isTypeSliderWithInputRange = display.toLowerCase() === 'slider_with_input_range';\n if (isTypeSliderWithInputRange) {\n defaultValueMin = items?.min && Number(defaultValueMin) < Number(items?.min) ? items?.min : defaultValueMin;\n defaultValueMax = items?.max && Number(defaultValueMax) > Number(items?.max) ? items?.max : defaultValueMax;\n }\n\n let contentDefaultValueMin = isPriceValue ? shopifyFormatMoney(defaultValueMin * 100, money_format) : isSalePercent ? `${defaultValueMin}%` : defaultValueMin;\n let contentDefaultValueMax = isPriceValue ? shopifyFormatMoney(defaultValueMax * 100, money_format) : isSalePercent ? `${defaultValueMax}%` : defaultValueMax;\n\n let contentFacetStatsMax = isPriceValue ? shopifyFormatMoney(items?.max * 100, money_format) : isSalePercent ? `${items?.max}%` : items?.max;\n let descriptionInputRange = highest_price_info\n ? String(highest_price_info).replaceAll(OBJECT_DATA_STRING_KEY.PRICE_MAX_MONEY_FORMAT, contentFacetStatsMax)\n : `The highest price is ${contentFacetStatsMax}`;\n\n blockComponent = (\n <Slider\n type={display.toLowerCase()}\n valueFilterSliderChange={valueFilterSliderChange}\n labelStyle={filter_option_style}\n {...(isDisplayInputRange\n ? {\n prefixInputRange: default_currency_symbol,\n descriptionInputRange\n }\n : {})}\n value={defaultValueMin === defaultValueMax ? [defaultValueMax] : [defaultValueMin, defaultValueMax]}\n textValue={defaultValueMin === defaultValueMax ? [contentDefaultValueMax] : [contentDefaultValueMin, contentDefaultValueMax]}\n {...(items?.min === items?.max\n ? {}\n : {\n min: items?.min\n })}\n max={items?.max}\n step={1}\n setValueCommit={(valueCommit) =>\n handleFilterChange({\n parentId: value,\n value: valueCommit\n })\n }\n setValueChange={(valueChange) => {\n if (value === 'variants.price') {\n setValueFilterPriceChange?.(valueChange);\n } else if (value === 'variants.sale_percent') {\n setValueFilterOnSaleChange?.(valueChange);\n } else {\n setValueFilterSliderOthers?.((prevState: any) => ({ ...prevState, [value]: valueChange }));\n }\n }}\n wrapperClassName=\"sledge-instant-search__result-filter-item-list-slider\"\n minMaxClassName=\"sledge-instant-search__result-filter-item-list-slider-minmax\"\n minMaxTextClassName=\"sledge-instant-search__result-filter-minmax-field\"\n />\n );\n } else if ((display.toLowerCase() === 'checkbox' || display.toLowerCase() === 'tree') && currentItems?.length) {\n blockComponent =\n display.toLowerCase() === 'checkbox' ? (\n <VirtualizedList\n selector={scrollElementSelector}\n {...(scrollElement && {\n scrollElement\n })}\n rowCount={currentItems?.length}\n rowRenderer={(props) =>\n handleFacetCheckbox({\n facetValues: currentItems,\n virtualized: props\n })\n }\n parentRef={ulListRef}\n />\n ) : (\n <>\n {handleFacetCheckbox({\n facetValues: currentItems\n })}\n </>\n );\n } else if (display.toLowerCase() === 'radio' && currentItems?.length) {\n blockComponent = (\n <li>\n <RadioGroup\n id={getValue}\n name={getValue}\n onValueChange={(valueChange) =>\n handleFilterChange({\n parentId: value,\n value: valueChange,\n force: true\n })\n }\n items={currentItems?.map((item: any) => {\n const { labelName, value, counter } = item;\n\n return {\n label: `${labelName} ${counter !== undefined && isShowNumberMatchingProduct ? ` (${counter})` : ''}`,\n value\n };\n })}\n defaultValue={clickedFacets && clickedFacets[value]?.length ? clickedFacets[value][0] : ''}\n labelStyle={filter_option_style}\n useVirtualized\n selector={scrollElementSelector}\n {...(scrollElement && {\n scrollElement\n })}\n parentRef={ulListRef}\n />\n </li>\n );\n } else if (display.toLowerCase() === 'select' && currentItems?.length) {\n blockComponent = (\n <li>\n <Select\n placeholder={filter_select_placeholder ? String(filter_select_placeholder).replaceAll(OBJECT_DATA_STRING_KEY.FILTER_TITLE, label) : `Select ${label}`}\n name={value}\n onValueChange={(getValue) =>\n handleFilterChange({\n parentId: value,\n value: getValue,\n force: true\n })\n }\n items={currentItems?.map((item: any) => {\n const { labelName, value, counter } = item;\n\n return {\n label: `${labelName} ${counter !== undefined && isShowNumberMatchingProduct ? ` (${counter})` : ''}`,\n value\n };\n })}\n defaultValue={clickedFacets && clickedFacets[value]?.length ? clickedFacets[value][0] : ''}\n labelStyle={filter_option_style}\n />\n </li>\n );\n } else if (display.toLowerCase() === 'swatch' && currentItems?.length) {\n blockComponent = (\n <>\n {currentItems?.map((item: any, index: number) => {\n let getColorSwatch = colorSwatches?.filter(({ name }: any) => name?.includes(item.value))[0] || {};\n\n return (\n <li key={index}>\n <ColorSwatch\n id={`${getValue}_${index}`}\n name={value}\n value={item.value}\n rgb={getColorSwatch?.rgb}\n image={getColorSwatch?.image}\n onClick={(e) =>\n handleFilterChange({\n parentId: value,\n value: e.currentTarget.value\n })\n }\n checked={Boolean(clickedFacets && clickedFacets[value]?.includes(item.value))}\n />\n </li>\n );\n })}\n </>\n );\n } else {\n blockComponent = (\n <li className=\"sledge-instant-search__result-filter-item-no-result\" style={filter_option_style}>\n {search_filter_no_result || 'No result...'}\n </li>\n );\n }\n\n if (haveNextPage) {\n blockComponent = React.cloneElement(\n <>\n {blockComponent}\n {loadMoreComponent}\n </>\n );\n }\n\n return (\n <>\n {isShowSearch ? (\n <div className=\"sledge-instant-search__result-filter-search-wrapper\">\n <SearchInputField\n type=\"text\"\n icon={<SearchIcon width={18} height={18} color=\"#868686\" />}\n placeholder={search_filter_placeholder || 'Search filters...'}\n fieldRef={searchFacetRef}\n value={keywordFacet}\n onChange={({ value }: any) => setKeywordFacet(value)}\n onResetField={() => setKeywordFacet('')}\n className=\"sledge-instant-search__result-filter-search-form\"\n withClearField\n />\n {keywordFacet && totalItems && Number(totalItems) > 1 && !show_filter_list_when_search && !showFacet ? (\n <div className=\"sledge-instant-search__result-filter-search-text\" style={filter_option_style}>\n {searchFilterShowMoreResult ? <div dangerouslySetInnerHTML={{ __html: searchFilterShowMoreResult }}></div> : defaultSearchShowMoreFilter}\n </div>\n ) : null}\n </div>\n ) : null}\n {!show_search || (show_search && (show_filter_list_when_search || (!show_filter_list_when_search && (!totalItems || (Number(totalItems) === 1 && keywordFacet))) || showFacet)) ? (\n <ul ref={ulListRef} className={ulClasses}>\n {blockComponent}\n </ul>\n ) : null}\n </>\n );\n};\n","import React from 'react';\nimport { LOCAL_STORAGE_KEY } from '@core/lib/const';\n\nexport interface IColumnGridSelector {\n desktop: 'list' | 'column-2' | 'column-3' | 'column-4' | 'column-5';\n mobile: 'list' | 'column-2';\n}\n\nexport const ColumnGridSelector = ({\n currentColumnGrid,\n setCurrentColumnGrid,\n isDesktopLayout,\n showText = true\n}: {\n currentColumnGrid?: IColumnGridSelector | null;\n setCurrentColumnGrid?: any;\n isDesktopLayout: boolean | undefined;\n showText?: boolean | undefined;\n}) => {\n const desktopColumns = localStorage.getItem(LOCAL_STORAGE_KEY.GRID_DESKTOP_COLUMN) || 'column-3';\n const mobileColumns = localStorage.getItem(LOCAL_STORAGE_KEY.GRID_MOBILE_COLUMN) || 'column-2';\n\n const changeGridLayout = (type: 'desktop' | 'mobile', value: IColumnGridSelector['desktop']) => {\n const newLayout = { ...currentColumnGrid, [type]: value };\n setCurrentColumnGrid?.(newLayout);\n\n if (type === 'desktop') {\n localStorage.setItem(LOCAL_STORAGE_KEY.GRID_DESKTOP_COLUMN, value);\n } else {\n localStorage.setItem(LOCAL_STORAGE_KEY.GRID_MOBILE_COLUMN, value);\n }\n };\n\n React.useEffect(() => {\n setCurrentColumnGrid?.({\n desktop: desktopColumns,\n mobile: mobileColumns\n });\n }, []);\n\n return (\n // TODO: Need refactoring / need settings from backend\n <>\n {showText && <span className=\"sledge-instant-search__column-grid-selector-text\">View as</span>}\n\n <button\n onClick={() => changeGridLayout(isDesktopLayout ? 'desktop' : 'mobile', 'list')}\n className={`sledge-instant-search__column-grid-selector-button\n ${isDesktopLayout ? (currentColumnGrid?.desktop === 'list' ? 'sledge-instant-search__column-grid-selector-button--active' : '') : currentColumnGrid?.mobile === 'list' ? 'sledge-instant-search__column-grid-selector-button--active' : ''}`}\n >\n <ListColumnIcon />\n </button>\n\n <button\n onClick={() => changeGridLayout(isDesktopLayout ? 'desktop' : 'mobile', 'column-2')}\n className={`sledge-instant-search__column-grid-selector-button ${isDesktopLayout ? (currentColumnGrid?.desktop === 'column-2' ? 'sledge-instant-search__column-grid-selector-button--active' : '') : currentColumnGrid?.mobile === 'column-2' ? 'sledge-instant-search__column-grid-selector-button--active' : ''}`}\n >\n <GricColumnIcon total={2} />\n </button>\n\n <button\n onClick={() => changeGridLayout('desktop', 'column-3')}\n className={`sledge__hide-element-lg-on-mobile sledge-instant-search__column-grid-selector-button ${isDesktopLayout ? (currentColumnGrid?.desktop === 'column-3' ? 'sledge-instant-search__column-grid-selector-button--active' : '') : ''}`}\n >\n <GricColumnIcon total={3} />\n </button>\n\n <button\n onClick={() => changeGridLayout('desktop', 'column-4')}\n className={`sledge__hide-element-lg-on-mobile sledge-instant-search__column-grid-selector-button ${isDesktopLayout ? (currentColumnGrid?.desktop === 'column-4' ? 'sledge-instant-search__column-grid-selector-button--active' : '') : ''}`}\n >\n <GricColumnIcon total={4} />\n </button>\n <button\n onClick={() => changeGridLayout('desktop', 'column-5')}\n className={`sledge__hide-element-lg-on-mobile sledge-instant-search__column-grid-selector-button ${isDesktopLayout ? (currentColumnGrid?.desktop === 'column-5' ? 'sledge-instant-search__column-grid-selector-button--active' : '') : ''}`}\n >\n <GricColumnIcon total={5} />\n </button>\n </>\n );\n};\n\nconst ListColumnIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={20} height={20} viewBox=\"0 0 20 20\" fill=\"none\">\n <rect width={20} height={9} fill=\"#ECECEC\" />\n <rect y={11} width={20} height={9} fill=\"#ECECEC\" />\n </svg>\n);\n\nconst GricColumnIcon = ({ total }: { total?: 2 | 3 | 4 | 5 }) => {\n let gridIcon = null;\n\n switch (total) {\n case 2:\n gridIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={20} height={20} viewBox=\"0 0 20 20\" fill=\"none\">\n <rect x={20} width={20} height={9} transform=\"rotate(90 20 0)\" fill=\"#ECECEC\" />\n <rect x={9} width={20} height={9} transform=\"rotate(90 9 0)\" fill=\"#ECECEC\" />\n </svg>\n );\n break;\n\n case 3:\n gridIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={20} height={20} viewBox=\"0 0 20 20\" fill=\"none\">\n <rect x={13} width={20} height={6} transform=\"rotate(90 13 0)\" fill=\"#ECECEC\" />\n <rect x={20} width={20} height={6} transform=\"rotate(90 20 0)\" fill=\"#ECECEC\" />\n <rect x={6} width={20} height={6} transform=\"rotate(90 6 0)\" fill=\"#ECECEC\" />\n </svg>\n );\n break;\n\n case 4:\n gridIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={20} height={20} viewBox=\"0 0 20 20\" fill=\"none\">\n <rect x={20} y=\"0.00012207\" width={20} height={4} transform=\"rotate(90 20 0.00012207)\" fill=\"#ECECEC\" />\n <rect x={15} y=\"0.00012207\" width={20} height={4} transform=\"rotate(90 15 0.00012207)\" fill=\"#ECECEC\" />\n <rect x={10} y=\"0.00012207\" width={20} height={5} transform=\"rotate(90 10 0.00012207)\" fill=\"#ECECEC\" />\n <rect x={4} y=\"0.00012207\" width={20} height={4} transform=\"rotate(90 4 0.00012207)\" fill=\"#ECECEC\" />\n </svg>\n );\n break;\n\n case 5:\n gridIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={20} height={20} viewBox=\"0 0 20 20\" fill=\"none\">\n <rect x={7} y=\"0.00012207\" width={20} height={3} transform=\"rotate(90 7 0.00012207)\" fill=\"#ECECEC\" />\n <rect x={12} y=\"0.00012207\" width={20} height={4} transform=\"rotate(90 12 0.00012207)\" fill=\"#ECECEC\" />\n <rect x={16} y=\"0.00012207\" width={20} height={3} transform=\"rotate(90 16 0.00012207)\" fill=\"#ECECEC\" />\n <rect x={20} y=\"0.00012207\" width={20} height={3} transform=\"rotate(90 20 0.00012207)\" fill=\"#ECECEC\" />\n <rect x={3} y=\"0.00012207\" width={20} height={3} transform=\"rotate(90 3 0.00012207)\" fill=\"#ECECEC\" />\n </svg>\n );\n break;\n default:\n break;\n }\n\n return gridIcon;\n};\n","export const ResultWrapper = (props: { children: any; displaySettings?: any }) => {\n const { children, displaySettings } = props;\n\n return (\n <div className=\"sledge-instant-search__result-wrapper\" data-filter-layout={displaySettings?.filter?.layout}>\n {children}\n </div>\n );\n};\n\nexport const ResultData = (props: { children: any }) => {\n const { children } = props;\n\n return <div className=\"sledge-instant-search__result-data\">{children}</div>;\n};\n\nexport const ResultDataKeyword = (props: { children: any }) => {\n const { children } = props;\n\n return <div className=\"sledge-instant-search__result-data-keyword\">{children}</div>;\n};\n\nexport const SearchFieldDesktop = (props: { children: any }) => {\n const { children } = props;\n\n return <div className=\"sledge-instant-search__search-field-lg\">{children}</div>;\n};\n\nexport const SelectFieldWrapper = (props: { children: any }) => {\n const { children } = props;\n\n return <div className=\"sledge-instant-search__result-data-summary-item sledge-instant-search__result-data-summary-select-field\">{children}</div>;\n};\n\nexport const SelectFieldItem = (props: { children: any }) => {\n const { children } = props;\n\n return <div className=\"sledge-instant-search__result-data-summary-select-field-item\">{children}</div>;\n};\n\nexport const SummaryTextHorizontal = (props: { children: any }) => {\n const { children } = props;\n\n return <div className=\"sledge-instant-search__result-data-summary sledge-instant-search__result-data-summary-filter-horizontal\">{children}</div>;\n};\n\nexport const SummaryTextVertical = (props: { children: any; className?: string }) => {\n const { children, className } = props;\n\n return <div className={`sledge-instant-search__result-data-summary sledge-instant-search__result-data-summary-filter-vertical ${className}`}>{children}</div>;\n};\n\nexport const RenderLayout = (props: { children: any; device: 'desktop' | 'mobile'; layout?: any }) => {\n const { children, device, layout = '' } = props;\n\n return (\n <div className=\"sledge-instant-search__render-layout\" data-render-device={device} data-render-layout={layout}>\n {children}\n </div>\n );\n};\n\nexport const FilterHorizontalBlockMobile = (props: { children: any }) => {\n const { children } = props;\n\n return <div className=\"sledge-instant-search__filter-horizontal-block-mobile\">{children}</div>;\n};\n\nexport const ResultSearchFieldFlex = (props: { children: any }) => {\n const { children } = props;\n\n return <div className=\"sledge-instant-search__result-search-field-flex\">{children}</div>;\n};\n\nexport const ColumnGridSelectorWrapper = (props: { children: any }) => {\n const { children } = props;\n\n return <div className=\"sledge-instant-search__column-grid-selector-wrapper\">{children}</div>;\n};\n\nexport const ProductGridPaginationWrapper = (props: { children: any }) => {\n const { children } = props;\n\n return <div className=\"sledge-instant-search__result-product-grid-pagination-wrapper\">{children}</div>;\n};\n","import { IFilterHorizontalProps, IFilterVerticalProps } from '@react-instant-search/components/SearchResultWidget/components';\nimport {\n RenderLayout,\n ResultData,\n ResultDataKeyword,\n ResultSearchFieldFlex,\n ResultWrapper,\n SearchFieldDesktop,\n SelectFieldItem,\n SelectFieldWrapper,\n SummaryTextHorizontal,\n SummaryTextVertical,\n ColumnGridSelectorWrapper,\n ProductGridPaginationWrapper\n} from './Elements';\nimport { Button, FilterIcon, FlyoutSidebar } from '@core/components';\nimport { motion } from 'framer-motion';\nimport { IFilterActiveProps } from '../components/FilterActive';\n\nexport interface IDesktopLayoutProps {\n displaySettings?: any;\n languageSettings?: any;\n allowedFilter?: any[];\n isFirstLoading?: boolean;\n isLoading?: boolean;\n isLoadingProduct?: boolean;\n isLoadingSetting?: boolean;\n searchResult?: any[];\n propsData?: any;\n hideFilterWhenOneValue?: boolean;\n openFilterFlyout?: boolean;\n setOpenFilterFlyout?(value: React.SetStateAction<boolean>): void;\n openFilterToggle?: boolean;\n setOpenFilterToggle?(value: React.SetStateAction<boolean>): void;\n components?: {\n filterVertical?(props?: IFilterVerticalProps): any;\n filterHorizontal?(props?: IFilterHorizontalProps): any;\n filterActive?(props?: IFilterActiveProps): any;\n summaryText?: any;\n searchField?: any;\n sort?: any;\n limit?: any;\n productGrid?: any;\n pagination?: any;\n resultEmpty?: any;\n columnGridSelector?: any;\n };\n skeleton?: {\n filterVertical?: any;\n filterHorizontal?: any;\n summaryText?: any;\n searchField?: any;\n selectOption?: any;\n searchAndSelectOption?: any;\n productGrid?: any;\n };\n handleSearchResultFirstTime?: boolean;\n}\n\nconst FilterVerticalLayout = (props: IDesktopLayoutProps) => {\n const {\n displaySettings,\n allowedFilter,\n isFirstLoading,\n isLoading,\n isLoadingProduct,\n isLoadingSetting,\n searchResult = [],\n hideFilterWhenOneValue,\n components,\n skeleton,\n handleSearchResultFirstTime\n } = props;\n\n const {\n filterVertical = null,\n summaryText = null,\n searchField = null,\n sort = null,\n limit = null,\n productGrid = null,\n pagination = null,\n resultEmpty = null,\n columnGridSelector = null\n } = components || {};\n\n const {\n filterVertical: filterVerticalSkeleton,\n summaryText: summaryTextSkeleton,\n searchField: searchFieldSkeletonComponent,\n selectOption: selectOptionSkeletonComponent,\n searchAndSelectOption: searchAndSelectOptionSkeleton,\n productGrid: productGridSkeleton\n } = skeleton || {};\n\n const isAllowedFilterTree = allowedFilter?.find(({ display }: any) => display?.toLowerCase() === 'tree');\n const isShowFilter = displaySettings?.filter?.enable_on_search && !hideFilterWhenOneValue;\n\n return (\n <ResultWrapper displaySettings={displaySettings}>\n <>\n {isShowFilter\n ? filterVertical?.({\n filterLayoutType: 'standard',\n isSkeleton: Boolean((!isAllowedFilterTree && isFirstLoading) || (isAllowedFilterTree && isLoadingProduct) || isLoadingSetting || handleSearchResultFirstTime)\n })\n : null}\n\n <ResultData>\n {isFirstLoading ? (\n searchAndSelectOptionSkeleton\n ) : (\n <ResultDataKeyword>\n <SearchFieldDesktop>{searchField}</SearchFieldDesktop>\n\n <SelectFieldWrapper>\n <SelectFieldItem>{sort}</SelectFieldItem>\n <SelectFieldItem>{limit}</SelectFieldItem>\n </SelectFieldWrapper>\n </ResultDataKeyword>\n )}\n {isLoading ? (\n <>{productGridSkeleton}</>\n ) : (\n <>\n <SummaryTextVertical className=\"sledge-instant-search__result-summary-text-with-column-grid-selector-wrapper\">\n {summaryText}\n <ColumnGridSelectorWrapper>{columnGridSelector}</ColumnGridSelectorWrapper>\n </SummaryTextVertical>\n\n {searchResult?.length ? (\n <>\n {productGrid}\n {pagination}\n </>\n ) : (\n resultEmpty\n )}\n </>\n )}\n </ResultData>\n </>\n </ResultWrapper>\n );\n};\n\nconst FilterHorizontalLayout = (props: IDesktopLayoutProps) => {\n const { displaySettings, allowedFilter, isFirstLoading, isLoading, isLoadingProduct, isLoadingSetting, searchResult = [], propsData, hideFilterWhenOneValue, components, skeleton } = props;\n\n const {\n filterHorizontal = null,\n summaryText = null,\n searchField = null,\n sort = null,\n limit = null,\n productGrid = null,\n pagination = null,\n resultEmpty = null,\n columnGridSelector = null\n } = components || {};\n\n const {\n filterVertical: filterVerticalSkeleton,\n summaryText: summaryTextSkeleton,\n searchField: searchFieldSkeletonComponent,\n selectOption: selectOptionSkeletonComponent,\n searchAndSelectOption: searchAndSelectOptionSkeleton,\n productGrid: productGridSkeleton\n } = skeleton || {};\n\n const isShowFilter = displaySettings?.filter?.enable_on_search && !hideFilterWhenOneValue;\n\n return (\n <>\n {isShowFilter\n ? filterHorizontal?.({\n deviceType: 'desktop',\n isSkeleton: Boolean((isFirstLoading && !propsData) || (isLoadingSetting && !propsData))\n })\n : null}\n\n <ResultWrapper displaySettings={displaySettings}>\n <ResultData>\n {isFirstLoading ? (\n searchAndSelectOptionSkeleton\n ) : (\n <ResultDataKeyword>\n <SummaryTextHorizontal>{summaryText}</SummaryTextHorizontal>\n\n <SearchFieldDesktop>{searchField}</SearchFieldDesktop>\n\n <SelectFieldWrapper>\n <SelectFieldItem>{sort}</SelectFieldItem>\n <SelectFieldItem>{limit}</SelectFieldItem>\n <ColumnGridSelectorWrapper>{columnGridSelector}</ColumnGridSelectorWrapper>\n </SelectFieldWrapper>\n </ResultDataKeyword>\n )}\n {isLoading ? (\n <>{productGridSkeleton}</>\n ) : (\n <>\n {searchResult?.length ? (\n <>\n {productGrid}\n {pagination}\n </>\n ) : (\n resultEmpty\n )}\n </>\n )}\n </ResultData>\n </ResultWrapper>\n </>\n );\n};\n\nconst FilterFlyoutLayout = (props: IDesktopLayoutProps) => {\n const {\n displaySettings,\n languageSettings,\n allowedFilter,\n isFirstLoading,\n isLoading,\n isLoadingProduct,\n isLoadingSetting,\n searchResult = [],\n hideFilterWhenOneValue,\n openFilterFlyout = false,\n setOpenFilterFlyout = () => {},\n components,\n skeleton\n } = props;\n\n const { filter: language_filter } = languageSettings || {};\n\n const {\n filterVertical = null,\n summaryText = null,\n searchField = null,\n sort = null,\n limit = null,\n productGrid = null,\n pagination = null,\n resultEmpty = null,\n columnGridSelector = null\n } = components || {};\n\n const {\n filterVertical: filterVerticalSkeleton,\n summaryText: summaryTextSkeleton,\n searchField: searchFieldSkeletonComponent,\n selectOption: selectOptionSkeletonComponent,\n searchAndSelectOption: searchAndSelectOptionSkeleton,\n productGrid: productGridSkeleton\n } = skeleton || {};\n\n const isAllowedFilterTree = allowedFilter?.find(({ display }: any) => display?.toLowerCase() === 'tree');\n const isShowFilter = displaySettings?.filter?.enable_on_search && !hideFilterWhenOneValue;\n\n return (\n <>\n <FlyoutSidebar\n title={language_filter || 'Filter'}\n content={\n <>\n {filterVertical?.({\n filterLayoutType: 'flyout'\n })}\n </>\n }\n open={openFilterFlyout}\n setOpen={setOpenFilterFlyout}\n position=\"left\"\n />\n\n <ResultWrapper displaySettings={displaySettings}>\n <>\n <ResultData>\n {isFirstLoading ? (\n searchAndSelectOptionSkeleton\n ) : (\n <ResultDataKeyword>\n <ResultSearchFieldFlex>\n <Button type=\"button\" className=\"sledge-instant-search__trigger-filter-flyout\" onClick={() => setOpenFilterFlyout?.(true)}>\n <span>{language_filter || 'Filter'}</span>\n <FilterIcon width={18} height={18} color=\"#393d4e\" />\n </Button>\n <SearchFieldDesktop>{searchField}</SearchFieldDesktop>\n </ResultSearchFieldFlex>\n\n <SelectFieldWrapper>\n <SelectFieldItem>{sort}</SelectFieldItem>\n <SelectFieldItem>{limit}</SelectFieldItem>\n </SelectFieldWrapper>\n </ResultDataKeyword>\n )}\n {isLoading ? (\n <>{productGridSkeleton}</>\n ) : (\n <>\n <SummaryTextVertical className=\"sledge-instant-search__result-summary-text-with-column-grid-selector-wrapper\">\n {summaryText}\n <ColumnGridSelectorWrapper>{columnGridSelector}</ColumnGridSelectorWrapper>\n </SummaryTextVertical>\n\n {searchResult?.length ? (\n <>\n {productGrid}\n {pagination}\n </>\n ) : (\n resultEmpty\n )}\n </>\n )}\n </ResultData>\n </>\n </ResultWrapper>\n </>\n );\n};\n\nconst EnterpriseLayout = (props: IDesktopLayoutProps) => {\n const {\n displaySettings,\n allowedFilter,\n isFirstLoading,\n isLoading,\n isLoadingProduct,\n isLoadingSetting,\n searchResult = [],\n hideFilterWhenOneValue,\n components,\n skeleton,\n languageSettings,\n openFilterToggle = false,\n setOpenFilterToggle = () => {}\n } = props;\n\n const { filter: language_filter } = languageSettings || {};\n\n const {\n filterVertical = null,\n summaryText = null,\n searchField = null,\n sort = null,\n limit = null,\n productGrid = null,\n pagination = null,\n resultEmpty = null,\n columnGridSelector = null\n } = components || {};\n\n const {\n filterVertical: filterVerticalSkeleton,\n summaryText: summaryTextSkeleton,\n searchField: searchFieldSkeletonComponent,\n selectOption: selectOptionSkeletonComponent,\n searchAndSelectOption: searchAndSelectOptionSkeleton,\n productGrid: productGridSkeleton\n } = skeleton || {};\n\n const isAllowedFilterTree = allowedFilter?.find(({ display }: any) => display?.toLowerCase() === 'tree');\n const isShowFilter = displaySettings?.filter?.enable_on_search && displaySettings?.filter?.layout === 'vertical' && !hideFilterWhenOneValue;\n //TODO: maybe we need settings from backend ?\n const isAnimated = true;\n\n return (\n <ResultWrapper displaySettings={displaySettings}>\n <>\n {isFirstLoading ? (\n searchAndSelectOptionSkeleton\n ) : (\n <ResultDataKeyword>\n <Button type=\"button\" className=\"sledge-instant-search__trigger-filter-toggle\" onClick={() => setOpenFilterToggle?.(!openFilterToggle)}>\n <span>{language_filter || 'Filter'}</span>\n <FilterIcon width={18} height={18} color=\"#393d4e\" />\n </Button>\n\n <SelectFieldItem>{sort}</SelectFieldItem>\n\n <SelectFieldWrapper>\n <ColumnGridSelectorWrapper>{columnGridSelector}</ColumnGridSelectorWrapper>\n </SelectFieldWrapper>\n </ResultDataKeyword>\n )}\n\n <ResultData>\n <div className={`sledge-instant-search__result-filter-toggle-panel ${isAnimated ? 'animated' : ''}`} data-filter-toggle={openFilterToggle ? 'open' : 'closed'}>\n {filterVertical?.({\n filterLayoutType: 'standard',\n isSkeleton: Boolean((!isAllowedFilterTree && isFirstLoading) || (isAllowedFilterTree && isLoadingProduct) || isLoadingSetting)\n })}\n </div>\n <div className=\"sledge-instant-search__result-data-flex\">\n {isLoading ? (\n <>{productGridSkeleton}</>\n ) : (\n <>\n <ProductGridPaginationWrapper>\n {searchResult?.length ? (\n <>\n {productGrid}\n {pagination}\n </>\n ) : (\n resultEmpty\n )}\n </ProductGridPaginationWrapper>\n </>\n )}\n </div>\n </ResultData>\n </>\n </ResultWrapper>\n );\n};\n\nconst YuvaLayout = (props: IDesktopLayoutProps) => {\n const {\n displaySettings,\n allowedFilter,\n isFirstLoading,\n isLoading,\n isLoadingProduct,\n isLoadingSetting,\n searchResult = [],\n hideFilterWhenOneValue,\n components,\n skeleton,\n languageSettings,\n openFilterToggle = false,\n setOpenFilterToggle = () => {}\n } = props;\n\n const { filter: language_filter } = languageSettings || {};\n\n const {\n filterVertical = null,\n summaryText = null,\n searchField = null,\n sort = null,\n limit = null,\n productGrid = null,\n pagination = null,\n resultEmpty = null,\n columnGridSelector = null\n } = components || {};\n\n const {\n filterVertical: filterVerticalSkeleton,\n summaryText: summaryTextSkeleton,\n searchField: searchFieldSkeletonComponent,\n selectOption: selectOptionSkeletonComponent,\n searchAndSelectOption: searchAndSelectOptionSkeleton,\n productGrid: productGridSkeleton\n } = skeleton || {};\n\n const isAllowedFilterTree = allowedFilter?.find(({ display }: any) => display?.toLowerCase() === 'tree');\n const isShowFilter = displaySettings?.filter?.enable_on_search && displaySettings?.filter?.layout === 'vertical' && !hideFilterWhenOneValue;\n //TODO: maybe we need settings from backend ?\n const isAnimated = false;\n\n return (\n <ResultWrapper displaySettings={displaySettings}>\n <>\n {isFirstLoading ? (\n searchAndSelectOptionSkeleton\n ) : (\n <ResultDataKeyword>\n <Button type=\"button\" className=\"sledge-instant-search__trigger-filter-toggle\" onClick={() => setOpenFilterToggle?.(!openFilterToggle)}>\n <span>{language_filter || 'Filter'}</span>\n <FilterIcon width={18} height={18} color=\"#393d4e\" />\n </Button>\n\n <SelectFieldWrapper>\n {summaryText}\n <ColumnGridSelectorWrapper>{columnGridSelector}</ColumnGridSelectorWrapper>\n <SelectFieldItem>{sort}</SelectFieldItem>\n </SelectFieldWrapper>\n </ResultDataKeyword>\n )}\n\n <ResultData>\n {isLoading ? (\n <>{productGridSkeleton}</>\n ) : (\n <>\n <div className={`sledge-instant-search__result-filter-toggle-panel ${isAnimated ? 'animated' : ''}`} data-filter-toggle={openFilterToggle ? 'open' : 'closed'}>\n {filterVertical?.({\n filterLayoutType: 'standard',\n isSkeleton: Boolean((!isAllowedFilterTree && isFirstLoading) || (isAllowedFilterTree && isLoadingProduct) || isLoadingSetting)\n })}\n </div>\n <ProductGridPaginationWrapper>\n {searchResult?.length ? (\n <>\n {productGrid}\n {pagination}\n </>\n ) : (\n resultEmpty\n )}\n </ProductGridPaginationWrapper>\n </>\n )}\n </ResultData>\n </>\n </ResultWrapper>\n );\n};\n\nconst ToyoLayout = (props: IDesktopLayoutProps) => {\n const { displaySettings, allowedFilter, isFirstLoading, isLoading, isLoadingProduct, isLoadingSetting, searchResult = [], propsData, hideFilterWhenOneValue, components, skeleton } = props;\n\n const {\n filterHorizontal = null,\n filterActive = null,\n summaryText = null,\n searchField = null,\n sort = null,\n limit = null,\n productGrid = null,\n pagination = null,\n resultEmpty = null,\n columnGridSelector = null\n } = components || {};\n\n const {\n filterVertical: filterVerticalSkeleton,\n summaryText: summaryTextSkeleton,\n searchField: searchFieldSkeletonComponent,\n selectOption: selectOptionSkeletonComponent,\n searchAndSelectOption: searchAndSelectOptionSkeleton,\n productGrid: productGridSkeleton\n } = skeleton || {};\n\n const isShowFilter = displaySettings?.filter?.enable_on_search && displaySettings?.filter?.layout === 'toyo' && !hideFilterWhenOneValue;\n\n return (\n <>\n <ResultWrapper displaySettings={displaySettings}>\n <ResultData>\n {isFirstLoading ? (\n searchAndSelectOptionSkeleton\n ) : (\n <ResultDataKeyword>\n <SummaryTextHorizontal>{summaryText}</SummaryTextHorizontal>\n\n {isShowFilter\n ? filterHorizontal?.({\n deviceType: 'desktop',\n isSkeleton: Boolean((isFirstLoading && !propsData) || (isLoadingSetting && !propsData)),\n isHorizontalGroup: true,\n showOnlyItems: true,\n components: {\n sort\n }\n })\n : null}\n\n <SelectFieldWrapper>\n <ColumnGridSelectorWrapper>{columnGridSelector}</ColumnGridSelectorWrapper>\n </SelectFieldWrapper>\n </ResultDataKeyword>\n )}\n {isLoading ? (\n <>{productGridSkeleton}</>\n ) : (\n <>\n {searchResult?.length ? (\n <>\n {filterActive?.()}\n {productGrid}\n {pagination}\n </>\n ) : (\n resultEmpty\n )}\n </>\n )}\n </ResultData>\n </ResultWrapper>\n </>\n );\n};\n\nconst FilterHorizontalGroupLayout = (props: IDesktopLayoutProps) => {\n const { displaySettings, allowedFilter, isFirstLoading, isLoading, isLoadingProduct, isLoadingSetting, searchResult = [], propsData, hideFilterWhenOneValue, components, skeleton } = props;\n\n const {\n filterHorizontal = null,\n summaryText = null,\n searchField = null,\n sort = null,\n limit = null,\n productGrid = null,\n pagination = null,\n resultEmpty = null,\n columnGridSelector = null\n } = components || {};\n\n const {\n filterVertical: filterVerticalSkeleton,\n summaryText: summaryTextSkeleton,\n searchField: searchFieldSkeletonComponent,\n selectOption: selectOptionSkeletonComponent,\n searchAndSelectOption: searchAndSelectOptionSkeleton,\n productGrid: productGridSkeleton\n } = skeleton || {};\n\n const isShowFilter = displaySettings?.filter?.enable_on_search && !hideFilterWhenOneValue;\n\n return (\n <>\n {isShowFilter\n ? filterHorizontal?.({\n deviceType: 'desktop',\n isSkeleton: Boolean((isFirstLoading && !propsData) || (isLoadingSetting && !propsData)),\n isHorizontalGroup: true\n })\n : null}\n\n <ResultWrapper displaySettings={displaySettings}>\n <ResultData>\n {isFirstLoading ? (\n searchAndSelectOptionSkeleton\n ) : (\n <ResultDataKeyword>\n <SummaryTextHorizontal>{summaryText}</SummaryTextHorizontal>\n\n <SearchFieldDesktop>{searchField}</SearchFieldDesktop>\n\n <SelectFieldWrapper>\n <SelectFieldItem>{sort}</SelectFieldItem>\n <SelectFieldItem>{limit}</SelectFieldItem>\n <ColumnGridSelectorWrapper>{columnGridSelector}</ColumnGridSelectorWrapper>\n </SelectFieldWrapper>\n </ResultDataKeyword>\n )}\n {isLoading ? (\n <>{productGridSkeleton}</>\n ) : (\n <>\n {searchResult?.length ? (\n <>\n {productGrid}\n {pagination}\n </>\n ) : (\n resultEmpty\n )}\n </>\n )}\n </ResultData>\n </ResultWrapper>\n </>\n );\n};\n\nexport const DesktopLayout = (props: IDesktopLayoutProps) => {\n const { displaySettings } = props;\n\n const renderLayout = () => {\n switch (displaySettings?.filter?.layout) {\n case 'vertical':\n return <FilterVerticalLayout {...props} />;\n break;\n case 'horizontal':\n return <FilterHorizontalLayout {...props} />;\n break;\n case 'flyout':\n return <FilterFlyoutLayout {...props} />;\n break;\n case 'horizontal_group':\n return <FilterHorizontalGroupLayout {...props} />;\n break;\n case 'enterprise':\n return <EnterpriseLayout {...props} />;\n break;\n case 'yuva':\n return <YuvaLayout {...props} />;\n break;\n case 'toyo':\n return <ToyoLayout {...props} />;\n break;\n\n default:\n return null;\n break;\n }\n };\n\n return (\n <RenderLayout device=\"desktop\" layout={displaySettings?.filter?.layout}>\n {renderLayout()}\n </RenderLayout>\n );\n};\n","import { Button, FilterIcon, FlyoutSidebar } from '@core/components';\nimport { IFilterHorizontalProps, IFilterVerticalProps } from '@react-instant-search/components/SearchResultWidget/components';\nimport {\n FilterHorizontalBlockMobile,\n RenderLayout,\n ResultData,\n ResultDataKeyword,\n ResultSearchFieldFlex,\n ResultWrapper,\n SearchFieldDesktop,\n SelectFieldItem,\n SelectFieldWrapper,\n SummaryTextHorizontal,\n SummaryTextVertical,\n ColumnGridSelectorWrapper\n} from './Elements';\n\nexport interface IMobileLayoutProps {\n displaySettings?: any;\n languageSettings?: any;\n allowedFilter?: any[];\n isFirstLoading?: boolean;\n isLoading?: boolean;\n isLoadingProduct?: boolean;\n isLoadingSetting?: boolean;\n searchResult?: any[];\n propsData?: any;\n openFilterFlyout?: boolean;\n setOpenFilterFlyout?(value: React.SetStateAction<boolean>): void;\n components?: {\n filterVertical?(props?: IFilterVerticalProps): any;\n filterHorizontal?(props?: IFilterHorizontalProps): any;\n summaryText?: any;\n searchField?: any;\n sort?: any;\n limit?: any;\n productGrid?: any;\n pagination?: any;\n resultEmpty?: any;\n columnGridSelector?: any;\n };\n skeleton?: {\n filterVertical?: any;\n filterHorizontal?: any;\n summaryText?: any;\n searchField?: any;\n selectOption?: any;\n searchAndSelectOption?: any;\n productGrid?: any;\n };\n}\n\nconst FilterFlyoutLayout = (props: IMobileLayoutProps) => {\n const {\n displaySettings,\n languageSettings,\n allowedFilter,\n isFirstLoading,\n isLoading,\n isLoadingProduct,\n isLoadingSetting,\n searchResult = [],\n openFilterFlyout = false,\n setOpenFilterFlyout = () => {},\n components,\n skeleton\n } = props;\n\n const { filter: language_filter } = languageSettings || {};\n\n const {\n filterVertical = null,\n summaryText = null,\n searchField = null,\n sort = null,\n limit = null,\n productGrid = null,\n pagination = null,\n resultEmpty = null,\n columnGridSelector = null\n } = components || {};\n\n const {\n filterVertical: filterVerticalSkeleton,\n filterHorizontal: filterHorizontalSkeleton,\n summaryText: summaryTextSkeleton,\n searchField: searchFieldSkeletonComponent,\n selectOption: selectOptionSkeletonComponent,\n searchAndSelectOption: searchAndSelectOptionSkeleton,\n productGrid: productGridSkeleton\n } = skeleton || {};\n\n return (\n <>\n <FlyoutSidebar\n title={language_filter || 'Filter'}\n content={\n <>\n {filterVertical?.({\n filterLayoutType: 'flyout'\n })}\n </>\n }\n open={openFilterFlyout}\n setOpen={setOpenFilterFlyout}\n position=\"left\"\n />\n\n <ResultWrapper displaySettings={displaySettings}>\n <ResultData>\n <ResultDataKeyword>\n {isFirstLoading ? (\n <>\n {displaySettings?.filter?.show_total_products ? summaryTextSkeleton : null}\n {searchFieldSkeletonComponent}\n {filterHorizontalSkeleton}\n {selectOptionSkeletonComponent}\n </>\n ) : (\n <>\n <SummaryTextHorizontal>{summaryText}</SummaryTextHorizontal>\n\n <ColumnGridSelectorWrapper>{columnGridSelector}</ColumnGridSelectorWrapper>\n\n <FilterHorizontalBlockMobile>\n <ResultSearchFieldFlex>\n <Button type=\"button\" className=\"sledge-instant-search__trigger-filter-flyout\" onClick={() => setOpenFilterFlyout?.(true)}>\n <span>{language_filter || 'Filter'}</span>\n <FilterIcon width={18} height={18} color=\"#393d4e\" />\n </Button>\n {searchField}\n </ResultSearchFieldFlex>\n </FilterHorizontalBlockMobile>\n\n <SelectFieldWrapper>\n <SelectFieldItem>{sort}</SelectFieldItem>\n <SelectFieldItem>{limit}</SelectFieldItem>\n </SelectFieldWrapper>\n </>\n )}\n </ResultDataKeyword>\n\n {isLoading ? (\n <>{productGridSkeleton}</>\n ) : (\n <>\n {searchResult?.length ? (\n <>\n {productGrid}\n {pagination}\n </>\n ) : (\n resultEmpty\n )}\n </>\n )}\n </ResultData>\n </ResultWrapper>\n </>\n );\n};\n\nconst FilterStandardLayout = (props: IMobileLayoutProps) => {\n const { displaySettings, languageSettings, allowedFilter, isFirstLoading, isLoading, isLoadingProduct, isLoadingSetting, searchResult = [], components, skeleton } = props;\n\n const { filter: language_filter } = languageSettings || {};\n\n const {\n filterHorizontal = null,\n summaryText = null,\n searchField = null,\n sort = null,\n limit = null,\n productGrid = null,\n pagination = null,\n resultEmpty = null,\n columnGridSelector = null\n } = components || {};\n\n const {\n filterVertical: filterVerticalSkeleton,\n filterHorizontal: filterHorizontalSkeleton,\n summaryText: summaryTextSkeleton,\n searchField: searchFieldSkeletonComponent,\n selectOption: selectOptionSkeletonComponent,\n searchAndSelectOption: searchAndSelectOptionSkeleton,\n productGrid: productGridSkeleton\n } = skeleton || {};\n\n return (\n <>\n <ResultWrapper displaySettings={displaySettings}>\n <ResultData>\n <ResultDataKeyword>\n {isFirstLoading ? (\n <>\n {displaySettings?.filter?.show_total_products ? summaryTextSkeleton : null}\n {searchFieldSkeletonComponent}\n {filterHorizontalSkeleton}\n {selectOptionSkeletonComponent}\n </>\n ) : (\n <>\n <SummaryTextHorizontal>{summaryText}</SummaryTextHorizontal>\n\n <ColumnGridSelectorWrapper>{columnGridSelector}</ColumnGridSelectorWrapper>\n\n <FilterHorizontalBlockMobile>\n {searchField}\n {filterHorizontal?.({ deviceType: 'mobile' })}\n </FilterHorizontalBlockMobile>\n\n <SelectFieldWrapper>\n <SelectFieldItem>{sort}</SelectFieldItem>\n <SelectFieldItem>{limit}</SelectFieldItem>\n </SelectFieldWrapper>\n </>\n )}\n </ResultDataKeyword>\n\n {isLoading ? (\n <>{productGridSkeleton}</>\n ) : (\n <>\n {searchResult?.length ? (\n <>\n {productGrid}\n {pagination}\n </>\n ) : (\n resultEmpty\n )}\n </>\n )}\n </ResultData>\n </ResultWrapper>\n </>\n );\n};\n\nconst StickyFilterButtonLayout = (props: IMobileLayoutProps) => {\n const {\n displaySettings,\n languageSettings,\n allowedFilter,\n isFirstLoading,\n isLoading,\n isLoadingProduct,\n isLoadingSetting,\n searchResult = [],\n openFilterFlyout = false,\n setOpenFilterFlyout = () => {},\n components,\n skeleton\n } = props;\n\n const { filter: language_filter } = languageSettings || {};\n\n const {\n filterVertical = null,\n summaryText = null,\n searchField = null,\n sort = null,\n limit = null,\n productGrid = null,\n pagination = null,\n resultEmpty = null,\n columnGridSelector = null\n } = components || {};\n\n const {\n filterVertical: filterVerticalSkeleton,\n filterHorizontal: filterHorizontalSkeleton,\n summaryText: summaryTextSkeleton,\n searchField: searchFieldSkeletonComponent,\n selectOption: selectOptionSkeletonComponent,\n searchAndSelectOption: searchAndSelectOptionSkeleton,\n productGrid: productGridSkeleton\n } = skeleton || {};\n\n return (\n <>\n <FlyoutSidebar\n title={language_filter || 'Filter'}\n content={\n <>\n {filterVertical?.({\n filterLayoutType: 'flyout'\n })}\n </>\n }\n open={openFilterFlyout}\n setOpen={setOpenFilterFlyout}\n position=\"bottom\"\n />\n\n <Button type=\"button\" className=\"sledge-instant-search__trigger-filter-flyout sledge-instant-search__trigger-filter-flyout-sticky\" onClick={() => setOpenFilterFlyout?.(true)}>\n <span>{language_filter || 'Filter'}</span>\n <FilterIcon width={18} height={18} color=\"#393d4e\" />\n </Button>\n\n <ResultWrapper displaySettings={displaySettings}>\n <ResultData>\n <ResultDataKeyword>\n {isFirstLoading ? (\n <>\n {displaySettings?.filter?.show_total_products ? summaryTextSkeleton : null}\n {searchFieldSkeletonComponent}\n {filterHorizontalSkeleton}\n {selectOptionSkeletonComponent}\n </>\n ) : (\n <>\n <SummaryTextHorizontal>{summaryText}</SummaryTextHorizontal>\n\n <ColumnGridSelectorWrapper>{columnGridSelector}</ColumnGridSelectorWrapper>\n\n <FilterHorizontalBlockMobile>{searchField}</FilterHorizontalBlockMobile>\n\n <SelectFieldWrapper>\n <SelectFieldItem>{sort}</SelectFieldItem>\n <SelectFieldItem>{limit}</SelectFieldItem>\n </SelectFieldWrapper>\n </>\n )}\n </ResultDataKeyword>\n\n {isLoading ? (\n <>{productGridSkeleton}</>\n ) : (\n <>\n {searchResult?.length ? (\n <>\n {productGrid}\n {pagination}\n </>\n ) : (\n resultEmpty\n )}\n </>\n )}\n </ResultData>\n </ResultWrapper>\n </>\n );\n};\n\nexport const MobileLayout = (props: IMobileLayoutProps) => {\n const { displaySettings } = props;\n\n const renderLayout = () => {\n switch (displaySettings?.filter?.mobile_layout) {\n case 'flyout':\n return <FilterFlyoutLayout {...props} />;\n break;\n case 'standard':\n return <FilterStandardLayout {...props} />;\n break;\n case 'sticky_filter_button_flyout':\n return <StickyFilterButtonLayout {...props} />;\n break;\n\n default:\n return null;\n break;\n }\n };\n\n return (\n <RenderLayout device=\"mobile\" layout={displaySettings?.filter?.mobile_layout}>\n {renderLayout()}\n </RenderLayout>\n );\n};\n","import React from 'react';\n\nimport '@core/lib/polyfills';\n\nimport {\n Pagination,\n ProductGrid,\n Button,\n CollectionGrid,\n PageGrid,\n BlogGrid,\n SearchInputField,\n SelectField,\n SearchIcon,\n SkeletonLoading,\n ArticleGrid,\n Progress,\n FlyoutSidebar,\n FilterIcon,\n Alert,\n InfoCircleIcon\n} from '@core/components';\nimport { multiSearch, search, searchTrigger } from '@core/api/instant-search';\nimport { useDebounce, useEffectOnChange, useIntersectionObserver, useIsFirstRender, usePreviewSettings, usePrevious } from '@core/hooks';\nimport {\n DEFAULT_LIMIT_VALUE,\n DEFAULT_MAX_WIDTH_COMPONENT,\n DEFAULT_QUERY_PARAM,\n DEFAULT_QUERY_PRODUCT_MEILISEARCH,\n DEFAULT_QUERY_PUBLISHED_FILTER,\n HIERARCHICAL_FACET_OBJECT_ALIASES,\n LOCAL_STORAGE_KEY,\n MAX_LIMIT_HIERARCHICAL,\n OBJECT_DATA_STRING_KEY\n} from '@core/lib/const';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\nimport { currentMediaQuery, isFunction, objectPresent, scrollToElement, shopifyFormatMoney } from '@core/lib/helper';\nimport { createHierarchicalFacet, createQueryFilter, handleFacetValues, handleSearchResponse, keyOpenFilters, parseFacetObject } from './utils';\nimport useEffectCallback from '@core/hooks/useEffectCallback';\nimport { FacetComponent, FilterHorizontalComponent, FilterVerticalComponent } from './Atoms';\nimport {\n ColumnGridSelector,\n Facet,\n FacetBlockSelected,\n FilterActive,\n FilterHorizontal,\n FilterVertical,\n IColumnGridSelector,\n IFilterActiveProps,\n IFilterHorizontalProps,\n IFilterVerticalProps,\n Limit,\n PaginationOrLoadMore,\n Search,\n Sort,\n Tab\n} from './components';\nimport { DesktopLayout, MobileLayout } from './layouts';\n\ntype handleSetInitStatesType = { results?: any; data?: any; callback?(props: { valueAllowedFilter?: any }): void; isUpdateFilter?: boolean };\n\nexport interface ISearchResultWidgetProps {\n layoutType?: 'product-filter' | 'default';\n width?: string;\n query?: {\n keyword?: string;\n sortBy?: string;\n page?: string;\n limit?: string;\n };\n params?:\n | {\n collectionId?: string | number | '';\n collectionName?: string | '';\n }\n | undefined;\n children?: any;\n onAfterAddToCart?(state: 'success' | 'failed'): void;\n onAfterAddWishlist?(state: 'success' | 'failed'): void;\n onAfterRemoveWishlist?(state: 'success' | 'failed'): void;\n onAfterRenderProduct?(state: 'success' | 'failed'): void;\n onAfterRenderCollection?(state: 'success' | 'failed'): void;\n onAfterRenderPage?(state: 'success' | 'failed'): void;\n onAfterRenderBlog?(state: 'success' | 'failed'): void;\n onAfterRenderArticle?(state: 'success' | 'failed'): void;\n data?: any;\n sledgeSettings?: any;\n previewSettings?: any;\n currentTags?: string[] | number[];\n}\n\ninterface IResultProps {\n layoutType?: 'product-filter' | 'default';\n isFirstLoading?: boolean;\n keyword?: string;\n debouncedKeyword?: string;\n clickedTabIndexId?: string | number | null;\n clickedTabIndexName?: string | null;\n clickedTabIndexType?: string | null;\n isLoadingSetting?: boolean;\n allowedSorts?: any[];\n allowedFilter?: any[];\n facets?: any[];\n defaultFacetStats?: any;\n hideFilterWhenOneValue?: boolean;\n hiddenTags?: [];\n displaySettings?: any;\n colorSwatches?: any[];\n defaultSort?: string;\n defaultLimit?: any;\n languageSettings?: any;\n hierarchicalProductTypeSettings?: any;\n hierarchicalCollectionsSettings?: any;\n query?: {\n keyword?: string;\n sortBy?: string;\n page?: string;\n limit?: string;\n };\n params?:\n | {\n collectionId?: string | number | '';\n collectionName?: string | '';\n }\n | undefined;\n isJsVersion?: any;\n productCardsComponent?: any;\n collectionCardsComponent?: any;\n pageCardsComponent?: any;\n blogCardsComponent?: any;\n articleCardsComponent?: any;\n onAfterAddToCart?(state: 'success' | 'failed'): void;\n onAfterAddWishlist?(state: 'success' | 'failed'): void;\n onAfterRemoveWishlist?(state: 'success' | 'failed'): void;\n onAfterRenderProduct?(state: 'success' | 'failed'): void;\n onAfterRenderCollection?(state: 'success' | 'failed'): void;\n onAfterRenderPage?(state: 'success' | 'failed'): void;\n onAfterRenderBlog?(state: 'success' | 'failed'): void;\n onAfterRenderArticle?(state: 'success' | 'failed'): void;\n setIsLoading?(value: React.SetStateAction<boolean>): void;\n setKeyword?(value: React.SetStateAction<string>): void;\n filterHorizontalSkeleton?: React.ReactNode;\n filterHorizontalSkeletonComponent?: React.ReactNode;\n filterVerticalSkeleton?: React.ReactNode;\n productGridSkeleton?: React.ReactNode;\n searchAndSelectOptionSkeleton?: React.ReactNode;\n summaryTextSkeleton?: React.ReactNode;\n searchFieldSkeletonComponent?: React.ReactNode;\n selectOptionSkeletonComponent?: React.ReactNode;\n searchResultContainerRef?: any;\n data?: any;\n settings?: any;\n isReplaceWidgetList?: boolean;\n setIsReplaceWidgetList?(value: React.SetStateAction<boolean>): void;\n searchResultFacets?: any;\n handleChangeKeyword?(value: string): void;\n generalDataSettings?: any;\n searchParams?: any;\n setSeparatedFilterItem?(value: React.SetStateAction<any>): void;\n separatedFilterItem?: any;\n clickedFacets?: any;\n setClickedFacets?(value: React.SetStateAction<any>): void;\n parentPreviousState?: any;\n clickedOpenFilterHorizontalId?: string | number | null | '';\n setClickedOpenFilterHorizontalId?(value: React.SetStateAction<string | number | null | ''>): void;\n clickedOpenFilterHorizontalMobileId?: string | number | null | '';\n setClickedOpenFilterHorizontalMobileId?(value: React.SetStateAction<string | number | null | ''>): void;\n defaultFilterItems?: any[];\n mobileShowSelectedSort?: boolean;\n soldProductAtEnd?: boolean;\n attributesToRetrieve?: any;\n allowedFilterSlider?: any[];\n hierarchicalFacetAliases?: any[];\n usePublishedFilter?: boolean;\n showOutOfStock?: boolean;\n handleSetInitStates?(props: handleSetInitStatesType): void;\n querySortBy?: string;\n queryPage?: string;\n queryLimit?: string;\n valueFilterPriceChange?: number[];\n setValueFilterPriceChange?(value: React.SetStateAction<number[]>): void;\n valueFilterOnSaleChange?: number[];\n setValueFilterOnSaleChange?(value: React.SetStateAction<number[]>): void;\n valueFilterSliderOthers?: any;\n setValueFilterSliderOthers?(value: React.SetStateAction<any>): void;\n tabs?: any[];\n initStatesFirstTime?: boolean;\n setInitStatesFirstTime?(value: React.SetStateAction<boolean>): void;\n allowedTabs?: any[];\n setAllowedTabs?(value: React.SetStateAction<any[]>): void;\n isDesktopLayout?: boolean;\n previewSettings?: any;\n currentColumnGrid?: IColumnGridSelector | null;\n setCurrentColumnGrid?(value: React.SetStateAction<IColumnGridSelector | null>): void;\n}\n\nexport const SearchResultWidget = (props: ISearchResultWidgetProps) => {\n const {\n layoutType = 'default',\n width = DEFAULT_MAX_WIDTH_COMPONENT,\n query,\n params,\n children,\n onAfterAddToCart,\n onAfterAddWishlist,\n onAfterRemoveWishlist,\n onAfterRenderProduct,\n onAfterRenderCollection,\n onAfterRenderPage,\n onAfterRenderBlog,\n onAfterRenderArticle,\n data: propsData,\n sledgeSettings,\n previewSettings: previewSettingsProp,\n currentTags = []\n } = props;\n\n const queryKeyword = query?.keyword ? query.keyword : DEFAULT_QUERY_PARAM.KEYWORD;\n const querySortBy = query?.sortBy ? query.sortBy : DEFAULT_QUERY_PARAM.SORT_BY;\n const queryPage = query?.page ? query.page : DEFAULT_QUERY_PARAM.PAGE;\n const queryLimit = query?.limit ? query.limit : DEFAULT_QUERY_PARAM.LIMIT;\n\n const { collectionId } = params || {};\n\n const searchParams = typeof document !== 'undefined' ? new URLSearchParams(document?.location?.search) : null;\n\n const { generalPreviewSettings, instantSearchPreviewSettings, previewSettings } = usePreviewSettings({\n defaultSettings: previewSettingsProp,\n nestedProperty: layoutType === 'product-filter' ? 'sledge.instantSearch.productFilter.preview' : 'sledge.instantSearch.searchResult.preview'\n });\n\n const [settings] = React.useState(instantSearchPreviewSettings || typeof localStorage !== 'undefined' ? JSON.parse(localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || '{}') : {});\n const [isFirstLoading, setIsFirstLoading] = React.useState(!propsData);\n const [isLoading, setIsLoading] = React.useState(!propsData);\n const [keyword, setKeyword] = React.useState(searchParams?.get(queryKeyword));\n const [clickedTabIndexId, setClickedTabIndexId] = React.useState<string | number | null>(null);\n const [clickedTabIndexName, setClickedTabIndexName] = React.useState<string | null>(null);\n const [clickedTabIndexType, setClickedTabIndexType] = React.useState<string | null>(null);\n const [resultComponent, setResultComponent] = React.useState(<ResultProduct />);\n const [isLoadingSetting, setIsLoadingSetting] = React.useState(!propsData);\n const [allowedSorts, setAllowedSorts] = React.useState(sledgeSettings?.instantsearch?.allowed_sorts || []);\n const [allowedFilter, setAllowedFilter] = React.useState([]);\n const [allowedTabs, setAllowedTabs] = React.useState<any[]>([]);\n const [tabs, setTabs] = React.useState<any[]>([]);\n const [activeTabs, setActiveTabs] = React.useState<any>({});\n const [facets, setFacets] = React.useState<any[]>([]);\n const [indexProduct, setIndexProduct] = React.useState(sledgeSettings?.instantsearch?.index_product || '');\n const [hiddenTags, setHiddenTags] = React.useState(sledgeSettings?.instantsearch?.hidden_tags || []);\n const [displaySettings, setDisplaySettings] = React.useState<any>(sledgeSettings?.instantsearch?.display || {});\n const [colorSwatches, setColorSwatches] = React.useState<any[]>(sledgeSettings?.instantsearch?.colors || []);\n const [defaultSort, setDefaultSort] = React.useState(searchParams?.get(querySortBy) ? searchParams?.get(querySortBy) : sledgeSettings?.instantsearch?.default_sort || '');\n const [defaultLimit, setDefaultLimit] = React.useState<any>(DEFAULT_LIMIT_VALUE[0]);\n const [languageSettings, setLanguageSettings] = React.useState(sledgeSettings?.instantsearch?.languages || {});\n const [hierarchicalProductTypeSettings, setHierarchicalProductTypeSettings] = React.useState(sledgeSettings?.instantsearch?.hierarchical_product_type || {});\n const [hierarchicalCollectionsSettings, setHierarchicalCollectionsSettings] = React.useState(sledgeSettings?.instantsearch?.hierarchical_collections || {});\n const [initStatesFirstTime, setInitStatesFirstTime] = React.useState(true);\n const [defaultFacetStats, setDefaultFacetStats] = React.useState({});\n const [hideFilterWhenOneValue, setHideFilterWhenOneValue] = React.useState(false);\n const [isReplaceWidgetList, setIsReplaceWidgetList] = React.useState(false);\n const [searchResultFacets, setSearchResultFacets] = React.useState<any>({});\n const [generalDataSettings, setGeneralDataSettings] = React.useState<any>(sledgeSettings?.general || {});\n const [instantSearchSettings, setInstantSearchSettings] = React.useState<any>(sledgeSettings?.instantsearch || {});\n const [clickedFacets, setClickedFacets] = React.useState<any>(\n currentTags?.length\n ? {\n tags: currentTags\n }\n : {}\n );\n const [clickedOpenFilterHorizontalId, setClickedOpenFilterHorizontalId] = React.useState<string | number | null | ''>(null);\n const [clickedOpenFilterHorizontalMobileId, setClickedOpenFilterHorizontalMobileId] = React.useState<string | number | null | ''>(null);\n const [separatedFilterItem, setSeparatedFilterItem]: any = React.useState({});\n const [defaultFilterItems, setDefaultFilterItems] = React.useState<any[]>([]);\n const [mobileShowSelectedSort, setMobileShowSelectedSort] = React.useState(true);\n const [soldProductAtEnd, setSoldProductAtEnd] = React.useState(false);\n const [attributesToRetrieve, setAttributesToRetrieve] = React.useState(sledgeSettings?.instantsearch?.attributes_to_retrieve || []);\n const [totalHitsProduct, setTotalHitsProduct] = React.useState(0);\n const [allowedFilterSlider, setAllowedFilterSlider] = React.useState<any[]>([]);\n const [hierarchicalFacetAliases, setHierarchicalFacetAliases] = React.useState<any[]>([]);\n const [usePublishedFilter, setUsePublishedFilter] = React.useState(false);\n const [showOutOfStock, setShowOutOfStock] = React.useState(false);\n const [valueFilterPriceChange, setValueFilterPriceChange] = React.useState<number[]>([]);\n const [valueFilterOnSaleChange, setValueFilterOnSaleChange] = React.useState<number[]>([]);\n const [valueFilterSliderOthers, setValueFilterSliderOthers] = React.useState<any>({});\n const [currentColumnGrid, setCurrentColumnGrid] = React.useState<IColumnGridSelector | null>(null);\n\n // Debounced states\n const debouncedKeyword = useDebounce(keyword, 500);\n\n // Separate Components\n let productCardsComponent: any = null;\n let collectionCardsComponent: any = null;\n let pageCardsComponent: any = null;\n let blogCardsComponent: any = null;\n let articleCardsComponent: any = null;\n React.Children.map(children, (child) => {\n if (React.isValidElement(child) && isFunction(child.type)) {\n const { productCard, collectionCard, pageCard, blogCard, articleCard }: any = child?.props || {};\n\n if (productCard && isFunction(productCard)) productCardsComponent = productCard;\n if (collectionCard && isFunction(collectionCard)) collectionCardsComponent = collectionCard;\n if (pageCard && isFunction(pageCard)) pageCardsComponent = pageCard;\n if (blogCard && isFunction(blogCard)) blogCardsComponent = blogCard;\n if (articleCard && isFunction(articleCard)) articleCardsComponent = articleCard;\n }\n });\n\n const { isRenderApp, isJsVersion, triggerRenderMultipleComponent } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { instantSearch: isRenderAppInstantSearch } = isRenderApp || {};\n const { value: valueRenderInstantSearchResult, trigger: triggerRenderInstantSearchResult } = triggerRenderMultipleComponent?.instantSearch?.searchResult || {};\n\n const searchResultContainerRef = React.useRef(null);\n\n const previousState: any = usePrevious({ keyword });\n\n const isDesktopLayout = ['lg', 'xl'].includes(currentMediaQuery());\n\n const handleChangeTabIndex = React.useCallback(\n (params: { id: string; name: string; type: string }) => {\n const { id, name, type } = params;\n\n setClickedTabIndexId(id);\n setClickedTabIndexName(name);\n setClickedTabIndexType(type);\n setResultComponent(id.includes(indexProduct) ? <ResultProduct /> : <ResultCategory />);\n },\n [indexProduct]\n );\n\n const handleFilterStates = ({ data = {}, valueSearchResultFacets = {} }: { data?: any; valueSearchResultFacets?: any }) => {\n const { filters } = data;\n\n let allowedFilters = sledgeSettings?.instantsearch?.filters?.length ? sledgeSettings?.instantsearch?.filters : filters?.length ? filters : [];\n let isSetFilter = false;\n let valueAllowedFilter: any = [];\n let valueDefaultFilterItems: any[] = [];\n let valueAllowedFilterSlider: any[] = [];\n let valueHierarchicalFacetAliases: any[] = [];\n\n if (!isSetFilter) {\n allowedFilters?.map((filter: any) => {\n const { active, collections, items } = filter;\n\n if (!active) return;\n\n const newItems = items?.map(({ value, ...otherItem }: any) => {\n return {\n ...otherItem,\n value: otherItem?.display === 'tree' ? HIERARCHICAL_FACET_OBJECT_ALIASES[value] || value : value\n };\n });\n\n if (collectionId && collections?.includes(String(collectionId))) {\n isSetFilter = true;\n valueAllowedFilter = newItems;\n } else {\n if (collections?.includes('all')) {\n isSetFilter = true;\n valueAllowedFilter = newItems;\n }\n }\n });\n }\n\n if (valueAllowedFilter?.length) {\n valueDefaultFilterItems = valueAllowedFilter\n .map((filter: any) => {\n const { value, label, display, settings } = filter;\n const { prefix, filter_list, selected_filter } = settings || {};\n\n const isDisplaySlider = ['slider', 'input_range', 'slider_with_input_range'].includes(display.toLowerCase());\n\n if (isDisplaySlider) return;\n\n let items: any[] = [];\n if (display.toLowerCase() === 'tree') {\n for (let level = 0; level < MAX_LIMIT_HIERARCHICAL; level++) {\n items = [...items, ...(valueSearchResultFacets?.[`${value}.lvl${level}`] || [])];\n }\n } else {\n items = valueSearchResultFacets?.[value];\n }\n\n return {\n value,\n label,\n settings,\n items: items\n ?.map((item: any) => {\n const isManualFilter = item && filter_list === 'manual' && !selected_filter?.includes(item?.value);\n const isPrefixFilter = item && filter_list === 'prefix' && !prefix?.find((prefixItem: any) => item?.value?.startsWith(prefixItem));\n\n if (!item || isManualFilter || isPrefixFilter) return;\n\n return item.value;\n })\n ?.filter((item: any) => item)\n };\n })\n .filter((item: any) => item);\n\n valueAllowedFilterSlider = valueAllowedFilter\n .map((filter: any) => {\n const { value, display } = filter;\n\n const isDisplaySlider = ['slider', 'input_range', 'slider_with_input_range'].includes(display.toLowerCase());\n\n if (!isDisplaySlider) return;\n\n return value;\n })\n .filter((item: any) => item);\n\n valueHierarchicalFacetAliases = valueAllowedFilter\n .map((filter: any) => {\n const { value, display } = filter;\n\n const isDisplayTree = display.toLowerCase() === 'tree';\n\n if (!isDisplayTree) return;\n\n return value;\n })\n .filter((item: any) => item);\n }\n\n return {\n isSetFilter,\n valueAllowedFilter,\n valueDefaultFilterItems,\n valueAllowedFilterSlider,\n valueHierarchicalFacetAliases\n };\n };\n\n const handleSetInitStates = ({ results = {}, data = {}, callback, isUpdateFilter = false }: handleSetInitStatesType) => {\n const { filters, index_product, tabs, hidden_tags, show_out_of_stock, display, use_published_filter } = data;\n const {\n facetStats,\n totalHits: totalHitsResult,\n facetDistribution\n } = isUpdateFilter ? results || {} : layoutType === 'default' ? results?.find?.(({ indexUid }: any) => indexUid.includes(index_product)) || {} : results || {};\n\n let totalHits = totalHitsResult || 0;\n\n // For save value init total hits product\n if (typeof localStorage !== 'undefined') {\n const INIT_TOTAL_HITS = Number(localStorage.getItem(layoutType === 'default' ? LOCAL_STORAGE_KEY.SEARCH_RESULT_INIT_TOTAL_HITS : LOCAL_STORAGE_KEY.PRODUCT_FILTER_INIT_TOTAL_HITS) || 0);\n\n if (!(INIT_TOTAL_HITS > 1)) {\n localStorage.setItem(layoutType === 'default' ? LOCAL_STORAGE_KEY.SEARCH_RESULT_INIT_TOTAL_HITS : LOCAL_STORAGE_KEY.PRODUCT_FILTER_INIT_TOTAL_HITS, totalHits);\n }\n\n totalHits = totalHits <= 1 ? INIT_TOTAL_HITS : totalHits;\n }\n\n setTotalHitsProduct(totalHits || 0);\n\n let valueHideFilterWhenOneValue = display?.filter?.hide_when_one_value && totalHits <= 1;\n let valueSearchResultFacets = facetDistribution\n ? Object.fromEntries(\n Object.entries(facetDistribution).map((facet) => {\n let value = facet[0];\n let items: any = [];\n\n if (value === 'variants.inventory_quantity') {\n items = [\n {\n name: 'In Stock',\n value: '> 0'\n }\n ];\n } else {\n items = Object.keys(facetDistribution[value]).map((item) => {\n return {\n name: item,\n value: item,\n total: facetDistribution[value][item] || 0\n };\n });\n }\n\n return [value, items];\n })\n )\n : {};\n\n setSearchResultFacets(valueSearchResultFacets);\n setDefaultFacetStats(facetStats);\n setHideFilterWhenOneValue(valueHideFilterWhenOneValue);\n\n const { isSetFilter, valueAllowedFilter, valueDefaultFilterItems, valueAllowedFilterSlider, valueHierarchicalFacetAliases } = handleFilterStates({\n data,\n valueSearchResultFacets\n });\n\n if (!(!display?.filter?.enable_on_search || valueHideFilterWhenOneValue)) {\n if (isSetFilter) setAllowedFilter(valueAllowedFilter);\n if (valueAllowedFilter?.length) {\n setDefaultFilterItems(valueDefaultFilterItems);\n setAllowedFilterSlider(valueAllowedFilterSlider);\n setHierarchicalFacetAliases(valueHierarchicalFacetAliases);\n }\n }\n\n if (layoutType === 'default') {\n setAllowedTabs(\n tabs?.map((tab: any) => {\n const { index } = tab;\n const { totalHits }: any = results?.find?.(({ indexUid }: any) => indexUid === index) || {};\n\n return {\n ...tab,\n ...{\n total: totalHits\n }\n };\n })\n );\n }\n\n callback?.({\n valueAllowedFilter\n });\n };\n\n const handleInitStates = async (data: any) => {\n const { filters, index_product, tabs, hidden_tags, show_out_of_stock, display, use_published_filter } = data;\n\n let getTabs = layoutType === 'product-filter' ? tabs.filter(({ index }: any) => index?.includes(index_product)) : tabs;\n getTabs.map((tab: any) => {\n const { index } = tab;\n\n let isSetFilter = false;\n let getFacets: any = [];\n\n if (!isSetFilter)\n filters?.map((filter: any) => {\n const { active, collections, items } = filter;\n\n if (!active) return;\n\n const newItems = items?.map(({ value, ...otherItem }: any) => (otherItem?.display === 'tree' ? HIERARCHICAL_FACET_OBJECT_ALIASES[value] || value : value));\n\n if (collectionId && collections?.includes(String(collectionId))) {\n isSetFilter = true;\n getFacets = newItems;\n } else {\n if (collections?.includes('all')) {\n isSetFilter = true;\n getFacets = newItems;\n }\n }\n });\n\n let isProductIndex = index.includes(index_product);\n let isHasProductFacets = isProductIndex && getFacets.length;\n\n if (isHasProductFacets) setFacets(getFacets);\n });\n\n const { isSetFilter, valueAllowedFilter, valueDefaultFilterItems, valueAllowedFilterSlider, valueHierarchicalFacetAliases } = handleFilterStates({\n data,\n valueSearchResultFacets: searchResultFacets\n });\n\n if (isSetFilter) setAllowedFilter(valueAllowedFilter);\n if (valueAllowedFilter?.length) {\n setDefaultFilterItems(valueDefaultFilterItems);\n setAllowedFilterSlider(valueAllowedFilterSlider);\n setHierarchicalFacetAliases(valueHierarchicalFacetAliases);\n }\n\n setIsFirstLoading(false);\n setIsLoading(false);\n\n return;\n };\n\n const handleSettings = ({ LOCAL_STORAGE_INSTANT_SEARCH_SETTING, isPreviewSettings = false }: { LOCAL_STORAGE_INSTANT_SEARCH_SETTING: any; isPreviewSettings?: boolean }) => {\n setIsLoadingSetting(true);\n\n let response: any;\n let responseGeneral: any;\n let getFirstIndex: any;\n\n response = instantSearchPreviewSettings || JSON.parse(LOCAL_STORAGE_INSTANT_SEARCH_SETTING as string);\n responseGeneral = generalPreviewSettings || JSON.parse((localStorage.getItem(LOCAL_STORAGE_KEY.GENERAL_SETTING) || null) as string);\n\n if (!response) return;\n\n setInstantSearchSettings(response);\n\n if (responseGeneral) setGeneralDataSettings(responseGeneral);\n\n const {\n active_tabs,\n allowed_sorts,\n default_sort,\n index_product,\n tabs,\n hidden_tags,\n display,\n colors,\n show_out_of_stock,\n languages,\n hierarchical_product_type,\n hierarchical_collections,\n mobile_show_selected_sort,\n sold_product_at_end,\n attributes_to_retrieve,\n collections_all_id,\n use_published_filter\n } = response;\n\n setActiveTabs(active_tabs);\n\n const { limit } = display?.search || {};\n\n let valueAllowedSorts = allowed_sorts?.length\n ? collectionId || collections_all_id\n ? allowed_sorts.map((allowed_sort: any) => {\n const { value, ...other_allowed_sort } = allowed_sort;\n\n const valueReplaced = collectionId ? String(collectionId) : String(collections_all_id);\n\n return {\n ...other_allowed_sort,\n value: String(value).replaceAll(OBJECT_DATA_STRING_KEY.COLLECTION_ID, valueReplaced)\n };\n })\n : allowed_sorts.filter((allowed_sort: any) => {\n const { value } = allowed_sort;\n\n if (!String(value).includes(OBJECT_DATA_STRING_KEY.COLLECTION_ID)) return allowed_sort;\n })\n : [];\n\n setAllowedSorts(valueAllowedSorts);\n setIndexProduct(index_product);\n setHiddenTags(hidden_tags);\n setDisplaySettings(display);\n setColorSwatches(colors);\n setDefaultSort(\n searchParams?.get(querySortBy)\n ? searchParams?.get(querySortBy)\n : collectionId\n ? String(default_sort).replaceAll(OBJECT_DATA_STRING_KEY.COLLECTION_ID, String(collectionId))\n : collections_all_id\n ? String(default_sort).replaceAll(OBJECT_DATA_STRING_KEY.COLLECTION_ID, String(collections_all_id))\n : String(default_sort).includes(OBJECT_DATA_STRING_KEY.COLLECTION_ID)\n ? valueAllowedSorts[0]?.value\n : default_sort\n );\n setDefaultLimit(instantSearchPreviewSettings ? limit : localStorage?.getItem(LOCAL_STORAGE_KEY.LIMIT_PRODUCT) || limit);\n setLanguageSettings(languages);\n setHierarchicalProductTypeSettings(hierarchical_product_type);\n setHierarchicalCollectionsSettings(hierarchical_collections);\n setMobileShowSelectedSort(mobile_show_selected_sort);\n setSoldProductAtEnd(sold_product_at_end);\n setAttributesToRetrieve(attributes_to_retrieve);\n setUsePublishedFilter(use_published_filter);\n setShowOutOfStock(show_out_of_stock);\n setTabs(tabs);\n\n getFirstIndex = tabs?.find?.(({ index }: any) => index.includes(index_product));\n\n if (Object.keys(getFirstIndex).length) {\n setClickedTabIndexId(getFirstIndex.index);\n setClickedTabIndexName(getFirstIndex.name);\n setClickedTabIndexType(getFirstIndex.type);\n }\n\n setIsLoadingSetting(false);\n\n if (isPreviewSettings) {\n let valueHideFilterWhenOneValue = display?.filter?.hide_when_one_value && totalHitsProduct <= 1;\n\n const { isSetFilter, valueAllowedFilter, valueDefaultFilterItems, valueAllowedFilterSlider, valueHierarchicalFacetAliases } = handleFilterStates({\n data: response,\n valueSearchResultFacets: searchResultFacets\n });\n\n if (!(!display?.filter?.enable_on_search || valueHideFilterWhenOneValue)) {\n if (isSetFilter) setAllowedFilter(valueAllowedFilter);\n if (valueAllowedFilter?.length) {\n setDefaultFilterItems(valueDefaultFilterItems);\n setAllowedFilterSlider(valueAllowedFilterSlider);\n setHierarchicalFacetAliases(valueHierarchicalFacetAliases);\n }\n }\n\n setAllowedTabs(\n allowedTabs\n\n ?.map?.((allowedTab: any) => {\n const { name, type } = allowedTab;\n\n if (!active_tabs?.[type]) return;\n\n const newName = tabs?.find?.((tab: any) => tab?.type === type)?.name || name;\n\n return {\n ...allowedTab,\n\n ...{\n name: newName\n }\n };\n })\n\n ?.filter?.((item: any) => item)\n );\n }\n };\n\n const handleChangeKeyword = React.useCallback((value: string) => {\n const searchParams = new URLSearchParams(document.location.search);\n\n searchParams.set(queryKeyword, value);\n\n setKeyword(value);\n\n if (!objectPresent(previewSettings)) window.history.pushState(null, '', `${document.location.pathname}?${searchParams.toString()}`);\n }, []);\n\n const initStates = () => {\n const INSTANT_SEARCH_SETTING = instantSearchPreviewSettings || JSON.parse((localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || null) as string);\n if (INSTANT_SEARCH_SETTING) handleInitStates(INSTANT_SEARCH_SETTING);\n };\n\n useEffectOnChange(() => {\n handleSettings({\n LOCAL_STORAGE_INSTANT_SEARCH_SETTING: localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || null,\n isPreviewSettings: true\n });\n }, [previewSettings]);\n\n useEffectCallback(() => {\n if (!isRenderAppInstantSearch) return;\n\n initStates();\n handleSettings({\n LOCAL_STORAGE_INSTANT_SEARCH_SETTING: localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || null\n });\n\n if (typeof window !== 'undefined') {\n if (layoutType === 'default') {\n if (window?.sledge?.instantSearch?.searchResult)\n window.sledge.instantSearch.searchResult.search = (keyword = '') => {\n handleChangeKeyword?.(keyword);\n };\n } else {\n if (window?.sledge?.instantSearch?.productFilter)\n window.sledge.instantSearch.productFilter.search = (keyword = '') => {\n handleChangeKeyword?.(keyword);\n };\n }\n }\n }, [isRenderAppInstantSearch]);\n\n useEffectCallback(() => {\n if (!valueRenderInstantSearchResult) return;\n\n if (triggerRenderInstantSearchResult) triggerRenderInstantSearchResult('');\n\n setKeyword(valueRenderInstantSearchResult);\n }, [valueRenderInstantSearchResult]);\n\n useEffectOnChange(() => {\n initStates();\n }, [debouncedKeyword]);\n\n // Skeleton Components\n const filterHorizontalSkeletonComponent = (\n <div className=\"sledge-instant-search__result-filter-horizontal-skeleton\">\n {[1, 2, 3, 4, 5, 6, 7].map((index: number) => (\n <SkeletonLoading.Item width=\"106px\" height=\"42px\" rounded=\"md\" color=\"lighten\" key={index} />\n ))}\n </div>\n );\n\n const tabSkeleton =\n layoutType === 'default' ? (\n <div className=\"sledge-instant-search__result-tab-list sledge-instant-search__result-tab-list-skeleton\">\n {[1, 2, 3, 4, 5].map((index: number) => (\n <SkeletonLoading.Item width=\"122px\" height=\"28px\" rounded=\"md\" color=\"lighten\" key={index} />\n ))}\n </div>\n ) : null;\n\n const filterHorizontalSkeleton =\n displaySettings?.filter?.enable_on_search && displaySettings?.filter?.layout === 'horizontal' && !hideFilterWhenOneValue ? filterHorizontalSkeletonComponent : null;\n\n const filterVerticalSkeleton =\n displaySettings?.filter?.enable_on_search && displaySettings?.filter?.layout === 'vertical' && !hideFilterWhenOneValue ? (\n <>\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: '8px',\n justifyContent: 'space-between',\n marginBottom: '23px'\n }}\n >\n <SkeletonLoading.Item width=\"117px\" height=\"28px\" color=\"lighten\" rounded=\"md\" />\n <SkeletonLoading.Item width=\"80px\" height=\"28px\" color=\"lighten\" rounded=\"md\" />\n </div>\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '18px'\n }}\n />\n {[1, 2, 3].map((index: number) => (\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n key={index}\n style={{\n maxWidth: '163px',\n marginBottom: '9px'\n }}\n />\n ))}\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '163px',\n marginBottom: '18px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '14px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '163px',\n marginBottom: '9px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '163px',\n marginBottom: '17px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '38px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '35px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '12px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '163px',\n marginBottom: '9px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '163px',\n marginBottom: '20px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '12px'\n }}\n />\n {[1, 2, 3].map((index: number) => (\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n key={index}\n style={{\n maxWidth: '163px',\n marginBottom: '9px'\n }}\n />\n ))}\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '11px'\n }}\n />\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: '12px'\n }}\n >\n {[1, 2, 3, 4, 5, 6, 7, 8, 9].map((index: number) => (\n <SkeletonLoading.Item width=\"34px\" height=\"34px\" color=\"lighten\" rounded=\"full\" key={index} />\n ))}\n </div>\n </>\n ) : null;\n\n const productGridSkeleton = (\n <>\n {displaySettings?.filter?.show_total_products && displaySettings?.filter?.layout === 'vertical' ? (\n <div className=\"sledge__hide-element-lg-on-mobile\">\n <SkeletonLoading.Item\n width=\"117px\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n marginBottom: '21px'\n }}\n />\n </div>\n ) : null}\n <SkeletonLoading.ProductGrid count={12} type=\"large\" currentColumnGrid={currentColumnGrid} />\n </>\n );\n\n const summaryTextSkeleton = (\n <div className=\"sledge-instant-search__result-data-summary sledge-instant-search__result-data-summary-filter-horizontal\">\n <SkeletonLoading.Item width=\"117px\" height=\"28px\" color=\"lighten\" rounded=\"md\" />\n </div>\n );\n\n const searchFieldSkeletonComponent = <SkeletonLoading.Item width=\"100%\" height=\"42px\" color=\"lighten\" rounded=\"lg\" className=\"sledge-instant-search__result-data-keyword-form\" />;\n\n const selectOptionSkeletonComponent = (\n <div className=\"sledge-instant-search__result-data-summary-item sledge-instant-search__result-data-summary-select-field\">\n <div className=\"sledge-instant-search__result-data-summary-select-field-item\">\n <SkeletonLoading.Item width=\"150px\" height=\"42px\" color=\"lighten\" rounded=\"lg\" />\n </div>\n <div className=\"sledge-instant-search__result-data-summary-select-field-item\">\n <SkeletonLoading.Item width=\"150px\" height=\"42px\" color=\"lighten\" rounded=\"lg\" />\n </div>\n </div>\n );\n\n const searchAndSelectOptionSkeleton = (\n <div className=\"sledge-instant-search__result-data-keyword\">\n {displaySettings?.filter?.show_total_products && displaySettings?.filter?.layout === 'horizontal' ? summaryTextSkeleton : null}\n {searchFieldSkeletonComponent}\n {selectOptionSkeletonComponent}\n </div>\n );\n\n const mobileFilterWithSearchAndSelectOptionSkeleton = (\n <div className=\"sledge__hide-element-mobile-on-lg sledge-instant-search__mobile-filter-search-skeleton\">\n <div className=\"sledge-instant-search__result-data-keyword\">\n {displaySettings?.filter?.show_total_products && displaySettings?.filter?.layout === 'horizontal' ? summaryTextSkeleton : null}\n {searchFieldSkeletonComponent}\n {filterHorizontalSkeletonComponent}\n {selectOptionSkeletonComponent}\n </div>\n </div>\n );\n\n const containerStyle = {\n maxWidth: width\n };\n\n const alertFirstSyncComponent =\n !isFirstLoading && !totalHitsProduct && instantSearchSettings?.first_sync ? (\n <Alert className=\"sledge-instant-search__alert-first-sync-product\" type=\"info\" icon={<InfoCircleIcon width={24} height={24} color=\"#003a5a\" />}>\n <div>Products and Collections indexing is in progress. Product Filter and Instant Search widgets may appear empty during this process.</div>\n <p></p>\n <div>The products and collections will become visible in the widgets once indexing is complete.</div>\n </Alert>\n ) : null;\n\n return (\n <div className=\"sledge-instant-search__result-container\" ref={searchResultContainerRef} style={containerStyle}>\n {alertFirstSyncComponent}\n\n {isFirstLoading ? (\n tabSkeleton\n ) : layoutType === 'default' && allowedTabs?.length ? (\n <Tab\n items={instantSearchPreviewSettings ? allowedTabs?.map?.((allowedTab: any) => (activeTabs?.[allowedTab?.type] ? allowedTab : null))?.filter?.((item: any) => item) : allowedTabs}\n layoutType={layoutType}\n clickedTabIndexId={clickedTabIndexId}\n handleChangeTab={handleChangeTabIndex}\n />\n ) : (\n tabSkeleton\n )}\n\n {isFirstLoading && layoutType?.length && !propsData ? (\n <>\n {mobileFilterWithSearchAndSelectOptionSkeleton}\n <div className=\"sledge__hide-element-lg-on-mobile\">{filterHorizontalSkeleton}</div>\n <div className=\"sledge-instant-search__result-wrapper sledge-instant-search__result-wrapper-skeleton\">\n {displaySettings?.filter?.enable_on_search && displaySettings?.filter?.layout === 'vertical' && !hideFilterWhenOneValue ? (\n <div className=\"sledge-instant-search__result-filter sledge__hide-element-lg-on-mobile\">{filterVerticalSkeleton}</div>\n ) : null}\n <div className=\"sledge-instant-search__result-data\">\n <div className=\"sledge__hide-element-lg-on-mobile\">{searchAndSelectOptionSkeleton}</div>\n\n {productGridSkeleton}\n </div>\n </div>\n </>\n ) : (\n React.cloneElement(resultComponent, {\n layoutType,\n isFirstLoading,\n keyword,\n debouncedKeyword,\n clickedTabIndexId,\n clickedTabIndexName,\n clickedTabIndexType,\n isLoadingSetting,\n allowedSorts,\n allowedFilter,\n facets,\n defaultFacetStats,\n hideFilterWhenOneValue,\n hiddenTags,\n displaySettings,\n colorSwatches,\n defaultSort,\n defaultLimit,\n languageSettings,\n hierarchicalProductTypeSettings,\n hierarchicalCollectionsSettings,\n query,\n params,\n isJsVersion,\n productCardsComponent,\n collectionCardsComponent,\n pageCardsComponent,\n blogCardsComponent,\n articleCardsComponent,\n onAfterAddToCart,\n onAfterAddWishlist,\n onAfterRemoveWishlist,\n onAfterRenderProduct,\n onAfterRenderCollection,\n onAfterRenderPage,\n onAfterRenderBlog,\n onAfterRenderArticle,\n setIsLoading,\n setKeyword,\n filterHorizontalSkeleton,\n filterHorizontalSkeletonComponent,\n filterVerticalSkeleton,\n productGridSkeleton,\n searchAndSelectOptionSkeleton,\n summaryTextSkeleton,\n searchFieldSkeletonComponent,\n selectOptionSkeletonComponent,\n searchResultContainerRef,\n data: propsData,\n settings,\n isReplaceWidgetList,\n setIsReplaceWidgetList,\n searchResultFacets,\n handleChangeKeyword,\n generalDataSettings,\n searchParams,\n setSeparatedFilterItem,\n separatedFilterItem,\n clickedFacets,\n setClickedFacets,\n parentPreviousState: previousState,\n clickedOpenFilterHorizontalId,\n setClickedOpenFilterHorizontalId,\n clickedOpenFilterHorizontalMobileId,\n setClickedOpenFilterHorizontalMobileId,\n defaultFilterItems,\n mobileShowSelectedSort,\n soldProductAtEnd,\n attributesToRetrieve,\n allowedFilterSlider,\n hierarchicalFacetAliases,\n usePublishedFilter,\n showOutOfStock,\n handleSetInitStates,\n querySortBy,\n queryPage,\n queryLimit,\n valueFilterPriceChange,\n setValueFilterPriceChange,\n valueFilterOnSaleChange,\n setValueFilterOnSaleChange,\n valueFilterSliderOthers,\n setValueFilterSliderOthers,\n tabs,\n initStatesFirstTime,\n setInitStatesFirstTime,\n allowedTabs,\n setAllowedTabs,\n isDesktopLayout,\n previewSettings,\n currentColumnGrid,\n setCurrentColumnGrid\n })\n )}\n </div>\n );\n};\n\nconst ResultProduct = React.memo((props: IResultProps) => {\n const {\n layoutType,\n keyword,\n clickedTabIndexId,\n clickedTabIndexType,\n isLoadingSetting,\n allowedSorts,\n allowedFilter,\n facets,\n defaultFacetStats,\n hideFilterWhenOneValue,\n hiddenTags,\n displaySettings,\n colorSwatches,\n defaultSort,\n defaultLimit,\n languageSettings,\n hierarchicalProductTypeSettings,\n hierarchicalCollectionsSettings,\n query,\n params,\n isJsVersion,\n productCardsComponent,\n filterHorizontalSkeleton,\n filterHorizontalSkeletonComponent,\n filterVerticalSkeleton,\n productGridSkeleton,\n searchAndSelectOptionSkeleton,\n summaryTextSkeleton,\n searchFieldSkeletonComponent,\n selectOptionSkeletonComponent,\n onAfterAddToCart,\n onAfterAddWishlist,\n onAfterRemoveWishlist,\n onAfterRenderProduct,\n searchResultContainerRef,\n data: propsData,\n settings,\n isReplaceWidgetList,\n setIsReplaceWidgetList,\n searchResultFacets,\n handleChangeKeyword,\n generalDataSettings,\n searchParams,\n setSeparatedFilterItem,\n separatedFilterItem,\n clickedFacets,\n setClickedFacets,\n parentPreviousState,\n clickedOpenFilterHorizontalId,\n setClickedOpenFilterHorizontalId,\n clickedOpenFilterHorizontalMobileId,\n setClickedOpenFilterHorizontalMobileId,\n isFirstLoading,\n defaultFilterItems,\n mobileShowSelectedSort,\n soldProductAtEnd,\n attributesToRetrieve,\n allowedFilterSlider,\n hierarchicalFacetAliases,\n showOutOfStock,\n handleSetInitStates,\n querySortBy = '',\n queryPage = '',\n queryLimit = '',\n valueFilterPriceChange,\n setValueFilterPriceChange,\n valueFilterOnSaleChange,\n setValueFilterOnSaleChange,\n valueFilterSliderOthers,\n setValueFilterSliderOthers,\n usePublishedFilter,\n tabs,\n initStatesFirstTime,\n setInitStatesFirstTime,\n allowedTabs,\n setAllowedTabs,\n isDesktopLayout,\n previewSettings,\n currentColumnGrid,\n setCurrentColumnGrid\n } = props || {};\n\n const { collectionId, collectionName } = params || {};\n\n const isLoadMore = ['load_more', 'infinite_scroll'].includes(displaySettings?.search?.pagination_type);\n\n const [isLoadingProduct, setIsLoadingProduct] = React.useState(!propsData);\n const [isLoading, setIsLoading] = React.useState(!propsData);\n const [clickedSortId, setClickedSortId] = React.useState<string>(defaultSort || '');\n const [clickedLimitId, setClickedLimitId] = React.useState(Number(searchParams?.get(queryLimit) || defaultLimit || DEFAULT_LIMIT_VALUE[0]));\n const [clickedOpenFilters, setClickedOpenFilters] = React.useState<any>(\n keyOpenFilters({\n items: allowedFilter\n })\n );\n const [triggerClickedFacets, setTriggerClickedFacets] = React.useState(false);\n const [searchResult, setSearchResult] = React.useState<any[]>(propsData?.result?.results?.[0]?.hits || []);\n const [searchProcessingTimeMs, setSearchProcessingTimeMs] = React.useState<string | number>(0);\n const [currentPage, setCurrentPage] = React.useState(Number(searchParams?.get(queryPage)) && !isLoadMore ? Number(searchParams?.get(queryPage)) : 1);\n const [totalPage, setTotalPage] = React.useState(0);\n const [totalSearchResult, setTotalSearchResult] = React.useState(propsData?.result?.results?.[0]?.totalHits || 0);\n const [handleSearchResultFirstTime, setHandleSearchResultFirstTime] = React.useState(true);\n const [searchFacetDistribution, setSearchFacetDistribution] = React.useState<any>({});\n const [isLoadingButtonLoadMore, setIsLoadingButtonLoadMore] = React.useState(false);\n const [openFilterFlyoutMobile, setOpenFilterFlyoutMobile] = React.useState(false);\n const [openFilterFlyout, setOpenFilterFlyout] = React.useState(false);\n const [openFilterToggle, setOpenFilterToggle] = React.useState(false);\n\n const {\n sort_by: language_sort_by,\n result: language_result,\n search_form_placeholder: language_search_form_placeholder,\n limit: language_limit,\n add_to_cart: language_add_to_cart,\n filter: language_filter,\n clear_filter: language_clear_filter,\n pagination_info: language_pagination_info,\n total_result_text: language_total_result_text\n } = languageSettings || {};\n\n const { separator: hierarchical_separator, hiddens: hierarchical_hiddens } = hierarchicalProductTypeSettings || {};\n const {\n separator: hierarchical_collections_separator,\n hiddens: hierarchical_collections_hiddens,\n hidden_ids: hierarchical_collections_hidden_ids,\n structure: hierarchical_collections_structure\n } = hierarchicalCollectionsSettings || {};\n const { money_format } = generalDataSettings || {};\n const { button_load_more, button_loading, mobile_sort_placeholder } = generalDataSettings?.languages || {};\n\n const summaryTextGenerator = (totalResult: number) => {\n const defaultSummaryText: any = (\n <>\n {totalResult} {language_result || 'result'}{' '}\n {keyword?.length ? (\n <>\n for <span className=\"sledge-instant-search__result-data-summary-text-keyword\">\"{keyword}\"</span>\n </>\n ) : null}\n </>\n );\n\n let getSummaryText = language_total_result_text[layoutType === 'product-filter' && !keyword?.length ? 'product_filter' : 'product'];\n let isSummaryTextFromLanguage = language_total_result_text && getSummaryText;\n\n if (isSummaryTextFromLanguage) {\n getSummaryText = getSummaryText.replaceAll(OBJECT_DATA_STRING_KEY.TOTAL_RESULT, totalResult);\n\n if (layoutType === 'product-filter') getSummaryText = getSummaryText.replaceAll(OBJECT_DATA_STRING_KEY.COLLECTION_NAME, collectionName || 'Products');\n }\n\n return (\n <>\n {isSummaryTextFromLanguage ? (\n <span className=\"sledge-instant-search__result-data-summary-text\" dangerouslySetInnerHTML={{ __html: getSummaryText }}></span>\n ) : (\n <span className=\"sledge-instant-search__result-data-summary-text\">{defaultSummaryText}</span>\n )}\n </>\n );\n };\n\n const [summaryText, setSummaryText] = React.useState<React.ReactNode>(propsData ? summaryTextGenerator(totalSearchResult) : null);\n\n const previousState: any = usePrevious({ clickedLimitId, clickedSortId, clickedFacets, clickedTabIndexId });\n\n const { color: filter_title_color, font_size: filter_title_font_size, font_weight: filter_title_font_weight, text_transform: filter_title_text_transform } = displaySettings?.filter?.title || {};\n const {\n color: filter_option_color,\n font_size: filter_option_font_size,\n font_weight: filter_option_font_weight,\n text_transform: filter_option_text_transform\n } = displaySettings?.filter?.option || {};\n const {\n text_color: filter_button_text_color,\n border_color: filter_button_border_color,\n border_radius: filter_button_border_radius,\n padding_top: filter_button_padding_top,\n padding_bottom: filter_button_padding_bottom,\n padding_left: filter_button_padding_left,\n padding_right: filter_button_padding_right,\n background_color: filter_button_background_color,\n font_size: filter_button_font_size,\n font_weight: filter_button_font_weight,\n text_transform: filter_button_text_transform\n } = displaySettings?.filter?.button || {};\n\n const filter_title_style = {\n ...(filter_title_color && { color: filter_title_color }),\n ...(filter_title_font_size && { fontSize: filter_title_font_size }),\n ...(filter_title_font_weight && { fontWeight: filter_title_font_weight }),\n ...(filter_title_text_transform && { textTransform: filter_title_text_transform })\n };\n\n const filter_option_style = {\n ...(filter_option_color && { color: filter_option_color }),\n ...(filter_option_font_size && { fontSize: filter_option_font_size }),\n ...(filter_option_font_weight && { fontWeight: filter_option_font_weight }),\n ...(filter_option_text_transform && { textTransform: filter_option_text_transform })\n };\n\n const filter_button_style = {\n ...(filter_button_text_color && { color: filter_button_text_color }),\n ...(filter_button_border_color && { borderColor: filter_button_border_color }),\n ...(filter_button_border_radius && { borderRadius: filter_button_border_radius }),\n ...(filter_button_padding_top && { paddingTop: filter_button_padding_top }),\n ...(filter_button_padding_bottom && { paddingBottom: filter_button_padding_bottom }),\n ...(filter_button_padding_left && { paddingLeft: filter_button_padding_left }),\n ...(filter_button_padding_right && { paddingRight: filter_button_padding_right }),\n ...(filter_button_background_color && { backgroundColor: filter_button_background_color }),\n ...(filter_button_font_size && { fontSize: filter_button_font_size }),\n ...(filter_button_font_weight && { fontWeight: filter_button_font_weight }),\n ...(filter_button_text_transform && { textTransform: filter_button_text_transform })\n };\n\n const isVisibleLoadMore = totalPage === currentPage && !isLoadingButtonLoadMore ? false : totalPage >= currentPage;\n\n const handleQueryStringFilter = (valueClickedFacets: any) => {\n const searchParams = new URLSearchParams(document.location.search);\n const searchParamsObject = Object.fromEntries(searchParams);\n\n let otherQueryStringObject: any = {};\n for (const searchParamsKey in searchParamsObject) {\n let ifOtherQueryStringObject = facets?.length && !facets.includes(searchParamsKey);\n\n if (ifOtherQueryStringObject) otherQueryStringObject[searchParamsKey] = searchParamsObject[searchParamsKey];\n }\n\n let facetQueryStringObject: any = {};\n for (const valueClickedFacetsKey in valueClickedFacets) {\n if (valueClickedFacets[valueClickedFacetsKey]?.length) otherQueryStringObject[valueClickedFacetsKey] = valueClickedFacets[valueClickedFacetsKey];\n }\n\n const newQueryString = new URLSearchParams({\n ...otherQueryStringObject,\n ...facetQueryStringObject\n }).toString();\n\n if (!objectPresent(previewSettings)) window.history.pushState(null, '', `${document.location.pathname}${newQueryString?.length ? `?${newQueryString}` : ''}`);\n };\n\n const handleChangeSort = React.useCallback((value: string) => {\n const searchParams = new URLSearchParams(document.location.search);\n\n searchParams.set(querySortBy, value);\n\n setClickedSortId(value);\n\n if (!objectPresent(previewSettings)) window.history.pushState(null, '', `${document.location.pathname}?${searchParams.toString()}`);\n }, []);\n\n const handleChangeLimit = React.useCallback((value: string) => {\n const searchParams = new URLSearchParams(document.location.search);\n\n searchParams.set(queryLimit, String(value));\n\n setClickedLimitId(Number(value));\n\n localStorage?.setItem(LOCAL_STORAGE_KEY.LIMIT_PRODUCT, value);\n\n if (!objectPresent(previewSettings)) window.history.pushState(null, '', `${document.location.pathname}?${searchParams.toString()}`);\n }, []);\n\n const handleOpenFilterVertical = React.useCallback(\n (id: string | number) => {\n let valueClickedOpenFilters: any[] = clickedOpenFilters;\n if (valueClickedOpenFilters.includes(id)) {\n const findIndex = valueClickedOpenFilters.indexOf(id);\n if (findIndex > -1) valueClickedOpenFilters.splice(findIndex, 1);\n } else {\n valueClickedOpenFilters.push(id);\n }\n\n setClickedOpenFilters(valueClickedOpenFilters);\n setTimeout(() => {\n setSeparatedFilterItem?.((old: any) => {\n const fixState = {\n ...old,\n [id]: null\n };\n\n return fixState;\n });\n }, 100);\n },\n [clickedOpenFilters]\n );\n\n const handleFilterReset = React.useCallback(() => {\n setClickedFacets?.({});\n setTriggerClickedFacets(!triggerClickedFacets);\n handleQueryStringFilter({});\n setValueFilterPriceChange?.([]);\n setValueFilterOnSaleChange?.([]);\n setValueFilterSliderOthers?.({});\n }, [triggerClickedFacets]);\n\n const handleFilterChange = React.useCallback(\n ({ parentId, value, force = false }: { parentId: string; value: any; force?: boolean }) => {\n let facets: any = [value];\n let isRange = allowedFilterSlider?.includes(parentId);\n let isHierarchical = hierarchicalFacetAliases?.includes(parentId);\n\n if (clickedFacets) {\n if (force) {\n facets = [value];\n } else {\n if (clickedFacets[parentId]?.includes(value)) {\n facets = clickedFacets[parentId].filter((facet: any) => facet !== value);\n\n // Uncheck facet children from parent\n if (isHierarchical) facets = facets.filter((facet: any) => !facet.startsWith(value));\n } else {\n if (isRange) {\n if ((clickedFacets[parentId], clickedFacets[parentId] === value)) {\n facets = [];\n\n if (parentId === 'variants.price') {\n setValueFilterPriceChange?.([]);\n } else if (parentId === 'variants.sale_percent') {\n setValueFilterOnSaleChange?.([]);\n } else {\n setValueFilterSliderOthers?.((prevState: any) => ({ ...prevState, [parentId]: [] }));\n }\n } else {\n facets = value?.length === 1 ? [...value, ...value] : value;\n }\n } else {\n facets = clickedFacets[parentId] ? [...clickedFacets[parentId], value] : [value];\n }\n }\n }\n }\n\n let valueClickedFacets = {\n ...clickedFacets,\n ...{\n [parentId]: facets\n }\n };\n\n let handleQueryStringFilterProp = valueClickedFacets;\n\n // Hide the additional filter in query param\n if (Object.hasOwn(handleQueryStringFilterProp, 'variants.inventory_quantity')) delete handleQueryStringFilterProp?.['variants.inventory_quantity'];\n\n handleQueryStringFilter(handleQueryStringFilterProp);\n\n setClickedFacets?.(valueClickedFacets);\n setTriggerClickedFacets(!triggerClickedFacets);\n },\n [allowedFilterSlider, hierarchicalFacetAliases, clickedFacets, triggerClickedFacets]\n );\n\n const handleDataClickedFacets = () => {\n let dataClickedFacets: any[] = [];\n Object.entries(clickedFacets).map((facet: any) => {\n if (facet?.length && facet[1].length) {\n let getName = facet[0];\n let isAdditionalFilter = ['variants.inventory_quantity'].includes(getName);\n\n if (isAdditionalFilter) return;\n\n let isRange = allowedFilterSlider?.includes(getName);\n let getAllowedFilterOne: any = allowedFilter?.filter(({ value }: any) => value?.includes(getName));\n let getLabel = getAllowedFilterOne?.length ? getAllowedFilterOne[0].label : getName;\n\n let items =\n Array.isArray(facet[1]) && facet[1]?.length > 1\n ? isRange\n ? dataClickedFacets.push({\n label: getLabel,\n name: getName,\n value: facet[1]\n })\n : facet[1]?.map((item: any) => {\n dataClickedFacets.push({\n label: getLabel,\n name: getName,\n value: item\n });\n })\n : dataClickedFacets.push({\n label: getLabel,\n name: getName,\n value: facet[1][0]\n });\n\n return items;\n }\n });\n\n return dataClickedFacets;\n };\n\n const handleSearchResultData = (props: { isLoadMore?: boolean; isReplaceData?: boolean; result?: any; onSearch?: boolean }) => {\n const { isLoadMore = false, result: resultProp, onSearch } = props;\n\n const INSTANT_SEARCH_SETTING = JSON.parse((localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || null) as string);\n const { index_product } = INSTANT_SEARCH_SETTING || {};\n\n const isNoneFacetSelected = Boolean(!handleDataClickedFacets()?.length);\n const isFirstTimeOrOnSearch = (handleSearchResultFirstTime && initStatesFirstTime) || onSearch;\n const resultData = layoutType === 'default' && isFirstTimeOrOnSearch ? resultProp?.results : resultProp;\n const result = layoutType === 'default' && isFirstTimeOrOnSearch ? resultData?.find?.(({ indexUid }: any) => indexUid.includes(index_product)) : resultData;\n\n if (!result) return;\n\n const { hits, processingTimeMs, totalHits, totalPages, facetDistribution } = result;\n\n const updateTabs = () => {\n if (allowedTabs?.length) {\n setAllowedTabs?.(\n allowedTabs.map((tab: any) => {\n const { index, total } = tab;\n\n let isCurrentIndex = index.includes(clickedTabIndexId);\n let tabTotal = isCurrentIndex ? totalHits : total;\n if (layoutType === 'default' && resultProp?.results?.length) {\n const { totalHits } = resultProp?.results?.find?.(({ indexUid }: any) => indexUid.includes(index));\n tabTotal = totalHits || tabTotal;\n }\n\n return {\n ...tab,\n ...{\n total: tabTotal\n }\n };\n })\n );\n }\n };\n\n if (isFirstTimeOrOnSearch || isNoneFacetSelected) {\n handleSetInitStates?.({\n results: resultData,\n data: INSTANT_SEARCH_SETTING,\n callback: ({ valueAllowedFilter }) => {\n if (handleSearchResultFirstTime || (onSearch && !clickedOpenFilters?.length)) {\n setClickedOpenFilters(\n keyOpenFilters({\n items: valueAllowedFilter\n })\n );\n }\n },\n isUpdateFilter: Boolean(!isFirstTimeOrOnSearch && isNoneFacetSelected)\n });\n\n if (isNoneFacetSelected) updateTabs();\n } else {\n updateTabs();\n }\n\n if (onSearch && keyword?.length) {\n searchTrigger({\n keyword: keyword,\n resultCount: totalHits || 0\n });\n }\n\n setIsLoading(false);\n setIsLoadingProduct(false);\n setIsLoadingButtonLoadMore(false);\n setIsReplaceWidgetList?.(false);\n setSearchResult(!hits?.length ? [] : (prevState: any) => (searchResult?.length && isLoadMore ? [...prevState, ...hits] : hits));\n setSearchProcessingTimeMs(processingTimeMs || 0);\n setTotalPage(totalPages);\n setTotalSearchResult(totalHits || 0);\n setSummaryText(summaryTextGenerator(totalHits));\n setSearchFacetDistribution(facetDistribution);\n };\n\n const handleSearchResult = async (props: { isLoadMore?: boolean; isReplaceData?: boolean; onSearch?: boolean }) => {\n if (!clickedTabIndexId) return;\n\n const { isLoadMore = false, isReplaceData = false, onSearch } = props;\n\n if (isReplaceData) {\n setCurrentPage(1);\n setSearchResult([]);\n\n const searchParams = new URLSearchParams(document.location.search);\n\n searchParams.set(queryPage, String(1));\n searchParams.set(queryLimit, String(clickedLimitId));\n\n if (!objectPresent(previewSettings)) window.history.pushState(null, '', `${document.location.pathname}?${searchParams.toString()}`);\n }\n\n setIsLoading(isReplaceData ? true : !isLoadMore);\n\n let response: any;\n let sort = soldProductAtEnd ? ['availability:asc'] : [];\n if (clickedSortId) sort.push(clickedSortId);\n\n if (propsData && handleSearchResultFirstTime) {\n response = propsData?.result?.results?.[0];\n } else {\n response = await handleSearchResponse({\n layoutType,\n clickedTabIndexId,\n clickedTabIndexType,\n keyword,\n sort,\n page: isReplaceData ? 1 : currentPage,\n limit: clickedLimitId,\n isUseMultiSearch: (handleSearchResultFirstTime && initStatesFirstTime) || onSearch,\n facets,\n attributesToRetrieve,\n clickedFacets,\n setClickedFacets,\n allowedFilterSlider,\n hierarchicalFacetAliases,\n defaultFilterItems,\n setValueFilterPriceChange,\n setValueFilterOnSaleChange,\n setValueFilterSliderOthers,\n collectionId,\n hiddenTags,\n showOutOfStock,\n hierarchicalProductTypeSettings,\n hierarchicalCollectionsSettings,\n usePublishedFilter,\n tabs\n });\n }\n\n setHandleSearchResultFirstTime(false);\n setInitStatesFirstTime?.(false);\n\n handleSearchResultData({\n result: response,\n ...props\n });\n };\n\n const handlePageChange = (page: number) => {\n const searchParams = new URLSearchParams(document.location.search);\n\n searchParams.set(queryPage, String(page));\n searchParams.set(queryLimit, String(clickedLimitId));\n\n setCurrentPage(page);\n setIsReplaceWidgetList?.(true);\n\n setTimeout(() => {\n scrollToElement({\n element: searchResultContainerRef.current,\n headerOffset: 50\n });\n }, 200);\n\n if (!objectPresent(previewSettings)) window.history.pushState(null, '', `${document.location.pathname}?${searchParams.toString()}`);\n };\n\n React.useEffect(() => {\n if (typeof window !== 'undefined') {\n if (layoutType === 'default') {\n if (window?.sledge?.instantSearch?.searchResult)\n window.sledge.instantSearch.searchResult.filter = () => {\n setTriggerClickedFacets(!triggerClickedFacets);\n\n // Reset to first page\n setCurrentPage(1);\n };\n } else {\n if (window?.sledge?.instantSearch?.productFilter)\n window.sledge.instantSearch.productFilter.filter = () => {\n setTriggerClickedFacets(!triggerClickedFacets);\n\n // Reset to first page\n setCurrentPage(1);\n };\n }\n }\n\n let isKeywordChanged = Boolean(parentPreviousState && parentPreviousState.keyword !== keyword);\n let isReplaceData = Boolean(\n (previousState && (previousState?.clickedLimitId !== clickedLimitId || previousState?.clickedSortId !== clickedSortId || previousState?.clickedFacets !== clickedFacets)) ||\n isKeywordChanged\n );\n\n if (isKeywordChanged) {\n const delayDebounceFn = setTimeout(() => {\n handleSearchResult({\n isReplaceData: true,\n onSearch: true\n });\n }, 500);\n return () => clearTimeout(delayDebounceFn);\n } else {\n handleSearchResult({\n isReplaceData\n });\n }\n }, [clickedSortId, clickedLimitId, triggerClickedFacets, keyword, collectionId]);\n\n React.useEffect(() => {\n let isReplaceData = Boolean(previousState && previousState?.clickedTabIndexId !== clickedTabIndexId);\n\n if (isReplaceWidgetList || isReplaceData) {\n handleSearchResult({\n isReplaceData: isLoadMore ? false : isReplaceData,\n isLoadMore\n });\n }\n }, [isReplaceWidgetList, clickedTabIndexId]);\n\n let dataClickedFacets: any[] = handleDataClickedFacets();\n\n let keepCounterFacets: any[] = [];\n allowedFilter?.map((filter) => {\n if (filter?.settings?.keep_counter) keepCounterFacets.push(filter?.value);\n });\n\n const filterSettings = ({\n filter,\n scrollElementSelector\n }: {\n filter: {\n value: any;\n label: string;\n display: string;\n indexFilter: number;\n };\n scrollElementSelector?: string;\n }): { isRender: boolean; classesUlElement: string[]; getFacetComponent: any; isLastIndex: boolean } => {\n const { value, display, indexFilter } = filter;\n\n const isDisplaySlider = ['slider', 'input_range', 'slider_with_input_range'].includes(display.toLowerCase());\n\n let items =\n display.toLowerCase() === 'tree'\n ? createHierarchicalFacet({\n indexValue: value,\n filter,\n searchResultFacets,\n separator: hierarchical_separator,\n separatorCollection: hierarchical_collections_separator,\n clickedFacetsObject: clickedFacets,\n hiddens: hierarchical_hiddens,\n hiddensCollection: hierarchical_collections_hiddens,\n displaySettings,\n searchFacetDistribution,\n hierarchicalFacetAliases,\n hierarchicalCollectionsSettings\n })\n : searchResultFacets[value];\n\n let isRender = Boolean(\n isDisplaySlider\n ? items\n : Number(\n handleFacetValues({\n filter,\n languageSettings,\n clickedFacets,\n searchFacetDistribution,\n displaySettings,\n settings,\n items,\n allowedFilterSlider\n })?.length\n )\n );\n if (isDisplaySlider) {\n let defaultItemSlider = defaultFacetStats?.[value] && Object.keys(defaultFacetStats[value]).length ? defaultFacetStats[value] : {};\n\n let valueFilterSliderChange: any = [];\n if (value === 'variants.price') {\n valueFilterSliderChange = valueFilterPriceChange;\n } else if (value === 'variants.sale_percent') {\n valueFilterSliderChange = valueFilterOnSaleChange;\n } else {\n valueFilterSliderChange = valueFilterSliderOthers?.[value];\n }\n\n let defaultValueMin = valueFilterSliderChange?.[0] || defaultItemSlider?.min;\n let defaultValueMax = valueFilterSliderChange?.[1] || defaultItemSlider?.max;\n\n isRender = !defaultValueMin && !defaultValueMax ? false : true;\n }\n\n let classesUlElement = ['sledge-instant-search__result-filter-item-list'];\n\n const getFacetComponent = (props?: { ulClasses?: string }) => {\n const { ulClasses = '' } = props || {};\n\n return (\n <Facet\n filter={{\n ...filter,\n items\n }}\n isFirstLoading={isFirstLoading}\n displaySettings={displaySettings}\n generalDataSettings={generalDataSettings}\n settings={settings}\n searchFacetDistribution={searchFacetDistribution}\n clickedFacets={clickedFacets}\n setClickedFacets={setClickedFacets}\n handleFilterChange={handleFilterChange}\n defaultFacetStats={defaultFacetStats}\n valueFilterPriceChange={valueFilterPriceChange}\n setValueFilterPriceChange={setValueFilterPriceChange}\n valueFilterOnSaleChange={valueFilterOnSaleChange}\n setValueFilterOnSaleChange={setValueFilterOnSaleChange}\n valueFilterSliderOthers={valueFilterSliderOthers}\n setValueFilterSliderOthers={setValueFilterSliderOthers}\n separatedFilterItem={separatedFilterItem}\n setSeparatedFilterItem={setSeparatedFilterItem}\n scrollElementSelector={scrollElementSelector}\n layoutType={layoutType}\n collectionId={collectionId}\n colorSwatches={colorSwatches}\n ulClasses={ulClasses}\n languageSettings={languageSettings}\n triggerClickedFacets={triggerClickedFacets}\n setTriggerClickedFacets={setTriggerClickedFacets}\n handleQueryStringFilter={handleQueryStringFilter}\n previousStateFromOutside={previousState}\n keepCounterFacets={keepCounterFacets}\n allowedFilterSlider={allowedFilterSlider}\n />\n );\n };\n\n if (display.toLowerCase() === 'swatch' && items?.length) classesUlElement.push('sledge-instant-search__result-filter-item-color-swatches');\n if (display.toLowerCase() === 'tree') classesUlElement.push('sledge-instant-search__result-filter-item-tree');\n if (displaySettings?.filter?.layout === 'vertical' && allowedFilter?.length === 1) classesUlElement?.push('sledge-instant-search__result-filter-item-list-just-one');\n\n let isLastIndex = allowedFilter ? allowedFilter?.length - 1 === indexFilter : false;\n\n return { isRender, classesUlElement, getFacetComponent, isLastIndex };\n };\n\n const filterVerticalComponent = (overrideProps?: IFilterVerticalProps) => {\n const defaultProps: IFilterVerticalProps = {\n items: allowedFilter,\n filterSettings: filterSettings,\n filterTitleStyle: filter_title_style,\n handleOpenFilterVertical: handleOpenFilterVertical,\n clickedOpenFilters: clickedOpenFilters,\n layoutType: layoutType,\n collectionId: collectionId,\n dataClickedFacets: dataClickedFacets,\n handleFilterReset: handleFilterReset,\n defaultFilterItems: defaultFilterItems,\n generalDataSettings: generalDataSettings,\n languageSettings: languageSettings,\n hierarchicalCollectionsSettings: hierarchicalCollectionsSettings,\n hierarchicalProductTypeSettings: hierarchicalProductTypeSettings,\n displaySettings: displaySettings,\n settings: settings,\n handleFilterChange: handleFilterChange,\n allowedFilterSlider: allowedFilterSlider\n };\n\n const mergedProps = { ...defaultProps, ...overrideProps };\n\n return <FilterVertical {...mergedProps} />;\n };\n\n const filterHorizontalComponent = (overrideProps?: IFilterHorizontalProps) => {\n const defaultProps: IFilterHorizontalProps = {\n items: allowedFilter,\n filterSettings: filterSettings,\n clickedOpenFilterHorizontalId: clickedOpenFilterHorizontalId,\n setClickedOpenFilterHorizontalId: setClickedOpenFilterHorizontalId,\n clickedOpenFilterHorizontalMobileId: clickedOpenFilterHorizontalMobileId,\n setClickedOpenFilterHorizontalMobileId: setClickedOpenFilterHorizontalMobileId,\n layoutType: layoutType,\n collectionId: collectionId,\n dataClickedFacets: dataClickedFacets,\n handleFilterReset: handleFilterReset,\n defaultFilterItems: defaultFilterItems,\n generalDataSettings: generalDataSettings,\n languageSettings: languageSettings,\n hierarchicalCollectionsSettings: hierarchicalCollectionsSettings,\n hierarchicalProductTypeSettings: hierarchicalProductTypeSettings,\n displaySettings: displaySettings,\n settings: settings,\n handleFilterChange: handleFilterChange,\n allowedFilterSlider: allowedFilterSlider\n };\n\n const mergedProps = { ...defaultProps, ...overrideProps };\n\n return <FilterHorizontal {...mergedProps} />;\n };\n\n const filterActiveComponent = (overrideProps?: IFilterActiveProps) => {\n const defaultProps: IFilterHorizontalProps = {\n items: allowedFilter,\n filterSettings: filterSettings,\n clickedOpenFilterHorizontalId: clickedOpenFilterHorizontalId,\n setClickedOpenFilterHorizontalId: setClickedOpenFilterHorizontalId,\n clickedOpenFilterHorizontalMobileId: clickedOpenFilterHorizontalMobileId,\n setClickedOpenFilterHorizontalMobileId: setClickedOpenFilterHorizontalMobileId,\n layoutType: layoutType,\n collectionId: collectionId,\n dataClickedFacets: dataClickedFacets,\n handleFilterReset: handleFilterReset,\n defaultFilterItems: defaultFilterItems,\n generalDataSettings: generalDataSettings,\n languageSettings: languageSettings,\n hierarchicalCollectionsSettings: hierarchicalCollectionsSettings,\n hierarchicalProductTypeSettings: hierarchicalProductTypeSettings,\n displaySettings: displaySettings,\n settings: settings,\n handleFilterChange: handleFilterChange,\n allowedFilterSlider: allowedFilterSlider\n };\n\n const mergedProps = { ...defaultProps, ...overrideProps };\n\n return <FilterActive {...mergedProps} />;\n };\n\n const paginationComponent = (\n <PaginationOrLoadMore\n type={displaySettings?.search?.pagination_type}\n isLoadMore={isLoadMore}\n isLoadingButtonLoadMore={isLoadingButtonLoadMore}\n handleLoadMore={() => {\n setCurrentPage(currentPage + 1);\n setIsLoadingButtonLoadMore(true);\n setIsReplaceWidgetList?.(true);\n }}\n buttonLoadMoreText={isLoadingButtonLoadMore ? button_loading || 'Loading...' : button_load_more || 'Load More'}\n isInfiniteScroll={displaySettings?.search?.pagination_type === 'infinite_scroll'}\n currentPage={currentPage}\n totalPage={totalPage}\n totalResult={totalSearchResult}\n pageInfo={language_pagination_info}\n isVisibleLoadMore={isVisibleLoadMore}\n handlePageChange={handlePageChange}\n />\n );\n\n const summaryTextComponent = <div className=\"sledge-instant-search__result-data-summary-item\">{displaySettings?.filter?.show_total_products ? summaryText : null}</div>;\n\n const searchFieldComponent = <Search placeholder={language_search_form_placeholder?.product} value={keyword} handleChangeSearch={handleChangeKeyword} />;\n\n const searchInputFieldComponent = <Search placeholder={language_search_form_placeholder?.product} value={keyword} handleChangeSearch={handleChangeKeyword} />;\n\n const sortComponent = (\n <Sort\n label={language_sort_by}\n options={allowedSorts}\n clickedOption={clickedSortId}\n handleChangeOption={handleChangeSort}\n overridePlaceholderOnMobile={!mobileShowSelectedSort ? mobile_sort_placeholder || 'Sort' : null}\n />\n );\n\n const limitComponent = <Limit label={language_limit} options={displaySettings?.search?.allowed_limit} clickedOption={clickedLimitId} handleChangeOption={handleChangeLimit} />;\n\n const productGridComponent = (\n <ProductGrid\n sourceApp=\"instant-search\"\n type=\"large\"\n data={searchResult.map((item: any) => {\n const { variants, ...product } = item || {};\n\n return {\n product,\n variants\n };\n })}\n setting={{\n show_vendor: displaySettings?.search?.show_vendor,\n show_sku: displaySettings?.search?.show_sku,\n show_price: displaySettings?.search?.show_price,\n language_button_add_to_cart: language_add_to_cart,\n language_button_out_of_stock: languageSettings && languageSettings['out of stock'] ? languageSettings['out of stock'] : ''\n }}\n isComponentJsVersion={isJsVersion}\n cards={productCardsComponent}\n showOptionOutOfStock={true}\n onAfterAddToCart={onAfterAddToCart}\n onAfterAddWishlist={onAfterAddWishlist}\n onAfterRemoveWishlist={onAfterRemoveWishlist}\n onAfterRenderProduct={onAfterRenderProduct}\n dataWishlists={propsData?.wishlists}\n dataReviews={propsData?.reviews}\n currentColumnGrid={currentColumnGrid}\n previewSettings={previewSettings}\n />\n );\n\n const resultEmptyComponent = <ResultEmpty {...props} />;\n\n const columnGridSelectorComponent = <ColumnGridSelector currentColumnGrid={currentColumnGrid} setCurrentColumnGrid={setCurrentColumnGrid} isDesktopLayout={isDesktopLayout} showText={false} />;\n\n const components = {\n filterVertical: filterVerticalComponent,\n filterHorizontal: filterHorizontalComponent,\n filterActive: filterActiveComponent,\n summaryText: summaryTextComponent,\n searchField: searchFieldComponent,\n sort: sortComponent,\n limit: limitComponent,\n productGrid: productGridComponent,\n pagination: paginationComponent,\n resultEmpty: resultEmptyComponent,\n columnGridSelector: columnGridSelectorComponent\n };\n\n const skeleton = {\n filterVertical: filterVerticalSkeleton,\n filterHorizontal: filterHorizontalSkeletonComponent,\n summaryText: summaryTextSkeleton,\n searchField: searchFieldSkeletonComponent,\n selectOption: selectOptionSkeletonComponent,\n searchAndSelectOption: searchAndSelectOptionSkeleton,\n productGrid: productGridSkeleton\n };\n\n return (\n <>\n {isDesktopLayout ? (\n <DesktopLayout\n displaySettings={displaySettings}\n languageSettings={languageSettings}\n allowedFilter={allowedFilter}\n isFirstLoading={isFirstLoading}\n isLoading={isLoading}\n isLoadingProduct={isLoadingProduct}\n isLoadingSetting={isLoadingSetting}\n searchResult={searchResult}\n hideFilterWhenOneValue={hideFilterWhenOneValue}\n openFilterFlyout={openFilterFlyout}\n setOpenFilterFlyout={setOpenFilterFlyout}\n openFilterToggle={openFilterToggle}\n setOpenFilterToggle={setOpenFilterToggle}\n components={{\n filterVertical: components.filterVertical,\n filterHorizontal: components.filterHorizontal,\n filterActive: components.filterActive,\n summaryText: components.summaryText,\n searchField: components.searchField,\n sort: components.sort,\n limit: components.limit,\n productGrid: components.productGrid,\n pagination: components.pagination,\n resultEmpty: components.resultEmpty,\n columnGridSelector: components.columnGridSelector\n }}\n skeleton={{\n filterVertical: skeleton.filterVertical,\n summaryText: skeleton.summaryText,\n searchField: skeleton.searchField,\n selectOption: skeleton.selectOption,\n searchAndSelectOption: skeleton.searchAndSelectOption,\n productGrid: skeleton.productGrid\n }}\n handleSearchResultFirstTime={handleSearchResultFirstTime}\n />\n ) : (\n <MobileLayout\n displaySettings={displaySettings}\n languageSettings={languageSettings}\n allowedFilter={allowedFilter}\n isFirstLoading={isFirstLoading}\n isLoading={isLoading}\n isLoadingProduct={isLoadingProduct}\n isLoadingSetting={isLoadingSetting}\n searchResult={searchResult}\n propsData={propsData}\n openFilterFlyout={openFilterFlyoutMobile}\n setOpenFilterFlyout={setOpenFilterFlyoutMobile}\n components={{\n filterVertical: components.filterVertical,\n filterHorizontal: components.filterHorizontal,\n summaryText: components.summaryText,\n searchField: components.searchField,\n sort: components.sort,\n limit: components.limit,\n productGrid: components.productGrid,\n pagination: components.pagination,\n resultEmpty: components.resultEmpty,\n columnGridSelector: components.columnGridSelector\n }}\n skeleton={{\n filterVertical: skeleton.filterVertical,\n summaryText: skeleton.summaryText,\n searchField: skeleton.searchField,\n selectOption: skeleton.selectOption,\n searchAndSelectOption: skeleton.searchAndSelectOption,\n productGrid: skeleton.productGrid\n }}\n />\n )}\n </>\n );\n});\n\nconst ResultCategory = React.memo((props: IResultProps) => {\n const {\n layoutType,\n keyword,\n debouncedKeyword,\n clickedTabIndexId,\n clickedTabIndexName,\n clickedTabIndexType,\n displaySettings,\n isJsVersion,\n collectionCardsComponent,\n pageCardsComponent,\n blogCardsComponent,\n articleCardsComponent,\n searchResultContainerRef,\n onAfterRenderCollection,\n onAfterRenderPage,\n onAfterRenderBlog,\n onAfterRenderArticle,\n languageSettings,\n isReplaceWidgetList,\n setIsReplaceWidgetList,\n handleChangeKeyword,\n usePublishedFilter,\n handleSetInitStates,\n facets,\n params,\n clickedFacets,\n setClickedFacets,\n allowedFilterSlider,\n hierarchicalProductTypeSettings,\n hierarchicalCollectionsSettings,\n hiddenTags,\n showOutOfStock,\n hierarchicalFacetAliases,\n defaultFilterItems,\n setValueFilterPriceChange,\n setValueFilterOnSaleChange,\n setValueFilterSliderOthers,\n tabs,\n initStatesFirstTime,\n setInitStatesFirstTime,\n parentPreviousState\n } = props || {};\n\n const { collectionId, collectionName } = params || {};\n\n const [isFirstLoading, setIsFirstLoading] = React.useState(true);\n const [isLoading, setIsLoading] = React.useState(true);\n const [searchResult, setSearchResult] = React.useState([]);\n const [searchProcessingTimeMs, setSearchProcessingTimeMs] = React.useState<string | number>(0);\n const [currentPage, setCurrentPage] = React.useState(1);\n const [totalPage, setTotalPage] = React.useState(0);\n const [totalSearchResult, setTotalSearchResult] = React.useState(0);\n const [summaryText, setSummaryText] = React.useState<React.ReactNode>(null);\n\n const previousState: any = usePrevious({ clickedTabIndexId });\n\n const { separator: hierarchical_separator, hiddens: hierarchical_hiddens } = hierarchicalProductTypeSettings || {};\n const {\n separator: hierarchical_collections_separator,\n hiddens: hierarchical_collections_hiddens,\n hidden_ids: hierarchical_collections_hidden_ids,\n structure: hierarchical_collections_structure\n } = hierarchicalCollectionsSettings || {};\n\n const {\n pagination_info: language_pagination_info,\n search_form_placeholder: language_search_form_placeholder,\n result: language_result,\n total_result_text: language_total_result_text\n } = languageSettings || {};\n\n const summaryTextGenerator = (totalResult: number) => {\n const defaultSummaryText: any = (\n <>\n {totalResult} {language_result || 'result'}{' '}\n {keyword?.length ? (\n <>\n for <span className=\"sledge-instant-search__result-data-summary-text-keyword\">\"{keyword}\"</span>\n </>\n ) : null}\n </>\n );\n\n let getSummaryText = clickedTabIndexType ? language_total_result_text[clickedTabIndexType] : null;\n let isSummaryTextFromLanguage = language_total_result_text && getSummaryText;\n\n if (isSummaryTextFromLanguage) getSummaryText = getSummaryText.replaceAll(OBJECT_DATA_STRING_KEY.TOTAL_RESULT, totalResult);\n\n return (\n <div className=\"sledge-instant-search__result-data-summary-item\">\n {displaySettings?.filter?.show_total_products ? (\n <span className=\"sledge-instant-search__result-data-summary-text\">{isSummaryTextFromLanguage ? getSummaryText : defaultSummaryText}</span>\n ) : null}\n </div>\n );\n };\n\n const handleSearchResultData = (props: { isReplaceData?: boolean; result?: any; onSearch?: boolean }) => {\n const { isReplaceData = false, result: resultProp, onSearch } = props;\n\n const INSTANT_SEARCH_SETTING = JSON.parse((localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || null) as string);\n const handleSearchResultFirstTime = isFirstLoading;\n\n const isFirstTimeOrOnSearch = (handleSearchResultFirstTime && initStatesFirstTime) || onSearch;\n const resultData = isFirstTimeOrOnSearch ? resultProp?.results : resultProp;\n const result = isFirstTimeOrOnSearch ? resultData?.find?.(({ indexUid }: any) => indexUid.includes(clickedTabIndexId)) : resultData;\n\n if (!result) return;\n\n if (isFirstTimeOrOnSearch) {\n handleSetInitStates?.({\n results: resultData,\n data: INSTANT_SEARCH_SETTING\n });\n }\n\n const { hits, processingTimeMs, totalHits, totalPages } = result;\n\n setIsFirstLoading(false);\n setIsLoading(false);\n setIsReplaceWidgetList?.(false);\n setSearchResult(hits);\n setSearchProcessingTimeMs(processingTimeMs || 0);\n setTotalPage(totalPages);\n setTotalSearchResult(totalHits || 0);\n setSummaryText(summaryTextGenerator(totalHits));\n };\n\n const handleSearchResult = async (props: { isReplaceData?: boolean; onSearch?: boolean }) => {\n const { isReplaceData = false, onSearch } = props;\n const handleSearchResultFirstTime = isFirstLoading;\n\n if (!clickedTabIndexId) return;\n\n if (isReplaceData) setCurrentPage(1);\n\n setIsLoading(true);\n\n let response: any = await handleSearchResponse({\n layoutType,\n clickedTabIndexId,\n clickedTabIndexType,\n keyword,\n page: isReplaceData ? 1 : currentPage,\n limit: 12,\n isUseMultiSearch: (handleSearchResultFirstTime && initStatesFirstTime) || onSearch,\n facets,\n clickedFacets,\n setClickedFacets,\n allowedFilterSlider,\n hierarchicalFacetAliases,\n defaultFilterItems,\n setValueFilterPriceChange,\n setValueFilterOnSaleChange,\n setValueFilterSliderOthers,\n collectionId,\n hiddenTags,\n showOutOfStock,\n hierarchicalProductTypeSettings,\n hierarchicalCollectionsSettings,\n usePublishedFilter,\n tabs\n });\n\n setInitStatesFirstTime?.(false);\n\n handleSearchResultData({\n result: response,\n ...props\n });\n };\n\n const handlePageChange = (page: number) => {\n setCurrentPage(page);\n setIsReplaceWidgetList?.(true);\n\n setTimeout(() => {\n scrollToElement({\n element: searchResultContainerRef.current,\n headerOffset: 50\n });\n }, 200);\n };\n\n React.useEffect(() => {\n let isKeywordChanged = Boolean(parentPreviousState && parentPreviousState.keyword !== keyword);\n\n if (isKeywordChanged) {\n const delayDebounceFn = setTimeout(() => {\n handleSearchResult({\n onSearch: true\n });\n }, 500);\n return () => clearTimeout(delayDebounceFn);\n } else {\n handleSearchResult({\n onSearch: false\n });\n }\n }, [keyword]);\n\n React.useEffect(() => {\n let isRefreshSearchResult = Boolean(previousState && previousState?.clickedTabIndexId !== clickedTabIndexId);\n\n if (isReplaceWidgetList || isRefreshSearchResult) {\n handleSearchResult({\n isReplaceData: isRefreshSearchResult\n });\n }\n }, [isReplaceWidgetList, clickedTabIndexId]);\n\n const searchKeywordComponent = (\n <div className=\"sledge-instant-search__result-data-keyword sledge-instant-search__result-data-keyword-category\">\n <Search\n placeholder={\n clickedTabIndexType && language_search_form_placeholder[clickedTabIndexType]\n ? language_search_form_placeholder[clickedTabIndexType]\n : `Search ${clickedTabIndexName ? clickedTabIndexName.toLowerCase() : ''}...`\n }\n value={keyword}\n handleChangeSearch={handleChangeKeyword}\n />\n </div>\n );\n\n const summaryTextSkeleton = (\n <div className=\"sledge-instant-search__result-data-summary\">\n <SkeletonLoading.Item width=\"117px\" height=\"28px\" color=\"lighten\" rounded=\"md\" />\n </div>\n );\n\n const skeletonLoadingComponent =\n clickedTabIndexType === 'collection' ? (\n <SkeletonLoading.CollectionGrid count={6} />\n ) : clickedTabIndexType === 'page' ? (\n <SkeletonLoading.PageGrid count={6} />\n ) : clickedTabIndexType === 'blog' ? (\n <SkeletonLoading.BlogGrid count={12} />\n ) : clickedTabIndexType === 'article' ? (\n <SkeletonLoading.ArticleGrid count={12} />\n ) : null;\n\n const ProvideElementFirstLoading = () => (\n <div className=\"sledge-instant-search__result-data-category-wrapper\">\n {searchKeywordComponent}\n {summaryTextSkeleton}\n {skeletonLoadingComponent}\n </div>\n );\n\n const ProvideElementLoading = () => (\n <>\n {summaryTextSkeleton}\n {skeletonLoadingComponent}\n </>\n );\n\n const ProvideElement = (elementProps: any) =>\n clickedTabIndexType === 'collection' ? (\n <CollectionGrid cards={collectionCardsComponent} onAfterRenderCollection={onAfterRenderCollection} {...elementProps} />\n ) : clickedTabIndexType === 'page' ? (\n <PageGrid cards={pageCardsComponent} onAfterRenderPage={onAfterRenderPage} {...elementProps} />\n ) : clickedTabIndexType === 'blog' ? (\n <BlogGrid cards={blogCardsComponent} onAfterRenderBlog={onAfterRenderBlog} {...elementProps} />\n ) : clickedTabIndexType === 'article' ? (\n <ArticleGrid cards={articleCardsComponent} onAfterRenderArticle={onAfterRenderArticle} {...elementProps} />\n ) : null;\n\n return (\n <div className=\"sledge-instant-search__result-wrapper\">\n {isFirstLoading ? (\n <ProvideElementFirstLoading />\n ) : (\n <div className=\"sledge-instant-search__result-data-category-wrapper\">\n {searchKeywordComponent}\n {isLoading ? (\n <ProvideElementLoading />\n ) : (\n <>\n <div className=\"sledge-instant-search__result-data-summary\">{summaryText}</div>\n {searchResult?.length ? (\n <>\n <ProvideElement data={searchResult} isComponentJsVersion={isJsVersion} />\n\n <Pagination\n currentPage={currentPage}\n totalPage={totalPage}\n totalResult={totalSearchResult}\n onChange={(page: number) => handlePageChange(page)}\n pageInfo={language_pagination_info}\n />\n </>\n ) : (\n <ResultEmpty {...props} />\n )}\n </>\n )}\n </div>\n )}\n </div>\n );\n});\n\nconst ResultEmpty = React.memo((props: IResultProps) => {\n const { languageSettings } = props || {};\n\n const { title_no_result: language_title_no_result, text_no_result: language_text_no_result } = languageSettings || {};\n\n return (\n <div className=\"sledge-instant-search__result-empty\">\n <div className=\"sledge-instant-search__result-empty-title\" dangerouslySetInnerHTML={{ __html: language_title_no_result || 'No results found' }}></div>\n <div\n className=\"sledge-instant-search__result-empty-description\"\n dangerouslySetInnerHTML={{ __html: language_text_no_result || 'Your search did not match any results. Please try again' }}\n ></div>\n </div>\n );\n});\n","import React from 'react';\nimport { motion } from 'framer-motion';\nimport { VISIBLE_ANIMATION } from '@core/lib/animation';\nimport { multiSearch, searchTrigger } from '@core/api/instant-search';\nimport { useDebounce, useEffectOnChange, usePreviewSettings, usePrevious } from '@core/hooks';\nimport { DEFAULT_QUERY_PARAM, DEFAULT_QUERY_PRODUCT_MEILISEARCH, DEFAULT_SEARCH_RESULT_URL, LOCAL_STORAGE_KEY, OBJECT_DATA_STRING_KEY } from '@core/lib/const';\nimport { ProductGrid, ScrollArea, SearchIcon, SearchInputField, SkeletonLoading } from '@core/components';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\nimport { isFunction } from '@core/lib/helper';\nimport { Global } from '@react-instant-search/components/Global';\n\nexport interface ISearchWidgetProps {\n query?: {\n keyword: string;\n };\n width?: string;\n children?: any;\n onAfterAddToCart?(state: 'success' | 'failed'): void;\n onAfterAddWishlist?(state: 'success' | 'failed'): void;\n onAfterRemoveWishlist?(state: 'success' | 'failed'): void;\n onAfterRenderProduct?(state: 'success' | 'failed'): void;\n urlSearchResult?: string;\n previewSettings?: any;\n}\n\nexport const SearchWidget = (props: ISearchWidgetProps) => {\n const { isRenderApp, isJsVersion } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { instantSearch: isRenderAppInstantSearch } = isRenderApp || {};\n\n const { width = '400px', children, onAfterAddToCart, onAfterAddWishlist, onAfterRemoveWishlist, onAfterRenderProduct, urlSearchResult, query, previewSettings: previewSettingsProp } = props;\n\n const queryKeyword = query?.keyword ? query.keyword : DEFAULT_QUERY_PARAM.KEYWORD;\n\n const searchParams = typeof document !== 'undefined' ? new URLSearchParams(document?.location?.search) : null;\n\n // Separate Components\n let productCardsComponent: any = null;\n let suggestionKeywordListsComponent: any = null;\n let otherIndexListsComponent: any = null;\n let searchViewMoreResultComponent: any = null;\n React.Children.map(children, (child) => {\n if (React.isValidElement(child) && isFunction(child.type)) {\n const { productCard, suggestionKeywordList, otherIndexList, searchViewMoreResult }: any = child?.props || {};\n\n if (productCard && isFunction(productCard)) productCardsComponent = productCard;\n if (suggestionKeywordList && isFunction(suggestionKeywordList)) suggestionKeywordListsComponent = suggestionKeywordList;\n if (otherIndexList && isFunction(otherIndexList)) otherIndexListsComponent = otherIndexList;\n if (searchViewMoreResult && isFunction(searchViewMoreResult)) searchViewMoreResultComponent = searchViewMoreResult;\n }\n });\n\n const { instantSearchPreviewSettings, previewSettings } = usePreviewSettings({\n defaultSettings: previewSettingsProp,\n nestedProperty: 'sledge.instantSearch.searchWidget.preview'\n });\n\n const [isLoading, setIsLoading] = React.useState(true);\n const [keyword, setKeyword] = React.useState(searchParams?.get(queryKeyword) || '');\n const [searchResultProduct, setSearchResultProduct] = React.useState([]);\n const [searchResultOther, setSearchResultOther] = React.useState([]);\n const [displaySettings, setDisplaySettings] = React.useState<any>({});\n const [suggestionSettings, setSuggestionSettings] = React.useState<any>({});\n const [suggestionIndex, setSuggestionIndex] = React.useState('');\n const [showSearchResult, setShowSearchResult] = React.useState(false);\n const [languageSettings, setLanguageSettings] = React.useState<any>({});\n const [redirectsSettings, setRedirectsSettings] = React.useState([]);\n const [redirectObject, setRedirectObject] = React.useState<any>({});\n const [isRedirect, setIsRedirect] = React.useState(false);\n\n // Debounced states\n const debouncedKeyword = useDebounce(keyword, 250);\n\n const searchFieldRef = React.useRef(null);\n\n const { direction: redirectObjectDirection } = redirectObject || {};\n\n const handleMultiSearch = async (data: any, onSearch = false) => {\n if (!keyword.length) return;\n\n const valueRedirectObject: any = redirectsSettings.find(({ keyword: redirectKeyword }) => String(redirectKeyword)?.toLowerCase() === keyword);\n const valueIsRedirect = Boolean(valueRedirectObject?.direction?.length);\n\n setRedirectObject(valueRedirectObject);\n setIsRedirect(valueIsRedirect);\n\n setIsLoading(true);\n\n const { index_product, tabs, hidden_tags, display, show_out_of_stock, attributes_to_retrieve, default_sort, search_use_default_sort, collections_all_id } = data;\n const suggestion = display?.search?.suggestion || {};\n const instantSearchLimit = Number(display?.search?.instantsearch_limit || 6);\n\n let response: any;\n let body = {\n queries: tabs.map((tab: any) => {\n const { index } = tab;\n\n let isProductIndex = index.includes(index_product);\n let additionalFilter = DEFAULT_QUERY_PRODUCT_MEILISEARCH;\n\n if (hidden_tags?.length) additionalFilter.push(`tags NOT IN [${hidden_tags}]`);\n if (!show_out_of_stock) additionalFilter.push(`'availability' IN ${JSON.stringify(['in stock'])}`);\n\n let sort: string[] = [];\n if (isProductIndex && search_use_default_sort && default_sort) {\n if (String(default_sort).includes(OBJECT_DATA_STRING_KEY.COLLECTION_ID)) {\n sort = collections_all_id ? [String(default_sort).replaceAll(OBJECT_DATA_STRING_KEY.COLLECTION_ID, String(collections_all_id))] : [];\n } else {\n sort = [default_sort];\n }\n } else {\n sort = [];\n }\n\n return {\n indexUid: index,\n q: keyword,\n sort,\n hitsPerPage: isProductIndex ? instantSearchLimit : 4,\n filter: isProductIndex ? [...new Set(additionalFilter)].join(' AND ') : '',\n attributesToRetrieve: attributes_to_retrieve\n };\n })\n };\n\n response = await multiSearch(body);\n\n if (!response) return;\n\n const { results } = response;\n\n let valueSearchResultProduct = results?.filter(({ indexUid }: any) => indexUid?.includes(index_product));\n\n if (onSearch && keyword?.length) {\n searchTrigger({\n keyword: keyword,\n resultCount: valueSearchResultProduct[0]?.totalHits || 0\n });\n }\n\n let valueSearchResultOther =\n results\n ?.filter(({ indexUid }: any) => !indexUid?.includes(index_product))\n ?.map((result: any) => {\n const { indexUid } = result;\n\n const { name, type } = tabs?.find(({ index }: any) => index.includes(indexUid));\n\n return {\n ...result,\n ...{\n name: name || '',\n type: type || ''\n }\n };\n }) || [];\n\n let getValueSearchResultProduct = valueSearchResultProduct?.length ? valueSearchResultProduct[0]?.hits : [];\n let valueSuggestionIndex = !keyword.length ? 'zero_character' : !getValueSearchResultProduct?.length ? 'no_result' : '';\n\n let isPriorityZeroCharacter = Boolean(\n !keyword.length && Object.keys(suggestion).length && suggestion[valueSuggestionIndex]?.products?.active && suggestion[valueSuggestionIndex]?.products?.list?.length\n );\n\n setSearchResultProduct(isPriorityZeroCharacter ? suggestion[valueSuggestionIndex]?.products?.list : getValueSearchResultProduct);\n setSearchResultOther(valueSearchResultOther);\n setSuggestionIndex(valueSuggestionIndex);\n setIsLoading(false);\n };\n\n const handleSettings = async (LOCAL_STORAGE_INSTANT_SEARCH_SETTING: any) => {\n let response: any;\n\n response = instantSearchPreviewSettings || JSON.parse(LOCAL_STORAGE_INSTANT_SEARCH_SETTING as string);\n\n if (!response) return;\n\n const { display, languages, redirects } = response;\n\n setDisplaySettings(display);\n setSuggestionSettings(display?.search?.suggestion);\n setLanguageSettings(languages);\n setRedirectsSettings(redirects);\n\n if (keyword.length) await handleMultiSearch(response);\n };\n\n useEffectOnChange(() => {\n handleSettings(localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || null);\n }, [previewSettings]);\n\n React.useEffect(() => {\n if (!isRenderAppInstantSearch) return;\n\n handleSettings(localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || null);\n }, [isRenderAppInstantSearch]);\n\n useEffectOnChange(() => {\n const INSTANT_SEARCH_SETTING = instantSearchPreviewSettings || JSON.parse((localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || null) as string);\n\n setShowSearchResult(keyword ? true : false);\n\n if (INSTANT_SEARCH_SETTING) handleMultiSearch(INSTANT_SEARCH_SETTING, true);\n }, [debouncedKeyword]);\n\n React.useEffect(() => {\n showSearchResult ? document.body.classList.add('sledge__open-element-inset') : document.body.classList.remove('sledge__open-element-inset');\n }, [showSearchResult]);\n\n const wrapperStyle = {\n maxWidth: width\n };\n\n return (\n <div className=\"sledge-instant-search__widget-search-form-wrapper\" style={wrapperStyle}>\n {showSearchResult ? <div className=\"sledge__inset-full\" onClick={() => setShowSearchResult(false)}></div> : null}\n\n <SearchInputField\n type=\"text\"\n fieldRef={searchFieldRef}\n icon={<SearchIcon width={18} height={18} color=\"#868686\" />}\n placeholder={languageSettings?.search_form_placeholder?.widget || 'Search anything...'}\n value={keyword}\n onChange={({ value }: any) => setKeyword(value)}\n onKeyDown={(event: KeyboardEvent) => {\n // TODO: This method just for js version, find a way to add additional function after enter key on headless (maybe we can expose onEnterKey)\n if (event.key === 'Enter') {\n const urlToSearchResult = isRedirect ? redirectObjectDirection : `${urlSearchResult || DEFAULT_SEARCH_RESULT_URL}?${queryKeyword}=${keyword}`;\n\n window.location.href = urlToSearchResult;\n }\n }}\n onResetField={() => setKeyword('')}\n onFocus={() => {\n if (keyword) setShowSearchResult(true);\n }}\n withClearField\n />\n\n {showSearchResult ? (\n <div className=\"sledge-instant-search__widget-search-form-result\">\n {isLoading ? (\n <ScrollArea>\n <div className=\"sledge-instant-search__widget-search-form-result-flex\">\n <div className=\"sledge-instant-search__widget-search-form-result-flex-item-other sledge-instant-search__widget-search-form-result-flex-item-other-skeleton\">\n {[0, 1, 2].map((index: number) => (\n <React.Fragment key={index}>\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"42px\"\n color=\"lighten\"\n rounded=\"md\"\n {...(Boolean(index) && {\n style: { marginTop: '12px' }\n })}\n />\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n gap: '12px',\n marginTop: '12px'\n }}\n >\n {[1, 2, 3].map((index: number) => (\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n key={index}\n style={{\n maxWidth: '140px'\n }}\n />\n ))}\n </div>\n </React.Fragment>\n ))}\n </div>\n <div className=\"sledge-instant-search__widget-search-form-result-flex-item-product\">\n <SkeletonLoading.ProductGrid count={6} type=\"small\" />\n </div>\n </div>\n </ScrollArea>\n ) : (\n <ScrollArea isLoading={isLoading}>\n <>\n <div className=\"sledge-instant-search__widget-search-form-result-flex\">\n <div className=\"sledge-instant-search__widget-search-form-result-flex-item-other\">\n {Object.keys(suggestionSettings).length &&\n suggestionSettings[suggestionIndex]?.keywords?.active &&\n suggestionSettings[suggestionIndex]?.keywords?.list?.length ? (\n <Global.SuggestionKeywordLists\n listsComponent={suggestionKeywordListsComponent}\n keywords={suggestionSettings[suggestionIndex].keywords.list}\n isComponentJsVersion={isJsVersion}\n urlSearchResult={urlSearchResult}\n query={query}\n />\n ) : null}\n\n {searchResultOther.map((item: any, index: number) => {\n const { hits, name, type } = item;\n\n return (\n <React.Fragment key={index}>\n <Global.OtherIndexLists\n listsComponent={otherIndexListsComponent}\n name={name}\n type={type}\n items={hits}\n isComponentJsVersion={isJsVersion}\n languageSettings={languageSettings}\n />\n </React.Fragment>\n );\n })}\n </div>\n <div className=\"sledge-instant-search__widget-search-form-result-flex-item-product\">\n <div className=\"sledge-instant-search__widget-search-form-result-title-product\">{languageSettings?.product || 'Products'}</div>\n {searchResultProduct?.length ? (\n <div className=\"sledge-instant-search__widget-search-form-result-product\">\n <ProductGrid\n sourceApp=\"instant-search\"\n type=\"small\"\n data={searchResultProduct.map((item: any) => {\n const { variants, ...product } = item || {};\n\n return {\n product,\n variants\n };\n })}\n setting={{\n show_vendor: displaySettings?.search?.show_vendor,\n show_sku: displaySettings?.search?.show_sku,\n show_price: displaySettings?.search?.show_price,\n language_button_add_to_cart: languageSettings?.add_to_cart,\n language_button_out_of_stock: languageSettings && languageSettings['out of stock'] ? languageSettings['out of stock'] : ''\n }}\n showOptionOutOfStock={true}\n isComponentJsVersion={isJsVersion}\n cards={productCardsComponent}\n onAfterAddToCart={onAfterAddToCart}\n onAfterAddWishlist={onAfterAddWishlist}\n onAfterRemoveWishlist={onAfterRemoveWishlist}\n onAfterRenderProduct={onAfterRenderProduct}\n />\n </div>\n ) : Object.keys(suggestionSettings).length &&\n suggestionSettings[suggestionIndex]?.products?.active &&\n suggestionSettings[suggestionIndex]?.products?.list?.length ? (\n <>\n <div className=\"sledge-instant-search__widget-search-form-result-product-suggestion-no-result-text\">\n <span>Sorry, nothing found for</span> <strong>{keyword}</strong>. <span>Did you mean:</span>\n </div>\n <ProductGrid\n sourceApp=\"instant-search\"\n type=\"small\"\n data={suggestionSettings[suggestionIndex].products.list.map((item: any) => {\n const { variants, ...product } = item || {};\n\n return {\n product,\n variants\n };\n })}\n setting={{\n show_vendor: displaySettings?.search?.show_vendor,\n show_sku: displaySettings?.search?.show_sku,\n show_price: displaySettings?.search?.show_price,\n language_button_add_to_cart: languageSettings?.add_to_cart,\n language_button_out_of_stock: languageSettings && languageSettings['out of stock'] ? languageSettings['out of stock'] : ''\n }}\n showOptionOutOfStock={true}\n isComponentJsVersion={isJsVersion}\n cards={productCardsComponent}\n onAfterAddToCart={onAfterAddToCart}\n onAfterAddWishlist={onAfterAddWishlist}\n onAfterRemoveWishlist={onAfterRemoveWishlist}\n onAfterRenderProduct={onAfterRenderProduct}\n />\n </>\n ) : (\n <div className=\"sledge-instant-search__widget-search-form-result-product-disabled\">{languageSettings?.text_no_result || 'No product were found'}</div>\n )}\n </div>\n </div>\n {searchResultProduct?.length ||\n (Object.keys(suggestionSettings).length && suggestionSettings[suggestionIndex]?.products?.active && suggestionSettings[suggestionIndex]?.products?.list?.length) ? (\n <div className=\"sledge-instant-search__widget-button-more-wrapper\">\n <Global.SearchViewMoreResult\n component={searchViewMoreResultComponent}\n keyword={keyword}\n isComponentJsVersion={isJsVersion}\n urlSearchResult={urlSearchResult}\n redirectObjectDirection={redirectObjectDirection}\n query={query}\n languageSettings={languageSettings}\n />\n </div>\n ) : null}\n </>\n </ScrollArea>\n )}\n </div>\n ) : null}\n </div>\n );\n};\n"],"names":["jsx","React","query","root","entry","cents","jsxs","PopoverElement.Root","open","PopoverElement.Trigger","PopoverElement.Portal","PopoverElement.Content","PopoverElement.Close","PopoverElement.Arrow","ProgressElement.Root","ProgressElement.Indicator","CheckboxElement.Root","CheckboxElement.Indicator","Form.Root","type","_a","Fragment","SliderElement.Root","SliderElement.Track","SliderElement.Range","SliderElement.Thumb","RadioGroupElement.Item","RadioGroupElement.Indicator","RadioGroupElement.Root","SelectElement.Root","SelectElement.Trigger","SelectElement.Value","SelectElement.Icon","SelectElement.Portal","SelectElement.Content","SelectElement.ScrollUpButton","SelectElement.Viewport","SelectElement.ScrollDownButton","SelectElement.Item","SelectElement.ItemText","SelectElement.ItemIndicator","value","addToCartTrigger","shareLink","WidgetHeaderSort","WidgetHeader","_b","_c","props","ReactDOM","is_required_login","productClickTrigger","id","instantSearchProductClickTrigger","productRecommendationProductClickTrigger","image","data","shopifyAddToCart","wishlistAddToCartTrigger","instantSearchAddToCartTrigger","productRecommendationAddToCartTrigger","Form.Field","Form.Control","Form.Message","TooltipElement.Provider","TooltipElement.Root","TooltipElement.Trigger","TooltipElement.Portal","TooltipElement.Content","TooltipElement.Arrow","ScrollAreaElement.Root","ScrollAreaElement.Viewport","ScrollAreaElement.Scrollbar","ScrollAreaElement.Thumb","ResponsiveMasonry","carouselApi","rowRenderer","_d","_e","_f","_g","_i","_h","_l","_k","_j","_n","_m","_o","urlSearchResult","Dialog.Root","Dialog.Portal","Dialog.Overlay","Dialog.Content","index","usePublishedFilter","label","FilterItem","FilterSelected","haveNextPage","currentItems","getValue","FilterFlyoutLayout","params","settings","tabs","totalHits","isSetFilter","searchParams","keyword","facets","dataClickedFacets","isLoadMore"],"mappings":"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A;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,qBAAqB;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACH;AAAA,EAET,EAAA,CAAA;AAER;AAEA,MAAM,gBAAgBA,eAAM,KAAK,CAAC,UAAwB;;AAChD,QAAA;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA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"}
1
+ {"version":3,"file":"sledge-react-instant-search.js","sources":["../src/components/ProductFilterWidget/ProductFilterWidget.tsx","../../../core/lib/const.ts","../../../core/lib/swr.ts","../../../core/hooks/usePrevious.ts","../../../core/hooks/useMediaQuery.ts","../../../core/hooks/useIntersectionObserver.ts","../../../core/hooks/useEffectCallback.ts","../../../core/hooks/useDebounce.ts","../../../core/hooks/useIsFirstRender.ts","../../../core/hooks/usePreviewSettings.ts","../../../core/hooks/useEffectOnChange.ts","../../../core/lib/helper.ts","../../../core/components/Popover/Popover.tsx","../../../core/components/Progress/Progress.tsx","../../../core/components/Checkbox/Checkbox.tsx","../../../core/components/Slider/Slider.tsx","../../../core/components/Pagination/Pagination.tsx","../../../core/components/RadioGroup/RadioGroup.tsx","../../../core/components/ColorSwatch/ColorSwatch.tsx","../../../core/components/Select/Select.tsx","../../../core/components/Icons/HeartIcon/HeartIcon.tsx","../../../core/components/Icons/ChevronArrowDownIcon/ChevronArrowDownIcon.tsx","../../../core/components/Icons/ChevronArrowLeftIcon/ChevronArrowLeftIcon.tsx","../../../core/components/Icons/ChevronArrowRightIcon/ChevronArrowRightIcon.tsx","../../../core/components/Icons/ArrowRightIcon/ArrowRightIcon.tsx","../../../core/components/Icons/BagIcon/BagIcon.tsx","../../../core/components/Icons/CloseIcon/CloseIcon.tsx","../../../core/components/Icons/SearchIcon/SearchIcon.tsx","../../../core/components/Icons/MessageAddIcon/MessageAddIcon.tsx","../../../core/components/Icons/SwapIcon/SwapIcon.tsx","../../../core/components/Icons/NoteIcon/NoteIcon.tsx","../../../core/components/Icons/FilterIcon/FilterIcon.tsx","../../../core/components/Icons/InfoCircleIcon/InfoCircleIcon.tsx","../../../core/components/Button/Button.tsx","../../../core/components/SearchInputField/SearchInputField.tsx","../../../core/lib/animation.ts","../../../core/components/SelectField/SelectField.tsx","../../../core/lib/polyfills.ts","../../../core/api/shopify.ts","../../../core/api/wishlist.ts","../../wishlist/src/components/Badge/utils.ts","../../wishlist/src/components/Badge/BadgeCounter.tsx","../../wishlist/src/components/Widget/WidgetHeaderClearTrigger.tsx","../../wishlist/src/components/Widget/WidgetHeaderShareTrigger.tsx","../../wishlist/src/components/Widget/WidgetHeaderSearchForm.tsx","../../wishlist/src/components/Widget/WidgetHeaderTitle.tsx","../../wishlist/src/components/Widget/WidgetHeaderLimit.tsx","../../wishlist/src/components/Widget/WidgetHeaderSort.tsx","../../wishlist/src/components/Widget/WidgetHeader.tsx","../../wishlist/src/components/Widget/WidgetList.tsx","../../wishlist/src/components/Widget/WidgetRoot.tsx","../../wishlist/src/components/Widget/Widget.tsx","../../wishlist/src/components/Badge/Badge.tsx","../../wishlist/src/components/Badge/BadgeInitSelector.tsx","../../wishlist/src/components/Trigger/Trigger.tsx","../../../core/api/product-review.ts","../../product-review/src/components/Rating/Rating.tsx","../../product-review/src/components/Widget/WidgetHeaderAddTrigger.tsx","../../product-review/src/components/Widget/WidgetHeaderSort.tsx","../../product-review/src/components/Widget/WidgetHeaderSummary.tsx","../../product-review/src/components/Widget/WidgetHeader.tsx","../../../core/api/instant-search.ts","../../../core/api/product-recommendation.ts","../../../core/components/ProductGrid/ProductGrid.tsx","../../../core/components/InputField/InputField.tsx","../../../core/components/CollectionGrid/CollectionGrid.tsx","../../../core/components/PageGrid/PageGrid.tsx","../../../core/components/BlogGrid/BlogGrid.tsx","../../../core/components/ArticleGrid/ArticleGrid.tsx","../../../core/components/Tooltip/Tooltip.tsx","../../../core/components/ScrollArea/ScrollArea.tsx","../../../core/components/SkeletonLoading/SkeletonItem.tsx","../../../core/components/SkeletonLoading/SkeletonProductGrid.tsx","../../../core/components/SkeletonLoading/SkeletonReviewGrid.tsx","../../../core/components/SkeletonLoading/SkeletonCollectionGrid.tsx","../../../core/components/SkeletonLoading/SkeletonPageGrid.tsx","../../../core/components/SkeletonLoading/SkeletonBlogGrid.tsx","../../../core/components/SkeletonLoading/SkeletonArticleGrid.tsx","../../../core/components/SkeletonLoading/SkeletonLoading.tsx","../../../core/components/LoadingDots/LoadingDots.tsx","../../../core/components/Carousel/Carousel.tsx","../../../core/components/FlyoutSidebar/FlyoutSidebar.tsx","../../../core/components/Virtualized/VirtualizedList.tsx","../../../core/components/Alert/Alert.tsx","../src/components/SearchIconWidget/SearchIconWidget.tsx","../src/components/Global/OtherIndexLists.tsx","../src/components/Global/SuggestionKeywordLists.tsx","../src/components/Global/SearchViewMoreResult.tsx","../src/components/Global/index.ts","../src/components/SearchIconWidget/SearchIconWidgetPopup.tsx","../src/components/SearchResultWidget/utils.ts","../src/components/SearchResultWidget/components/Sort.tsx","../src/components/SearchResultWidget/components/Limit.tsx","../src/components/SearchResultWidget/components/Search.tsx","../src/components/SearchResultWidget/components/Tab.tsx","../src/components/SearchResultWidget/components/PaginationOrLoadMore.tsx","../src/components/SearchResultWidget/components/FacetBlockSelected.tsx","../src/components/SearchResultWidget/components/FilterVertical.tsx","../src/components/SearchResultWidget/components/FilterHorizontal.tsx","../src/components/SearchResultWidget/components/FilterActive.tsx","../src/components/SearchResultWidget/components/Facet.tsx","../src/components/SearchResultWidget/components/ColumnGridSelector.tsx","../src/components/SearchResultWidget/layouts/Elements.tsx","../src/components/SearchResultWidget/layouts/DesktopLayout.tsx","../src/components/SearchResultWidget/layouts/MobileLayout.tsx","../src/components/SearchResultWidget/SearchResultWidget.tsx","../src/components/SearchWidget/SearchWidget.tsx"],"sourcesContent":["import { SearchResultWidget } from '@react-instant-search/components';\n\nexport interface IProductFilterWidgetProps {\n width?: string;\n query?: {\n keyword?: string;\n sortBy?: string;\n page?: string;\n limit?: string;\n };\n params?:\n | {\n collectionId?: string | number | '';\n collectionName?: string | '';\n }\n | undefined;\n children?: any;\n onAfterAddToCart?(state: 'success' | 'failed'): void;\n onAfterAddWishlist?(state: 'success' | 'failed'): void;\n onAfterRemoveWishlist?(state: 'success' | 'failed'): void;\n onAfterRenderProduct?(state: 'success' | 'failed'): void;\n data?: any;\n sledgeSettings?: any;\n previewSettings?: any;\n currentTags?: string[] | number[];\n}\n\nexport const ProductFilterWidget = (props: IProductFilterWidgetProps) => {\n return <SearchResultWidget layoutType=\"product-filter\" {...props} />;\n};\n","export const API_URL = 'https://api.sledge-app.com';\nexport const INSTANT_SEARCH_ENGINE_URL = 'https://instant-search-engine.sledge-app.com';\nexport const CDN_URL = 'https://sledgeassets.nyc3.cdn.digitaloceanspaces.com';\nexport const SCRIPT_EMBED_ID = 'sledge-embed-script';\nexport const SELECTOR_ATTRIBUTE_KEY = 'data-component';\nexport const DATASET_ATTRIBUTE_KEY = {\n GLOBAL: {\n PRODUCT_ID: 'data-product-id',\n PRODUCT_VARIANT_ID: 'data-product-variant-id',\n PRODUCT_NAME: 'data-product-name',\n PRODUCT_VENDOR: 'data-product-vendor',\n PRODUCT_SKU: 'data-product-sku',\n PRODUCT_VARIANT_NAME: 'data-product-variant-name',\n PRODUCT_LINK: 'data-product-link',\n PRODUCT_IMAGE: 'data-product-image',\n PRODUCT_CURRENCY: 'data-product-currency',\n PRODUCT_PRICE: 'data-product-price',\n USER_ID: 'data-user-id',\n USER_EMAIL: 'data-user-email',\n USER_FULLNAME: 'data-user-fullname',\n COLLECTION_ID: 'data-collection-id',\n COLLECTION_NAME: 'data-collection-name',\n WIDTH_ELEMENT: 'data-width-element',\n ICON_SIZE: 'data-icon-size',\n RENDER_PRODUCT_CARD: 'data-render-product-card',\n WITH_SKELETON_LOADING: 'data-with-skeleton-loading',\n SECTION_TITLE: 'data-section-title',\n SECTION_DESCRIPTION: 'data-section-description',\n USE_SLIDER: 'data-use-slider',\n FILL_COLOR: 'data-fill-color',\n OUTLINE_COLOR: 'data-outline-color',\n POSITION_WIDGET: 'data-position-widget'\n },\n WISHLIST: {\n SHARE_ID: 'data-share-id',\n QUERY_SHARE_ID: 'data-query-share-id',\n RENDER_WISHLIST_WIDGET_ALERT: 'data-render-wishlist-widget-alert',\n USE_PROXY_URL: 'data-use-proxy-url',\n LIMIT_OPTIONS: 'data-limit-options',\n TRIGGER_BADGE: 'data-trigger-badge',\n URL_WISHLIST_WIDGET: 'data-url-wishlist-widget',\n USE_WISHLIST_FLYOUT: 'data-use-wishlist-flyout'\n },\n PRODUCT_REVIEW: {\n RATING_SIZE: 'data-rating-size',\n RATING_TOTAL: 'data-rating-total',\n RATING_AVERAGE: 'data-rating-average',\n RENDER_REVIEW_PRODUCT_INFO: 'data-render-review-product-info',\n TRUST_BADGE_VARIANT: 'data-trust-badge-variant',\n SHOW_RATING_AVERAGE: 'data-show-rating-average'\n },\n INSTANT_SEARCH: {\n QUERY_KEYWORD: 'data-query-keyword',\n QUERY_SORT_BY: 'data-query-sort-by',\n QUERY_PAGE: 'data-query-page',\n QUERY_LIMIT: 'data-query-limit',\n URL_SEARCH_RESULT: 'data-url-search-result',\n RENDER_SUGGESTION_KEYWORD_LIST: 'data-render-suggestion-keyword-list',\n RENDER_OTHER_INDEX_LIST: 'data-render-other-index-list',\n RENDER_SEARCH_VIEW_MORE_RESULT: 'data-render-search-view-more-result',\n RENDER_COLLECTION_CARD: 'data-render-collection-card',\n RENDER_PAGE_CARD: 'data-render-page-card',\n RENDER_BLOG_CARD: 'data-render-blog-card',\n RENDER_ARTICLE_CARD: 'data-render-article-card',\n CURRENT_TAGS: 'data-current-tags'\n },\n PRODUCT_RECOMMENDATION: {\n DISPLAY_LIMIT: 'data-display-limit',\n HIDDEN_PRODUCT_IDS: 'data-hidden-product-ids'\n }\n};\nexport const LOCAL_STORAGE_KEY = {\n ANONYM_ID: 'sledge-anonym-id',\n AUTH_APP: 'sledge-auth-app',\n INSTANT_SEARCH_AUTH_APP: 'sledge-instant-search-auth-app',\n GENERAL_SETTING: 'sledge-general-setting',\n WISHLIST_SETTING: 'sledge-wishlist-setting',\n PRODUCT_REVIEW_SETTING: 'sledge-product-review-setting',\n INSTANT_SEARCH_SETTING: 'sledge-instant-search-setting',\n PRODUCT_RECOMMENDATION_SETTING: 'sledge-product-recommendation-setting',\n ISSUED_AUTH_APP: 'sledge-issued-auth-app',\n EXPIRED_AUTH_APP: 'sledge-expired-auth-app',\n RECENTLY_VIEWED_APP: 'sledge-recently-viewed',\n LIMIT_PRODUCT: 'sledge-limit-product',\n WISHLIST_BADGE_COUNTER: 'sledge-wishlist-badge-counter',\n GRID_DESKTOP_COLUMN: 'sledge-product-grid-desktop-columns',\n GRID_MOBILE_COLUMN: 'sledge-product-grid-mobile-columns',\n PRODUCT_FILTER_INIT_TOTAL_HITS: 'sledge-product-filter-init-total-hits',\n SEARCH_RESULT_INIT_TOTAL_HITS: 'sledge-search-result-init-total-hits'\n};\nexport const INTERNAL_SELECTOR_VALUE = {\n ELEMENT_TOAST_NOTIFICATION: 'toast-notification',\n ELEMENT_CONFIRMATION_POPUP: 'confirmation-popup',\n ELEMENT_INFO_POPUP: 'info-popup',\n ELEMENT_CONTAINER_WIDGET: 'container-widget',\n ELEMENT_FLOATING_LEFT_WIDGET: 'floating-left-widget',\n ELEMENT_FLOATING_RIGHT_WIDGET: 'floating-right-widget',\n WISHLIST: {\n ELEMENT_WIDGET_POPUP: 'wishlist-widget-popup',\n ELEMENT_BADGE_COUNTER: 'wishlist-badge-counter'\n },\n PRODUCT_REVIEW: {\n ELEMENT_WIDGET_POPUP_DETAIL: 'product-review-widget-popup-detail',\n ELEMENT_WIDGET_FORM_ADD: 'product-review-widget-form-add',\n ELEMENT_STICKY_BADGE: 'product-review-sticky-badge',\n ELEMENT_HAPPY_CUSTOMERS_PAGE_POPUP: 'product-review-happy-customers-page-popup'\n },\n INSTANT_SEARCH: {\n ELEMENT_SEARCH_ICON_WIDGET_POPUP: 'instant-search-icon-widget-popup'\n }\n};\nexport const SELECTOR = {\n GLOBAL: {\n ELEMENT_CUSTOM_COMPONENTS: `[${SELECTOR_ATTRIBUTE_KEY}=\"custom-components\"]`\n },\n WISHLIST: {\n ELEMENT_BADGE: `[${SELECTOR_ATTRIBUTE_KEY}=\"wishlist-badge\"]`,\n ELEMENT_BADGE_COUNTER: `[${SELECTOR_ATTRIBUTE_KEY}=\"${INTERNAL_SELECTOR_VALUE.WISHLIST.ELEMENT_BADGE_COUNTER}\"]`,\n ELEMENT_BADGE_MENU_ITEM: `[href=\"#sledge-wishlist-badge-menu-item\"]`,\n ELEMENT_TRIGGER: `[${SELECTOR_ATTRIBUTE_KEY}=\"wishlist-trigger\"]`,\n ELEMENT_WIDGET: `[${SELECTOR_ATTRIBUTE_KEY}=\"wishlist-widget\"]`,\n ELEMENT_BUTTON_DETAIL: `[${SELECTOR_ATTRIBUTE_KEY}=\"wishlist-button-detail\"]`\n },\n PRODUCT_REVIEW: {\n ELEMENT_WIDGET: `[${SELECTOR_ATTRIBUTE_KEY}=\"product-review-widget\"]`,\n ELEMENT_HAPPY_CUSTOMERS_PAGE: `[${SELECTOR_ATTRIBUTE_KEY}=\"product-review-happy-customers-page\"]`,\n ELEMENT_RATING: `[${SELECTOR_ATTRIBUTE_KEY}=\"product-review-rating\"]`,\n ELEMENT_TRUST_BADGE: `[${SELECTOR_ATTRIBUTE_KEY}=\"product-review-trust-badge\"]`,\n ELEMENT_STICKY_SIDEBAR_WIDGET: `[${SELECTOR_ATTRIBUTE_KEY}=\"product-review-sticky-sidebar-widget\"]`,\n ELEMENT_SNIPPET: `[${SELECTOR_ATTRIBUTE_KEY}=\"product-review-snippet\"]`\n },\n INSTANT_SEARCH: {\n ELEMENT_SEARCH_WIDGET: `[${SELECTOR_ATTRIBUTE_KEY}=\"instant-search-widget\"]`,\n ELEMENT_SEARCH_ICON_WIDGET: `[${SELECTOR_ATTRIBUTE_KEY}=\"instant-search-icon-widget\"]`,\n ELEMENT_SEARCH_RESULT_WIDGET: `[${SELECTOR_ATTRIBUTE_KEY}=\"instant-search-result-widget\"]`,\n ELEMENT_PLP_WIDGET: `[${SELECTOR_ATTRIBUTE_KEY}=\"instant-search-product-filter-widget\"]`\n },\n PRODUCT_RECOMMENDATION: {\n ELEMENT_RECENTLY_VIEWED: `[${SELECTOR_ATTRIBUTE_KEY}=\"product-recommendation-recently-viewed\"]`,\n ELEMENT_RELATED_PRODUCTS: `[${SELECTOR_ATTRIBUTE_KEY}=\"product-recommendation-related-prodcuts\"]`\n }\n};\nexport const CUSTOM_EVENT_NAMES = {\n AFTER_ADD_WISHLIST: 'after-add-wishlist',\n AFTER_REMOVE_WISHLIST: 'after-remove-wishlist',\n AFTER_ADD_TO_CART: 'after-add-to-cart',\n AFTER_ADD_REVIEW: 'after-add-review',\n AFTER_RENDER_PRODUCT: 'after-render-product',\n AFTER_RENDER_COLLECTION: 'after-render-collection',\n AFTER_RENDER_PAGE: 'after-render-page',\n AFTER_RENDER_BLOG: 'after-render-blog',\n AFTER_RENDER_ARTICLE: 'after-render-article'\n};\nexport const DEFAULT_LIMIT_VALUE = [12, 24, 36, 48, 120];\nexport const DEFAULT_MAX_WIDTH_COMPONENT = '1180px';\nexport const DEFAULT_SEARCH_RESULT_URL = '/apps/sledge/search';\nexport const DEFAULT_WISHLIST_URL = '/apps/sledge/wishlist';\nexport const DEFAULT_QUERY_PARAM = {\n KEYWORD: 'q',\n SHARE_ID: 'share',\n SORT_BY: 'sort_by',\n PAGE: 'page',\n LIMIT: 'limit'\n};\nexport const DEFAULT_QUERY_PRODUCT_MEILISEARCH = [`'status' = 'active'`, `published_at IS NOT NULL`];\nexport const DEFAULT_QUERY_PUBLISHED_FILTER = 'published_at IS NOT NULL';\nexport const DEFAULT_FACET_LIMIT = 100;\nexport const OBJECT_DATA_STRING_KEY = {\n STORE: {\n NAME: '{{ shop.name }}'\n },\n CURRENT_PAGE: '{{ current_page }}',\n TOTAL_PAGE: '{{ total_page }}',\n TOTAL_RESULT: '{{ total_result }}',\n TOTAL_FILTER_ITEM: '{{ total_filter_item }}',\n COLLECTION_ID: '{{ collection_id }}',\n COLLECTION_NAME: '{{ collection_name }}',\n TOTAL_WISHLIST: '{{ total_wishlist }}',\n ACCEPTED_FILETYPE_MEDIA: '{{ accepted_filetype_media }}',\n MAX_SIZE_MEDIA: '{{ max_size_media }}',\n FILTER_TITLE: '{{ filter_title }}',\n PRICE_MAX_MONEY_FORMAT: '{{ price_max_money_format }}'\n};\nexport const ELEMENT_ID = {\n PRODUCT_REVIEW: {\n ELEMENT_WIDGET: 'product-review-widget'\n }\n};\nexport const SHOPIFY_GID = 'gid://shopify/';\nexport const SHOPIFY_GID_PRODUCT_ID = `${SHOPIFY_GID}Product/`;\nexport const SHOPIFY_GID_PRODUCT_VARIANT_ID = `${SHOPIFY_GID}ProductVariant/`;\nexport const PAYLOAD_API_ALIASES = {\n Authorization: 'zbNTHXQpW7OmI',\n Method: 'Gba2Tb9Ys7JGu',\n GET: 'JniUtw5dNfeKW',\n POST: 'a9Dmw0qP9hvQE',\n PUT: 'dEnOjbvTzULLK',\n DELETE: 'pLC93Tvsu6g7H',\n shopifyUrl: 'NmIxMTNlYTVlM'\n};\nexport const HIERARCHICAL_FACET_OBJECT_ALIASES: any = {\n collections: 'hierarchicalCollections',\n product_type: 'hierarchicalProductType'\n};\nexport const MAX_LIMIT_HIERARCHICAL = 7;\nexport const AES_SECRET_KEY = '5l3ge1nt36124ti0n';\nexport const SEPARATOR_HIERARCHICAL_FACET = '---5L3D9E---';\n","export default async function swr(url: string, options: any) {\n if (typeof localStorage !== 'undefined' && typeof caches !== 'undefined' && options.method === 'GET' && !options?.ignoreSWR) {\n const data = await getData(url);\n return await data.json();\n } else return fetch(url, options).then((response) => response.json());\n}\n\nasync function getData(url: string) {\n const cacheVersion = 1;\n const cacheName = `sledge-${cacheVersion}`;\n\n return caches.open(cacheName).then((cache: any) => {\n return cache.match(url).then((cachedResponse: any) => {\n const fetchedResponse = fetch(url).then(async (networkResponse) => {\n try {\n // cleaning from different token\n const mainUrl = url.split('?')[0];\n const cacheMatches = await cache.matchAll();\n const filteredCaches = await cacheMatches.filter((f: any) => f.url.includes(mainUrl) && f.url !== url);\n for (const c of filteredCaches) {\n await cache.delete(c.url);\n }\n\n cache.put(url, networkResponse.clone());\n } catch (error) {\n caches.delete(cacheName);\n }\n\n return networkResponse;\n });\n\n return cachedResponse || fetchedResponse;\n });\n });\n}\n","import React from 'react';\n\nexport const usePrevious = (value: any) => {\n const ref = React.useRef();\n React.useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n};\n","import { useEffect, useState } from 'react';\n\nexport function useMediaQuery(query: string): boolean {\n const getMatches = (query: string): boolean => {\n // Prevents SSR issues\n if (typeof window !== 'undefined') {\n return window.matchMedia(query).matches;\n }\n return false;\n };\n\n const [matches, setMatches] = useState<boolean>(getMatches(query));\n\n function handleChange() {\n setMatches(getMatches(query));\n }\n\n useEffect(() => {\n const matchMedia = window.matchMedia(query);\n\n // Triggered at the first client-side load and if query changes\n handleChange();\n\n // Listen matchMedia\n if (matchMedia.addListener) {\n matchMedia.addListener(handleChange);\n } else {\n matchMedia.addEventListener('change', handleChange);\n }\n\n return () => {\n if (matchMedia.removeListener) {\n matchMedia.removeListener(handleChange);\n } else {\n matchMedia.removeEventListener('change', handleChange);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [query]);\n\n return matches;\n}\n","import React from 'react';\n\nexport function useIntersectionObserver(options: { threshold?: number; root?: any; rootMargin?: string }) {\n const { threshold = 1, root = null, rootMargin = '0px' } = options || {};\n const [entry, setEntry] = React.useState<any>(null);\n\n const previousObserver: any = React.useRef(null);\n\n const customRef = React.useCallback(\n (node: any) => {\n if (previousObserver.current) {\n previousObserver.current.disconnect();\n previousObserver.current = null;\n }\n\n if (node?.nodeType === Node.ELEMENT_NODE) {\n const observer = new IntersectionObserver(\n ([entry]) => {\n setEntry(entry);\n },\n { threshold, root, rootMargin }\n );\n\n observer.observe(node);\n previousObserver.current = observer;\n }\n },\n [threshold, root, rootMargin]\n );\n\n return [customRef, entry];\n}\n","import React from 'react';\n\nconst useEffectCallback = (callback: Function, dependencies: any) => {\n const memoizedCallback = React.useCallback(() => {\n if (typeof callback === 'function') {\n callback();\n }\n }, [callback]);\n\n // Run the callback whenever dependencies change\n React.useEffect(() => {\n memoizedCallback();\n }, dependencies);\n};\n\nexport default useEffectCallback;\n","import React from 'react';\n\nexport function useDebounce(value: any, delay: number) {\n const [debouncedValue, setDebouncedValue] = React.useState(value);\n\n React.useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n","import React from 'react';\n\nexport function useIsFirstRender() {\n const renderRef = React.useRef(true);\n\n if (renderRef.current === true) {\n renderRef.current = false;\n return true;\n }\n\n return renderRef.current;\n}\n","import React from 'react';\nimport { objectPresent, setNestedProperty } from '@core/lib/helper';\n\nexport function usePreviewSettings(props: { defaultSettings: any; nestedProperty: string }) {\n const { defaultSettings, nestedProperty } = props;\n\n const [previewSettings, setPreviewSettings] = React.useState(defaultSettings || {});\n\n const updatePreviewSettings = React.useCallback((newSettings: any) => {\n setPreviewSettings((prevSettings: any) => ({\n ...prevSettings,\n ...newSettings\n }));\n }, []);\n\n React.useEffect(() => {\n setNestedProperty({\n obj: window,\n path: nestedProperty,\n value: updatePreviewSettings\n });\n\n return () => {\n setNestedProperty({\n obj: window,\n path: nestedProperty,\n value: undefined\n });\n };\n }, [updatePreviewSettings]);\n\n const { settings: preview_settings = null } = previewSettings || {};\n\n const generalPreviewSettings = objectPresent(preview_settings?.general);\n const wishlistPreviewSettings = objectPresent(preview_settings?.wishlist);\n const productReviewPreviewSettings = objectPresent(preview_settings?.review);\n const instantSearchPreviewSettings = objectPresent(preview_settings?.instantsearch);\n const productRecommendationPreviewSettings = objectPresent(preview_settings?.product_recommendation);\n\n return {\n generalPreviewSettings,\n wishlistPreviewSettings,\n productReviewPreviewSettings,\n instantSearchPreviewSettings,\n productRecommendationPreviewSettings,\n previewSettings\n };\n}\n","import { useIsFirstRender } from './useIsFirstRender';\nimport useEffectCallback from './useEffectCallback';\n\nexport function useEffectOnChange(callback: Function, dependencies: any) {\n const isFirstRender = useIsFirstRender();\n\n useEffectCallback(() => {\n if (isFirstRender) return;\n\n callback();\n }, dependencies);\n}\n","import { AES_SECRET_KEY, PAYLOAD_API_ALIASES } from '@core/lib/const';\nimport swr from './swr';\nimport { useMediaQuery } from '@core/hooks';\nimport CryptoES from 'crypto-es';\nimport { ISledgeProps } from '@core/api/global';\n\ndeclare global {\n interface Window {\n // TODO: Soon `sledgeCommonModule` is deprecated\n sledgeCommonModule: ISledgeProps;\n sledge: ISledgeProps;\n Shopify: any;\n }\n}\n\nexport const sanitizeDataId = (id: any) => {\n if (!id) return '';\n\n let getId = String(id);\n\n if (getId.includes('shopify') && getId.includes('/')) {\n // Shopify Data\n let arrId = getId.split('/');\n return arrId[arrId.length - 1] || getId;\n } else {\n return getId;\n }\n};\n\nexport const setCookie = (params: { cname: string; cvalue: any; expired?: number; expiredBy?: 'day' | 'hour' | 'minute' | 'second' }) => {\n const { cname, cvalue, expired = 0, expiredBy = 'day' } = params;\n\n let setExpired;\n\n if (expiredBy === 'day') setExpired = expired * 1000 * 60 * 60 * 24;\n if (expiredBy === 'hour') setExpired = expired * 1000 * 60 * 60;\n if (expiredBy === 'minute') setExpired = expired * 1000 * 60;\n if (expiredBy === 'second') setExpired = expired * 1000;\n\n if (!expiredBy || !setExpired) return;\n\n const d = new Date();\n d.setTime(d.getTime() + setExpired);\n let expires = 'expires=' + d.toUTCString();\n document.cookie = cname + '=' + cvalue + ';' + expires + ';path=/';\n};\n\nexport const getCookie = (cname: string) => {\n let name = cname + '=';\n let ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) == ' ') {\n c = c.substring(1);\n }\n if (c.indexOf(name) == 0) {\n return c.substring(name.length, c.length);\n }\n }\n return '';\n};\n\nexport const documentReady = (init: any) => {\n document.addEventListener('DOMContentLoaded', init);\n};\n\nexport const getTextBetween = (params: { start: string; end: string; text: string }) => {\n const { start, end, text } = params;\n\n if (start && text.includes(start) && end && text.includes(end)) {\n let getText = text.indexOf(start) + start.length;\n\n return text.substring(getText, text.indexOf(end, getText));\n } else {\n return text;\n }\n};\n\nexport const replaceString = (params: { string: string; find: any[]; replace: any[] }) => {\n let { string, find, replace } = params;\n\n for (var i = 0; i < find.length; i++) {\n string = string.replace(new RegExp(find[i], 'gi'), replace[i]);\n }\n\n return string;\n};\n\nexport const isFunction = (data: any): data is (...args: any[]) => any => typeof data === 'function';\n\nexport const scrollToElement = (params: { element: any; headerOffset: number }) => {\n const { element, headerOffset } = params;\n\n if (!element) return;\n\n var elementPosition = element?.getBoundingClientRect().top;\n var offsetPosition = elementPosition + window.scrollY - headerOffset;\n\n window.scrollTo({\n top: offsetPosition,\n behavior: 'smooth'\n });\n};\n\nexport const getUnixTimestamp = (params?: { addMoreTime?: number; addMoreTimeBy?: 'day' | 'hour' | 'minute' | 'second' }) => {\n const { addMoreTime = 0, addMoreTimeBy = 'day' } = params || {};\n\n let moreTime = 0;\n\n if (addMoreTime) {\n if (addMoreTimeBy === 'day') moreTime = addMoreTime * 60 * 60 * 24;\n if (addMoreTimeBy === 'hour') moreTime = addMoreTime * 60 * 60;\n if (addMoreTimeBy === 'minute') moreTime = addMoreTime * 60;\n if (addMoreTimeBy === 'second') moreTime = addMoreTime;\n }\n\n return Math.floor(Date.now() / 1000) + moreTime;\n};\n\nexport const fetchApi = async (params: {\n url: string;\n method: 'GET' | 'POST' | 'PUT' | 'DELETE';\n authorization?: string | null | '';\n payload?: any;\n headers?: any;\n isSimpleRequest?: boolean;\n isUploadFile?: boolean;\n ignoreSWR?: boolean;\n}) => {\n const { url, method, authorization = '', payload = {}, headers = {}, isSimpleRequest = true, isUploadFile = false, ignoreSWR = false } = params;\n\n var myHeaders = new Headers();\n if (!isSimpleRequest) {\n if (authorization) myHeaders.append('Authorization', `Bearer ${authorization}`);\n\n if (Object.keys(headers).length)\n Object.keys(headers).forEach(function (key) {\n myHeaders.append(key, headers[key]);\n });\n }\n\n var formdata = new FormData();\n if (isSimpleRequest || isUploadFile) {\n if (authorization && isSimpleRequest) formdata.append(PAYLOAD_API_ALIASES.Authorization, authorization);\n\n formdata.append(PAYLOAD_API_ALIASES.Method, PAYLOAD_API_ALIASES[method]);\n\n if (Object.keys(payload).length)\n Object.keys(payload).forEach(function (key) {\n if (isUploadFile && payload?.files)\n [...payload.files].map((item: File) => {\n formdata.append('files', item, item.name);\n });\n\n formdata.append(key, payload[key]);\n });\n }\n\n const fixMethod = isSimpleRequest ? 'POST' : method;\n var requestOptions: any = {\n method: fixMethod,\n redirect: 'follow',\n headers: myHeaders,\n body: fixMethod === 'GET' ? null : isSimpleRequest || isUploadFile ? formdata : JSON.stringify(payload),\n ignoreSWR\n };\n\n return await swr(`${url}`, requestOptions);\n};\n\nexport const convertDate = (\n date: any,\n options: any = {\n timeZone: 'Asia/Jakarta',\n year: 'numeric',\n month: 'numeric',\n day: 'numeric'\n }\n) => new Date(date).toLocaleString('en-US', options);\n\nexport const currentMediaQuery = (): string | 'xs' | 'sm' | 'md' | 'lg' | 'xl' => {\n const isSmallDevice = useMediaQuery('(min-width: 425px)');\n const isMediumDevice = useMediaQuery('(min-width: 768px)');\n const isLargeDevice = useMediaQuery('(min-width: 1024px)');\n const isExtraLargeDevice = useMediaQuery('(min-width: 1280px)');\n\n let currentMedia = 'xs';\n\n if (isSmallDevice) currentMedia = 'sm';\n if (isMediumDevice) currentMedia = 'md';\n if (isLargeDevice) currentMedia = 'lg';\n if (isExtraLargeDevice) currentMedia = 'xl';\n\n return currentMedia;\n};\n\nexport const encryptText = (text: string) => {\n return CryptoES.AES.encrypt(text, AES_SECRET_KEY).toString();\n};\n\nexport const decryptText = (encryptText: string) => {\n let bytes = CryptoES.AES.decrypt(encryptText, AES_SECRET_KEY);\n\n return bytes.toString(CryptoES.enc.Utf8);\n};\n\nexport const watchElement = ({ selector = null, init = null, customInit = false }: { selector?: any; init?: any; customInit?: boolean }) => {\n if (!selector || !init) return;\n\n // Watch Element\n var observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n var nodes = Array.prototype.slice.call(mutation.addedNodes);\n nodes.forEach(function (node) {\n if (node.nodeType === 1 && (node.matches(selector) || node.querySelector(selector))) {\n if (!customInit) {\n let elementNode = Array.from(node.querySelectorAll(selector));\n\n if (elementNode.length) {\n elementNode.map((item: any) => {\n init(item);\n });\n }\n } else {\n init();\n }\n }\n });\n });\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: false,\n characterData: false\n });\n // End Watch Element\n};\n\nexport const getFillRating = ({\n average,\n item,\n index,\n productId,\n customComponentId,\n unixTimestamp\n}: {\n average: any;\n item: any;\n index: number;\n productId?: any;\n customComponentId?: any;\n unixTimestamp?: any;\n}) => {\n let ratingValue = Math.floor(parseFloat(average));\n\n let getCommaValue = String(average).includes(',') ? String(average).split(',') : [];\n let getCommaValueDot = String(average).includes('.') ? String(average).split('.') : [];\n let isHaveCommaValue = getCommaValue.length || getCommaValueDot.length;\n let commaValue = isHaveCommaValue ? getCommaValue[1] || getCommaValueDot[1] : 0;\n let fillOther = 'fill-0';\n\n if (item > ratingValue && ratingValue + 1 === item) {\n fillOther = `fill-${commaValue}`;\n }\n\n fillOther = item <= ratingValue ? 'full' : fillOther;\n\n let offset;\n\n if (fillOther === 'fill-0') {\n offset = '0%';\n }\n\n if (fillOther === 'fill-1') {\n offset = '25%';\n }\n\n if (fillOther === 'fill-2') {\n offset = '35%';\n }\n\n if (fillOther === 'fill-3') {\n offset = '40%';\n }\n\n if (fillOther === 'fill-4') {\n offset = '45%';\n }\n\n if (fillOther === 'fill-5') {\n offset = '50%';\n }\n\n if (fillOther === 'fill-6') {\n offset = '60%';\n }\n\n if (fillOther === 'fill-7') {\n offset = '70%';\n }\n\n if (fillOther === 'fill-8') {\n offset = '80%';\n }\n\n if (fillOther === 'fill-9') {\n offset = '90%';\n }\n\n if (fillOther === 'full') {\n offset = '100%';\n }\n\n let suffixGradientId = `-${fillOther}-${index}-${productId ? productId : unixTimestamp}${customComponentId ? `-${customComponentId}` : ''}`;\n let strokeGradientId = `rating-stroke${suffixGradientId}`;\n let fillGradientId = `rating-gradient${suffixGradientId}`;\n\n return {\n suffixGradientId,\n strokeGradientId,\n fillGradientId,\n offset,\n fillOther\n };\n};\n\nexport const stripTags = (html: string) => {\n return html.replace(/(<([^>]+)>)/gi, '');\n};\n\nexport const stringToFunction = (functionName: string) => {\n if (!functionName) return null;\n\n try {\n return eval(functionName);\n } catch (error) {\n return null;\n }\n};\n\nexport const sumArray = (array: any[]) => array.reduce((a, b) => a + b, 0);\n\nexport const stringToSlug = (text: string) => {\n if (!text) return text;\n\n return text\n .toLowerCase()\n .replace(/[^\\w ]+/g, '')\n .replace(/ +/g, '-');\n};\n\nexport const shopifyFormatMoney = (cents: any, format: string) => {\n if (typeof cents == 'string') {\n cents = cents.replace('.', '');\n }\n\n var value = '';\n var placeholderRegex = /\\{\\{\\s*(\\w+)\\s*\\}\\}/;\n var formatString: string = format || '${{amount}}';\n\n function defaultOption(opt: any, def: any) {\n return typeof opt == 'undefined' ? def : opt;\n }\n\n function formatWithDelimiters(number: any, precision: any, thousands?: any, decimal?: any) {\n precision = defaultOption(precision, 2);\n thousands = defaultOption(thousands, ',');\n decimal = defaultOption(decimal, '.');\n\n if (isNaN(number) || number == null) {\n return 0;\n }\n\n number = (number / 100.0).toFixed(precision);\n\n var parts = number.split('.'),\n dollars = parts[0].replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, '$1' + thousands),\n cents = parts[1] ? decimal + parts[1] : '';\n\n return dollars + cents;\n }\n\n switch (formatString.match(placeholderRegex)?.[1]) {\n case 'amount':\n value = formatWithDelimiters(cents, 2);\n break;\n case 'amount_no_decimals':\n value = formatWithDelimiters(cents, 0);\n break;\n case 'amount_with_comma_separator':\n value = formatWithDelimiters(cents, 2, '.', ',');\n break;\n case 'amount_no_decimals_with_comma_separator':\n value = formatWithDelimiters(cents, 0, '.', ',');\n break;\n }\n\n return formatString.replace(placeholderRegex, value);\n};\n\nexport const selectedLocaleJs = () => {\n if (typeof window !== 'undefined') {\n const shopifyLocale = window?.Shopify?.locale;\n const sledgeLocale = window?.sledgeCommonModule?.config?.locale || window?.sledge?.config?.locale;\n\n return shopifyLocale ? shopifyLocale : sledgeLocale || '';\n }\n\n return '';\n};\n\nexport const sledgeConfigJs = () => {\n let sledgeConfig: ISledgeProps['config'] = {};\n\n if (typeof window !== 'undefined') {\n sledgeConfig = window?.sledgeCommonModule?.config || window?.sledge?.config;\n\n return sledgeConfig || {};\n }\n\n return sledgeConfig;\n};\n\nexport const dispatchCustomEvent = (eventName: string, detail?: any): void => {\n const customEvent = new CustomEvent(eventName, { bubbles: true, cancelable: true, composed: false, ...(detail && { detail }) });\n\n document.dispatchEvent(customEvent);\n};\n\nexport const listenerCustomEvent = (eventName: string, listener: (event: CustomEvent) => void, method: 'on' | 'off'): void => {\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n\n document[domMethod](eventName, (event: Event) => {\n if (event instanceof CustomEvent) {\n listener(event);\n }\n });\n};\n\nexport const addCustomCode = ({ type, code }: { type: 'js' | 'css'; code: any }) => {\n const elementSelector = type === 'js' ? 'script' : 'style';\n const elementId = 'sledge-custom-code';\n\n if (document.querySelector(`${elementSelector}#${elementId}`)) document.querySelector(`${elementSelector}#${elementId}`)?.remove?.();\n\n var customCodeElement = document.createElement(elementSelector);\n customCodeElement.id = elementId;\n\n try {\n customCodeElement.appendChild(document.createTextNode(code));\n } catch (e) {\n customCodeElement.innerHTML = code;\n }\n\n document[type === 'js' ? 'body' : 'head'].appendChild(customCodeElement);\n};\n\nexport const sanitizeObjectDataString = (props: { value: any; replace: { [key: string]: any } }): any => {\n const { value, replace } = props;\n\n if (typeof value === 'string') {\n return value.replace(/\\{\\{\\s*(\\w+(?:\\.\\w+)*(?:\\[\\d+\\])?(?:\\.\\w+)?)\\s*\\}\\}/g, (match, key) => {\n const parts = key.split('.');\n let currentValue: any = replace;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (part.endsWith(']')) {\n const [arrayKey, index] = part.split('[');\n const arrayValue = currentValue[arrayKey];\n if (Array.isArray(arrayValue)) {\n const arrayIndex = parseInt(index, 10);\n currentValue = arrayValue[arrayIndex];\n } else {\n currentValue = undefined;\n break;\n }\n } else if (currentValue && typeof currentValue === 'object' && part in currentValue) {\n currentValue = currentValue[part];\n } else {\n currentValue = undefined;\n break;\n }\n }\n\n // If the value is not found, return an empty string\n return currentValue !== undefined ? String(currentValue) : '';\n });\n } else if (Array.isArray(value)) {\n return value.map((item) => sanitizeObjectDataString({ value: item, replace }));\n } else if (typeof value === 'object' && value !== null) {\n const sanitizedObject: { [key: string]: any } = {};\n for (const [key, val] of Object.entries(value)) {\n const parts = key.split('.');\n let currentObj = sanitizedObject;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (i === parts.length - 1) {\n if (Array.isArray(val)) {\n currentObj[part] = val.map((item) => sanitizeObjectDataString({ value: item, replace }));\n } else {\n currentObj[part] = sanitizeObjectDataString({ value: val, replace });\n }\n } else {\n if (!currentObj[part]) {\n currentObj[part] = {};\n }\n currentObj = currentObj[part];\n }\n }\n }\n return sanitizedObject;\n } else {\n return value;\n }\n};\n\nexport const isValidExpression = (expression: any) => {\n try {\n new Function(`return ${expression}`)();\n return true;\n } catch (error) {\n return false;\n }\n};\n\nexport const isIdenticalOfCompareObject = (a: any, b: any): boolean => {\n if (Object.is(a, b)) return true;\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n if (a.constructor !== b.constructor) return false;\n if (Array.isArray(a)) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!isIdenticalOfCompareObject(a[i], b[i])) return false;\n }\n return true;\n }\n const keys = Object.keys(a);\n if (keys.length !== Object.keys(b).length) return false;\n for (const key of keys) {\n if (!Object.prototype.hasOwnProperty.call(b, key) || !isIdenticalOfCompareObject(a[key], b[key])) return false;\n }\n return true;\n }\n return a !== a && b !== b; // NaN check\n};\n\nexport const setNestedProperty = (props: { obj: { [key: string]: any }; path: string; value: any }): { [key: string]: any } | null => {\n const { obj, path, value } = props;\n\n if (typeof obj !== 'object' || obj === null || typeof path !== 'string') {\n return null;\n }\n\n const parts = path.split('.');\n let current: { [key: string]: any } = obj;\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (i === parts.length - 1) {\n current[part] = value;\n } else {\n if (!(part in current) || typeof current[part] !== 'object') {\n current[part] = {};\n }\n current = current[part] as { [key: string]: any };\n }\n }\n\n return obj;\n};\n\nexport const objectPresent = (obj: any) => {\n if (typeof obj !== 'object' || obj === null || (obj && !Object.keys(obj)?.length)) return null;\n\n return obj;\n};\n\nexport const setElementAttribute = ({ element, attributeName, value }: { element: HTMLElement | null; attributeName: string; value: string }) => {\n if (element && element.hasAttribute(attributeName)) {\n element.setAttribute(attributeName, value);\n }\n};\n","import React from 'react';\nimport * as PopoverElement from '@radix-ui/react-popover';\n\nimport './Popover.css';\n\nexport interface IPopoverProps {\n trigger: JSX.Element;\n content: JSX.Element | null;\n isOpen?: boolean | false;\n setIsOpen?(value: React.SetStateAction<boolean>): void;\n hideCloseIcon?: boolean | false;\n align?: 'start' | 'center' | 'end' | undefined;\n className?: string;\n withOpenState?: boolean;\n withArrow?: boolean;\n customArrow?: string;\n sideOffset?: number;\n alignOffset?: number;\n}\n\nexport const Popover = ({\n trigger,\n content,\n isOpen,\n setIsOpen,\n hideCloseIcon,\n align,\n className,\n withOpenState = true,\n withArrow = true,\n customArrow = '',\n sideOffset = 5,\n alignOffset = 0\n}: IPopoverProps) => {\n const [open, setOpen] = React.useState(withOpenState ? isOpen : false);\n\n React.useEffect(() => {\n let arrowElement = document?.querySelector('.PopoverArrow')?.parentElement;\n\n if (arrowElement && customArrow?.length) {\n arrowElement.style.display = 'inline-flex';\n arrowElement.innerHTML = customArrow;\n }\n }, [open]);\n\n return (\n <PopoverElement.Root\n {...(withOpenState && {\n open: isOpen\n })}\n {...(setIsOpen && {\n onOpenChange: (open: boolean) => {\n setOpen(open);\n setIsOpen(open);\n }\n })}\n >\n <PopoverElement.Trigger asChild>{trigger}</PopoverElement.Trigger>\n <PopoverElement.Portal>\n <PopoverElement.Content\n className={`sledge__popover-content ${className ? className : ''}`}\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n align={align}\n {...(setIsOpen && {\n onOpenAutoFocus: () => setIsOpen(true),\n onCloseAutoFocus: () => setIsOpen(false)\n })}\n >\n {content}\n {!hideCloseIcon && (\n <PopoverElement.Close className=\"PopoverClose\" aria-label=\"Close\">\n <svg width={15} height={15} viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n </PopoverElement.Close>\n )}\n {withArrow ? <PopoverElement.Arrow className=\"PopoverArrow\" /> : null}\n </PopoverElement.Content>\n </PopoverElement.Portal>\n </PopoverElement.Root>\n );\n};\n","import React from 'react';\nimport './Progress.css';\n\nimport * as ProgressElement from '@radix-ui/react-progress';\n\nexport interface IProgressProps {\n value: string;\n total: number;\n fillColor?: any;\n outlineColor?: any;\n delay?: number;\n}\n\nexport const Progress = ({ value, total, fillColor = '', outlineColor = '', delay = 150 }: IProgressProps) => {\n const [progress, setProgress] = React.useState(0);\n\n React.useEffect(() => {\n let valueProgress = (+value / total) * 100;\n\n if (delay) {\n const timer = setTimeout(() => {\n if (valueProgress) setProgress(valueProgress);\n }, delay);\n return () => clearTimeout(timer);\n } else {\n setProgress(valueProgress);\n }\n }, []);\n\n return (\n <ProgressElement.Root\n className=\"sledge__progress\"\n value={progress}\n style={\n outlineColor\n ? {\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: outlineColor\n }\n : {}\n }\n >\n <ProgressElement.Indicator\n className=\"sledge__progress-indicator ProgressIndicator\"\n style={{\n ...{ transform: `translateX(-${100 - progress}%)` },\n ...(fillColor && {\n backgroundColor: fillColor\n })\n }}\n />\n </ProgressElement.Root>\n );\n};\n","import './Checkbox.css';\n\nimport * as CheckboxElement from '@radix-ui/react-checkbox';\n\nexport interface ICheckboxProps {\n id: string;\n name: string;\n value: string;\n required?: boolean;\n label?: React.ReactNode;\n checked?: boolean;\n labelStyle?: any;\n onClick?: React.MouseEventHandler<HTMLButtonElement> | undefined;\n}\n\nexport const Checkbox = ({ id, name, value, required, label, checked, labelStyle = {}, onClick }: ICheckboxProps) => {\n return (\n <div className=\"sledge__checkbox-wrapper\">\n <CheckboxElement.Root className=\"sledge__checkbox-root\" checked={checked} id={id} name={name} value={value} required={required} onClick={onClick}>\n <CheckboxElement.Indicator className=\"sledge__checkbox-indicator\">\n <svg width={10} height={8} viewBox=\"0 0 10 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.72318 0.237414C10.0707 0.574491 10.0942 1.14584 9.77561 1.51356L4.40976 7.70711C4.25243 7.88871 4.03181 7.99443 3.79903 7.99979C3.56625 8.00514 3.3415 7.90965 3.17686 7.73545L0.250031 4.63868C-0.0833435 4.28595 -0.0833435 3.71406 0.250031 3.36133C0.583405 3.00859 1.12391 3.00859 1.45729 3.36133L3.75367 5.79105L8.51706 0.292899C8.83564 -0.0748211 9.37564 -0.0996624 9.72318 0.237414Z\"\n fill=\"white\"\n />\n </svg>\n </CheckboxElement.Indicator>\n </CheckboxElement.Root>\n {label && (\n <label className=\"sledge__checkbox-label\" htmlFor={id} style={labelStyle}>\n {label}\n </label>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { InputField, Tooltip } from '@core/components';\nimport './Slider.css';\n\nimport * as SliderElement from '@radix-ui/react-slider';\nimport * as Form from '@radix-ui/react-form';\nimport { useEffectOnChange } from '@core/hooks';\n\nexport interface ISliderProps {\n type?: 'slider' | 'input_range' | 'slider_with_input_range' | string;\n prefixInputRange?: string;\n descriptionInputRange?: string;\n valueFilterSliderChange?: any[];\n labelStyle?: any;\n value: number[];\n textValue?: any[];\n min?: number;\n max: number;\n step?: number;\n setValueCommit?(value: number[]): void;\n setValueChange?(value: number[]): void;\n wrapperClassName?: string;\n minMaxClassName?: string;\n minMaxTextClassName?: string;\n}\n\n// Formatting decimal value with 2 number\nconst inputRangeFormatter = (value: any) => {\n const cleanValue = String(value)?.replace?.(/[^0-9.]/g, '');\n const numValue = parseFloat(cleanValue);\n\n if (isNaN(numValue)) return value;\n\n if (Number.isInteger(numValue)) return numValue.toString();\n\n const [integerPart, decimalPart] = cleanValue.split('.');\n const formattedDecimal = (decimalPart || '').slice(0, 2).padEnd(2, '0');\n\n return `${integerPart}.${formattedDecimal}`;\n};\n\nexport const Slider = (props: ISliderProps) => {\n const {\n type = 'slider',\n prefixInputRange = '',\n descriptionInputRange = '',\n valueFilterSliderChange = [],\n labelStyle = {},\n value,\n textValue = [],\n min,\n max,\n step = 1,\n setValueCommit,\n setValueChange,\n wrapperClassName = '',\n minMaxClassName = '',\n minMaxTextClassName = ''\n } = props;\n\n const [inputRangeMin, setInputRangeMin] = React.useState(inputRangeFormatter(value?.[0]));\n const [inputRangeMax, setInputRangeMax] = React.useState(inputRangeFormatter(value?.[1] || value?.[0]));\n\n const delayInputRangeRef = React.useRef<any>(null);\n\n let content: any = textValue?.length ? textValue : value;\n\n const hasMaxValue = value?.length && value?.[1];\n const FormWrapper = String(type)?.includes('input_range') ? Form.Root : React.Fragment;\n const isTypeInputRange = type === 'input_range';\n const isTypeIncludeSlider = String(type)?.includes('slider');\n const isTypeIncludeInputRange = String(type)?.includes('input_range');\n\n const handleChangeInputRange = ({ event, type }: { event: React.ChangeEvent<HTMLInputElement>; type: 'min' | 'max' }) => {\n let valueInput: any = event?.target?.value;\n\n // Allowed number only\n if (!Number(valueInput) && Number(valueInput) !== 0) return;\n\n let valueCommit: number[] = type === 'min' ? [valueInput || 0, value?.[1] || value?.[0]] : [value?.[0], valueInput || 0];\n\n if (type === 'min') {\n setInputRangeMin(valueInput);\n } else {\n setInputRangeMax(valueInput);\n }\n\n if (delayInputRangeRef.current) {\n clearTimeout(delayInputRangeRef.current);\n }\n\n delayInputRangeRef.current = setTimeout(() => {\n const lastValueMin = valueCommit?.[0];\n const lastValueMax = valueCommit?.[1] || lastValueMin;\n const valueInputRange = inputRangeFormatter(type === 'min' ? lastValueMax : lastValueMin);\n const valueCommitFiltered = [valueInputRange, valueInputRange];\n\n valueInput = inputRangeFormatter(valueInput);\n valueCommit = [inputRangeFormatter(valueCommit[0]), inputRangeFormatter(valueCommit[1])];\n\n let filterValueMinOrMax = false;\n if (type === 'min') {\n filterValueMinOrMax = Number(valueInput) > Number(lastValueMax);\n } else {\n filterValueMinOrMax = Number(valueInput) < Number(lastValueMin);\n }\n\n // Filtering input range value when hit before min or after max\n if (filterValueMinOrMax) {\n setInputRangeMin(valueInputRange);\n setInputRangeMax(valueInputRange);\n\n setValueChange?.(valueCommitFiltered);\n setValueCommit?.(valueCommitFiltered);\n } else {\n if (type === 'min') {\n setInputRangeMin(valueInput);\n } else {\n setInputRangeMax(valueInput);\n }\n\n setValueChange?.(valueCommit);\n setValueCommit?.(valueCommit);\n }\n }, 500);\n };\n\n // Detect reset value for input range\n useEffectOnChange(() => {\n if (isTypeIncludeInputRange && !valueFilterSliderChange?.length) {\n setInputRangeMin(inputRangeFormatter(value?.[0]));\n setInputRangeMax(inputRangeFormatter(value?.[1] || value?.[0]));\n }\n }, [valueFilterSliderChange]);\n\n return (\n <div className={`sledge__slider-wrapper ${wrapperClassName}`} data-slider-type={type}>\n <FormWrapper>\n {isTypeIncludeInputRange ? (\n <>\n {isTypeInputRange && descriptionInputRange ? (\n <div className=\"sledge__slider-input-range-description\" style={labelStyle}>\n {descriptionInputRange}\n </div>\n ) : null}\n\n <div className=\"sledge__slider-input-range-wrapper\">\n {isTypeInputRange && prefixInputRange ? (\n <div className=\"sledge__slider-input-range-prefix\" style={labelStyle}>\n {prefixInputRange}\n </div>\n ) : null}\n <InputField\n className=\"sledge__slider-input-range-minmax\"\n type=\"text\"\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => handleChangeInputRange({ event, type: 'min' })}\n value={inputRangeMin}\n style={labelStyle}\n />\n <span className=\"sledge__slider-input-range-minmax-separator\">-</span>\n <InputField\n className=\"sledge__slider-input-range-minmax\"\n type=\"text\"\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => handleChangeInputRange({ event, type: 'max' })}\n value={inputRangeMax}\n style={labelStyle}\n />\n </div>\n </>\n ) : null}\n {isTypeIncludeSlider ? (\n <>\n <form>\n <SliderElement.Root\n className=\"sledge__SliderRoot\"\n value={value}\n {...(typeof min !== 'undefined'\n ? {\n min\n }\n : {})}\n max={max}\n step={step}\n aria-label=\"Volume\"\n onValueCommit={(valueCommit: number[]) => setValueCommit?.(valueCommit)}\n onValueChange={(valueChange: number[]) => {\n setValueChange?.(valueChange);\n if (isTypeIncludeInputRange) {\n setInputRangeMin(inputRangeFormatter(valueChange?.[0]));\n setInputRangeMax(inputRangeFormatter(valueChange?.[1] || valueChange?.[0]));\n }\n }}\n >\n <SliderElement.Track className=\"sledge__SliderTrack\">\n <SliderElement.Range className=\"sledge__SliderRange\" />\n </SliderElement.Track>\n <Tooltip\n {...(textValue?.length\n ? {\n innerHTMLContent: content[0]\n }\n : {\n content: content[0]\n })}\n customArrow={`<svg width=\"19\" height=\"5\" viewBox=\"0 0 19 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9 4.99998C9 9.48298e-05 16.4996 1.99678e-05 18.4999 0L9 2.2985e-06L0.5 2.04891e-06C9 2.2985e-06 9 4.99998 9 4.99998Z\" fill=\"#43c6ac\"/></svg>`}\n wrapTrigger={false}\n >\n <SliderElement.Thumb className=\"sledge__SliderThumb\" />\n </Tooltip>\n {hasMaxValue ? (\n <Tooltip\n {...(textValue?.length\n ? {\n innerHTMLContent: content[1]\n }\n : {\n content: content[1]\n })}\n customArrow={`<svg width=\"19\" height=\"5\" viewBox=\"0 0 19 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9 4.99998C9 9.48298e-05 16.4996 1.99678e-05 18.4999 0L9 2.2985e-06L0.5 2.04891e-06C9 2.2985e-06 9 4.99998 9 4.99998Z\" fill=\"#43c6ac\"/></svg>`}\n wrapTrigger={false}\n >\n <SliderElement.Thumb className=\"sledge__SliderThumb\" />\n </Tooltip>\n ) : null}\n </SliderElement.Root>\n </form>\n <div className={`sledge__slider-minmax ${minMaxClassName}`}>\n <div className={`sledge__slider-minmax-text ${minMaxTextClassName}`} dangerouslySetInnerHTML={{ __html: content[0] }}></div>\n {hasMaxValue ? <div className={`sledge__slider-minmax-text ${minMaxTextClassName}`} dangerouslySetInnerHTML={{ __html: content[1] }}></div> : null}\n </div>\n </>\n ) : null}\n </FormWrapper>\n </div>\n );\n};\n","import React from 'react';\n\nimport { ChevronArrowLeftIcon, ChevronArrowRightIcon } from '@core/components';\nimport './Pagination.css';\nimport { OBJECT_DATA_STRING_KEY } from '@core/lib/const';\n\nexport interface IPaginationProps {\n type?: string;\n currentPage: number;\n totalPage: number;\n totalResult: number;\n onChange(page: number): void;\n pageInfo?: string;\n}\n\nconst paginationTypes = ['standard', 'numbered_button'];\n\nexport const Pagination = (props: IPaginationProps) => {\n let { type = 'standard', currentPage, totalPage, totalResult, onChange, pageInfo: pageInfoProp } = props;\n\n if (!paginationTypes.includes(type)) type = 'standard';\n\n const isDisabledPreviousPage = currentPage === 1;\n const isDisabledNextPage = currentPage === totalPage;\n\n const [pageInfo, setPageInfo] = React.useState<any>(null);\n\n const handlePageInfo = () => {\n const defaultPageInfo = (\n <>\n Page {currentPage} of {totalPage} - total {totalResult} result\n </>\n );\n\n if (pageInfoProp) {\n pageInfoProp = pageInfoProp.replaceAll(OBJECT_DATA_STRING_KEY.CURRENT_PAGE, String(currentPage));\n pageInfoProp = pageInfoProp.replaceAll(OBJECT_DATA_STRING_KEY.TOTAL_PAGE, String(totalPage));\n pageInfoProp = pageInfoProp.replaceAll(OBJECT_DATA_STRING_KEY.TOTAL_RESULT, String(totalResult));\n }\n\n setPageInfo(pageInfoProp ? pageInfoProp : defaultPageInfo);\n };\n\n const handlePreviousPage = () => {\n if (isDisabledPreviousPage) return;\n\n if (currentPage > 1) {\n onChange(currentPage - 1);\n }\n };\n\n const handleNextPage = () => {\n if (isDisabledNextPage) return;\n\n if (currentPage < totalPage) {\n onChange(currentPage + 1);\n }\n };\n\n const additionalPreviousPagination = {\n ...(isDisabledPreviousPage\n ? {\n disabled: true\n }\n : {\n onClick: () => handlePreviousPage()\n })\n };\n\n const additionalNextPagination = {\n ...(isDisabledNextPage\n ? {\n disabled: true\n }\n : {\n onClick: () => handleNextPage()\n })\n };\n\n const StandardLayout = () => (\n <>\n <button type=\"button\" className=\"sledge__pagination-navigation\" {...additionalPreviousPagination}>\n <ChevronArrowLeftIcon width={16} height={16} color=\"black\" />\n </button>\n <span>{pageInfo}</span>\n <button type=\"button\" className=\"sledge__pagination-navigation\" {...additionalNextPagination}>\n <ChevronArrowRightIcon width={16} height={16} color=\"black\" />\n </button>\n </>\n );\n\n const NumberedButtonLayout = () => {\n const separatorDots = '...';\n\n const getPageNumbers = (): (number | string)[] => {\n const pageNumbers: (number | string)[] = [];\n const visiblePages = 5;\n const halfVisible = Math.floor(visiblePages / 2);\n\n let startPage = Math.max(currentPage - halfVisible, 1);\n let endPage = Math.min(startPage + visiblePages - 1, totalPage);\n\n if (endPage - startPage + 1 < visiblePages) {\n startPage = Math.max(endPage - visiblePages + 1, 1);\n }\n\n if (startPage > 1) {\n pageNumbers.push(1);\n if (startPage > 2) {\n pageNumbers.push(separatorDots);\n }\n }\n\n for (let i = startPage; i <= endPage; i++) {\n pageNumbers.push(i);\n }\n\n if (endPage < totalPage) {\n if (endPage < totalPage - 1) {\n pageNumbers.push(separatorDots);\n }\n pageNumbers.push(totalPage);\n }\n\n return pageNumbers;\n };\n\n return (\n <>\n {isDisabledPreviousPage ? null : (\n <button className=\"sledge__pagination-navigation-borderless\" {...additionalPreviousPagination}>\n <ChevronArrowLeftIcon width={22} height={22} color=\"#43c6ac\" />\n </button>\n )}\n\n <div className=\"sledge__pagination-numbers\">\n {getPageNumbers()?.length\n ? getPageNumbers().map((pageNumber, index) => {\n const isActive = currentPage === pageNumber;\n\n return (\n <React.Fragment key={index}>\n {pageNumber === separatorDots ? (\n <span className=\"sledge__pagination-dots\">{pageNumber}</span>\n ) : (\n <button\n onClick={() => {\n if (!isActive) onChange(pageNumber as number);\n }}\n className={`sledge__pagination-button ${isActive ? 'sledge__pagination-button--active' : ''}`}\n >\n {pageNumber}\n </button>\n )}\n </React.Fragment>\n );\n })\n : null}\n </div>\n\n {isDisabledNextPage ? null : (\n <button className=\"sledge__pagination-navigation-borderless\" {...additionalNextPagination}>\n <ChevronArrowRightIcon width={22} height={22} color=\"#43c6ac\" />\n </button>\n )}\n </>\n );\n };\n\n const renderPaginationLayout = () => {\n switch (type) {\n case 'standard':\n return <StandardLayout />;\n break;\n case 'numbered_button':\n return <NumberedButtonLayout />;\n break;\n\n default:\n return <StandardLayout />;\n break;\n }\n };\n\n React.useEffect(() => {\n handlePageInfo();\n }, []);\n\n return (\n <div className=\"sledge__pagination\" data-pagination-type={type}>\n {renderPaginationLayout()}\n </div>\n );\n};\n","import * as RadioGroupElement from '@radix-ui/react-radio-group';\nimport './RadioGroup.css';\nimport { VirtualizedList } from '@core/components';\n\nexport interface IRadioGroupProps {\n id: string;\n name: string;\n required?: boolean;\n defaultValue?: string | undefined;\n items: Array<{\n label: string;\n value: string;\n }>;\n labelStyle?: any;\n onValueChange?: ((value: string) => void) | undefined;\n useVirtualized?: boolean;\n scrollElement?: Element | (Window & typeof globalThis) | undefined | null;\n selector?: string;\n parentRef?: any;\n}\n\nconst rowRenderer = ({ virtualized, item, id, labelStyle }: { virtualized?: any; item: { label: string; value: string }; id: string; labelStyle?: any }) => {\n const { index, key = '' } = virtualized || {};\n\n const { label, value } = item;\n\n const content = (\n <>\n <RadioGroupElement.Item className=\"sledge__radio-group-item\" value={value} id={`${id}${index}`}>\n <RadioGroupElement.Indicator className=\"sledge__radio-group-indicator\" />\n </RadioGroupElement.Item>\n <label className=\"sledge__radio-group-label\" htmlFor={`${id}${index}`} style={labelStyle}>\n {label}\n </label>\n </>\n );\n\n return (\n <div className=\"sledge__radio-group-item-flex\" key={key || index}>\n {content}\n </div>\n );\n};\n\nexport const RadioGroup = ({ id, name, required, defaultValue, items, labelStyle = {}, onValueChange, useVirtualized = false, scrollElement, selector, parentRef }: IRadioGroupProps) => {\n return (\n <div className=\"sledge__radio-group-wrapper\">\n <form>\n <RadioGroupElement.Root\n className=\"sledge__radio-group-root\"\n aria-label=\"View density\"\n defaultValue={defaultValue}\n id={id}\n name={name}\n required={required}\n onValueChange={onValueChange}\n >\n {useVirtualized ? (\n <VirtualizedList\n rowCount={items?.length}\n rowRenderer={({ index, key }) =>\n rowRenderer({\n virtualized: {\n index,\n key\n },\n item: items[index],\n id,\n labelStyle\n })\n }\n scrollElement={scrollElement}\n selector={selector}\n parentRef={parentRef}\n />\n ) : (\n items.map((item: { label: string; value: string }, index: number) =>\n rowRenderer({\n virtualized: {\n index\n },\n item,\n id,\n labelStyle\n })\n )\n )}\n </RadioGroupElement.Root>\n </form>\n </div>\n );\n};\n","import * as CheckboxElement from '@radix-ui/react-checkbox';\nimport { Tooltip } from '@core/components';\nimport './ColorSwatch.css';\n\nexport interface IColorSwatchProps {\n id: string;\n name: string;\n value: string;\n rgb: string;\n image: string;\n required?: boolean;\n checked?: boolean;\n onClick?: React.MouseEventHandler<HTMLButtonElement> | undefined;\n}\n\nexport const ColorSwatch = ({ id, name, value, rgb, image, required, checked, onClick }: IColorSwatchProps) => {\n const styles = {\n ...(image?.length\n ? {\n backgroundImage: `url(\"${image}\")`,\n backgroundSize: 'contain'\n }\n : {\n backgroundColor: rgb\n })\n };\n\n return (\n <Tooltip\n content={value}\n customArrow={`<svg width=\"19\" height=\"5\" viewBox=\"0 0 19 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9 4.99998C9 9.48298e-05 16.4996 1.99678e-05 18.4999 0L9 2.2985e-06L0.5 2.04891e-06C9 2.2985e-06 9 4.99998 9 4.99998Z\" fill=\"#43c6ac\"/></svg>`}\n wrapTrigger={false}\n >\n <div className=\"sledge__color-swatch-wrapper\">\n <CheckboxElement.Root\n className=\"sledge__color-swatch-root\"\n checked={checked}\n id={id}\n name={name}\n value={value}\n required={required}\n onClick={onClick}\n style={styles}\n ></CheckboxElement.Root>\n </div>\n </Tooltip>\n );\n};\n","import React, { ReactNode } from 'react';\nimport * as SelectElement from '@radix-ui/react-select';\nimport './Select.css';\n\nexport interface ISelectProps {\n name: string;\n placeholder: string;\n required?: boolean;\n defaultValue?: any;\n items: Array<{\n label: ReactNode;\n value: string;\n }>;\n labelStyle?: any;\n onValueChange?: ((value: string) => void) | undefined;\n}\n\nexport const Select = ({ name, placeholder, required, defaultValue, items, labelStyle = {}, onValueChange }: ISelectProps) => {\n const [isLoading, setIsLoading] = React.useState(true);\n\n React.useEffect(() => {\n // Trigger Re-render on defaultValue change\n setIsLoading(true);\n setTimeout(() => {\n setIsLoading(false);\n }, 0);\n }, [defaultValue]);\n\n const handleClassNameRoot = (open: boolean) => {\n if (!open) return;\n\n const selectContentElement = document.querySelector('.sledge__select-content');\n if (selectContentElement) {\n const selectRootElement = selectContentElement.parentElement;\n if (selectRootElement) selectRootElement.classList.toggle('sledge__select-root');\n }\n };\n\n return (\n <>\n {isLoading ? null : (\n <div className=\"sledge__select-wrapper\">\n <SelectElement.Root\n name={name}\n required={required}\n onValueChange={onValueChange}\n onOpenChange={(open) => handleClassNameRoot(open)}\n {...(defaultValue\n ? {\n defaultValue\n }\n : {})}\n >\n <SelectElement.Trigger className=\"sledge__select-trigger\" style={labelStyle}>\n <SelectElement.Value placeholder={placeholder} />\n <SelectElement.Icon className=\"sledge__select-icon\">\n <svg width={15} height={15} viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n </SelectElement.Icon>\n </SelectElement.Trigger>\n <SelectElement.Portal className=\"sledge__select-portal\">\n <SelectElement.Content className=\"sledge__select-content\">\n <SelectElement.ScrollUpButton className=\"sledge__select-scroll-button\">\n <svg width={15} height={15} viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M3.13523 8.84197C3.3241 9.04343 3.64052 9.05363 3.84197 8.86477L7.5 5.43536L11.158 8.86477C11.3595 9.05363 11.6759 9.04343 11.8648 8.84197C12.0536 8.64051 12.0434 8.32409 11.842 8.13523L7.84197 4.38523C7.64964 4.20492 7.35036 4.20492 7.15803 4.38523L3.15803 8.13523C2.95657 8.32409 2.94637 8.64051 3.13523 8.84197Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n </SelectElement.ScrollUpButton>\n <SelectElement.Viewport className=\"sledge__select-viewport\">\n {items.map(\n (\n item: {\n label: ReactNode;\n value: string;\n },\n index: number\n ) => {\n const { label, value } = item;\n\n return (\n <SelectItemComponent key={index} value={value}>\n {label}\n </SelectItemComponent>\n );\n }\n )}\n </SelectElement.Viewport>\n <SelectElement.ScrollDownButton className=\"sledge__select-scroll-button\">\n <svg width={15} height={15} viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n </SelectElement.ScrollDownButton>\n </SelectElement.Content>\n </SelectElement.Portal>\n </SelectElement.Root>\n </div>\n )}\n </>\n );\n};\n\nconst SelectItemComponent = React.forwardRef(({ children, className = '', ...props }: any, forwardedRef) => {\n return (\n <SelectElement.Item className={`sledge__select-item ${className}`} {...props} ref={forwardedRef}>\n <SelectElement.ItemText>{children}</SelectElement.ItemText>\n <SelectElement.ItemIndicator className=\"sledge__select-item-indicator\">\n <svg width={15} height={15} viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.4669 3.72684C11.7558 3.91574 11.8369 4.30308 11.648 4.59198L7.39799 11.092C7.29783 11.2452 7.13556 11.3467 6.95402 11.3699C6.77247 11.3931 6.58989 11.3355 6.45446 11.2124L3.70446 8.71241C3.44905 8.48022 3.43023 8.08494 3.66242 7.82953C3.89461 7.57412 4.28989 7.55529 4.5453 7.78749L6.75292 9.79441L10.6018 3.90792C10.7907 3.61902 11.178 3.53795 11.4669 3.72684Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n </SelectElement.ItemIndicator>\n </SelectElement.Item>\n );\n});\n","export interface IHeartIcon {\n width: number;\n height: number;\n type: 'fill' | 'half-fill' | 'outline';\n color: string;\n}\n\nexport const HeartIcon = ({ width, height, type, color }: IHeartIcon) => {\n const renderIcon = () => {\n switch (type) {\n case 'fill':\n return (\n <svg width={width} height={height} id=\"sledge-icon-heart-fill\" viewBox=\"0 0 18 17\" fill={color}>\n <path d=\"M5.89936 0.0838691C6.42436 0.0998355 6.9327 0.191502 7.4252 0.359002H7.47436C7.5077 0.374836 7.5327 0.392336 7.54936 0.408169C7.73353 0.467336 7.9077 0.534002 8.07436 0.625669L8.39103 0.767336C8.51603 0.834002 8.66603 0.958169 8.74936 1.009C8.8327 1.05817 8.92436 1.109 8.99936 1.1665C9.9252 0.459002 11.0494 0.0756688 12.2077 0.0838691C12.7335 0.0838691 13.2585 0.158169 13.7577 0.325669C16.8335 1.32567 17.9419 4.70067 17.016 7.65067C16.491 9.15817 15.6327 10.534 14.5085 11.6582C12.8994 13.2165 11.1335 14.5998 9.2327 15.7915L9.02436 15.9173L8.8077 15.7832C6.9002 14.5998 5.12436 13.2165 3.5002 11.6498C2.38353 10.5257 1.52436 9.15817 0.991029 7.65067C0.0493627 4.70067 1.1577 1.32567 4.26686 0.308169C4.50853 0.224836 4.7577 0.166502 5.0077 0.134002H5.1077C5.34186 0.0998355 5.57436 0.0838691 5.8077 0.0838691H5.89936ZM13.3244 2.71734C12.9827 2.59984 12.6077 2.784 12.4827 3.134C12.366 3.484 12.5494 3.86734 12.8994 3.9915C13.4335 4.1915 13.791 4.71734 13.791 5.29984V5.32567C13.7752 5.5165 13.8327 5.70067 13.9494 5.84234C14.066 5.984 14.241 6.0665 14.4244 6.084C14.766 6.07484 15.0577 5.80067 15.0827 5.44984V5.35067C15.1077 4.18317 14.4002 3.12567 13.3244 2.71734Z\" />\n </svg>\n );\n break;\n case 'half-fill':\n return (\n <svg width={width} height={height} id=\"sledge-icon-heart-fill\" viewBox=\"0 0 19 18\" fill={color} xmlns=\"http://www.w3.org/2000/svg\">\n <g clipPath=\"url(#clip0_8001_20724)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.71721 0.932813C11.1579 0.00998075 13.0718 -0.244965 14.7252 0.291857C18.3217 1.46694 19.4382 5.43925 18.4396 8.60004C16.8987 13.5643 10.318 17.2673 10.0389 17.4226C9.93961 17.4783 9.82974 17.5061 9.71987 17.5061C9.61 17.5061 9.50101 17.4792 9.40178 17.4244C9.12444 17.2709 2.59153 13.6227 0.999278 8.60094L0.998392 8.60004C-0.00108215 5.43835 1.11181 1.46515 4.70478 0.291857C6.39183 -0.261124 8.23041 -0.0178479 9.71721 0.932813ZM5.11236 1.57377C2.2052 2.52353 1.47509 5.6915 2.26457 8.18979C3.50683 12.1055 8.41471 15.2717 9.71898 16.0554C11.0277 15.2636 15.971 12.0625 17.1734 8.19338C17.9629 5.6924 17.2301 2.52443 14.3185 1.57377C12.9079 1.11505 11.2625 1.39423 10.1266 2.28474C9.88911 2.46967 9.55949 2.47326 9.32026 2.29013C8.11699 1.37358 6.54512 1.10517 5.11236 1.57377ZM13.4679 3.3565C14.6756 3.75239 15.5218 4.83591 15.6255 6.11692C15.6547 6.48767 15.3827 6.81264 15.0167 6.84226C14.9981 6.84405 14.9804 6.84495 14.9618 6.84495C14.6189 6.84495 14.3283 6.57834 14.2999 6.22644C14.2414 5.48853 13.7541 4.86553 13.0603 4.63841C12.7103 4.52351 12.5189 4.14378 12.6315 3.79099C12.7458 3.4373 13.117 3.24519 13.4679 3.3565Z\"\n />\n <mask id=\"mask0_8001_20724\" style={{ maskType: 'alpha' }} maskUnits=\"userSpaceOnUse\" x={-26} y={6} width={71} height={72}>\n <circle cx=\"9.30312\" cy=\"41.872\" r=\"35.3031\" />\n </mask>\n <g mask=\"url(#mask0_8001_20724)\">\n <path d=\"M6.3519 0.0425007C6.92406 0.0601299 7.47805 0.161343 8.01479 0.346287H8.06838C8.1047 0.363769 8.13195 0.383092 8.15011 0.400574C8.35082 0.465903 8.54064 0.539512 8.72228 0.640725L9.06739 0.797146C9.20362 0.870755 9.36709 1.00785 9.45791 1.06398C9.54873 1.11827 9.64863 1.17439 9.73037 1.23788C10.7394 0.456701 11.9645 0.0334464 13.2269 0.0425007C13.8 0.0425007 14.3721 0.124538 14.9161 0.309482C18.2683 1.41363 19.4762 5.14011 18.4672 8.39733C17.895 10.0618 16.9596 11.5809 15.7344 12.8222C13.9807 14.5428 12.0562 16.0702 9.98466 17.386L9.75761 17.5249L9.52148 17.3768C7.44263 16.0702 5.50728 14.5428 3.73721 12.813C2.52024 11.5717 1.58389 10.0618 1.00265 8.39733C-0.0236092 5.14011 1.18429 1.41363 4.57275 0.29016C4.83612 0.198148 5.10767 0.133739 5.38013 0.0978548H5.48911C5.74432 0.0601299 5.9977 0.0425007 6.25199 0.0425007H6.3519ZM14.4439 2.95023C14.0715 2.82049 13.6628 3.02384 13.5266 3.41029C13.3995 3.79674 13.5993 4.21999 13.9807 4.35709C14.5629 4.57792 14.9525 5.15851 14.9525 5.80168V5.8302C14.9352 6.04091 14.9979 6.24425 15.125 6.40067C15.2522 6.55709 15.4429 6.64819 15.6427 6.66751C16.0151 6.65739 16.3329 6.35467 16.3602 5.9673V5.8578C16.3874 4.56872 15.6164 3.40108 14.4439 2.95023Z\" />\n <mask id=\"mask1_8001_20724\" style={{ maskType: 'alpha' }} maskUnits=\"userSpaceOnUse\" x={0} y={0} width={19} height={18}>\n <path d=\"M6.3519 0.0425007C6.92406 0.0601299 7.47805 0.161343 8.01479 0.346287H8.06838C8.10471 0.363769 8.13195 0.383092 8.15012 0.400574C8.35083 0.465903 8.54064 0.539512 8.72228 0.640725L9.06739 0.797146C9.20362 0.870755 9.36709 1.00785 9.45791 1.06398C9.54873 1.11827 9.64863 1.17439 9.73037 1.23788C10.7394 0.456701 11.9645 0.0334464 13.2269 0.0425007C13.8 0.0425007 14.3721 0.124538 14.9161 0.309482C18.2683 1.41363 19.4762 5.14011 18.4672 8.39733C17.895 10.0618 16.9596 11.5809 15.7344 12.8222C13.9807 14.5428 12.0562 16.0702 9.98466 17.386L9.75761 17.5249L9.52148 17.3768C7.44263 16.0702 5.50728 14.5428 3.73721 12.813C2.52024 11.5717 1.58389 10.0618 1.00265 8.39733C-0.0236093 5.14011 1.18429 1.41363 4.57275 0.29016C4.83612 0.198148 5.10767 0.133739 5.38013 0.0978548H5.48911C5.74432 0.0601299 5.9977 0.0425007 6.252 0.0425007H6.3519ZM14.4439 2.95023C14.0715 2.82049 13.6628 3.02384 13.5266 3.41029C13.3995 3.79674 13.5993 4.21999 13.9807 4.35709C14.5629 4.57792 14.9525 5.15851 14.9525 5.80168V5.8302C14.9352 6.04091 14.9979 6.24425 15.125 6.40067C15.2522 6.55709 15.4429 6.64819 15.6427 6.66751C16.0151 6.65739 16.3329 6.35467 16.3602 5.9673V5.8578C16.3874 4.56872 15.6164 3.40108 14.4439 2.95023Z\" />\n </mask>\n <g mask=\"url(#mask1_8001_20724)\">\n <circle cx=\"9.37245\" cy=\"40.7002\" r=\"36.185\" />\n </g>\n </g>\n </g>\n <defs>\n <clipPath id=\"clip0_8001_20724\">\n <rect width={19} height={18} fill=\"transparent\" />\n </clipPath>\n </defs>\n </svg>\n );\n break;\n case 'outline':\n return (\n <svg width={width} height={height} id=\"sledge-icon-heart-line\" viewBox=\"0 0 18 17\" fill={color}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.19515 0.86581C10.5501 0.00914308 12.3501 -0.227524 13.9051 0.27081C17.2876 1.36164 18.3376 5.04914 17.3985 7.98331C15.9493 12.5916 9.76015 16.0291 9.49765 16.1733C9.40431 16.225 9.30098 16.2508 9.19765 16.2508C9.09431 16.2508 8.99181 16.2258 8.89848 16.175C8.63765 16.0325 2.49348 12.6458 0.995979 7.98414L0.995146 7.98331C0.0551462 5.04831 1.10181 1.35998 4.48098 0.27081C6.06765 -0.242524 7.79681 -0.0166903 9.19515 0.86581ZM4.86431 1.46081C2.13015 2.34248 1.44348 5.28331 2.18598 7.60248C3.35431 11.2375 7.97015 14.1766 9.19681 14.9041C10.4276 14.1691 15.0768 11.1975 16.2076 7.60581C16.9501 5.28414 16.261 2.34331 13.5226 1.46081C12.196 1.03498 10.6485 1.29414 9.58015 2.12081C9.35681 2.29248 9.04681 2.29581 8.82181 2.12581C7.69015 1.27498 6.21181 1.02581 4.86431 1.46081ZM12.7226 3.11573C13.8585 3.48323 14.6543 4.48906 14.7518 5.67823C14.7793 6.02239 14.5235 6.32406 14.1793 6.35156C14.1618 6.35323 14.1451 6.35406 14.1276 6.35406C13.8051 6.35406 13.5318 6.10656 13.5051 5.77989C13.4501 5.09489 12.9918 4.51656 12.3393 4.30573C12.0101 4.19906 11.8301 3.84656 11.936 3.51906C12.0435 3.19073 12.3926 3.01239 12.7226 3.11573Z\"\n />\n </svg>\n );\n break;\n\n default:\n break;\n }\n };\n\n return <span className=\"sledge-icon__heart\">{renderIcon()}</span>;\n};\n","export interface IChevronArrowDownIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const ChevronArrowDownIcon = ({ width, height, color }: IChevronArrowDownIcon) => {\n return (\n <span className=\"sledge-icon__arrow-down\">\n <svg width={width} height={height} viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"Arrow - Down 2\">\n <g id=\"Iconly/Light-Outline/Arrow---Down-2\">\n <g id=\"Arrow---Down-2\">\n <path\n id=\"Stroke-1\"\n d=\"M3.72407 6.6414C3.94596 6.41951 4.29318 6.39934 4.53786 6.58089L4.60796 6.6414L9.99935 12.0325L15.3907 6.6414C15.6126 6.41951 15.9598 6.39934 16.2045 6.58089L16.2746 6.6414C16.4965 6.86329 16.5167 7.21051 16.3351 7.45519L16.2746 7.52529L10.4413 13.3586C10.2194 13.5805 9.87218 13.6007 9.62751 13.4191L9.55741 13.3586L3.72407 7.52529C3.48 7.28121 3.48 6.88548 3.72407 6.6414Z\"\n fill={color}\n />\n </g>\n </g>\n </g>\n </svg>\n </span>\n );\n};\n","export interface IChevronArrowLeftIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const ChevronArrowLeftIcon = ({ width, height, color }: IChevronArrowLeftIcon) => {\n return (\n <span className=\"sledge-icon__arrow-left\">\n <svg width={width} height={height} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10.6875 2.97945C10.865 3.15697 10.8812 3.43474 10.7359 3.63048L10.6875 3.68656L6.37465 7.99967L10.6875 12.3128C10.865 12.4903 10.8812 12.7681 10.7359 12.9638L10.6875 13.0199C10.51 13.1974 10.2323 13.2135 10.0365 13.0683L9.98043 13.0199L5.31377 8.35323C5.13625 8.17572 5.12012 7.89794 5.26535 7.7022L5.31377 7.64612L9.98043 2.97945C10.1757 2.78419 10.4923 2.78419 10.6875 2.97945Z\"\n fill={color}\n />\n </svg>\n </span>\n );\n};\n","export interface IChevronArrowRightIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const ChevronArrowRightIcon = ({ width, height, color }: IChevronArrowRightIcon) => {\n return (\n <span className=\"sledge-icon__arrow-right\">\n <svg width={width} height={height} viewBox=\"0 0 17 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.60738 13.1302C5.42987 12.9527 5.41374 12.675 5.55897 12.4792L5.60738 12.4231L9.92027 8.11002L5.60738 3.79691C5.42987 3.6194 5.41374 3.34162 5.55897 3.14588L5.60738 3.0898C5.7849 2.91229 6.06267 2.89615 6.25841 3.04139L6.31449 3.0898L10.9812 7.75647C11.1587 7.93398 11.1748 8.21175 11.0296 8.4075L10.9812 8.46357L6.31449 13.1302C6.11923 13.3255 5.80265 13.3255 5.60738 13.1302Z\"\n fill={color}\n />\n </svg>\n </span>\n );\n};\n","export interface IArrowRightIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const ArrowRightIcon = ({ width, height, color }: IArrowRightIcon) => {\n return (\n <span className=\"sledge-icon__arrow-right\">\n <svg width={width} height={height} viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M3 8.79429C3 8.50952 3.21162 8.27418 3.48617 8.23693L3.5625 8.23179L13.4505 8.23224L9.87826 4.6746C9.65812 4.4554 9.65735 4.09925 9.87655 3.8791C10.0758 3.67897 10.3883 3.66015 10.6088 3.82306L10.672 3.87739L15.2095 8.39539C15.2386 8.42428 15.2638 8.45555 15.2852 8.48858C15.2912 8.49852 15.2973 8.50869 15.3032 8.51906C15.3085 8.52795 15.3134 8.53718 15.318 8.54652C15.3243 8.5601 15.3305 8.57413 15.3361 8.58845C15.3407 8.59949 15.3445 8.61023 15.348 8.62105C15.3522 8.63447 15.3562 8.64877 15.3597 8.66329C15.3622 8.67343 15.3643 8.68319 15.3661 8.69298C15.3686 8.70755 15.3707 8.72263 15.3722 8.73789C15.3735 8.74953 15.3743 8.76106 15.3747 8.77261C15.3749 8.77961 15.375 8.78693 15.375 8.79429L15.3747 8.81608C15.3743 8.82712 15.3735 8.83815 15.3725 8.84916L15.375 8.79429C15.375 8.82979 15.3717 8.86452 15.3654 8.89819C15.364 8.90623 15.3622 8.91449 15.3603 8.92271C15.3563 8.93964 15.3517 8.95595 15.3464 8.97194C15.3438 8.97988 15.3407 8.98837 15.3375 8.99679C15.3309 9.01371 15.3238 9.02985 15.3159 9.04557C15.3122 9.05296 15.3082 9.06069 15.3039 9.06835C15.2968 9.08084 15.2896 9.09272 15.2819 9.10429C15.2765 9.11248 15.2706 9.12101 15.2643 9.1294L15.2594 9.13588C15.2443 9.15568 15.2278 9.17444 15.2102 9.19204L15.2096 9.19256L10.6721 13.7113C10.4519 13.9305 10.0958 13.9298 9.87658 13.7097C9.67729 13.5096 9.65979 13.197 9.82363 12.9771L9.87823 12.9142L13.449 9.35724L3.5625 9.35679C3.25184 9.35679 3 9.10495 3 8.79429Z\"\n fill={color}\n />\n </svg>\n </span>\n );\n};\n","export interface IBagIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const BagIcon = ({ width, height, color }: IBagIcon) => {\n return (\n <span className=\"sledge-icon__bag\">\n <svg width={width} height={height} viewBox=\"0 0 18 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"vuesax/bold/bag-2\">\n <g id=\"bag-2\">\n <path\n id=\"Vector\"\n d=\"M14.3711 6.04627C13.919 5.54693 13.2374 5.25677 12.2927 5.15555V4.64271C12.2927 3.71824 11.9013 2.82752 11.2131 2.20671C10.518 1.57241 9.6138 1.2755 8.67584 1.36322C7.06309 1.51842 5.70676 3.07719 5.70676 4.76417V5.15555C4.76205 5.25677 4.08051 5.54693 3.6284 6.04627C2.97385 6.77505 2.9941 7.74674 3.06833 8.42154L3.54068 12.1801C3.68238 13.496 4.21547 14.8455 7.11707 14.8455H10.8824C13.784 14.8455 14.3171 13.496 14.4588 12.1869L14.9312 8.41479C15.0054 7.74674 15.0189 6.77505 14.3711 6.04627ZM8.77031 2.30118C9.4451 2.24045 10.0862 2.44963 10.5855 2.90174C11.0781 3.34711 11.3548 3.98141 11.3548 4.64271V5.11506H6.64472V4.76417C6.64472 3.56304 7.63666 2.40915 8.77031 2.30118ZM6.58399 8.87365H6.57724C6.2061 8.87365 5.90245 8.56999 5.90245 8.19885C5.90245 7.82772 6.2061 7.52406 6.57724 7.52406C6.95512 7.52406 7.25878 7.82772 7.25878 8.19885C7.25878 8.56999 6.95512 8.87365 6.58399 8.87365ZM11.3075 8.87365H11.3008C10.9296 8.87365 10.626 8.56999 10.626 8.19885C10.626 7.82772 10.9296 7.52406 11.3008 7.52406C11.6787 7.52406 11.9823 7.82772 11.9823 8.19885C11.9823 8.56999 11.6787 8.87365 11.3075 8.87365Z\"\n fill={color}\n />\n </g>\n </g>\n </svg>\n </span>\n );\n};\n","export interface ICloseIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const CloseIcon = ({ width, height, color }: ICloseIcon) => {\n return (\n <span className=\"sledge-icon__close\">\n <svg viewBox=\"0 0 20 20\" focusable=\"false\" aria-hidden=\"true\" width={width} height={height}>\n <path\n d=\"m11.414 10 6.293-6.293a1 1 0 1 0-1.414-1.414l-6.293 6.293-6.293-6.293a1 1 0 0 0-1.414 1.414l6.293 6.293-6.293 6.293a1 1 0 1 0 1.414 1.414l6.293-6.293 6.293 6.293a.998.998 0 0 0 1.707-.707.999.999 0 0 0-.293-.707l-6.293-6.293z\"\n fill={color}\n />\n </svg>\n </span>\n );\n};\n","export interface ISearchIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const SearchIcon = ({ width, height, color }: ISearchIcon) => {\n return (\n <span className=\"sledge-icon__search\">\n <svg width={width} height={height} viewBox=\"0 0 20 21\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.78283 2.16669C14.2578 2.16669 17.8978 5.80669 17.8978 10.2817C17.8978 12.393 17.0876 14.3186 15.7617 15.7638L18.3707 18.3673C18.6148 18.6114 18.6157 19.0064 18.3715 19.2506C18.2498 19.3739 18.089 19.4348 17.929 19.4348C17.7698 19.4348 17.6098 19.3739 17.4873 19.2523L14.8469 16.6192C13.4579 17.7316 11.6967 18.3975 9.78283 18.3975C5.30783 18.3975 1.66699 14.7567 1.66699 10.2817C1.66699 5.80669 5.30783 2.16669 9.78283 2.16669ZM9.78283 3.41669C5.99699 3.41669 2.91699 6.49585 2.91699 10.2817C2.91699 14.0675 5.99699 17.1475 9.78283 17.1475C13.5678 17.1475 16.6478 14.0675 16.6478 10.2817C16.6478 6.49585 13.5678 3.41669 9.78283 3.41669Z\"\n fill={color}\n />\n </svg>\n </span>\n );\n};\n","export interface IMessageAddIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const MessageAddIcon = ({ width, height, color }: IMessageAddIcon) => {\n return (\n <span className=\"sledge-icon__message-add\">\n <svg width={width} height={height} viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"vuesax/bold/message-add\">\n <g id=\"message-add\">\n <path\n id=\"Vector\"\n d=\"M11.1666 1.33301H5.83325C3.16659 1.33301 1.83325 2.66634 1.83325 5.33301V13.9997C1.83325 14.3663 2.13325 14.6663 2.49992 14.6663H11.1666C13.8333 14.6663 15.1666 13.333 15.1666 10.6663V5.33301C15.1666 2.66634 13.8333 1.33301 11.1666 1.33301ZM10.8333 8.49967H8.99992V10.333C8.99992 10.6063 8.77325 10.833 8.49992 10.833C8.22658 10.833 7.99992 10.6063 7.99992 10.333V8.49967H6.16658C5.89325 8.49967 5.66658 8.27301 5.66658 7.99967C5.66658 7.72634 5.89325 7.49967 6.16658 7.49967H7.99992V5.66634C7.99992 5.39301 8.22658 5.16634 8.49992 5.16634C8.77325 5.16634 8.99992 5.39301 8.99992 5.66634V7.49967H10.8333C11.1066 7.49967 11.3333 7.72634 11.3333 7.99967C11.3333 8.27301 11.1066 8.49967 10.8333 8.49967Z\"\n fill={color}\n />\n </g>\n </g>\n </svg>\n </span>\n );\n};\n","export interface ISwapIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const SwapIcon = ({ width, height, color }: ISwapIcon) => {\n return (\n <span className=\"sledge-icon__swap\">\n <svg width={width} height={height} viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"Swap\">\n <g id=\"Iconly/Light-Outline/Swap\">\n <g id=\"Swap_2\">\n <path\n id=\"Combined-Shape\"\n d=\"M11.7263 3.864C11.9795 3.864 12.1887 4.0521 12.2218 4.29616L12.2263 4.364L12.2262 12.2307L14.0904 10.359C14.2852 10.1633 14.6018 10.1626 14.7975 10.3574C14.9754 10.5345 14.9922 10.8122 14.8474 11.0083L14.7991 11.0645L12.0806 13.7956C12.0642 13.8117 12.0476 13.8263 12.03 13.8398L12.0806 13.7956C12.0561 13.8203 12.0296 13.8418 12.0017 13.8603C11.992 13.8663 11.9819 13.8725 11.9715 13.8784C11.9619 13.8842 11.9522 13.8892 11.9423 13.894C11.9325 13.8983 11.9226 13.9027 11.9125 13.9067C11.8998 13.9122 11.8866 13.9168 11.8734 13.9209C11.8656 13.9229 11.8576 13.9252 11.8495 13.9272C11.8351 13.9312 11.8206 13.9342 11.8061 13.9365C11.7993 13.9373 11.7921 13.9383 11.7849 13.9391C11.7685 13.9414 11.7522 13.9425 11.7359 13.9428C11.7327 13.9425 11.7295 13.9425 11.7263 13.9425L11.7166 13.9428C11.7003 13.9425 11.684 13.9414 11.6678 13.9395L11.7263 13.9425C11.6991 13.9425 11.6724 13.9403 11.6463 13.9362C11.6319 13.9342 11.6174 13.9312 11.6031 13.9276C11.5955 13.9253 11.5879 13.9232 11.5804 13.9209C11.566 13.9169 11.5518 13.9118 11.5378 13.9061C11.5301 13.9026 11.5227 13.8994 11.5154 13.896C11.5038 13.891 11.4923 13.8851 11.4809 13.8787C11.4707 13.8725 11.4606 13.8663 11.4508 13.8598C11.4431 13.8552 11.4355 13.8499 11.428 13.8443L11.4227 13.8398C11.4051 13.8263 11.3884 13.8117 11.3728 13.7961L11.3719 13.7956L8.65336 11.0645C8.45855 10.8688 8.45928 10.5522 8.65499 10.3574C8.83292 10.1803 9.11073 10.1648 9.30613 10.3105L9.3621 10.359L11.2262 12.232L11.2263 4.364C11.2263 4.08786 11.4502 3.864 11.7263 3.864ZM5.10736 2.05497L5.1171 2.05469C5.13339 2.055 5.14967 2.05611 5.16588 2.058L5.10736 2.05497C5.1346 2.05497 5.16133 2.05714 5.18739 2.06133C5.20164 2.06328 5.21594 2.06623 5.23012 2.0698C5.23846 2.07225 5.24696 2.07463 5.25536 2.07723C5.26849 2.08093 5.2812 2.08543 5.29374 2.09046C5.30281 2.0945 5.31199 2.09851 5.32103 2.10279C5.33176 2.10743 5.34234 2.11289 5.35274 2.11876C5.36166 2.12425 5.37048 2.12959 5.37912 2.1352C5.38801 2.14048 5.39691 2.14667 5.40565 2.15318L5.4618 2.20186L8.18032 4.93297C8.37513 5.12868 8.3744 5.44527 8.17869 5.64008C8.00077 5.81718 7.72295 5.83267 7.52755 5.68698L7.47158 5.63844L5.60692 3.76469L5.60736 11.6335C5.60736 11.9096 5.3835 12.1335 5.10736 12.1335C4.85423 12.1335 4.64503 11.9454 4.61192 11.7013L4.60736 11.6335L4.60692 3.76535L2.74329 5.63844C2.56618 5.81636 2.28845 5.83314 2.09237 5.68836L2.03618 5.64008C1.85826 5.46298 1.84148 5.18524 1.98626 4.98916L2.03455 4.93297L4.75306 2.20186L4.78251 2.17486C4.78942 2.16895 4.7965 2.16322 4.80373 2.15768L4.75306 2.20186C4.77759 2.17722 4.80405 2.15567 4.83195 2.13721C4.84168 2.13115 4.8518 2.12496 4.86214 2.11912C4.87175 2.11333 4.88152 2.10825 4.8914 2.10352C4.90117 2.0992 4.91107 2.09484 4.92114 2.09079C4.93393 2.08533 4.94704 2.0807 4.9603 2.07663C4.96836 2.07446 4.97662 2.07215 4.98496 2.07006C4.99839 2.06637 5.01197 2.06355 5.02562 2.06129C5.03383 2.06027 5.04188 2.05915 5.04999 2.05822C5.06542 2.0561 5.08126 2.05503 5.0971 2.0547C5.1006 2.055 5.10398 2.05497 5.10736 2.05497Z\"\n fill={color}\n />\n </g>\n </g>\n </g>\n </svg>\n </span>\n );\n};\n","export interface INoteIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const NoteIcon = ({ width, height, color }: INoteIcon) => {\n return (\n <span className=\"sledge-icon__note\">\n <svg width={width} height={height} viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"vuesax/bold/note-2\">\n <path\n id=\"Vector\"\n d=\"M8.95178 13.3046C9.13494 13.3473 9.15172 13.5871 8.97332 13.6466L7.91998 13.9933C5.27332 14.8466 3.87998 14.1333 3.01998 11.4866L2.16665 8.85328C1.31332 6.20661 2.01998 4.80661 4.66665 3.95328L4.67731 3.94975C5.08018 3.81633 5.48102 4.22359 5.37901 4.63553C5.37264 4.66126 5.3663 4.68718 5.35998 4.71328L4.70665 7.50661C3.97332 10.6466 5.04665 12.3799 8.18665 13.1266L8.95178 13.3046Z\"\n fill={color}\n />\n <path\n id=\"Vector_2\"\n d=\"M11.9467 2.14033L10.8334 1.88033C8.6067 1.35366 7.28004 1.787 6.50004 3.40033C6.30004 3.807 6.14004 4.30033 6.00671 4.867L5.35337 7.66033C4.70004 10.447 5.56004 11.8203 8.34004 12.4803L9.46004 12.747C9.8467 12.8403 10.2067 12.9003 10.54 12.927C12.62 13.127 13.7267 12.1537 14.2867 9.747L14.94 6.96033C15.5934 4.17366 14.74 2.79366 11.9467 2.14033ZM10.6934 8.887C10.6334 9.11366 10.4334 9.26033 10.2067 9.26033C10.1667 9.26033 10.1267 9.25366 10.08 9.247L8.14004 8.75366C7.87337 8.687 7.71337 8.41366 7.78004 8.147C7.84671 7.88033 8.12004 7.72033 8.38671 7.787L10.3267 8.28033C10.6 8.347 10.76 8.62033 10.6934 8.887ZM12.6467 6.63366C12.5867 6.86033 12.3867 7.007 12.16 7.007C12.12 7.007 12.08 7.00033 12.0334 6.99366L8.80004 6.17366C8.53337 6.107 8.37337 5.83366 8.44004 5.567C8.50671 5.30033 8.78004 5.14033 9.04671 5.207L12.28 6.027C12.5534 6.087 12.7134 6.36033 12.6467 6.63366Z\"\n fill={color}\n />\n </g>\n </svg>\n </span>\n );\n};\n","export interface IFilterIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const FilterIcon = ({ width, height, color }: IFilterIcon) => {\n return (\n <span className=\"sledge-icon__filter\">\n <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M22 6.5H16\" stroke={color} strokeWidth=\"1.5\" strokeMiterlimit={10} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M6 6.5H2\" stroke={color} strokeWidth=\"1.5\" strokeMiterlimit={10} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path\n d=\"M10 10C11.933 10 13.5 8.433 13.5 6.5C13.5 4.567 11.933 3 10 3C8.067 3 6.5 4.567 6.5 6.5C6.5 8.433 8.067 10 10 10Z\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeMiterlimit={10}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M22 17.5H18\" stroke={color} strokeWidth=\"1.5\" strokeMiterlimit={10} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M8 17.5H2\" stroke={color} strokeWidth=\"1.5\" strokeMiterlimit={10} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path\n d=\"M14 21C15.933 21 17.5 19.433 17.5 17.5C17.5 15.567 15.933 14 14 14C12.067 14 10.5 15.567 10.5 17.5C10.5 19.433 12.067 21 14 21Z\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeMiterlimit={10}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n );\n};\n","export interface IInfoCircleIcon {\n width: number;\n height: number;\n color: string;\n}\n\nexport const InfoCircleIcon = ({ width, height, color }: IInfoCircleIcon) => {\n return (\n <span className=\"sledge-icon__info-circle\">\n <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M12 2.00293C6.49 2.00293 2 6.49293 2 12.0029C2 17.5129 6.49 22.0029 12 22.0029C17.51 22.0029 22 17.5129 22 12.0029C22 6.49293 17.51 2.00293 12 2.00293ZM11.25 8.00293C11.25 7.59293 11.59 7.25293 12 7.25293C12.41 7.25293 12.75 7.59293 12.75 8.00293V13.0029C12.75 13.4129 12.41 13.7529 12 13.7529C11.59 13.7529 11.25 13.4129 11.25 13.0029V8.00293ZM12.92 16.3829C12.87 16.5129 12.8 16.6129 12.71 16.7129C12.61 16.8029 12.5 16.8729 12.38 16.9229C12.26 16.9729 12.13 17.0029 12 17.0029C11.87 17.0029 11.74 16.9729 11.62 16.9229C11.5 16.8729 11.39 16.8029 11.29 16.7129C11.2 16.6129 11.13 16.5129 11.08 16.3829C11.03 16.2629 11 16.1329 11 16.0029C11 15.8729 11.03 15.7429 11.08 15.6229C11.13 15.5029 11.2 15.3929 11.29 15.2929C11.39 15.2029 11.5 15.1329 11.62 15.0829C11.86 14.9829 12.14 14.9829 12.38 15.0829C12.5 15.1329 12.61 15.2029 12.71 15.2929C12.8 15.3929 12.87 15.5029 12.92 15.6229C12.97 15.7429 13 15.8729 13 16.0029C13 16.1329 12.97 16.2629 12.92 16.3829Z\"\n fill={color}\n />\n </svg>\n </span>\n );\n};\n","import React from 'react';\n\nimport './Button.css';\n\nexport const Button = React.forwardRef((props: any, buttonRef) => {\n const { className = '', children, colorType = 'light', fullWidth = false, elementType = 'button', link = '', isActive, ...otherProps } = props;\n\n return elementType === 'hyperlink' && link?.length ? (\n <a href={link} className={`sledge__button ${className || ''}`} data-button-color-type={colorType} data-button-full-width={fullWidth} ref={buttonRef} {...otherProps}>\n {children}\n </a>\n ) : (\n <button\n className={`sledge__button ${className || ''} ${isActive ? 'sledge__button-active' : ''}`}\n data-button-color-type={colorType}\n data-button-full-width={fullWidth}\n ref={buttonRef}\n {...otherProps}\n >\n {children}\n </button>\n );\n});\n","import React from 'react';\n\nimport './SearchInputField.css';\nimport { CloseIcon } from '@core/components';\n\nexport const SearchInputField = React.memo((props: any) => {\n const { className = '', icon, value = '', withClearField, onChange, onResetField, fieldRef, ...otherProps } = props;\n\n const inputRef = React.useRef(null);\n\n const handleResetField = React.useCallback(() => {\n const elementCurrent = fieldRef?.current || inputRef?.current;\n elementCurrent?.focus?.();\n\n onChange && onChange({ value: '' });\n onResetField && onResetField();\n }, []);\n\n const handleChangeField = React.useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n onChange && onChange({ value: e.target.value });\n }, []);\n\n return (\n <div className={`sledge__search-input-field-wrapper ${className || ''}`}>\n {!icon ? null : <div className=\"sledge__search-input-field-icon\">{icon}</div>}\n <input className=\"sledge__search-input-field\" value={value} onChange={(e) => handleChangeField(e)} ref={fieldRef || inputRef} {...otherProps} />\n {value && withClearField ? (\n <div className=\"sledge__clear-field-wrapper\">\n <button className=\"sledge__clear-field\" type=\"button\" onClick={handleResetField}>\n <CloseIcon width={14} height={14} color=\"#393d4e\" />\n </button>\n </div>\n ) : null}\n </div>\n );\n});\n","export const ROTATE_FILTER_ARROW_ANIMATION = {\n open: { rotate: 180 },\n closed: { rotate: 0 },\n transition: {\n type: 'spring',\n duration: 0.2\n }\n};\n\nexport const VISIBLE_ANIMATION = {\n hidden: { opacity: 0, scale: 0 },\n visible: (custom: any) => {\n const { duration } = custom || {};\n\n return {\n opacity: 1,\n scale: 1,\n transition: {\n type: 'spring',\n duration: duration || 0.7\n }\n };\n }\n};\n\nexport const VISIBLE_CUSTOM_ANIMATION = {\n hidden: { opacity: 0, scale: 0 },\n visible: (custom: any) => ({\n opacity: 1,\n scale: 1,\n transition: {\n type: 'spring',\n duration: 0.7,\n delay: custom * 0.13\n }\n })\n};\n","import React from 'react';\n\nimport './SelectField.css';\n\nimport { ChevronArrowDownIcon, Popover } from '@core/components';\nimport { motion } from 'framer-motion';\nimport { ROTATE_FILTER_ARROW_ANIMATION } from '@core/lib/animation';\n\nexport const SelectField = (props: any) => {\n const {\n className = '',\n placeholder = null,\n overridePlaceholderOnMobile = null,\n prefixLabel = null,\n prefixSelectedLabel = '',\n align = 'end',\n onChange,\n value = '',\n options = [],\n LinkComponent,\n link\n } = props;\n\n const [isOpen, setIsOpen] = React.useState(false);\n\n const handleChangeField = (label: string, value: string) => {\n onChange && onChange({ label: label, value: value });\n setIsOpen(false);\n };\n\n const selectedLabel = placeholder && !value ? placeholder : options?.filter(({ value: optionValue }: any) => optionValue === value)[0]?.label;\n\n const selectedLabelComponent = <span>{prefixSelectedLabel?.length ? `${prefixSelectedLabel} ${selectedLabel}` : selectedLabel}</span>;\n\n return (\n <div className={`sledge__select-field-wrapper ${className || ''}`}>\n <Popover\n trigger={\n <button type=\"button\" className=\"sledge__button sledge__select-field\" data-button-color-type=\"light\" data-button-full-width=\"true\">\n {!prefixLabel ? null : <span className=\"sledge__select-field-icon\">{prefixLabel}</span>}\n\n {overridePlaceholderOnMobile ? (\n <>\n <span className=\"sledge__hide-element-mobile-on-md\">{overridePlaceholderOnMobile}</span>\n <span className=\"sledge__hide-element-md-on-mobile\">{selectedLabelComponent}</span>\n </>\n ) : (\n selectedLabelComponent\n )}\n\n <motion.div initial=\"closed\" animate={isOpen ? 'open' : 'closed'} variants={ROTATE_FILTER_ARROW_ANIMATION} className=\"sort-trigger-icon\">\n <ChevronArrowDownIcon width={18} height={18} color=\"#000000\" />\n </motion.div>\n </button>\n }\n content={\n <ul className=\"sledge__select-field-option\">\n {options?.map((option: any, index: number) => {\n const { label, value: optionValue } = option;\n\n const Item = () => (\n <li\n key={index}\n onClick={() => handleChangeField(label, optionValue)}\n {...(optionValue === value && {\n ['data-selected']: true\n })}\n >\n {label}\n </li>\n );\n\n return LinkComponent ? (\n <LinkComponent scroll={false} to={link?.replace('value', optionValue)} href={link?.replace('value', optionValue)} key={index}>\n <Item />\n </LinkComponent>\n ) : (\n <Item key={index} />\n );\n })}\n </ul>\n }\n isOpen={isOpen}\n setIsOpen={setIsOpen}\n hideCloseIcon\n align={align}\n className=\"sledge__select-field-option-content\"\n withArrow={false}\n />\n </div>\n );\n};\n","interface ObjectConstructor {\n hasOwn(o: object, v: PropertyKey): boolean;\n}\n\nif (!Object.hasOwn) {\n Object.hasOwn = function (obj: object, prop: PropertyKey): boolean {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n };\n}\n","import { fetchApi, sanitizeDataId } from '@core/lib/helper';\n\ndeclare global {\n interface Window {\n Shopify: any;\n }\n}\n\ninterface IAddToCartShopifyData {\n id: string | number;\n quantity: number;\n}\n\nexport const addToCart: any = async (data: Array<IAddToCartShopifyData>) => {\n let items: Array<IAddToCartShopifyData> = [];\n data.map((item) => {\n const { id, quantity } = item;\n\n items.push({\n id: sanitizeDataId(id),\n quantity: quantity\n });\n });\n\n if (typeof window === 'undefined' || !window?.Shopify?.routes?.root) return;\n\n let url = `${window.Shopify.routes.root}cart/add.js`;\n let headers = {\n 'Content-Type': 'application/json'\n };\n let payload = {\n items: items\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n payload,\n headers,\n isSimpleRequest: false\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n","import { API_URL, LOCAL_STORAGE_KEY } from '@core/lib/const';\nimport { fetchApi, sanitizeDataId } from '@core/lib/helper';\n\nexport const getWishlist: any = async (query?: any, token?: string) => {\n let sledgeAuthApp = token ? token : typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let queryParams =\n '?' +\n new URLSearchParams({\n ...(query || {})\n }).toString();\n\n let url = `${API_URL}/wishlist${queryParams}`;\n\n return await fetchApi({\n url,\n method: 'GET',\n authorization: sledgeAuthApp\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const addWishlist: any = async (data: {\n productId?: string;\n productVariantId?: string;\n productName?: string;\n productVendor?: string;\n productSku?: string;\n productVariantName?: string;\n productLink?: string;\n productImage?: string;\n productCurrency?: string;\n productPrice?: any;\n type?: 'add' | 'remove' | 'toggle';\n}) => {\n const { productId, productVariantId, productName, productVendor, productSku, productVariantName, productLink, productImage, productCurrency, productPrice, type = 'toggle' } = data;\n\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/wishlist`;\n let payload = {\n product: JSON.stringify({\n id: sanitizeDataId(productId),\n variant_id: sanitizeDataId(productVariantId),\n name: productName,\n vendor: productVendor,\n sku: productSku,\n variant_name: productVariantName,\n url: productLink,\n image_url: productImage,\n currency: productCurrency,\n price: productPrice\n }),\n type: type === 'toggle' ? '' : type\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeAuthApp,\n payload\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const bulkAddWishlist: any = async (\n data: Array<{\n productId?: string;\n productVariantId?: string;\n productName?: string;\n productVariantName?: string;\n productLink?: string;\n productImage?: string;\n productCurrency?: string;\n productPrice?: any;\n }>\n) => {\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let products = data.map((item: any) => {\n const { productId, productVariantId, productName, productVariantName, productLink, productImage, productCurrency, productPrice } = item;\n\n return {\n id: sanitizeDataId(productId),\n variant_id: sanitizeDataId(productVariantId),\n name: productName,\n variant_name: productVariantName,\n url: productLink,\n image_url: productImage,\n currency: productCurrency,\n price: productPrice\n };\n });\n\n let url = `${API_URL}/wishlist/bulk`;\n let headers = {\n 'Content-Type': 'application/json'\n };\n let payload = {\n products: products\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeAuthApp,\n payload,\n headers,\n isSimpleRequest: false\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const getWishlistInfo: any = async ({ token = '', query = null }: { token?: string; query?: any }) => {\n let sledgeAuthApp = token ? token : typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let queryParams =\n '?' +\n new URLSearchParams({\n ...query\n }).toString();\n\n let url = `${API_URL}/wishlist/info${queryParams}`;\n\n return await fetchApi({\n url,\n method: 'GET',\n authorization: sledgeAuthApp\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const checkWishlist: any = async ({ id, variantId = '', query = null }: { id: any; variantId?: any; query?: any }) => {\n let convertId = sanitizeDataId(id);\n let convertVariantId = variantId ? sanitizeDataId(variantId) : '';\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let queryParams =\n '?' +\n new URLSearchParams({\n variant_id: convertVariantId,\n ...query\n }).toString();\n\n let url = `${API_URL}/wishlist/check/${convertId}${queryParams}`;\n\n return await fetchApi({\n url,\n method: 'GET',\n authorization: sledgeAuthApp\n })\n .then((result) => {\n return Boolean(result.data);\n })\n .catch(() => {\n return;\n });\n};\n\nexport const clearWishlist: any = async () => {\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/wishlist/clear`;\n\n return await fetchApi({\n url,\n method: 'DELETE',\n authorization: sledgeAuthApp\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const addToCartTrigger: any = async (data: { productId?: string | number }) => {\n const { productId } = data;\n\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/wishlist/cart`;\n let payload = {\n product: JSON.stringify({\n id: sanitizeDataId(productId)\n })\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeAuthApp,\n payload\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n","import { getWishlistInfo } from '@core/api/wishlist';\nimport { DEFAULT_WISHLIST_URL } from '@core/lib/const';\n\nexport const wishlistInfo = async ({\n callback,\n wishlistPreviewSettings,\n generalPreviewSettings\n}: {\n callback(props: { totalWishlist: any; proxyUrl: any; data: any }): void;\n wishlistPreviewSettings?: any;\n generalPreviewSettings?: any;\n}) => {\n let response: any;\n let run: boolean = false;\n let valueTotalWishlist: number;\n let valueProxyUrl: string;\n let queryParam = {\n ...(wishlistPreviewSettings && generalPreviewSettings?.use_dummy_data\n ? {\n is_preview: true\n }\n : {})\n };\n\n response = await getWishlistInfo({\n query: queryParam\n });\n run = response?.status?.code === 200 || false;\n\n valueTotalWishlist = !response?.data?.total_data ? 0 : response.data.total_data;\n valueProxyUrl = DEFAULT_WISHLIST_URL;\n\n if (run)\n callback({\n totalWishlist: valueTotalWishlist,\n proxyUrl: valueProxyUrl,\n data: response?.data\n });\n};\n","import React from 'react';\nimport { LOCAL_STORAGE_KEY } from '@core/lib/const';\nimport { SledgeContext, ISledgeContext } from '@sledge-app/core';\nimport { wishlistInfo } from './utils';\n\nexport interface IBadgeCounterProps {\n data?: any;\n previewSettings?: any;\n}\n\nexport const BadgeCounter = (props: IBadgeCounterProps) => {\n const { data: propsData, previewSettings: previewSettingsProp } = props;\n\n const { isRenderApp, triggerRenderMultipleComponent, sledgeAnonymId, isJsVersion } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { wishlist: isRenderAppWishlist } = isRenderApp || {};\n const { value: valueRenderWishlistBadge, trigger: triggerRenderWishlistBadge } = triggerRenderMultipleComponent?.wishlist?.badge || {};\n\n const [totalWishlist, setTotalWishlist] = React.useState(propsData?.total_data || 0);\n const [isFirstLoading, setIsFirstLoading] = React.useState(!propsData);\n const [isLoading, setIsLoading] = React.useState(!propsData);\n const [isMaximizeTotalWishlist, setIsMaximizeTotalWishlist] = React.useState(false);\n const [dataSettings, setDataSettings] = React.useState<any>({});\n const [isRequiredLogin, setIsRequiredLogin] = React.useState(false);\n\n const handleGetWishlistInfo = async () => {\n if (!propsData || (propsData && !Object.keys(propsData).length)) {\n await wishlistInfo({\n callback: ({ totalWishlist: valueTotalWishlist }) => {\n setTotalWishlist(valueTotalWishlist);\n setIsMaximizeTotalWishlist(valueTotalWishlist > 99);\n setIsFirstLoading(false);\n setIsLoading(false);\n\n localStorage?.setItem(LOCAL_STORAGE_KEY.WISHLIST_BADGE_COUNTER, valueTotalWishlist);\n }\n });\n } else {\n localStorage?.setItem(LOCAL_STORAGE_KEY.WISHLIST_BADGE_COUNTER, totalWishlist);\n }\n };\n\n const handleSettings = async (LOCAL_STORAGE_WISHLIST_SETTING: any) => {\n let response: any;\n\n response = JSON.parse(LOCAL_STORAGE_WISHLIST_SETTING as string);\n\n if (!response) return;\n\n const { is_required_login } = response || {};\n\n setDataSettings(response);\n setIsRequiredLogin(sledgeAnonymId && is_required_login);\n };\n\n React.useEffect(() => {\n if (!isRenderAppWishlist) return;\n\n handleSettings(localStorage.getItem(LOCAL_STORAGE_KEY.WISHLIST_SETTING) || null);\n }, [isRenderAppWishlist]);\n\n React.useEffect(() => {\n if (!dataSettings?.launch_point || !isRenderAppWishlist) return;\n\n handleGetWishlistInfo();\n }, [dataSettings, isRenderAppWishlist]);\n\n React.useEffect(() => {\n if (!valueRenderWishlistBadge || !isRenderAppWishlist) return;\n\n if (triggerRenderWishlistBadge) triggerRenderWishlistBadge(false);\n\n handleGetWishlistInfo();\n }, [valueRenderWishlistBadge, isRenderAppWishlist]);\n\n const defaultTotalWishlist = isJsVersion ? localStorage?.getItem(LOCAL_STORAGE_KEY.WISHLIST_BADGE_COUNTER) || null : null;\n const contentTotalWishlist = isFirstLoading ? defaultTotalWishlist : isLoading || isRequiredLogin ? 0 : `${isMaximizeTotalWishlist ? '99+' : totalWishlist}` || 0;\n\n return <span data-wishlist-counter={contentTotalWishlist}>{contentTotalWishlist}</span>;\n};\n","import React from 'react';\nimport { Button, SkeletonLoading } from '@core/components';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\nimport { useEffectOnChange } from '@core/hooks';\nimport { objectPresent } from '@core/lib/helper';\n\nexport interface IWidgetHeaderClearTriggerProps {\n buttonText?: string;\n shareId?: string;\n dataSettings?: any;\n isFirstLoading?: boolean;\n previewSettings?: any;\n}\n\nexport const WidgetHeaderClearTrigger = ({ buttonText, shareId, dataSettings, isFirstLoading, previewSettings }: IWidgetHeaderClearTriggerProps) => {\n const { sledgeAnonymId } = React.useContext<ISledgeContext>(SledgeContext);\n\n const {\n text_color: display_button_clear_all_text_color,\n border_color: display_button_clear_all_border_color,\n border_radius: display_button_clear_all_border_radius,\n padding_top: display_button_clear_all_padding_top,\n padding_bottom: display_button_clear_all_padding_bottom,\n padding_left: display_button_clear_all_padding_left,\n padding_right: display_button_clear_all_padding_right,\n background_color: display_button_clear_all_background_color,\n font_size: display_button_clear_all_font_size,\n font_weight: display_button_clear_all_font_weight,\n text_transform: display_button_clear_all_text_transform\n } = dataSettings?.display?.widget?.button_clear_all || {};\n const { title_confirm_clear_all_wishlist, text_confirm_clear_all_wishlist, button_submit_confirm_clear_all_wishlist, button_cancel_confirm_clear_all_wishlist } =\n dataSettings?.languages?.popup || {};\n const { button_clear_all } = dataSettings?.languages?.widget || {};\n\n const [isRequiredLogin, setIsRequiredLogin] = React.useState(false);\n\n const display_button_clear_all_style = {\n ...(display_button_clear_all_text_color && { color: display_button_clear_all_text_color }),\n ...(display_button_clear_all_border_color && { borderColor: display_button_clear_all_border_color }),\n ...(display_button_clear_all_border_radius && { borderRadius: display_button_clear_all_border_radius }),\n ...(display_button_clear_all_padding_top && { paddingTop: display_button_clear_all_padding_top }),\n ...(display_button_clear_all_padding_bottom && { paddingBottom: display_button_clear_all_padding_bottom }),\n ...(display_button_clear_all_padding_left && { paddingLeft: display_button_clear_all_padding_left }),\n ...(display_button_clear_all_padding_right && { paddingRight: display_button_clear_all_padding_right }),\n ...(display_button_clear_all_background_color && { backgroundColor: display_button_clear_all_background_color }),\n ...(display_button_clear_all_font_size && { fontSize: display_button_clear_all_font_size }),\n ...(display_button_clear_all_font_weight && { fontWeight: display_button_clear_all_font_weight }),\n ...(display_button_clear_all_text_transform && { textTransform: display_button_clear_all_text_transform })\n };\n\n React.useEffect(() => {\n const { is_required_login } = dataSettings?.display?.global || {};\n\n setIsRequiredLogin(sledgeAnonymId && is_required_login);\n }, [sledgeAnonymId, dataSettings]);\n\n const handleClick = (props?: any) => {\n if (typeof window !== 'undefined' && window.sledgeConfirmationPopup)\n window.sledgeConfirmationPopup({\n title: title_confirm_clear_all_wishlist,\n message: text_confirm_clear_all_wishlist,\n textSubmit: button_submit_confirm_clear_all_wishlist,\n textCancel: button_cancel_confirm_clear_all_wishlist,\n buttonSubmitType: 'danger',\n onSubmit: window.sledgeWishlistWidgetClearList || {},\n ...(props || {})\n });\n };\n\n useEffectOnChange(() => {\n handleClick({ isPreviewSettings: true });\n }, [previewSettings]);\n\n return (\n <>\n {!isRequiredLogin && (\n <>\n {!shareId && (\n <>\n {isFirstLoading ? (\n <SkeletonLoading.Item width=\"132px\" height=\"46px\" color=\"lighten\" rounded=\"md\" />\n ) : (\n <div className=\"sledge-wishlist__widget-header-item sledge-wishlist__widget-header-clear-all-trigger\">\n <Button type=\"button\" colorType=\"danger\" onClick={handleClick} style={display_button_clear_all_style}>\n {buttonText ? buttonText : button_clear_all || 'Clear Wishlist'}\n </Button>\n </div>\n )}\n </>\n )}\n </>\n )}\n </>\n );\n};\n","import React from 'react';\nimport { bulkAddWishlist } from '@core/api/wishlist';\nimport { Button, HeartIcon, LoadingDots, SkeletonLoading } from '@core/components';\nimport { SledgeContext, ISledgeContext } from '@sledge-app/core';\nimport { BadgeCounterInitSelector, BadgeInitSelector } from '@react-wishlist/components';\nimport { watchElement } from '@core/lib/helper';\nimport { OBJECT_DATA_STRING_KEY } from '@core/lib/const';\nimport { useEffectOnChange } from '@core/hooks';\n\nexport interface IWidgetHeaderShareTriggerProps {\n wishlistData?: any;\n buttonText?: string;\n showShareTrigger?: boolean;\n shareLink?: string;\n shareId?: string;\n dataSettings?: any;\n isFirstLoading?: boolean;\n triggerBadge?: 'default' | 'rerender';\n previewSettings?: any;\n}\n\nexport const WidgetHeaderShareTrigger = ({\n wishlistData,\n buttonText,\n showShareTrigger,\n shareLink,\n shareId,\n dataSettings,\n isFirstLoading,\n triggerBadge,\n previewSettings\n}: IWidgetHeaderShareTriggerProps) => {\n const { triggerRenderMultipleComponent, sledgeAnonymId, isJsVersion } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { trigger: triggerRenderWishlistBadge } = triggerRenderMultipleComponent?.wishlist?.badge || {};\n\n const {\n text_color: display_button_share_text_color,\n border_color: display_button_share_border_color,\n border_radius: display_button_share_border_radius,\n padding_top: display_button_share_padding_top,\n padding_bottom: display_button_share_padding_bottom,\n padding_left: display_button_share_padding_left,\n padding_right: display_button_share_padding_right,\n background_color: display_button_share_background_color,\n font_size: display_button_share_font_size,\n font_weight: display_button_share_font_weight,\n text_transform: display_button_share_text_transform\n } = dataSettings?.display?.widget?.button_share || {};\n const { title_share_wishlist, title_confirm_add_to_your_wishlist, text_confirm_add_to_your_wishlist, button_confirm_add_to_your_wishlist } = dataSettings?.languages?.popup || {};\n const { button_share, button_add_to_your_wishlist } = dataSettings?.languages?.widget || {};\n const { show: show_notification, location: location_notification } = dataSettings?.display?.notification || {};\n const { title_added_all_to_wishlist, text_added_all_to_wishlist, title_fail_add_to_wishlist, text_fail_add_to_wishlist } = dataSettings?.languages?.notification || {};\n\n const [isRequiredLogin, setIsRequiredLogin] = React.useState(false);\n\n const display_button_share_style = {\n ...(display_button_share_text_color && { color: display_button_share_text_color }),\n ...(display_button_share_border_color && { borderColor: display_button_share_border_color }),\n ...(display_button_share_border_radius && { borderRadius: display_button_share_border_radius }),\n ...(display_button_share_padding_top && { paddingTop: display_button_share_padding_top }),\n ...(display_button_share_padding_bottom && { paddingBottom: display_button_share_padding_bottom }),\n ...(display_button_share_padding_left && { paddingLeft: display_button_share_padding_left }),\n ...(display_button_share_padding_right && { paddingRight: display_button_share_padding_right }),\n ...(display_button_share_background_color && { backgroundColor: display_button_share_background_color }),\n ...(display_button_share_font_size && { fontSize: display_button_share_font_size }),\n ...(display_button_share_font_weight && { fontWeight: display_button_share_font_weight }),\n ...(display_button_share_text_transform && { textTransform: display_button_share_text_transform })\n };\n\n const [isLoadingBulkAdd, setIsLoadingBulkAdd] = React.useState(false);\n\n let clipboardIcon = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"vuesax/linear/copy\">\n <g id=\"copy\">\n <path id=\"Vector\" d=\"M16 12.9V17.1C16 20.6 14.6 22 11.1 22H6.9C3.4 22 2 20.6 2 17.1V12.9C2 9.4 3.4 8 6.9 8H11.1C14.6 8 16 9.4 16 12.9Z\" stroke=\"#767676\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path id=\"Vector_2\" d=\"M22 6.9V11.1C22 14.6 20.6 16 17.1 16H16V12.9C16 9.4 14.6 8 11.1 8H8V6.9C8 3.4 9.4 2 12.9 2H17.1C20.6 2 22 3.4 22 6.9Z\" stroke=\"#767676\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </g>\n </g>\n </svg>\n `;\n let checkIcon = `<svg width=\"20\" height=\"20\" viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.4669 3.72684C11.7558 3.91574 11.8369 4.30308 11.648 4.59198L7.39799 11.092C7.29783 11.2452 7.13556 11.3467 6.95402 11.3699C6.77247 11.3931 6.58989 11.3355 6.45446 11.2124L3.70446 8.71241C3.44905 8.48022 3.43023 8.08494 3.66242 7.82953C3.89461 7.57412 4.28989 7.55529 4.5453 7.78749L6.75292 9.79441L10.6018 3.90792C10.7907 3.61902 11.178 3.53795 11.4669 3.72684Z\" fill=\"currentColor\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"></path></svg>`;\n\n const handleBulkAddWishlist = async () => {\n setIsLoadingBulkAdd(true);\n let data = wishlistData.map((item: any) => {\n const { id, variant_id, name, variant_name, url, image_url, currency, price } = item.product;\n\n return {\n productId: id,\n productVariantId: variant_id,\n productName: name,\n productVariantName: variant_name,\n productLink: url,\n productImage: image_url,\n productCurrency: currency,\n productPrice: price\n };\n });\n\n let resBulkAddWishlist = await bulkAddWishlist(data);\n if (resBulkAddWishlist?.status?.code === 200) {\n if (typeof window !== 'undefined') {\n // Trigger update for react module\n if (triggerRenderWishlistBadge) triggerRenderWishlistBadge(true);\n\n // Trigger update for javascript\n if (isJsVersion) {\n if (triggerBadge === 'rerender') {\n BadgeInitSelector({ reload: true });\n } else {\n BadgeCounterInitSelector({ reload: true });\n }\n }\n\n if (window.sledgeInfoPopup)\n window.sledgeInfoPopup({\n title: title_added_all_to_wishlist,\n message: text_added_all_to_wishlist\n });\n }\n\n setIsLoadingBulkAdd(false);\n } else {\n if (typeof window !== 'undefined' && window.sledgeToastNotification && show_notification)\n window.sledgeToastNotification({\n title: title_fail_add_to_wishlist || 'Failed',\n message: text_fail_add_to_wishlist || 'Failed add to wishlist, please try again',\n location: location_notification,\n type: 'failed',\n icon: <HeartIcon width={40} height={40} color=\"black\" type=\"outline\" />,\n className: 'sledge-toast__wishlist-widget'\n });\n }\n };\n\n const handleCopyShareLink = () => {\n let running = true;\n\n let boxCopyElement = document.querySelector('.sledge-wishlist__widget-box-copy');\n\n if (boxCopyElement && running) {\n running = false;\n let copyTriggerElement = document.querySelector('.sledge-wishlist__widget-box-copy-icon');\n\n copyTriggerElement?.addEventListener('click', () => {\n let shareLink = document.querySelector('.sledge-wishlist__widget-box-copy-content')?.textContent;\n\n if (shareLink) {\n navigator.clipboard.writeText(shareLink);\n\n if (copyTriggerElement) {\n copyTriggerElement.classList.add('active');\n copyTriggerElement.innerHTML = checkIcon;\n setTimeout(() => {\n if (copyTriggerElement) {\n copyTriggerElement.classList.remove('active');\n copyTriggerElement.innerHTML = clipboardIcon;\n }\n }, 2500);\n }\n }\n });\n }\n };\n\n const handleClick = async (props?: any) => {\n let getMessage = text_confirm_add_to_your_wishlist;\n if (getMessage) getMessage = getMessage.replaceAll(OBJECT_DATA_STRING_KEY.TOTAL_WISHLIST, wishlistData.length);\n\n if (shareId && wishlistData.length) {\n window.sledgeConfirmationPopup({\n title: title_confirm_add_to_your_wishlist || 'Are you sure want to add this to your wishlist item?',\n message: getMessage || `This action cannot be undone. This will adding <strong>${wishlistData.length}</strong> item to your wishlist page.`,\n textSubmit: button_confirm_add_to_your_wishlist || 'Add to your wishlist',\n buttonSubmitType: 'info',\n onSubmit: handleBulkAddWishlist || {},\n ...(props || {})\n });\n } else {\n if (typeof window !== 'undefined' && window.sledgeInfoPopup) {\n window.sledgeInfoPopup({\n title: title_share_wishlist,\n message: shareLink\n ? `<div class=\"sledge-wishlist__widget-box-copy\">\n <div class=\"sledge-wishlist__widget-box-copy-icon\" title=\"Copy to clipboard\">\n ${clipboardIcon}\n </div>\n <div class=\"sledge-wishlist__widget-box-copy-content\">${shareLink}</div>\n </div>`\n : '',\n ...(props || {})\n });\n }\n }\n };\n\n React.useEffect(() => {\n const { is_required_login } = dataSettings?.display?.global || {};\n\n setIsRequiredLogin(sledgeAnonymId && is_required_login);\n }, [sledgeAnonymId, dataSettings]);\n\n useEffectOnChange(() => {\n handleClick({ isPreviewSettings: true });\n }, [previewSettings]);\n\n watchElement({\n selector: '.sledge-wishlist__widget-box-copy',\n init: handleCopyShareLink\n });\n\n return (\n <>\n {!isRequiredLogin && (\n <>\n {showShareTrigger && (\n <>\n {isFirstLoading ? (\n <SkeletonLoading.Item width=\"136px\" height=\"46px\" color=\"lighten\" rounded=\"md\" />\n ) : (\n <div className=\"sledge-wishlist__widget-header-item sledge-wishlist__widget-header-share-trigger\">\n <Button\n type=\"button\"\n style={display_button_share_style}\n {...((shareId && !wishlistData.length) || isLoadingBulkAdd\n ? {\n disabled: true\n }\n : {\n onClick: handleClick\n })}\n >\n {shareId ? (\n <>\n <span className=\"sledge-wishlist__badge-counter sledge-wishlist__badge-counter-top-right\">{wishlistData.length}</span>\n {isLoadingBulkAdd ? <LoadingDots /> : null}\n {button_add_to_your_wishlist || 'Add to your wishlist'}\n </>\n ) : buttonText ? (\n buttonText\n ) : (\n button_share || 'Share Wishlist'\n )}\n </Button>\n </div>\n )}\n </>\n )}\n </>\n )}\n </>\n );\n};\n","import React from 'react';\nimport { SearchIcon, SearchInputField } from '@core/components';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\n\nexport interface IWidgetHeaderSearchFormProps {\n setIsLoading?(value: React.SetStateAction<boolean>): void;\n setKeyword?(value: React.SetStateAction<string>): void;\n keyword?: string;\n placeholder?: string;\n dataSettings?: any;\n}\n\nexport const WidgetHeaderSearchForm = ({ setIsLoading, setKeyword, keyword, placeholder, dataSettings }: IWidgetHeaderSearchFormProps) => {\n const { sledgeAnonymId } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { search_form_placeholder } = dataSettings?.languages?.widget || {};\n\n const [isRequiredLogin, setIsRequiredLogin] = React.useState(false);\n\n const searchFieldRef = React.useRef<HTMLInputElement>(null);\n\n const handleResetField = () => {\n setIsLoading && setIsLoading(true);\n setKeyword && setKeyword('');\n\n searchFieldRef?.current?.focus();\n };\n\n const handleChangeField = (value: string) => {\n setKeyword && setKeyword(value);\n };\n\n React.useEffect(() => {\n const { is_required_login } = dataSettings?.display?.global || {};\n\n setIsRequiredLogin(sledgeAnonymId && is_required_login);\n }, [sledgeAnonymId, dataSettings]);\n\n return (\n <>\n {!isRequiredLogin && (\n <SearchInputField\n type=\"text\"\n icon={<SearchIcon width={18} height={18} color=\"#868686\" />}\n placeholder={placeholder ? placeholder : search_form_placeholder || 'Search product...'}\n value={keyword}\n fieldRef={searchFieldRef}\n onChange={({ value }: any) => handleChangeField(value)}\n onResetField={handleResetField}\n className=\"sledge-wishlist__widget-header-item sledge-wishlist__widget-search-form\"\n withClearField\n />\n )}\n </>\n );\n};\n","export interface IWidgetHeaderTitleProps {\n text?: string;\n dataSettings?: any;\n}\n\nexport const WidgetHeaderTitle = ({ text, dataSettings }: IWidgetHeaderTitleProps) => {\n const {\n color: display_header_title_color,\n font_size: display_header_title_font_size,\n font_weight: display_header_title_font_weight,\n text_transform: display_header_title_text_transform\n } = dataSettings?.display?.widget?.header_title || {};\n const { header_title: language_header_title } = dataSettings?.languages?.widget || {};\n\n const display_header_title_style = {\n ...(display_header_title_color && { color: display_header_title_color }),\n ...(display_header_title_font_size && { fontSize: display_header_title_font_size }),\n ...(display_header_title_font_weight && { fontWeight: display_header_title_font_weight }),\n ...(display_header_title_text_transform && { textTransform: display_header_title_text_transform })\n };\n\n return (\n <div className=\"sledge-wishlist__widget-header-item\">\n <h1 style={display_header_title_style}>{text ? text : language_header_title || 'My Wishlist'}</h1>\n </div>\n );\n};\n","import React from 'react';\nimport { SelectField } from '@core/components';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\n\nexport interface IWidgetHeaderLimitProps {\n limitOptions?: string[] | number[];\n selectedLimit?: string;\n setSelectedLimit?(value: React.SetStateAction<string | number>): void;\n setIsRefreshWidgetList?(value: React.SetStateAction<boolean>): void;\n dataSettings?: any;\n}\n\nexport const WidgetHeaderLimit = ({ limitOptions, selectedLimit, setSelectedLimit, setIsRefreshWidgetList, dataSettings }: IWidgetHeaderLimitProps) => {\n const { sledgeAnonymId } = React.useContext<ISledgeContext>(SledgeContext);\n\n const [isRequiredLogin, setIsRequiredLogin] = React.useState(false);\n\n const handleChangeLimit = (value: string | number) => {\n setSelectedLimit && setSelectedLimit(value);\n setIsRefreshWidgetList && setIsRefreshWidgetList(true);\n };\n\n React.useEffect(() => {\n const { is_required_login } = dataSettings?.display?.global || {};\n\n setIsRequiredLogin(sledgeAnonymId && is_required_login);\n }, [sledgeAnonymId, dataSettings]);\n\n return (\n <>\n {!isRequiredLogin ? (\n <>\n {limitOptions && Boolean(limitOptions?.length) && (\n <div className=\"sledge-wishlist__widget-header-item sledge-wishlist__widget-header-limit-option\">\n <SelectField\n align=\"end\"\n options={limitOptions.map((item: any) => {\n return {\n label: item,\n value: item\n };\n })}\n value={selectedLimit || limitOptions[0]}\n onChange={({ value }: any) => handleChangeLimit(value)}\n />\n </div>\n )}\n </>\n ) : null}\n </>\n );\n};\n","import React from 'react';\nimport { SelectField } from '@core/components';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\n\nexport interface IWidgetHeaderSortProps {\n wishlistSort?: any;\n selectedSort?: string;\n setSelectedSort?(value: React.SetStateAction<string>): void;\n setIsRefreshWidgetList?(value: React.SetStateAction<boolean>): void;\n dataSettings?: any;\n generalDataSettings?: any;\n}\n\nexport const WidgetHeaderSort = ({ wishlistSort, selectedSort, setSelectedSort, setIsRefreshWidgetList, dataSettings, generalDataSettings }: IWidgetHeaderSortProps) => {\n const { sledgeAnonymId } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { sort_placeholder } = generalDataSettings?.languages || {};\n\n const [isRequiredLogin, setIsRequiredLogin] = React.useState(false);\n\n const handleChangeSort = (value: string) => {\n setSelectedSort && setSelectedSort(value);\n setIsRefreshWidgetList && setIsRefreshWidgetList(true);\n };\n\n React.useEffect(() => {\n const { is_required_login } = dataSettings?.display?.global || {};\n\n setIsRequiredLogin(sledgeAnonymId && is_required_login);\n }, [sledgeAnonymId, dataSettings]);\n\n return (\n <>\n {!isRequiredLogin ? (\n <>\n {wishlistSort && Boolean(wishlistSort?.length) && (\n <div className=\"sledge-wishlist__widget-header-item sledge-wishlist__widget-header-sort-option\">\n <SelectField\n align=\"end\"\n options={wishlistSort.map((item: any) => {\n const { name, value } = item;\n return {\n label: name,\n value: value\n };\n })}\n value={selectedSort}\n onChange={({ value }: any) => handleChangeSort(value)}\n placeholder={sort_placeholder || '- Select -'}\n />\n </div>\n )}\n </>\n ) : null}\n </>\n );\n};\n","import React from 'react';\nimport { IWidgetHeaderClearTriggerProps, WidgetHeaderClearTrigger } from './WidgetHeaderClearTrigger';\nimport { IWidgetHeaderShareTriggerProps, WidgetHeaderShareTrigger } from './WidgetHeaderShareTrigger';\nimport { IWidgetHeaderSearchFormProps, WidgetHeaderSearchForm } from './WidgetHeaderSearchForm';\nimport { IWidgetHeaderTitleProps, WidgetHeaderTitle } from './WidgetHeaderTitle';\nimport { IWidgetHeaderLimitProps, WidgetHeaderLimit } from './WidgetHeaderLimit';\nimport { IWidgetHeaderSortProps, WidgetHeaderSort } from './WidgetHeaderSort';\nimport { SkeletonLoading } from '@core/components';\n\nexport interface IWidgetHeaderProps {\n isLoading?: boolean;\n isFirstLoading?: boolean;\n wishlistData?: any;\n wishlistSort?: any;\n selectedSort?: string;\n selectedLimit?: string;\n keyword?: string;\n setSelectedSort?(value: React.SetStateAction<string>): void;\n setSelectedLimit?(value: React.SetStateAction<string | number>): void;\n setKeyword?(value: React.SetStateAction<string>): void;\n text?: string;\n limitOptions?: string[] | number[];\n children?: JSX.Element | JSX.Element[];\n}\n\ntype WidgetHeaderComponent = React.FunctionComponent<IWidgetHeaderProps> & {\n Title: React.FC<IWidgetHeaderTitleProps>;\n SearchForm: React.FC<IWidgetHeaderSearchFormProps>;\n ClearTrigger: React.FC<IWidgetHeaderClearTriggerProps>;\n ShareTrigger: React.FC<IWidgetHeaderShareTriggerProps>;\n Sort: React.FC<IWidgetHeaderSortProps>;\n Limit: React.FC<IWidgetHeaderLimitProps>;\n};\n\nexport const WidgetHeader: WidgetHeaderComponent = ({ isFirstLoading, ...props }: IWidgetHeaderProps) => {\n return (\n <div className=\"sledge-wishlist__widget-header\">\n {isFirstLoading ? (\n <div\n style={{\n display: 'flex',\n gap: '8px',\n width: '100%',\n justifyContent: 'space-between'\n }}\n >\n <SkeletonLoading.Item width=\"190px\" height=\"46px\" color=\"lighten\" rounded=\"md\" />\n\n <div\n style={{\n display: 'flex',\n gap: '8px'\n }}\n >\n <SkeletonLoading.Item width=\"440px\" height=\"46px\" color=\"lighten\" rounded=\"md\" />\n <SkeletonLoading.Item width=\"132px\" height=\"46px\" color=\"lighten\" rounded=\"md\" />\n <SkeletonLoading.Item width=\"136px\" height=\"46px\" color=\"lighten\" rounded=\"md\" />\n </div>\n\n <div\n style={{\n display: 'flex',\n gap: '26px'\n }}\n >\n <SkeletonLoading.Item width=\"190px\" height=\"46px\" color=\"lighten\" rounded=\"md\" />\n <SkeletonLoading.Item width=\"190px\" height=\"46px\" color=\"lighten\" rounded=\"md\" />\n </div>\n </div>\n ) : (\n React.Children.count(props.children) &&\n React.Children.map(props.children, (child: any) =>\n React.cloneElement(child, {\n ...props\n })\n )\n )}\n </div>\n );\n};\n\nWidgetHeader.Title = WidgetHeaderTitle;\nWidgetHeader.SearchForm = WidgetHeaderSearchForm;\nWidgetHeader.ShareTrigger = WidgetHeaderShareTrigger;\nWidgetHeader.ClearTrigger = WidgetHeaderClearTrigger;\nWidgetHeader.Sort = WidgetHeaderSort;\nWidgetHeader.Limit = WidgetHeaderLimit;\n","import React from 'react';\nimport { ArrowRightIcon, Button, HeartIcon, ProductGrid, SkeletonLoading } from '@core/components';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\nimport { SHOPIFY_GID_PRODUCT_ID } from '@core/lib/const';\n\nconst defaultGridType = 'large';\n\nexport interface IWidgetListProps {\n isLoading?: boolean;\n wishlistData?: any;\n currentPage?: number;\n setCurrentPage?(value: React.SetStateAction<number>): void;\n totalPage?: number;\n keyword?: string;\n onSearch?: boolean;\n shareId?: string;\n dataSettings?: any;\n isRequiredLogin?: boolean;\n gridType?: 'small' | 'medium' | 'large';\n productCardsComponent?: any;\n onAfterAddToCart?(state: 'success' | 'failed'): void;\n onAfterAddWishlist?(state: 'success' | 'failed'): void;\n onAfterRemoveWishlist?(state: 'success' | 'failed'): void;\n onAfterRenderProduct?(state: 'success' | 'failed'): void;\n dataReviews?: any;\n generalDataSettings?: any;\n previewSettings?: any;\n isFlyout?: boolean;\n}\n\nexport const WidgetList = (props: IWidgetListProps) => {\n const { sledgeAnonymId } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { isLoading, wishlistData, dataSettings, gridType = defaultGridType, isFlyout } = props || {};\n\n const [isRequiredLogin, setIsRequiredLogin] = React.useState(false);\n\n React.useEffect(() => {\n const { is_required_login } = dataSettings?.display?.global || {};\n\n setIsRequiredLogin(sledgeAnonymId && is_required_login);\n }, [sledgeAnonymId, dataSettings]);\n\n return (\n <>\n {isLoading ? (\n <SkeletonLoading.ProductGrid count={8} type={gridType} isFlyout={isFlyout} />\n ) : (\n <div className=\"sledge-wishlist__widget-product-wrapper\">\n {!wishlistData?.length || isRequiredLogin ? <WidgetListEmpty {...props} isRequiredLogin={isRequiredLogin} /> : <ProductWrapper {...props} />}\n </div>\n )}\n </>\n );\n};\n\nconst WidgetListEmpty = (props: IWidgetListProps) => {\n const { onSearch, keyword, dataSettings, isRequiredLogin } = props || {};\n\n const [title, setTitle] = React.useState('');\n const [description, setDescription] = React.useState('');\n const [showButton, setShowButton] = React.useState(false);\n const [textButton, setTextButton] = React.useState('');\n const [urlButton, setUrlButton] = React.useState('');\n\n React.useEffect(() => {\n const { title_no_result, text_no_result, title_search_no_result, text_search_no_result, login_button, continue_shopping, alert, alert_login } = dataSettings?.languages?.widget || {};\n\n if (isRequiredLogin) {\n setTitle(alert_login || 'Login required!');\n setDescription(alert || 'Please login to save your wishlist across devices.');\n setShowButton(true);\n setTextButton(login_button || 'Login');\n setUrlButton('/account/login');\n } else {\n if (!onSearch) {\n setTitle(keyword ? title_search_no_result || 'No products found' : title_no_result);\n setDescription(keyword ? text_search_no_result || 'Your search did not match any products. <br/> Please try again' : text_no_result);\n setShowButton(!keyword);\n setTextButton(continue_shopping || 'Continue Shopping');\n setUrlButton('/');\n }\n }\n }, [onSearch, isRequiredLogin, dataSettings]);\n\n return (\n <div className=\"sledge-wishlist__widget-product-empty\">\n <div className=\"sledge-wishlist__widget-product-empty-icon\">\n <HeartIcon width={32} height={32} type=\"outline\" color=\"#000000\" />\n </div>\n <div className=\"sledge-wishlist__widget-product-empty-title\" dangerouslySetInnerHTML={{ __html: title }}></div>\n <div className=\"sledge-wishlist__widget-product-empty-description\" dangerouslySetInnerHTML={{ __html: description }}></div>\n {showButton && (\n <div className=\"sledge-wishlist__widget-button-wrapper\">\n <a href={urlButton} className=\"sledge__button sledge-wishlist__widget-product-empty-button-shopping\" data-button-color-type=\"light\">\n <span>{textButton}</span> <ArrowRightIcon width={16.195} height={16.195} color=\"black\" />\n </a>\n </div>\n )}\n </div>\n );\n};\n\nconst ProductWrapper = (props: IWidgetListProps) => {\n const { isJsVersion } = React.useContext<ISledgeContext>(SledgeContext);\n\n const {\n wishlistData,\n currentPage,\n setCurrentPage,\n totalPage,\n shareId,\n dataSettings,\n gridType = defaultGridType,\n productCardsComponent,\n onAfterAddToCart,\n onAfterAddWishlist,\n onAfterRemoveWishlist,\n onAfterRenderProduct,\n dataReviews,\n generalDataSettings,\n previewSettings,\n isFlyout\n } = props || {};\n const { show_add_to_cart, redirect_add_to_cart } = dataSettings?.display?.widget || {};\n const {\n text_color: display_button_add_to_cart_text_color,\n border_color: display_button_add_to_cart_border_color,\n border_radius: display_button_add_to_cart_border_radius,\n padding_top: display_button_add_to_cart_padding_top,\n padding_bottom: display_button_add_to_cart_padding_bottom,\n padding_left: display_button_add_to_cart_padding_left,\n padding_right: display_button_add_to_cart_padding_right,\n background_color: display_button_add_to_cart_background_color,\n font_size: display_button_add_to_cart_font_size,\n font_weight: display_button_add_to_cart_font_weight,\n text_transform: display_button_add_to_cart_text_transform\n } = dataSettings?.display?.widget?.button_add_to_cart || {};\n const {\n color: display_price_color,\n font_size: display_price_font_size,\n font_weight: display_price_font_weight,\n text_transform: display_price_text_transform\n } = dataSettings?.display?.widget?.price || {};\n const {\n color: display_product_name_color,\n font_size: display_product_name_font_size,\n font_weight: display_product_name_font_weight,\n text_transform: display_product_name_text_transform\n } = dataSettings?.display?.widget?.product_name || {};\n const { button_add_to_cart: language_button_add_to_cart } = dataSettings?.languages?.widget || {};\n const { button_load_more, button_loading } = generalDataSettings?.languages || {};\n\n const display_button_add_to_cart_style = {\n ...(display_button_add_to_cart_text_color && { color: display_button_add_to_cart_text_color }),\n ...(display_button_add_to_cart_border_color && { borderColor: display_button_add_to_cart_border_color }),\n ...(display_button_add_to_cart_border_radius && { borderRadius: display_button_add_to_cart_border_radius }),\n ...(display_button_add_to_cart_padding_top && { paddingTop: display_button_add_to_cart_padding_top }),\n ...(display_button_add_to_cart_padding_bottom && { paddingBottom: display_button_add_to_cart_padding_bottom }),\n ...(display_button_add_to_cart_padding_left && { paddingLeft: display_button_add_to_cart_padding_left }),\n ...(display_button_add_to_cart_padding_right && { paddingRight: display_button_add_to_cart_padding_right }),\n ...(display_button_add_to_cart_background_color && { backgroundColor: display_button_add_to_cart_background_color }),\n ...(display_button_add_to_cart_font_size && { fontSize: display_button_add_to_cart_font_size }),\n ...(display_button_add_to_cart_font_weight && { fontWeight: display_button_add_to_cart_font_weight }),\n ...(display_button_add_to_cart_text_transform && { textTransform: display_button_add_to_cart_text_transform })\n };\n\n const display_price_style = {\n ...(display_price_color && { color: display_price_color }),\n ...(display_price_font_size && { fontSize: display_price_font_size }),\n ...(display_price_font_weight && { fontWeight: display_price_font_weight }),\n ...(display_price_text_transform && { textTransform: display_price_text_transform })\n };\n\n const display_product_name_style = {\n ...(display_product_name_color && { color: display_product_name_color }),\n ...(display_product_name_font_size && { fontSize: display_product_name_font_size }),\n ...(display_product_name_font_weight && { fontWeight: display_product_name_font_weight }),\n ...(display_product_name_text_transform && { textTransform: display_product_name_text_transform })\n };\n\n let getCurrentPage = currentPage || 0;\n let getTotalPage = totalPage || 0;\n\n const [isLoadingButtonLoadMore, setIsLoadingButtonLoadMore] = React.useState(false);\n const [isVisibleLoadMore, setIsVisibleLoadMore] = React.useState(false);\n\n const handleLoadMore = () => {\n setCurrentPage && currentPage && setCurrentPage(currentPage + 1);\n setIsLoadingButtonLoadMore(true);\n };\n\n React.useEffect(() => {\n if (getTotalPage === getCurrentPage && !isLoadingButtonLoadMore) {\n setIsVisibleLoadMore(false);\n } else {\n setIsVisibleLoadMore(getTotalPage >= getCurrentPage);\n }\n }, [isLoadingButtonLoadMore]);\n\n React.useEffect(() => {\n setIsLoadingButtonLoadMore(false);\n }, [wishlistData]);\n\n let dataWishlists: any = {};\n for (const v of wishlistData) dataWishlists[v.product.id] = true;\n\n return (\n <>\n {wishlistData?.length ? (\n <ProductGrid\n sourceApp=\"wishlist\"\n type={gridType}\n data={wishlistData.map((item: any) => {\n const { id, variant_id, name, variant_name, url, image_url, currency, price, vendor, sku, variants, ...other_product } = item?.product || {};\n const productUrl = new URL(url);\n const arrProductUrlPathname = productUrl.pathname.split('/');\n const handle = arrProductUrlPathname[arrProductUrlPathname.length - 1];\n\n return {\n product: {\n id,\n admin_graphql_api_id: `${SHOPIFY_GID_PRODUCT_ID}${id}`,\n handle,\n title: name,\n image: { src: image_url },\n url,\n vendor,\n currency,\n ...other_product\n },\n variants\n };\n })}\n setting={{\n show_vendor: true,\n show_sku: true,\n show_price: true,\n show_add_to_cart: show_add_to_cart,\n redirect_add_to_cart: redirect_add_to_cart,\n language_button_add_to_cart: language_button_add_to_cart,\n display_product_name_style: display_product_name_style,\n display_price_style: display_price_style,\n display_button_add_to_cart_style: display_button_add_to_cart_style\n }}\n showOptionOutOfStock={false}\n triggerPropAdditional={{\n forceActive: true,\n ...(shareId && {\n hidden: true\n })\n }}\n isComponentJsVersion={isJsVersion}\n cards={productCardsComponent}\n onAfterAddToCart={onAfterAddToCart}\n onAfterAddWishlist={onAfterAddWishlist}\n onAfterRemoveWishlist={onAfterRemoveWishlist}\n onAfterRenderProduct={onAfterRenderProduct}\n dataReviews={dataReviews}\n dataWishlists={dataWishlists}\n previewSettings={previewSettings}\n isFlyout={isFlyout}\n />\n ) : (\n <></>\n )}\n {isVisibleLoadMore && (\n <div className=\"sledge-wishlist__widget-button-load-more\">\n <Button\n type=\"button\"\n role=\"button\"\n colorType=\"light\"\n disabled={isLoadingButtonLoadMore}\n onClick={handleLoadMore}\n style={{\n ...(isLoadingButtonLoadMore && {\n cursor: 'wait'\n })\n }}\n >\n {isLoadingButtonLoadMore ? button_loading || 'Loading...' : button_load_more || 'Load More'}\n </Button>\n </div>\n )}\n </>\n );\n};\n","import React from 'react';\n\nimport { DEFAULT_LIMIT_VALUE, DEFAULT_MAX_WIDTH_COMPONENT, DEFAULT_QUERY_PARAM } from '@core/lib/const';\nimport { clearWishlist, getWishlist, getWishlistInfo } from '@core/api/wishlist';\nimport { useEffectOnChange, usePreviewSettings, usePrevious } from '@core/hooks';\nimport { LOCAL_STORAGE_KEY } from '@core/lib/const';\nimport { SkeletonLoading } from '@core/components';\nimport { SledgeContext, ISledgeContext } from '@sledge-app/core';\nimport { isFunction, selectedLocaleJs } from '@core/lib/helper';\nimport { BadgeCounterInitSelector, BadgeInitSelector } from '@react-wishlist/components';\n\ndeclare global {\n interface Window {\n sledgeWishlistWidgetListUpdate(): void;\n sledgeWishlistFlyoutWidgetListUpdate(): void;\n sledgeWishlistWidgetClearList(): void;\n }\n}\n\nexport interface IWidgetRootProps {\n children: JSX.Element | JSX.Element[];\n width?: string;\n query?: {\n shareId: string;\n };\n params?:\n | {\n shareId?: string | '';\n }\n | undefined;\n onAfterAddToCart?(state: 'success' | 'failed'): void;\n onAfterAddWishlist?(state: 'success' | 'failed'): void;\n onAfterRemoveWishlist?(state: 'success' | 'failed'): void;\n onAfterRenderProduct?(state: 'success' | 'failed'): void;\n data?: any;\n dataInfo?: any;\n dataReviews?: any;\n limitOptions?: string[] | number[];\n triggerBadge?: 'default' | 'rerender';\n previewSettings?: any;\n isFlyout?: boolean;\n}\n\nexport const WidgetRoot = (props: IWidgetRootProps) => {\n const {\n children,\n width = DEFAULT_MAX_WIDTH_COMPONENT,\n query,\n params,\n onAfterAddToCart,\n onAfterAddWishlist,\n onAfterRemoveWishlist,\n onAfterRenderProduct,\n data: propsData,\n dataInfo,\n dataReviews,\n limitOptions = DEFAULT_LIMIT_VALUE,\n triggerBadge = 'default',\n previewSettings: previewSettingsProp,\n isFlyout\n } = props;\n\n const queryShareId = query?.shareId ? query.shareId : DEFAULT_QUERY_PARAM.SHARE_ID;\n\n const { isRenderApp, triggerRenderMultipleComponent, sledgeAnonymId, isJsVersion, locale } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { wishlist: isRenderAppWishlist } = isRenderApp || {};\n const { trigger: triggerRenderWishlistBadge } = triggerRenderMultipleComponent?.wishlist?.badge || {};\n\n const { generalPreviewSettings, wishlistPreviewSettings, previewSettings } = usePreviewSettings({\n defaultSettings: previewSettingsProp,\n nestedProperty: 'sledge.wishlist.widget.preview'\n });\n\n const [isFirstLoading, setIsFirstLoading] = React.useState(!propsData);\n const [isLoading, setIsLoading] = React.useState(!propsData);\n const [wishlistData, setWishlistData] = React.useState(propsData?.data || []);\n const [wishlistSort, setWishlistSort] = React.useState(propsData?.sorts || []);\n const [isRefreshWidgetList, setIsRefreshWidgetList] = React.useState(false);\n const [selectedSort, setSelectedSort] = React.useState('');\n const [selectedLimit, setSelectedLimit] = React.useState(limitOptions[0]);\n const [keyword, setKeyword] = React.useState('');\n const [currentPage, setCurrentPage] = React.useState(1);\n const [totalPage, setTotalPage] = React.useState(propsData?.page?.total_page || 0);\n const [onSearch, setOnSearch] = React.useState(false);\n const [showShareTrigger, setShowShareTrigger] = React.useState(!!propsData);\n const [shareLink, setShareLink] = React.useState('');\n const [shareId, setShareId] = React.useState<any>(null);\n const [proxyUrl, setProxyUrl] = React.useState('');\n const [dataSettings, setDataSettings] = React.useState<any>({});\n const [generalDataSettings, setGeneralDataSettings] = React.useState<any>({});\n const [isRequiredLogin, setIsRequiredLogin] = React.useState<boolean | '' | null | undefined>(!!propsData);\n\n const previousState: any = usePrevious({ keyword, currentPage });\n\n const { alert, alert_login } = dataSettings?.languages?.widget || {};\n\n const handleClearWishlist = async () => {\n setIsLoading(true);\n\n let response: any;\n let run: boolean = false;\n\n response = await clearWishlist();\n\n run = response?.status?.code === 200;\n\n if (run) {\n await handleSetWishlistData();\n\n // Trigger update for react module\n if (triggerRenderWishlistBadge) triggerRenderWishlistBadge(true);\n\n // Trigger update for javascript\n if (isJsVersion) {\n if (triggerBadge === 'rerender') {\n BadgeInitSelector({ reload: true, previewSettings });\n } else {\n BadgeCounterInitSelector({ reload: true, previewSettings });\n }\n }\n } else {\n if (typeof window !== 'undefined' && window.sledgeToastNotification)\n window.sledgeToastNotification({\n title: 'Failed',\n message: 'failed clear all wishlist',\n type: 'failed',\n className: 'sledge-toast__wishlist-widget'\n });\n }\n };\n\n const handleSetWishlistData = async (isLoadMore = false, init = false) => {\n const searchParams = new URLSearchParams(document.location.search);\n const getShareId = params?.shareId ? params.shareId : searchParams?.get(queryShareId) || '';\n\n setIsLoading(isRefreshWidgetList ? true : !isLoadMore);\n\n // Reset data if not Load More\n if (!isLoadMore) {\n setCurrentPage(1);\n setWishlistData([]);\n }\n\n let response: any;\n let run: boolean = false;\n let valueWishlistData: any;\n let valueWishlistSort: any;\n let valueTotalPage: number = 0;\n let queryParam = {\n page: isLoadMore ? currentPage : 1,\n limit: selectedLimit,\n sort: selectedSort,\n keyword: keyword,\n shareId: getShareId,\n locale: isJsVersion ? selectedLocaleJs() : locale,\n ...(wishlistPreviewSettings && generalPreviewSettings?.use_dummy_data\n ? {\n is_preview: true\n }\n : {})\n };\n\n if (propsData && init) {\n response = propsData;\n } else response = await getWishlist(queryParam);\n\n run = response?.status?.code === 200 || false;\n valueWishlistData = !response.data?.length ? [] : (prevState: any) => (wishlistData?.length && isLoadMore ? [...prevState, ...response.data] : response.data);\n valueWishlistSort = !response.sorts?.length ? [] : response.sorts;\n valueTotalPage = response?.page?.total_page || 1;\n\n if (run) {\n setWishlistData(valueWishlistData);\n setWishlistSort(valueWishlistSort);\n setTotalPage(valueTotalPage);\n setIsLoading(false);\n setIsRefreshWidgetList(false);\n }\n };\n\n const handleShareData = async () => {\n let customRoutePage = '';\n\n if (typeof window !== 'undefined' && window?.location?.pathname) customRoutePage = window.location.pathname;\n\n setShowShareTrigger(false);\n\n let response: any;\n let run: boolean = false;\n let valueProxyUrl: string;\n let valueShareLink: string;\n let valueShareId: string;\n let queryParam = {\n ...(wishlistPreviewSettings && generalPreviewSettings?.use_dummy_data\n ? {\n is_preview: true\n }\n : {})\n };\n\n if (dataInfo) {\n response = { data: dataInfo };\n run = true;\n } else {\n response = await getWishlistInfo({\n query: queryParam\n });\n run = response?.status?.code === 200 || false;\n }\n\n valueProxyUrl = response?.data?.proxy_url || '';\n valueShareId = response?.data?.share_id || '';\n valueShareLink = `${customRoutePage}?${queryShareId}=${valueShareId}`;\n\n if (run) {\n setProxyUrl(valueProxyUrl);\n setShareLink(window.location.origin + valueShareLink);\n setShowShareTrigger(true);\n }\n };\n\n const handleSettings = async (LOCAL_STORAGE_WISHLIST_SETTING: any) => {\n let response: any;\n let responseGeneral: any;\n\n response = wishlistPreviewSettings || JSON.parse(LOCAL_STORAGE_WISHLIST_SETTING as string);\n responseGeneral = generalPreviewSettings || JSON.parse((localStorage.getItem(LOCAL_STORAGE_KEY.GENERAL_SETTING) || null) as string);\n\n if (!response) return;\n\n setDataSettings(response);\n\n if (responseGeneral) setGeneralDataSettings(responseGeneral);\n };\n\n useEffectOnChange(() => {\n handleSettings(localStorage.getItem(LOCAL_STORAGE_KEY.WISHLIST_SETTING) || null);\n }, [previewSettings]);\n\n React.useEffect(() => {\n if (!isRenderAppWishlist) return;\n\n let isLoadMore = Boolean(previousState && previousState?.currentPage !== currentPage);\n\n if (previousState && previousState?.keyword !== keyword) {\n setOnSearch(true);\n const delayDebounceFn = setTimeout(() => {\n setOnSearch(false);\n handleSetWishlistData();\n }, 500);\n return () => clearTimeout(delayDebounceFn);\n } else {\n handleSetWishlistData(isLoadMore, true);\n }\n }, [isRenderAppWishlist, keyword, currentPage]);\n\n React.useEffect(() => {\n if (!isRenderAppWishlist || !isRefreshWidgetList) return;\n\n handleSetWishlistData();\n }, [isRefreshWidgetList]);\n\n React.useEffect(() => {\n if (!isRenderAppWishlist) return;\n\n const searchParams = new URLSearchParams(document.location.search);\n setShareId(params?.shareId ? params.shareId : searchParams?.get(queryShareId) || '');\n\n if (typeof window !== 'undefined') {\n // For trigger update on wishlist flyout widget\n if (isFlyout) {\n window.sledgeWishlistFlyoutWidgetListUpdate = () => {\n handleSetWishlistData();\n };\n } else {\n window.sledgeWishlistWidgetListUpdate = () => {\n handleSetWishlistData();\n };\n }\n\n window.sledgeWishlistWidgetClearList = () => {\n handleClearWishlist();\n };\n }\n\n handleShareData();\n handleSettings(localStorage.getItem(LOCAL_STORAGE_KEY.WISHLIST_SETTING) || null);\n setIsFirstLoading(false);\n }, [isRenderAppWishlist]);\n\n React.useEffect(() => {\n const { is_required_login } = dataSettings?.display?.global || {};\n\n setIsRequiredLogin(sledgeAnonymId && !is_required_login);\n }, [sledgeAnonymId, dataSettings]);\n\n // Separate Components\n let productCardsComponent: any = null;\n let wishlistWidgetAlertComponent: any = null;\n\n React.Children.map(children, (child) => {\n if (React.isValidElement(child) && isFunction(child.type)) {\n const { productCard, wishlistWidgetAlert }: any = child?.props || {};\n\n if (productCard && isFunction(productCard)) productCardsComponent = productCard;\n if (wishlistWidgetAlert && isFunction(wishlistWidgetAlert)) wishlistWidgetAlertComponent = wishlistWidgetAlert;\n }\n });\n\n const WishlistWidgetAlert = wishlistWidgetAlertComponent;\n\n const wrapperStyle = {\n maxWidth: width\n };\n\n return (\n <>\n <div className=\"sledge-wishlist__widget-wrapper\" style={wrapperStyle}>\n {isFlyout ? null : (\n <>\n {isRequiredLogin && (\n <>\n {isFirstLoading ? (\n <SkeletonLoading.Item\n width=\"99.5%\"\n height=\"72px\"\n color=\"lighten\"\n rounded=\"none\"\n style={{\n margin: '0 auto'\n }}\n />\n ) : WishlistWidgetAlert ? (\n <React.Fragment>{isJsVersion ? <div dangerouslySetInnerHTML={{ __html: WishlistWidgetAlert() }}></div> : <WishlistWidgetAlert />}</React.Fragment>\n ) : (\n <div className=\"sledge-wishlist__widget-alert\">\n <div className=\"sledge-wishlist__widget-alert-text\">\n {alert || 'Please login to save your wishlist across devices.'}{' '}\n <a href=\"/account/login\" className=\"sledge-wishlist__widget-alert-link\">\n {alert_login || 'Login Here'}\n </a>\n </div>\n </div>\n )}\n </>\n )}\n </>\n )}\n\n {React.Children.count(children) &&\n React.Children.map(children, (child) => {\n return React.cloneElement(child, {\n isLoading,\n isFirstLoading,\n wishlistData,\n wishlistSort,\n selectedSort,\n selectedLimit,\n keyword,\n currentPage,\n totalPage,\n limitOptions,\n onSearch,\n showShareTrigger,\n shareLink,\n shareId,\n proxyUrl,\n dataSettings,\n generalDataSettings,\n productCardsComponent,\n query,\n setIsLoading,\n setIsRefreshWidgetList,\n setSelectedSort,\n setSelectedLimit,\n setKeyword,\n setCurrentPage,\n onAfterAddToCart,\n onAfterAddWishlist,\n onAfterRemoveWishlist,\n onAfterRenderProduct,\n dataReviews,\n triggerBadge,\n previewSettings,\n isFlyout\n });\n })}\n </div>\n </>\n );\n};\n","import React from 'react';\nimport { WidgetHeader, IWidgetHeaderProps } from './WidgetHeader';\nimport { WidgetList, IWidgetListProps } from './WidgetList';\nimport { WidgetRoot, IWidgetRootProps } from './WidgetRoot';\n\nexport interface IWidgetProps {\n children: JSX.Element | JSX.Element[];\n}\n\ntype WidgetComponent = React.FunctionComponent<IWidgetProps> & {\n Root: React.FC<IWidgetRootProps>;\n Header: React.FC<IWidgetHeaderProps>;\n List: React.FC<IWidgetListProps>;\n};\n\nexport const Widget: WidgetComponent = ({ children }: IWidgetProps): JSX.Element => (\n <>{React.Children.count(children) && React.Children.map(children, (child: JSX.Element) => React.cloneElement(child, {}))}</>\n);\n\nWidget.Root = WidgetRoot;\nWidget.Header = WidgetHeader;\nWidget.List = WidgetList;\n","import React from 'react';\nimport { INTERNAL_SELECTOR_VALUE, LOCAL_STORAGE_KEY } from '@core/lib/const';\nimport { SledgeContext, ISledgeContext, CustomComponents } from '@sledge-app/core';\nimport { Button, FlyoutSidebar, HeartIcon } from '@core/components';\nimport { wishlistInfo } from './utils';\nimport { BadgeCounter } from './BadgeCounter';\nimport { useEffectOnChange, usePreviewSettings } from '@core/hooks';\nimport { Widget } from '@react-wishlist/components/Widget';\nimport { isFunction } from '@core/lib/helper';\n\nexport interface IBadgeProps {\n children?: JSX.Element | JSX.Element[];\n useProxyUrl?: boolean;\n useWishlistFlyout?: boolean;\n data?: any;\n position?: 'none' | 'left' | 'right' | 'bottom-left' | 'bottom-right';\n urlWishlistWidget?: string;\n previewSettings?: any;\n}\n\nexport const Badge = (props: IBadgeProps) => {\n const {\n children,\n useProxyUrl = false,\n useWishlistFlyout: useWishlistFlyoutProp = false,\n data: propsData,\n position: positionProp,\n urlWishlistWidget: urlWishlistWidgetProp = '',\n previewSettings: previewSettingsProp\n } = props;\n\n const { isRenderApp, triggerRenderMultipleComponent, sledgeAnonymId, isJsVersion } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { wishlist: isRenderAppWishlist } = isRenderApp || {};\n const { value: valueRenderWishlistBadge, trigger: triggerRenderWishlistBadge } = triggerRenderMultipleComponent?.wishlist?.badge || {};\n\n const defaultColorIcon = 'currentColor';\n\n const { wishlistPreviewSettings, generalPreviewSettings, previewSettings } = usePreviewSettings({\n defaultSettings: previewSettingsProp,\n nestedProperty: 'sledge.wishlist.badge.preview'\n });\n\n const [colorIcon, setColorIcon] = React.useState(defaultColorIcon);\n const [isFirstLoading, setIsFirstLoading] = React.useState(!propsData);\n const [isMaximizeTotalWishlist, setIsMaximizeTotalWishlist] = React.useState(false);\n const [proxyUrl, setProxyUrl] = React.useState(propsData?.proxy_url || '');\n const [dataSettings, setDataSettings] = React.useState<any>({});\n const [isRequiredLogin, setIsRequiredLogin] = React.useState(false);\n const [data, setData] = React.useState<any>({});\n const [openFlyoutWishlistWidget, setOpenFlyoutWishlistWidget] = React.useState(false);\n\n const { use_wishlist_flyout } = dataSettings?.display?.widget || {};\n const { floating_button_type } = dataSettings?.launch_point || {};\n const { alert_login, alert, login_button, header_title: language_header_title, see_all_wishlist } = dataSettings?.languages?.widget || {};\n\n const defaultPosition = positionProp || floating_button_type;\n const position = defaultPosition ? defaultPosition : 'none';\n const urlWishlistWidget = urlWishlistWidgetProp || proxyUrl;\n const useWishlistFlyout = useWishlistFlyoutProp || use_wishlist_flyout;\n\n const handleGetWishlistInfo = async () => {\n await wishlistInfo({\n callback: ({ totalWishlist: valueTotalWishlist, proxyUrl: valueProxyUrl, data: valueData }) => {\n setIsMaximizeTotalWishlist(valueTotalWishlist > 99);\n setProxyUrl(valueProxyUrl);\n setData(valueData);\n\n localStorage?.setItem(LOCAL_STORAGE_KEY.WISHLIST_BADGE_COUNTER, valueTotalWishlist);\n },\n wishlistPreviewSettings,\n generalPreviewSettings\n });\n };\n\n const handleSettings = async (LOCAL_STORAGE_WISHLIST_SETTING: any) => {\n let response: any;\n\n response = wishlistPreviewSettings || JSON.parse(LOCAL_STORAGE_WISHLIST_SETTING as string);\n\n if (!response) return;\n\n const { is_required_login } = response || {};\n\n setDataSettings(response);\n setIsRequiredLogin(sledgeAnonymId && is_required_login);\n setIsFirstLoading(false);\n };\n\n const handleConfirmationPopup = (props?: any) => {\n if (typeof window !== 'undefined' && window.sledgeConfirmationPopup)\n window.sledgeConfirmationPopup({\n title: alert_login || 'Login required!',\n message: alert || 'Please login to save your wishlist across devices.',\n textSubmit: login_button || 'Login',\n buttonSubmitType: 'info',\n onSubmit: () => (window.location.href = '/account/login'),\n generalPreviewSettings,\n ...(props || {})\n });\n };\n\n const handleRequiredLogin = (e: any) => {\n if (isRequiredLogin) {\n e.preventDefault();\n e.stopPropagation();\n\n handleConfirmationPopup();\n } else {\n if (useWishlistFlyout) {\n setOpenFlyoutWishlistWidget(true);\n } else {\n if (useProxyUrl) window.location.href = proxyUrl || '/';\n }\n }\n };\n\n useEffectOnChange(() => {\n handleSettings(localStorage.getItem(LOCAL_STORAGE_KEY.WISHLIST_SETTING) || null);\n handleConfirmationPopup({\n isPreviewSettings: true\n });\n }, [previewSettings]);\n\n React.useEffect(() => {\n if (!isRenderAppWishlist) return;\n\n handleSettings(localStorage.getItem(LOCAL_STORAGE_KEY.WISHLIST_SETTING) || null);\n }, [isRenderAppWishlist]);\n\n React.useEffect(() => {\n if (!dataSettings?.launch_point || !isRenderAppWishlist) return;\n\n handleGetWishlistInfo();\n }, [dataSettings, isRenderAppWishlist]);\n\n React.useEffect(() => {\n if (!valueRenderWishlistBadge || !isRenderAppWishlist) return;\n\n if (triggerRenderWishlistBadge) triggerRenderWishlistBadge(false);\n\n handleGetWishlistInfo();\n }, [valueRenderWishlistBadge, isRenderAppWishlist]);\n\n const mainClassName = 'sledge-wishlist__badge-wrapper';\n\n // Separate Components\n let productCardsComponent: any = null;\n\n if (React.Children.count(children)) {\n React.Children.map(children, (child) => {\n if (React.isValidElement(child) && isFunction(child.type)) {\n const { productCard }: any = child?.props || {};\n\n if (productCard && isFunction(productCard)) productCardsComponent = productCard;\n }\n });\n }\n\n const HeaderMenu = () => {\n return (\n <span className={`${mainClassName} sledge-wishlist__badge`} onClick={handleRequiredLogin} onMouseEnter={() => setColorIcon('#F85538')} onMouseLeave={() => setColorIcon(defaultColorIcon)}>\n <HeartIcon width={20} height={20} type=\"outline\" color={colorIcon} />\n {!isFirstLoading && (\n <span\n className={`sledge-wishlist__badge-counter sledge-wishlist__badge-counter-header-menu ${isMaximizeTotalWishlist ? 'sledge-wishlist__badge-fit-content' : ''}`}\n data-component={INTERNAL_SELECTOR_VALUE.WISHLIST.ELEMENT_BADGE_COUNTER}\n >\n <div data-component={INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET}>\n <BadgeCounter\n data={\n isJsVersion\n ? {\n ...data,\n ...{\n total_data: localStorage?.getItem(LOCAL_STORAGE_KEY.WISHLIST_BADGE_COUNTER) || data?.total_data\n }\n }\n : data\n }\n />\n </div>\n </span>\n )}\n </span>\n );\n };\n\n const FloatingFull = () => {\n return (\n <div className={`${mainClassName} sledge-wishlist__badge-floating sledge__badge-floating-${position}`}>\n <span onClick={handleRequiredLogin} className=\"sledge-wishlist__badge-floating-icon-link\">\n <span className=\"sledge-wishlist__badge-floating-text\">My Wishlist</span>\n <span className=\"sledge-wishlist__badge-icon\">\n <HeartIcon width={18} height={18} type=\"fill\" color=\"#000000\" />\n {!isFirstLoading && (\n <span\n className={`sledge-wishlist__badge-counter sledge-wishlist__badge-counter-bottom-right ${isMaximizeTotalWishlist ? 'sledge-wishlist__badge-fit-content' : ''}`}\n data-component={INTERNAL_SELECTOR_VALUE.WISHLIST.ELEMENT_BADGE_COUNTER}\n >\n <div data-component={INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET}>\n <BadgeCounter\n data={\n isJsVersion\n ? {\n ...data,\n ...{\n total_data: localStorage?.getItem(LOCAL_STORAGE_KEY.WISHLIST_BADGE_COUNTER) || data?.total_data\n }\n }\n : data\n }\n />\n </div>\n </span>\n )}\n </span>\n </span>\n </div>\n );\n };\n\n const FloatingIcon = () => {\n return (\n <div className={`${mainClassName} sledge-wishlist__badge-floating-icon sledge-wishlist__badge-floating-${position}`}>\n <span onClick={handleRequiredLogin} className=\"sledge-wishlist__badge-floating-icon-link\">\n <span className=\"sledge-wishlist__badge-icon\">\n <HeartIcon width={27.01} height={25.73} type=\"outline\" color=\"#000000\" />\n {!isFirstLoading && (\n <span\n className={`sledge-wishlist__badge-counter sledge-wishlist__badge-counter-bottom-right ${isMaximizeTotalWishlist ? 'sledge-wishlist__badge-fit-content' : ''}`}\n data-component={INTERNAL_SELECTOR_VALUE.WISHLIST.ELEMENT_BADGE_COUNTER}\n >\n <div data-component={INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET}>\n <BadgeCounter\n data={\n isJsVersion\n ? {\n ...data,\n ...{\n total_data: localStorage?.getItem(LOCAL_STORAGE_KEY.WISHLIST_BADGE_COUNTER) || data?.total_data\n }\n }\n : data\n }\n />\n </div>\n </span>\n )}\n </span>\n </span>\n </div>\n );\n };\n\n return (\n <>\n {useWishlistFlyout ? (\n <FlyoutSidebar\n title={\n <div className=\"sledge-flyout-widget__wishlist-title\">\n <span>{language_header_title || 'My Wishlist'}</span>\n\n <span\n className={`sledge-wishlist__badge-counter ${isMaximizeTotalWishlist ? 'sledge-wishlist__badge-fit-content' : ''}`}\n data-component={INTERNAL_SELECTOR_VALUE.WISHLIST.ELEMENT_BADGE_COUNTER}\n >\n <div data-component={INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET}>\n <BadgeCounter\n data={\n isJsVersion\n ? {\n ...data,\n ...{\n total_data: localStorage?.getItem(LOCAL_STORAGE_KEY.WISHLIST_BADGE_COUNTER) || data?.total_data\n }\n }\n : data\n }\n />\n </div>\n </span>\n </div>\n }\n content={\n <div className=\"sledge-flyout-widget__wishlist-content\">\n <Widget.Root isFlyout={useWishlistFlyout}>\n <CustomComponents productCard={productCardsComponent} />\n <Widget.List />\n </Widget.Root>\n </div>\n }\n footer={\n <div className=\"sledge-flyout-widget__wishlist-footer\">\n <a href={urlWishlistWidget} className=\"sledge-flyout-widget__wishlist-see-all-button\">\n <Button type=\"button\" colorType=\"success\" fullWidth={true}>\n {see_all_wishlist || 'See All Wishlist'}\n </Button>\n </a>\n </div>\n }\n open={openFlyoutWishlistWidget}\n setOpen={setOpenFlyoutWishlistWidget}\n position=\"right\"\n className=\"sledge-flyout-widget__wishlist\"\n withBlurEffect\n />\n ) : null}\n\n {isFirstLoading ? null : <>{position === 'none' ? <HeaderMenu /> : String(position).includes('bottom') ? <FloatingIcon /> : <FloatingFull />}</>}\n </>\n );\n};\n","import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport { Badge } from './Badge';\nimport { DATASET_ATTRIBUTE_KEY, LOCAL_STORAGE_KEY, SELECTOR } from '@core/lib/const';\nimport { SELECTOR_ATTRIBUTE_KEY } from '@core/lib/const';\nimport { INTERNAL_SELECTOR_VALUE } from '@core/lib/const';\nimport { CustomComponents, SledgeContext } from '@sledge-app/core';\nimport { BadgeCounter } from './BadgeCounter';\nimport { objectPresent, stringToFunction } from '@core/lib/helper';\n\nexport const BadgeCounterInitSelector = (props?: { selector?: string; reload?: boolean; previewSettings?: any }) => {\n const { selector = '', reload = false, previewSettings = null } = props || {};\n const getSelector = selector || SELECTOR.WISHLIST.ELEMENT_BADGE_COUNTER;\n\n let element: Array<HTMLElement> = Array.from(document.querySelectorAll(getSelector));\n\n let isElementDetected = !element || (element && !element.length);\n\n if (isElementDetected) return;\n\n element.map((item: any) => {\n if (item) {\n if (item?.hasAttribute('loaded') && !reload) return;\n\n item.setAttribute('loaded', '');\n\n // Re-render with remove element logic\n const getElementContainerWidgetQuery = item.querySelector(`[${SELECTOR_ATTRIBUTE_KEY}=\"${INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET}\"]`);\n if (getElementContainerWidgetQuery) getElementContainerWidgetQuery.remove();\n\n // For container react root element\n let elementContainerWidget = document.createElement('div');\n elementContainerWidget.setAttribute(SELECTOR_ATTRIBUTE_KEY, INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET);\n item.appendChild(elementContainerWidget);\n\n ReactDOM.createRoot(elementContainerWidget).render(\n <React.StrictMode>\n <SledgeContext.Provider\n value={{\n isRenderApp: {\n wishlist: true,\n productReview: true,\n instantSearch: true\n },\n sledgeAnonymId: localStorage.getItem(LOCAL_STORAGE_KEY.ANONYM_ID) || '',\n isJsVersion: true\n }}\n >\n <BadgeCounter previewSettings={previewSettings} />\n </SledgeContext.Provider>\n </React.StrictMode>\n );\n }\n });\n};\n\nexport const BadgeInitSelector = (props?: { selector?: string; reload?: boolean; previewSettings?: any }) => {\n const { selector = '', reload = false, previewSettings = null } = props || {};\n const getSelector = selector || SELECTOR.WISHLIST.ELEMENT_BADGE;\n const LOCAL_STORAGE_WISHLIST_SETTING = localStorage.getItem(LOCAL_STORAGE_KEY.WISHLIST_SETTING) ? JSON.parse((localStorage.getItem(LOCAL_STORAGE_KEY.WISHLIST_SETTING) || null) as string) : null;\n const sledgeWishlistSettings = objectPresent(previewSettings?.settings?.wishlist) || LOCAL_STORAGE_WISHLIST_SETTING;\n\n let element: Array<HTMLElement> = Array.from(document.querySelectorAll(getSelector));\n\n let isElementDetected = !element || (element && !element.length);\n\n if (!sledgeWishlistSettings || isElementDetected) return;\n\n const { floating_button_type } = sledgeWishlistSettings?.launch_point || {};\n\n const isBottomFloatingType = String(floating_button_type).includes('bottom');\n\n if (floating_button_type !== 'none') {\n if (isBottomFloatingType) {\n element.map((item: any, index: number) => {\n if (item && !index) {\n if (item?.hasAttribute('loaded') && !reload) return;\n\n item.setAttribute('loaded', '');\n\n // TODO: Temporary solution for preloaded element\n const elementPreload = item.querySelector(`[${SELECTOR_ATTRIBUTE_KEY}=\"preload\"]`);\n if (elementPreload) elementPreload.remove();\n\n // Re-render with remove element logic\n const getElementContainerWidgetQuery = item.querySelector(`[${SELECTOR_ATTRIBUTE_KEY}=\"${INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET}\"]`);\n if (getElementContainerWidgetQuery) getElementContainerWidgetQuery.remove();\n\n // For container react root element\n let elementContainerWidget = document.createElement('div');\n elementContainerWidget.setAttribute(SELECTOR_ATTRIBUTE_KEY, INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET);\n item.appendChild(elementContainerWidget);\n\n const USE_PROXY_URL = item.getAttribute(DATASET_ATTRIBUTE_KEY.WISHLIST.USE_PROXY_URL);\n const USE_WISHLIST_FLYOUT = item.getAttribute(DATASET_ATTRIBUTE_KEY.WISHLIST.USE_WISHLIST_FLYOUT);\n const URL_WISHLIST_WIDGET = item.getAttribute(DATASET_ATTRIBUTE_KEY.WISHLIST.URL_WISHLIST_WIDGET);\n const PRODUCT_CARDS = item.querySelector(SELECTOR.GLOBAL.ELEMENT_CUSTOM_COMPONENTS)?.getAttribute(DATASET_ATTRIBUTE_KEY.GLOBAL.RENDER_PRODUCT_CARD);\n\n ReactDOM.createRoot(elementContainerWidget).render(\n <React.StrictMode>\n <SledgeContext.Provider\n value={{\n isRenderApp: {\n wishlist: true,\n productReview: true,\n instantSearch: true\n },\n sledgeAnonymId: localStorage.getItem(LOCAL_STORAGE_KEY.ANONYM_ID) || '',\n isJsVersion: true\n }}\n >\n <Badge\n previewSettings={previewSettings}\n useProxyUrl={Boolean(USE_PROXY_URL && USE_PROXY_URL === 'true')}\n useWishlistFlyout={Boolean(USE_WISHLIST_FLYOUT && USE_WISHLIST_FLYOUT === 'true')}\n position={floating_button_type}\n urlWishlistWidget={URL_WISHLIST_WIDGET}\n >\n <CustomComponents productCard={stringToFunction(PRODUCT_CARDS)} />\n </Badge>\n </SledgeContext.Provider>\n </React.StrictMode>\n );\n }\n });\n } else {\n element.map((item: any, index: number) => {\n if (item && !index) {\n if (item?.hasAttribute('loaded') && !reload) return;\n\n item.setAttribute('loaded', '');\n\n // TODO: Temporary solution for preloaded element\n const elementPreload = item.querySelector(`[${SELECTOR_ATTRIBUTE_KEY}=\"preload\"]`);\n if (elementPreload) elementPreload.remove();\n\n // Re-render with remove element logic\n const getElementContainerWidgetQuery = item.querySelector(`[${SELECTOR_ATTRIBUTE_KEY}=\"${INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET}\"]`);\n if (getElementContainerWidgetQuery) getElementContainerWidgetQuery.remove();\n\n // For container react root element\n let elementContainerWidget = document.createElement('div');\n elementContainerWidget.setAttribute(SELECTOR_ATTRIBUTE_KEY, INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET);\n item.appendChild(elementContainerWidget);\n\n const USE_PROXY_URL = item.getAttribute(DATASET_ATTRIBUTE_KEY.WISHLIST.USE_PROXY_URL);\n const USE_WISHLIST_FLYOUT = item.getAttribute(DATASET_ATTRIBUTE_KEY.WISHLIST.USE_WISHLIST_FLYOUT);\n const URL_WISHLIST_WIDGET = item.getAttribute(DATASET_ATTRIBUTE_KEY.WISHLIST.URL_WISHLIST_WIDGET);\n const PRODUCT_CARDS = item.querySelector(SELECTOR.GLOBAL.ELEMENT_CUSTOM_COMPONENTS)?.getAttribute(DATASET_ATTRIBUTE_KEY.GLOBAL.RENDER_PRODUCT_CARD);\n\n ReactDOM.createRoot(elementContainerWidget).render(\n <React.StrictMode>\n <SledgeContext.Provider\n value={{\n isRenderApp: {\n wishlist: true,\n productReview: true,\n instantSearch: true\n },\n sledgeAnonymId: localStorage.getItem(LOCAL_STORAGE_KEY.ANONYM_ID) || '',\n isJsVersion: true\n }}\n >\n <Badge\n previewSettings={previewSettings}\n useProxyUrl={Boolean(USE_PROXY_URL && USE_PROXY_URL === 'true')}\n useWishlistFlyout={Boolean(USE_WISHLIST_FLYOUT && USE_WISHLIST_FLYOUT === 'true')}\n position={floating_button_type}\n urlWishlistWidget={URL_WISHLIST_WIDGET}\n >\n <CustomComponents productCard={stringToFunction(PRODUCT_CARDS)} />\n </Badge>\n </SledgeContext.Provider>\n </React.StrictMode>\n );\n }\n });\n }\n } else {\n element.map((item: any) => {\n if (item) {\n if (item?.hasAttribute('loaded') && !reload) return;\n\n item.setAttribute('loaded', '');\n\n const USE_PROXY_URL = item.getAttribute(DATASET_ATTRIBUTE_KEY.WISHLIST.USE_PROXY_URL);\n const USE_WISHLIST_FLYOUT = item.getAttribute(DATASET_ATTRIBUTE_KEY.WISHLIST.USE_WISHLIST_FLYOUT);\n const URL_WISHLIST_WIDGET = item.getAttribute(DATASET_ATTRIBUTE_KEY.WISHLIST.URL_WISHLIST_WIDGET);\n const PRODUCT_CARDS = item.querySelector(SELECTOR.GLOBAL.ELEMENT_CUSTOM_COMPONENTS)?.getAttribute(DATASET_ATTRIBUTE_KEY.GLOBAL.RENDER_PRODUCT_CARD);\n\n // TODO: Temporary solution for preloaded element\n const elementPreload = item.querySelector(`[${SELECTOR_ATTRIBUTE_KEY}=\"preload\"]`);\n if (elementPreload) elementPreload.remove();\n\n // Re-render with remove element logic\n const getElementContainerWidgetQuery = item.querySelector(`[${SELECTOR_ATTRIBUTE_KEY}=\"${INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET}\"]`);\n if (getElementContainerWidgetQuery) getElementContainerWidgetQuery.remove();\n\n // For container react root element\n let elementContainerWidget = document.createElement('div');\n elementContainerWidget.setAttribute(SELECTOR_ATTRIBUTE_KEY, INTERNAL_SELECTOR_VALUE.ELEMENT_CONTAINER_WIDGET);\n item.appendChild(elementContainerWidget);\n\n ReactDOM.createRoot(elementContainerWidget).render(\n <React.StrictMode>\n <SledgeContext.Provider\n value={{\n isRenderApp: {\n wishlist: true,\n productReview: true,\n instantSearch: true\n },\n sledgeAnonymId: localStorage.getItem(LOCAL_STORAGE_KEY.ANONYM_ID) || '',\n isJsVersion: true\n }}\n >\n <Badge\n previewSettings={previewSettings}\n useProxyUrl={Boolean(USE_PROXY_URL && USE_PROXY_URL === 'true')}\n useWishlistFlyout={Boolean(USE_WISHLIST_FLYOUT && USE_WISHLIST_FLYOUT === 'true')}\n urlWishlistWidget={URL_WISHLIST_WIDGET}\n >\n <CustomComponents productCard={stringToFunction(PRODUCT_CARDS)} />\n </Badge>\n </SledgeContext.Provider>\n </React.StrictMode>\n );\n }\n });\n }\n};\n","import React from 'react';\nimport { addWishlist, checkWishlist } from '@core/api/wishlist';\nimport { CUSTOM_EVENT_NAMES, LOCAL_STORAGE_KEY } from '@core/lib/const';\nimport { HeartIcon } from '@core/components';\nimport { SledgeContext, ISledgeContext } from '@sledge-app/core';\nimport { BadgeCounterInitSelector, BadgeInitSelector } from '@react-wishlist/components';\nimport { useEffectOnChange, useIntersectionObserver, usePreviewSettings } from '@core/hooks';\nimport { dispatchCustomEvent } from '@core/lib/helper';\nimport { IAddWishlistParams } from '@core/api/global';\n\ndeclare global {\n interface Window {\n sledgeWishlistTriggerUpdate(): void;\n }\n}\n\nexport interface ITriggerProps {\n params: IAddWishlistParams;\n forceActive?: boolean;\n hidden?: boolean;\n onAfterAddWishlist?(state: 'success' | 'failed'): void;\n onAfterRemoveWishlist?(state: 'success' | 'failed'): void;\n wishlistChecked?: boolean;\n triggerBadge?: 'default' | 'rerender';\n reload?: boolean;\n previewSettings?: any;\n}\n\nexport const Trigger: React.FunctionComponent<ITriggerProps> = (props) => {\n const {\n params,\n forceActive = false,\n hidden = false,\n onAfterAddWishlist,\n onAfterRemoveWishlist,\n wishlistChecked,\n triggerBadge = 'default',\n reload = false,\n previewSettings: previewSettingsProp\n } = props;\n const { productId, productVariantId } = params || {};\n\n const { isRenderApp, triggerRenderMultipleComponent, sledgeAnonymId, isJsVersion } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { wishlist: isRenderAppWishlist } = isRenderApp || {};\n const { trigger: triggerRenderWishlistBadge } = triggerRenderMultipleComponent?.wishlist?.badge || {};\n\n const defaultColorIcon = '#767676';\n const defaultTypeIcon = 'outline';\n const activeColorIcon = '#F85538';\n const activeTypeIcon = 'fill';\n const activeToDefaultTypeIcon = 'half-fill';\n\n const wishlistCheckedFilled = typeof wishlistChecked === 'boolean';\n const isWishlisted = wishlistCheckedFilled ? wishlistChecked : false;\n\n const { wishlistPreviewSettings, generalPreviewSettings, previewSettings } = usePreviewSettings({\n defaultSettings: previewSettingsProp,\n nestedProperty: 'sledge.wishlist.trigger.preview'\n });\n\n const [colorIcon, setColorIcon] = React.useState(isWishlisted ? activeColorIcon : defaultColorIcon);\n const [typeIcon, setTypeIcon] = React.useState<'fill' | 'half-fill' | 'outline'>(isWishlisted ? activeTypeIcon : defaultTypeIcon);\n\n const [isWishlist, setIsWishlist] = React.useState(!!wishlistChecked);\n const [mouseEnter, setMouseEnter] = React.useState(false);\n const [isLoading, setIsLoading] = React.useState(!wishlistCheckedFilled);\n const [dataSettings, setDataSettings] = React.useState<any>({});\n const [handleFunctions, _setHandleFunctions] = React.useState({\n onAfterAddWishlist: onAfterAddWishlist,\n onAfterRemoveWishlist: onAfterRemoveWishlist\n });\n const [isRequiredLogin, setIsRequiredLogin] = React.useState(false);\n const [isFirstTime, setIsFirstTime] = React.useState(true);\n const [hasEntry, setHasEntry] = React.useState(reload);\n\n const [rootRef, rootEntry] = useIntersectionObserver({\n threshold: 0,\n root: null,\n rootMargin: '0px'\n });\n\n const { is_required_login } = dataSettings?.display?.global || {};\n const { show: show_notification, location: location_notification } = dataSettings?.display?.notification || {};\n const { title_added_to_wishlist, text_added_to_wishlist, title_removed_to_wishlist, text_removed_to_wishlist, title_fail_add_to_wishlist, text_fail_add_to_wishlist } =\n dataSettings?.languages?.notification || {};\n const { alert_login, alert, login_button } = dataSettings?.languages?.widget || {};\n\n const handleCheckWishlist = async () => {\n let response: any;\n let queryParam = {\n ...(wishlistPreviewSettings && generalPreviewSettings?.use_dummy_data\n ? {\n is_preview: true\n }\n : {})\n };\n\n if (typeof wishlistChecked === 'boolean' && isFirstTime) {\n response = wishlistChecked;\n setIsFirstTime(false);\n } else {\n response = await checkWishlist({\n id: productId,\n variantId: productVariantId,\n query: queryParam\n });\n }\n\n setIsWishlist(forceActive ? forceActive : response);\n };\n\n const handleConfirmationPopup = (props?: any) => {\n if (typeof window !== 'undefined' && window.sledgeConfirmationPopup)\n window.sledgeConfirmationPopup({\n title: alert_login || 'Login required!',\n message: alert || 'Please login to save your wishlist across devices.',\n textSubmit: login_button || 'Login',\n buttonSubmitType: 'info',\n onSubmit: () => (window.location.href = '/account/login'),\n generalPreviewSettings,\n ...(props || {})\n });\n };\n\n const handleClick = async (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (isRequiredLogin) {\n handleConfirmationPopup();\n return;\n }\n\n let resAddWishlist = wishlistPreviewSettings\n ? {\n status: {\n code: 200\n }\n }\n : await addWishlist(params);\n\n const { status, data } = resAddWishlist || {};\n const { code } = status || {};\n const { product } = data || {};\n\n let run = code === 200;\n\n dispatchCustomEvent(!isWishlist ? CUSTOM_EVENT_NAMES.AFTER_ADD_WISHLIST : CUSTOM_EVENT_NAMES.AFTER_REMOVE_WISHLIST, {\n state: run ? 'success' : 'failed',\n product\n });\n\n if (run) {\n setIsWishlist(!isWishlist);\n\n // Trigger update for react module\n if (triggerRenderWishlistBadge) triggerRenderWishlistBadge(true);\n\n // Trigger update for javascript\n if (isJsVersion) {\n if (triggerBadge === 'rerender') {\n BadgeInitSelector({ reload: true });\n } else {\n BadgeCounterInitSelector({ reload: true });\n }\n }\n\n if (typeof window !== 'undefined') {\n if (window.sledgeWishlistWidgetListUpdate) window.sledgeWishlistWidgetListUpdate();\n if (window.sledgeWishlistFlyoutWidgetListUpdate) window.sledgeWishlistFlyoutWidgetListUpdate();\n if (window.sledgeWishlistButtonDetailUpdate) window.sledgeWishlistButtonDetailUpdate();\n }\n\n if (!wishlistPreviewSettings) handleCheckWishlist();\n\n if (!isWishlist) {\n handleFunctions.onAfterAddWishlist && handleFunctions.onAfterAddWishlist('success');\n } else {\n handleFunctions.onAfterRemoveWishlist && handleFunctions.onAfterRemoveWishlist('success');\n }\n\n if (typeof window !== 'undefined' && window.sledgeToastNotification && show_notification)\n window.sledgeToastNotification({\n title: !isWishlist ? title_added_to_wishlist : title_removed_to_wishlist,\n message: !isWishlist ? text_added_to_wishlist : text_removed_to_wishlist,\n location: location_notification,\n type: 'success',\n icon: <HeartIcon width={40} height={40} color=\"black\" type=\"outline\" />,\n className: 'sledge-toast__wishlist-trigger'\n });\n } else {\n if (!isWishlist) {\n handleFunctions.onAfterAddWishlist && handleFunctions.onAfterAddWishlist('failed');\n } else {\n handleFunctions.onAfterRemoveWishlist && handleFunctions.onAfterRemoveWishlist('failed');\n }\n\n if (typeof window !== 'undefined' && window.sledgeToastNotification && show_notification)\n window.sledgeToastNotification({\n title: title_fail_add_to_wishlist || 'Failed',\n message: text_fail_add_to_wishlist || 'Failed add to wishlist, please try again',\n location: location_notification,\n type: 'failed',\n icon: <HeartIcon width={40} height={40} color=\"black\" type=\"outline\" />,\n className: 'sledge-toast__wishlist-trigger'\n });\n }\n };\n\n const handleSettings = async (LOCAL_STORAGE_WISHLIST_SETTING: any) => {\n setIsLoading(true);\n\n let response: any;\n\n response = wishlistPreviewSettings || JSON.parse(LOCAL_STORAGE_WISHLIST_SETTING as string);\n\n if (!response) return;\n\n const { is_required_login } = response?.display?.global || {};\n\n setDataSettings(response);\n setIsLoading(false);\n\n setIsRequiredLogin(sledgeAnonymId && is_required_login);\n };\n\n useEffectOnChange(() => {\n handleSettings(localStorage.getItem(LOCAL_STORAGE_KEY.WISHLIST_SETTING) || null);\n handleConfirmationPopup({\n isPreviewSettings: true\n });\n }, [previewSettings]);\n\n React.useEffect(() => {\n if (!hasEntry && rootEntry?.isIntersecting) setHasEntry(rootEntry?.isIntersecting);\n }, [rootEntry]);\n\n React.useEffect(() => {\n if (!isRenderAppWishlist || !hasEntry) return;\n\n if (typeof window !== 'undefined') {\n window.sledgeWishlistTriggerUpdate = () => {\n handleCheckWishlist();\n };\n }\n\n handleSettings(localStorage.getItem(LOCAL_STORAGE_KEY.WISHLIST_SETTING) || null);\n }, [isRenderAppWishlist, hasEntry]);\n\n useEffectOnChange(() => {\n setIsRequiredLogin(sledgeAnonymId && is_required_login);\n }, [sledgeAnonymId]);\n\n React.useEffect(() => {\n if (!isRenderAppWishlist || !hasEntry) return;\n\n handleCheckWishlist();\n }, [isRenderAppWishlist, hasEntry, productVariantId]);\n\n const isActive = (isWishlist || forceActive) && !isRequiredLogin;\n const wishlistActive = isActive || mouseEnter;\n\n React.useEffect(() => {\n if (isActive) {\n setColorIcon(activeColorIcon);\n setTypeIcon(activeTypeIcon);\n } else {\n setColorIcon(defaultColorIcon);\n setTypeIcon(defaultTypeIcon);\n }\n }, [isWishlist]);\n\n return (\n <div ref={rootRef} className=\"sledge-wishlist__trigger-root\">\n {!isLoading && !hidden && (\n <div\n className=\"sledge-wishlist__trigger-block\"\n {...(wishlistActive && {\n ['wishlist-active']: ''\n })}\n >\n <span\n className=\"sledge-wishlist__trigger\"\n onClick={(e) => handleClick(e)}\n onMouseEnter={() => {\n setColorIcon(activeColorIcon);\n setTypeIcon(isActive ? activeToDefaultTypeIcon : activeTypeIcon);\n setMouseEnter(true);\n }}\n onMouseLeave={() => {\n if (isActive) {\n setColorIcon(activeColorIcon);\n setTypeIcon(activeTypeIcon);\n } else {\n setColorIcon(defaultColorIcon);\n setTypeIcon(defaultTypeIcon);\n }\n\n setMouseEnter(false);\n }}\n >\n <HeartIcon width={16.67} height={15.83} type={typeIcon} color={colorIcon} />\n </span>\n </div>\n )}\n </div>\n );\n};\n","import { API_URL, LOCAL_STORAGE_KEY, PAYLOAD_API_ALIASES } from '@core/lib/const';\nimport { fetchApi, sanitizeDataId } from '@core/lib/helper';\n\nexport const getReview: any = async ({ productId = null, query = null, token = '', ignoreSWR }: { productId?: any; query?: any; token?: string; ignoreSWR?: boolean }) => {\n let convertId = productId ? sanitizeDataId(productId) : '';\n let sledgeAuthApp = token ? token : typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let queryParams =\n '?' +\n new URLSearchParams({\n [PAYLOAD_API_ALIASES.Authorization]: sledgeAuthApp,\n ...query\n }).toString();\n\n let url = `${API_URL}/review/${convertId}${queryParams}`;\n\n return await fetchApi({\n url,\n method: 'GET',\n authorization: sledgeAuthApp,\n isSimpleRequest: false,\n ignoreSWR\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const getReviewInfo: any = async (props: { productId?: any; query?: any }) => {\n const { productId = null, query = null } = props || {};\n\n let convertId = productId ? sanitizeDataId(productId) : '';\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let queryParams =\n '?' +\n new URLSearchParams({\n [PAYLOAD_API_ALIASES.Authorization]: sledgeAuthApp,\n ...query\n }).toString();\n\n let url = `${API_URL}/review/info/${convertId}${queryParams}`;\n\n return await fetchApi({\n url,\n method: 'GET',\n authorization: sledgeAuthApp,\n isSimpleRequest: false\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const getReviewSnippet: any = async (props: { productId?: any; query?: any }) => {\n const { productId = null, query = null } = props || {};\n\n let convertId = productId ? sanitizeDataId(productId) : '';\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let queryParams =\n '?' +\n new URLSearchParams({\n [PAYLOAD_API_ALIASES.Authorization]: sledgeAuthApp,\n ...query\n }).toString();\n\n let url = `${API_URL}/review/snippet/${convertId}${queryParams}`;\n\n return await fetchApi({\n url,\n method: 'GET',\n authorization: sledgeAuthApp,\n isSimpleRequest: false\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const getProductsReviewInfo: any = async (ids: any, token?: string) => {\n let convertIds = ids.map((v: string) => sanitizeDataId(v));\n let sledgeAuthApp = token ? token : typeof localStorage !== 'undefined' ? localStorage?.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/review/info/ids/${convertIds.join(',')}?${PAYLOAD_API_ALIASES.Authorization}=${sledgeAuthApp}`;\n\n return await fetchApi({\n url,\n method: 'GET',\n authorization: sledgeAuthApp,\n isSimpleRequest: false\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const getReviewMedia: any = async () => {\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/review/usermedia`;\n\n return await fetchApi({\n url,\n method: 'GET',\n authorization: sledgeAuthApp\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const addReviewMedia: any = async (files: FileList) => {\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/review/media`;\n let headers = {};\n let payload = {\n files\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeAuthApp,\n payload,\n headers,\n isSimpleRequest: false,\n isUploadFile: true\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const deleteReviewMedia: any = async (id: any) => {\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/review/usermedia/${id}`;\n\n return await fetchApi({\n url,\n method: 'DELETE',\n authorization: sledgeAuthApp\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const addReview: any = async (data: {\n userFirstName: string;\n userLastName: string;\n userEmail: string;\n productId: string;\n productVariantId: string;\n rating: number;\n title: string;\n review: string;\n mediaIds: [];\n}) => {\n const { userFirstName, userLastName, userEmail, productId, productVariantId, rating, title, review, mediaIds } = data;\n\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/review`;\n let payload = {\n user: JSON.stringify({\n name: `${userFirstName}${userLastName ? ` ${userLastName}` : ''}`,\n email: userEmail\n }),\n review: JSON.stringify({\n rating: rating,\n title: title,\n review: review,\n media_ids: mediaIds\n }),\n ...(productId && {\n product: JSON.stringify({\n id: sanitizeDataId(productId),\n variant_id: sanitizeDataId(productVariantId)\n })\n })\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeAuthApp,\n payload\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n","import React from 'react';\nimport { getReviewInfo } from '@core/api/product-review';\nimport { ELEMENT_ID, LOCAL_STORAGE_KEY } from '@core/lib/const';\nimport { SkeletonLoading } from '@core/components';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\nimport { useEffectOnChange, useIntersectionObserver, usePreviewSettings, usePrevious } from '@core/hooks';\nimport { getFillRating, getUnixTimestamp, scrollToElement } from '@core/lib/helper';\n\nexport interface IRatingProps {\n total?: any | undefined;\n average?: any | undefined;\n size?:\n | 'xs'\n | 'sm'\n | 'md'\n | {\n width?: number;\n height?: number;\n };\n params?:\n | {\n productId?: string | '';\n }\n | undefined;\n withSkeletonLoading?: boolean;\n withTotal?: boolean;\n isScrollToElementWidget?: boolean;\n data?: any;\n sledgeSettings?: any;\n fillColor?: string;\n outlineColor?: string;\n withOutlineColor?: boolean;\n customComponentId?: string;\n numberOfIcons?: number;\n reload?: boolean;\n previewSettings?: any;\n}\n\nexport const Rating = (props: IRatingProps) => {\n const {\n total,\n average,\n size = 'sm',\n params,\n withSkeletonLoading = true,\n withTotal = true,\n isScrollToElementWidget = true,\n data: propsData,\n sledgeSettings,\n fillColor = '',\n outlineColor = '',\n withOutlineColor = true,\n customComponentId = '',\n numberOfIcons = 5,\n reload = false,\n previewSettings: previewSettingsProp\n } = props;\n const { productId } = params || {};\n\n const { isRenderApp, triggerRenderMultipleComponent } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { productReview: isRenderAppProductReview } = isRenderApp || {};\n const { value: valueRenderProductReviewRating, trigger: triggerRenderProductReviewRating } = triggerRenderMultipleComponent?.productReview?.rating || {};\n\n const { generalPreviewSettings, productReviewPreviewSettings, previewSettings } = usePreviewSettings({\n defaultSettings: previewSettingsProp,\n nestedProperty: 'sledge.productReview.rating.preview'\n });\n\n const initLoading = propsData || typeof total !== 'undefined' || typeof average !== 'undefined' ? false : true;\n const [isFirstLoading, setIsFirstLoading] = React.useState(initLoading);\n const [isLoading, setIsLoading] = React.useState(initLoading);\n const [sizing, setSizing] = React.useState(\n propsData || typeof total !== 'undefined' || typeof average !== 'undefined'\n ? size && typeof size === 'string'\n ? getSizing(size)\n : {\n width: size?.width,\n height: size?.height\n }\n : {\n width: 0,\n height: 0\n }\n );\n const [totalReview, setTotalReview] = React.useState(propsData?.review_count || total || 0);\n const [averageReview, setAverageReview] = React.useState(propsData?.rating?.average || average || '0');\n const [dataSettings, setDataSettings] = React.useState<any>(sledgeSettings?.review || {});\n const [isFirstTime, setIsFirstTime] = React.useState(true);\n const [hasEntry, setHasEntry] = React.useState(reload);\n\n const previousState: any = usePrevious({ productId });\n\n const [rootRef, rootEntry] = useIntersectionObserver({\n threshold: 0,\n root: null,\n rootMargin: '0px'\n });\n\n const { fill_color = '#23BC45', outline_color = '#8D9196' } = dataSettings?.display?.rating || {};\n\n const unixTimestamp = getUnixTimestamp();\n\n const handleProductRatingInfo = async (paramsProductId: any, isTriggerMultiComponent = false) => {\n if (paramsProductId !== productId) return;\n\n let response: any;\n let run: boolean = false;\n let valueTotalReview: number = 0;\n let valueAverageReview: any;\n let queryParam = {\n ...(productReviewPreviewSettings && generalPreviewSettings?.use_dummy_data\n ? {\n is_preview: true\n }\n : {})\n };\n\n let data;\n if (propsData && isFirstTime) {\n data = propsData;\n run = true;\n setIsFirstTime(false);\n } else {\n response = await getReviewInfo({\n productId: paramsProductId,\n query: queryParam\n });\n\n if (!response) return;\n\n const { status } = response;\n data = response.data;\n const { code } = status;\n\n run = code === 200 || false;\n }\n\n valueTotalReview = data?.review_count ? data.review_count : 0;\n valueAverageReview = data?.rating?.average ? data.rating.average : 0;\n\n if (run) {\n setTotalReview(valueTotalReview);\n setAverageReview(valueAverageReview);\n setIsLoading(false);\n setIsFirstLoading(false);\n\n if (isTriggerMultiComponent && valueRenderProductReviewRating && triggerRenderProductReviewRating) triggerRenderProductReviewRating('');\n }\n };\n\n const handleRefreshProductRating = async () => {\n if (typeof total !== 'undefined' || typeof average !== 'undefined') {\n setIsLoading(false);\n } else {\n handleProductRatingInfo(productId);\n }\n };\n\n const handleSettings = async ({ LOCAL_STORAGE_PRODUCT_REVIEW_SETTING, isPreviewSettings = false }: { LOCAL_STORAGE_PRODUCT_REVIEW_SETTING: any; isPreviewSettings?: boolean }) => {\n if (!isPreviewSettings) setIsLoading(true);\n\n let response: any;\n\n response = productReviewPreviewSettings || JSON.parse(LOCAL_STORAGE_PRODUCT_REVIEW_SETTING as string);\n\n if (!response) return;\n\n setDataSettings(response);\n\n if (!isPreviewSettings) await handleRefreshProductRating();\n };\n\n const handleOnClick = () => {\n if (!isScrollToElementWidget) return;\n\n setTimeout(() => {\n scrollToElement({\n element: document.getElementById(ELEMENT_ID.PRODUCT_REVIEW.ELEMENT_WIDGET),\n headerOffset: 50\n });\n }, 200);\n };\n\n useEffectOnChange(() => {\n handleSettings({\n LOCAL_STORAGE_PRODUCT_REVIEW_SETTING: localStorage.getItem(LOCAL_STORAGE_KEY.PRODUCT_REVIEW_SETTING) || null,\n isPreviewSettings: true\n });\n }, [previewSettings]);\n\n React.useEffect(() => {\n if (!hasEntry && rootEntry?.isIntersecting) setHasEntry(rootEntry?.isIntersecting);\n }, [rootEntry]);\n\n React.useEffect(() => {\n if (!isRenderAppProductReview || !hasEntry) return;\n\n if (size === 'xs') {\n setSizing({\n width: 14,\n height: 14\n });\n } else if (size === 'sm') {\n setSizing({\n width: 20,\n height: 20\n });\n } else if (size === 'md') {\n setSizing({\n width: 32,\n height: 32\n });\n }\n\n let isProductIdChanged = Boolean(previousState && previousState?.productId !== productId);\n\n if (isProductIdChanged) setIsFirstLoading(true);\n\n handleSettings({\n LOCAL_STORAGE_PRODUCT_REVIEW_SETTING: localStorage.getItem(LOCAL_STORAGE_KEY.PRODUCT_REVIEW_SETTING) || null\n });\n }, [isRenderAppProductReview, hasEntry, productId]);\n\n React.useEffect(() => {\n if (!productId || (productId && valueRenderProductReviewRating !== productId)) return;\n\n if (triggerRenderProductReviewRating) triggerRenderProductReviewRating('');\n\n setIsFirstLoading(true);\n\n handleProductRatingInfo(valueRenderProductReviewRating, true);\n }, [productId, valueRenderProductReviewRating]);\n\n return (\n <div\n className=\"sledge-product-review__rating\"\n onClick={handleOnClick}\n {...(typeof size === 'string'\n ? {\n ['data-rating-size']: size\n }\n : {})}\n ref={rootRef}\n >\n {isFirstLoading && withSkeletonLoading ? (\n <SkeletonLoading.Item width=\"230px\" height=\"28px\" color=\"lighten\" rounded=\"md\" />\n ) : (\n <>\n {!isLoading && (\n <>\n {[1, 2, 3, 4, 5].map((item, index) => {\n if (!(item <= numberOfIcons)) return;\n\n const { strokeGradientId, suffixGradientId, offset, fillGradientId, fillOther } = getFillRating({\n average: averageReview,\n item,\n index,\n productId,\n unixTimestamp,\n customComponentId\n });\n\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" {...sizing} viewBox=\"0 0 32 32\" key={suffixGradientId} className=\"sledge-product-review__rating-icon\">\n <defs>\n <linearGradient id={strokeGradientId}>\n <stop offset={offset} stopColor={fillColor || fill_color} className=\"sledge-product-review__rating-icon-fill-color\" />\n <stop\n offset={offset}\n stopColor={fillOther === 'full' ? fillColor || fill_color : outlineColor || outline_color}\n className={fillOther === 'full' ? 'sledge-product-review__rating-icon-fill-color' : 'sledge-product-review__rating-icon-outline-color'}\n />\n </linearGradient>\n <linearGradient id={fillGradientId}>\n <stop offset={offset} stopColor={fillColor || fill_color} className=\"sledge-product-review__rating-icon-fill-color\" />\n <stop offset={offset} stopColor=\"transparent\" />\n </linearGradient>\n </defs>\n <path\n fill={`url(#${fillGradientId})`}\n d=\"M9.18817 19.8162L9.25542 19.4179L8.94431 19.1604L3.14591 14.3604L3.14598 14.3603L3.13673 14.3529C2.5294 13.8672 2.784 12.8955 3.54372 12.7636L11.7291 12.3989L12.1807 12.3788L12.3481 11.959L15.8472 3.18648C15.977 2.94796 16.2257 2.79961 16.4979 2.79961C16.769 2.79961 17.0185 2.94848 17.1489 3.18698L20.6478 11.959L20.8152 12.3788L21.2668 12.3989L29.4522 12.7636C30.2119 12.8955 30.4665 13.8672 29.8592 14.3529L29.8591 14.3528L29.85 14.3604L24.0516 19.1604L23.7405 19.4179L23.8077 19.8162L25.3884 29.1774C25.4834 29.8833 24.7613 30.4104 24.1224 30.1159L16.8734 25.5088L16.498 25.2702L16.1226 25.5088L8.87373 30.1141C8.23317 30.409 7.51248 29.8817 7.60746 29.1758L9.18817 19.8162Z\"\n {...(withOutlineColor\n ? {\n stroke: `url(#${strokeGradientId})`,\n strokeWidth: '1.4'\n }\n : {})}\n ></path>\n </svg>\n );\n })}\n {withTotal ? <div className=\"sledge-product-review__rating-summary-total\">({totalReview})</div> : <></>}\n </>\n )}\n </>\n )}\n </div>\n );\n};\n\nconst getSizing = (size: ('xs' | 'sm' | 'md') | string) => {\n if (size === 'xs') {\n return {\n width: 14,\n height: 14\n };\n } else if (size === 'sm') {\n return {\n width: 20,\n height: 20\n };\n } else {\n return {\n width: 32,\n height: 32\n };\n }\n};\n","import { Button, MessageAddIcon, SkeletonLoading } from '@core/components';\n\nexport interface IWidgetHeaderAddTriggerProps {\n isFirstLoadingHeader?: boolean;\n text?: string;\n dataSettings?: any;\n generalDataSettings?: any;\n params?:\n | {\n productId?: string | '';\n productVariantId?: string | '';\n }\n | undefined;\n onAfterAddReview?(state: 'success' | 'failed'): void;\n tabIndex?: string;\n}\n\nexport const WidgetHeaderAddTrigger = ({ isFirstLoadingHeader, text, dataSettings, generalDataSettings, params, onAfterAddReview, tabIndex }: IWidgetHeaderAddTriggerProps) => {\n const {\n text_color: display_button_write_review_text_color,\n border_color: display_button_write_review_border_color,\n border_radius: display_button_write_review_border_radius,\n padding_top: display_button_write_review_padding_top,\n padding_bottom: display_button_write_review_padding_bottom,\n padding_left: display_button_write_review_padding_left,\n padding_right: display_button_write_review_padding_right,\n background_color: display_button_write_review_background_color,\n font_size: display_button_write_review_font_size,\n font_weight: display_button_write_review_font_weight,\n text_transform: display_button_write_review_text_transform\n } = dataSettings?.display?.widget?.button_write_review || {};\n const { button_write_review } = dataSettings?.languages?.widget || {};\n\n const display_button_write_review_style = {\n ...(display_button_write_review_text_color && { color: display_button_write_review_text_color }),\n ...(display_button_write_review_border_color && { borderColor: display_button_write_review_border_color }),\n ...(display_button_write_review_border_radius && { borderRadius: display_button_write_review_border_radius }),\n ...(display_button_write_review_padding_top && { paddingTop: display_button_write_review_padding_top }),\n ...(display_button_write_review_padding_bottom && { paddingBottom: display_button_write_review_padding_bottom }),\n ...(display_button_write_review_padding_left && { paddingLeft: display_button_write_review_padding_left }),\n ...(display_button_write_review_padding_right && { paddingRight: display_button_write_review_padding_right }),\n ...(display_button_write_review_background_color && { backgroundColor: display_button_write_review_background_color }),\n ...(display_button_write_review_font_size && { fontSize: display_button_write_review_font_size }),\n ...(display_button_write_review_font_weight && { fontWeight: display_button_write_review_font_weight }),\n ...(display_button_write_review_text_transform && { textTransform: display_button_write_review_text_transform })\n };\n\n return (\n <div className=\"sledge-product-review__widget-header-item\">\n {isFirstLoadingHeader ? (\n <SkeletonLoading.Item width=\"134px\" height=\"42px\" rounded=\"lg\" color=\"lighten\" />\n ) : (\n <Button\n type=\"button\"\n colorType=\"success\"\n className=\"sledge-product-review__widget-header-add-trigger\"\n onClick={() =>\n typeof window !== 'undefined' &&\n window.sledgeProductReviewWidgetFormAdd &&\n window.sledgeProductReviewWidgetFormAdd({\n params,\n onAfterAddReview,\n tabIndex,\n productReviewPreviewSettings: dataSettings,\n generalPreviewSettings: generalDataSettings\n })\n }\n style={display_button_write_review_style}\n >\n <MessageAddIcon width={16} height={16} color=\"currentColor\" />\n {text ? text : button_write_review || 'Add review'}\n </Button>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { SelectField, SkeletonLoading, SwapIcon } from '@core/components';\n\nexport interface IWidgetHeaderSortProps {\n isFirstLoadingHeader?: boolean;\n productReviewSort?: any;\n dataSettings?: any;\n setSelectedSort?(value: React.SetStateAction<string>): void;\n setIsRefreshWidgetList?(value: React.SetStateAction<boolean>): void;\n data?: any;\n}\n\nexport const WidgetHeaderSort = ({ isFirstLoadingHeader, productReviewSort, dataSettings, setSelectedSort, setIsRefreshWidgetList }: IWidgetHeaderSortProps) => {\n const { default_sort, show_sorting_options } = dataSettings?.display?.widget || {};\n const { sort_by: language_sort_by } = dataSettings?.languages?.widget || {};\n\n const [clickedSortId, setClickedSortId] = React.useState<string | number | null>(default_sort || null);\n\n const handleChangeSort = (value: string) => {\n setClickedSortId(value);\n setIsRefreshWidgetList && setIsRefreshWidgetList(true);\n setSelectedSort && setSelectedSort(value);\n };\n\n const getSelectedSort = clickedSortId || productReviewSort[0]?.value;\n\n return (\n <>\n {!show_sorting_options ? null : (\n <div className=\"sledge-product-review__widget-header-item\">\n {isFirstLoadingHeader ? (\n <SkeletonLoading.Item width=\"134px\" height=\"42px\" rounded=\"lg\" color=\"lighten\" />\n ) : (\n <SelectField\n align=\"end\"\n prefixLabel={<SwapIcon width={16} height={16} color=\"currentColor\" />}\n prefixSelectedLabel={language_sort_by || 'Sort by'}\n options={productReviewSort.map((item: any) => {\n const { name, value } = item;\n return {\n label: name,\n value: value\n };\n })}\n value={getSelectedSort}\n onChange={({ value }: any) => handleChangeSort(value)}\n link=\"?page=1&sort=value\"\n className=\"sledge-product-review__widget-header-sort-option\"\n />\n )}\n </div>\n )}\n </>\n );\n};\n","import React from 'react';\nimport { motion } from 'framer-motion';\nimport { Popover, Progress, SkeletonLoading } from '@core/components';\nimport { Rating } from '@react-product-review/components/Rating';\nimport { ROTATE_FILTER_ARROW_ANIMATION } from '@core/lib/animation';\nimport { getReviewInfo } from '@core/api/product-review';\nimport { usePrevious } from '@core/hooks';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\n\ndeclare global {\n interface Window {\n sledgeProductReviewWidgetSummaryUpdate(): void;\n }\n}\n\nexport interface IWidgetHeaderSummaryProps {\n params?:\n | {\n productId?: string | '';\n }\n | undefined;\n dataSettings?: any;\n summaryData?: any;\n sledgeSettings?: any;\n productReviewPreviewSettings?: any;\n generalPreviewSettings?: any;\n}\n\nexport const WidgetHeaderSummary = (props: IWidgetHeaderSummaryProps) => {\n const { isRenderApp } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { productReview: isRenderAppProductReview } = isRenderApp || {};\n\n const { params, dataSettings, summaryData, sledgeSettings, generalPreviewSettings, productReviewPreviewSettings } = props;\n const { productId } = params || {};\n const { fill_color: display_summary_bar_fill_color, outline_color: display_summary_bar_outline_color } = dataSettings?.display?.widget?.summary_bar || {};\n const { fill_color = '#23BC45', outline_color = '#8D9196' } = dataSettings?.display?.rating || {};\n const { review_singular, review_plural } = dataSettings?.languages?.widget || {};\n\n const [isFirstLoading, setIsFirstLoading] = React.useState(true);\n const [isFirstLoadingSummary, setIsFirstLoadingSummary] = React.useState(true);\n const [isLoading, setIsLoading] = React.useState(true);\n const [isRefreshRating, setIsRefreshRating] = React.useState(summaryData ? false : true);\n const [isOpen, setIsOpen] = React.useState(false);\n const [totalReview, setTotalReview] = React.useState(summaryData?.review_count || 0);\n const [ratingList, setRatingList] = React.useState<{ [key: number]: number }>(\n summaryData?.rating || {\n 5: 0,\n 4: 0,\n 3: 0,\n 2: 0,\n 1: 0\n }\n );\n const [averageReview, setAverageReview] = React.useState(summaryData?.rating?.average || '0');\n const [isFirstTime, setIsFirstTime] = React.useState(true);\n\n const previousState: any = usePrevious({ productId });\n\n const handleProductReviewInfo = async () => {\n let response: any;\n let data: any;\n let run: boolean = false;\n let valueTotalReview: number = 0;\n let valueRatingList: { [key: number]: number };\n let valueAverageReview: any;\n let queryParam = {\n ...(productReviewPreviewSettings && generalPreviewSettings?.use_dummy_data\n ? {\n is_preview: true\n }\n : {})\n };\n\n if (summaryData && isFirstTime) {\n data = summaryData;\n run = true;\n setIsFirstTime(false);\n } else {\n response = await getReviewInfo({\n productId,\n query: queryParam\n });\n\n if (!response) return;\n\n const { status } = response;\n const { code } = status;\n data = response.data;\n\n run = code === 200 || false;\n }\n\n valueTotalReview = data?.review_count ? data.review_count : 0;\n valueRatingList = data?.rating\n ? {\n 5: data.rating['5'] || 0,\n 4: data.rating['4'] || 0,\n 3: data.rating['3'] || 0,\n 2: data.rating['2'] || 0,\n 1: data.rating['1'] || 0\n }\n : ratingList;\n valueAverageReview = data?.rating?.average ? data.rating.average : '0';\n\n if (run) {\n setTotalReview(valueTotalReview);\n setRatingList(valueRatingList);\n setAverageReview(valueAverageReview);\n setIsLoading(false);\n setIsRefreshRating(false);\n setIsFirstLoading(false);\n isOpen && setIsFirstLoadingSummary(false);\n }\n };\n\n React.useEffect(() => {\n if (!isRenderAppProductReview) return;\n\n if (typeof window !== 'undefined') {\n window.sledgeProductReviewWidgetSummaryUpdate = () => {\n setIsRefreshRating(true);\n handleProductReviewInfo();\n };\n }\n\n let isProductIdChanged = Boolean(previousState && previousState?.productId !== productId);\n\n if (isProductIdChanged) setIsFirstLoading(true);\n\n handleProductReviewInfo();\n }, [isOpen, productId, isRenderAppProductReview]);\n\n const additionalRatingProps = productReviewPreviewSettings\n ? {\n fillColor: fill_color,\n outlineColor: outline_color\n }\n : {};\n\n return (\n <div className=\"sledge-product-review__widget-summary\">\n {isFirstLoading && !summaryData ? (\n <SkeletonLoading.Item width=\"630px\" height=\"42px\" color=\"lighten\" rounded=\"md\" />\n ) : isLoading && !summaryData ? null : (\n <Popover\n trigger={\n <motion.div initial={false} animate={isOpen ? 'open' : 'closed'} className=\"sledge-product-review__widget-summary-trigger\">\n <div className=\"sledge-product-review__widget-summary-average\">{averageReview}</div>\n <div className=\"sledge-product-review__widget-summary-rating\">\n {!isRefreshRating && (\n <Rating\n data={summaryData}\n sledgeSettings={sledgeSettings}\n average={String(averageReview)}\n size=\"md\"\n withSkeletonLoading={false}\n withTotal={false}\n isScrollToElementWidget={false}\n {...additionalRatingProps}\n />\n )}\n </div>\n <div className=\"sledge-product-review__widget-summary-total\">\n {totalReview}\n <span className=\"sledge-product-review__widget-summary-total-desc\">{totalReview > 1 ? review_plural || 'Reviews' : review_singular || 'Review'}</span>\n </div>\n <motion.div variants={ROTATE_FILTER_ARROW_ANIMATION} className=\"sledge-product-review__widget-summary-trigger-icon summary-trigger-icon\">\n <svg width={20} height={20} viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n </motion.div>\n </motion.div>\n }\n content={\n isFirstLoadingSummary ? (\n <div className=\"sledge-product-review__widget-summary-dist-progress\">\n {[5, 4, 3, 2, 1].map((index: number) => {\n return (\n <div className=\"sledge-product-review__widget-summary-dist-progress-item\" key={index}>\n <SkeletonLoading.Item width=\"108px\" height=\"22px\" color=\"lighten\" rounded=\"md\" />\n <SkeletonLoading.Item\n width=\"128px\"\n height=\"22px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n marginLeft: '13px',\n marginRight: '12px'\n }}\n />\n <SkeletonLoading.Item width=\"38px\" height=\"22px\" color=\"lighten\" rounded=\"md\" />\n </div>\n );\n })}\n </div>\n ) : (\n <div className=\"sledge-product-review__widget-summary-dist\">\n <div className=\"sledge-product-review__widget-summary-dist-progress\">\n {[5, 4, 3, 2, 1].map((item, index) => {\n return (\n <div className=\"sledge-product-review__widget-summary-dist-progress-item\" key={index}>\n <Rating\n data={summaryData}\n sledgeSettings={sledgeSettings}\n average={item}\n size=\"sm\"\n withSkeletonLoading={false}\n withTotal={false}\n isScrollToElementWidget={false}\n {...additionalRatingProps}\n />\n <Progress\n value={String(ratingList[item])}\n total={totalReview}\n fillColor={display_summary_bar_fill_color}\n outlineColor={display_summary_bar_outline_color}\n />\n <small>({ratingList[item]})</small>\n </div>\n );\n })}\n </div>\n </div>\n )\n }\n setIsOpen={setIsOpen}\n hideCloseIcon\n align=\"end\"\n alignOffset={-170}\n className=\"sledge-product-review__widget-summary-content\"\n withArrow={false}\n />\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { IWidgetHeaderAddTriggerProps, WidgetHeaderAddTrigger } from './WidgetHeaderAddTrigger';\nimport { IWidgetHeaderSortProps, WidgetHeaderSort } from './WidgetHeaderSort';\nimport { IWidgetHeaderSummaryProps, WidgetHeaderSummary } from './WidgetHeaderSummary';\n\nexport interface IWidgetHeaderProps {\n children?: JSX.Element | JSX.Element[];\n data?: any;\n}\n\ntype WidgetHeaderComponent = React.FunctionComponent<IWidgetHeaderProps> & {\n Sort: React.FC<IWidgetHeaderSortProps>;\n AddTrigger: React.FC<IWidgetHeaderAddTriggerProps>;\n Summary: React.FC<IWidgetHeaderSummaryProps>;\n};\n\nexport const WidgetHeader: WidgetHeaderComponent = (props: IWidgetHeaderProps) => {\n const [isLoading, setIsLoading] = React.useState(!props.data);\n\n React.useEffect(() => {\n setIsLoading(false);\n }, []);\n\n return (\n <>\n {!isLoading && (\n <div className=\"sledge-product-review__widget-header\">\n {React.Children.count(props.children) &&\n React.Children.map(props.children, (child: any) =>\n React.cloneElement(child, {\n ...props\n })\n )}\n </div>\n )}\n </>\n );\n};\n\nWidgetHeader.Sort = WidgetHeaderSort;\nWidgetHeader.AddTrigger = WidgetHeaderAddTrigger;\nWidgetHeader.Summary = WidgetHeaderSummary;\n","import { API_URL, INSTANT_SEARCH_ENGINE_URL, LOCAL_STORAGE_KEY } from '@core/lib/const';\nimport { sanitizeDataId, fetchApi } from '@core/lib/helper';\n\nexport const search = async (index: any, payload: any) => {\n let sledgeInstantSearchAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_AUTH_APP) || '' : '';\n\n let url = `${INSTANT_SEARCH_ENGINE_URL}/indexes/${index}/search`;\n let headers = {\n 'Content-Type': 'application/json'\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeInstantSearchAuthApp,\n payload,\n headers,\n isSimpleRequest: false\n })\n .then((result) => result)\n .catch(() => {\n return;\n });\n};\n\nexport const multiSearch = async (payload: any, token?: string) => {\n let sledgeInstantSearchAuthApp = token ? token : typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_AUTH_APP) || '' : '';\n\n let url = `${INSTANT_SEARCH_ENGINE_URL}/multi-search`;\n let headers = {\n 'Content-Type': 'application/json'\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeInstantSearchAuthApp,\n payload,\n headers,\n isSimpleRequest: false\n })\n .then((result) => result)\n .catch(() => {\n return;\n });\n};\n\nexport const getFacets = async (index: string, token?: string) => {\n let sledgeInstantSearchAuthApp = token ? token : typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_AUTH_APP) || '' : '';\n\n let url = `${INSTANT_SEARCH_ENGINE_URL}/indexes/${index}/settings/filterable-attributes`;\n let payload = {};\n let headers = {};\n\n return await fetchApi({\n url,\n method: 'GET',\n authorization: sledgeInstantSearchAuthApp,\n payload,\n headers,\n isSimpleRequest: false\n })\n .then((result) => result)\n .catch(() => {\n return;\n });\n};\n\nexport const searchTrigger: any = async (data: { keyword?: string; resultCount?: any }) => {\n const { keyword, resultCount } = data;\n\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/instantsearch/statistics/search`;\n let headers = {\n 'Content-Type': 'application/json'\n };\n let payload = {\n keyword: keyword,\n result_count: resultCount\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeAuthApp,\n payload,\n headers,\n isSimpleRequest: false\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const productClickTrigger: any = async (data: { productId?: string }) => {\n const { productId } = data;\n\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/instantsearch/statistics/click`;\n let headers = {\n 'Content-Type': 'application/json'\n };\n let payload = {\n product: {\n id: sanitizeDataId(productId)\n }\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeAuthApp,\n payload,\n headers,\n isSimpleRequest: false\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const addToCartTrigger: any = async (data: { productId?: string }) => {\n const { productId } = data;\n\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/instantsearch/statistics/cart`;\n let headers = {\n 'Content-Type': 'application/json'\n };\n let payload = {\n product: {\n id: sanitizeDataId(productId)\n }\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeAuthApp,\n payload,\n headers,\n isSimpleRequest: false\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n","import { API_URL, LOCAL_STORAGE_KEY } from '@core/lib/const';\nimport { fetchApi, sanitizeDataId } from '@core/lib/helper';\n\nexport const productRecommendationSourceApps = ['recently-viewed', 'related-product', 'hand-picked', 'new-arrival', 'personalized-curated'] as const;\n\ntype PRSourceAppsType = (typeof productRecommendationSourceApps)[number];\n\nexport interface IProductRecommendationSourceApp {\n productId?: string;\n sourceApp?: PRSourceAppsType;\n}\n\nexport const productClickTrigger: any = async (data: IProductRecommendationSourceApp) => {\n const { productId, sourceApp } = data;\n\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/product-recommendation/statistics/click`;\n let headers = {\n 'Content-Type': 'application/json'\n };\n\n let payload = {\n product_id: sanitizeDataId(productId),\n widget: sourceApp\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeAuthApp,\n payload,\n headers,\n isSimpleRequest: false\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n\nexport const addToCartTrigger: any = async (data: IProductRecommendationSourceApp) => {\n const { productId, sourceApp } = data;\n\n let sledgeAuthApp = typeof localStorage !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEY.AUTH_APP) || '' : '';\n\n let url = `${API_URL}/product-recommendation/statistics/cart`;\n let headers = {\n 'Content-Type': 'application/json'\n };\n\n let payload = {\n product_id: sanitizeDataId(productId),\n widget: sourceApp\n };\n\n return await fetchApi({\n url,\n method: 'POST',\n authorization: sledgeAuthApp,\n payload,\n headers,\n isSimpleRequest: false\n })\n .then((result) => {\n return result;\n })\n .catch(() => {\n return;\n });\n};\n","import React from 'react';\nimport './ProductGrid.css';\n\nimport '@core/lib/polyfills';\n\nimport { CDN_URL, CUSTOM_EVENT_NAMES, LOCAL_STORAGE_KEY } from '@core/lib/const';\nimport { addToCart as shopifyAddToCart } from '@core/api/shopify';\nimport { BagIcon, Button, LoadingDots, Carousel } from '@core/components';\nimport { Trigger } from '@react-wishlist/components';\nimport { Rating } from '@react-product-review/components';\nimport { addToCartTrigger as wishlistAddToCartTrigger } from '@core/api/wishlist';\nimport { addToCartTrigger as instantSearchAddToCartTrigger, productClickTrigger as instantSearchProductClickTrigger } from '@core/api/instant-search';\nimport {\n addToCartTrigger as productRecommendationAddToCartTrigger,\n productClickTrigger as productRecommendationProductClickTrigger,\n productRecommendationSourceApps,\n IProductRecommendationSourceApp\n} from '@core/api/product-recommendation';\nimport { dispatchCustomEvent, objectPresent, setElementAttribute, shopifyFormatMoney, stringToSlug } from '@core/lib/helper';\nimport { useIntersectionObserver } from '@core/hooks';\nimport { renderToComponent, TSchemaNode } from '@core/lib/jsonSchemaToComponent';\n\nexport interface IProductGrid {\n className?: string;\n type?: 'small' | 'medium' | 'large';\n data?: any;\n setting?: {\n show_vendor?: boolean;\n show_sku?: boolean;\n show_price?: boolean;\n show_add_to_cart?: boolean;\n redirect_add_to_cart?: boolean;\n language_button_add_to_cart?: any;\n language_button_out_of_stock?: any;\n display_product_name_style?: any;\n display_price_style?: any;\n display_button_add_to_cart_style?: any;\n };\n showOptionOutOfStock?: boolean;\n triggerPropAdditional?: any;\n sourceApp?: 'wishlist' | 'product-review' | 'instant-search' | IProductRecommendationSourceApp['sourceApp'] | null;\n isComponentJsVersion?: any;\n cards?: any;\n onAfterAddToCart?(state: 'success' | 'failed'): void;\n onAfterAddWishlist?(state: 'success' | 'failed'): void;\n onAfterRemoveWishlist?(state: 'success' | 'failed'): void;\n onAfterRenderProduct?(state: 'success' | 'failed'): void;\n showPopupComponent?: boolean;\n setShowPopupComponent?(value: boolean): void;\n dataReviews?: any;\n dataWishlists?: any;\n useSlider?: boolean;\n previewSettings?: any;\n currentColumnGrid?: any;\n isFlyout?: boolean;\n}\n\ninterface IProductCard extends IProductGrid {\n item?: any;\n handleAddToCart?(data: { id: string | number; quantity: number }): Promise<void>;\n clickedAddToCartId?: string | number | null;\n generalDataSettings?: any;\n}\n\ninterface IVariantSelector {\n data: any;\n setSelectedVariantId?(value: React.SetStateAction<any>): void;\n setSelectedVariantStock?(value: React.SetStateAction<any>): void;\n setSelectedVariantInventoryManagement?(value: React.SetStateAction<any>): void;\n setSelectedVariantInventoryPolicy?(value: React.SetStateAction<any>): void;\n}\n\nconst VariantSelector = (props: IVariantSelector) => {\n const { data, setSelectedVariantId, setSelectedVariantStock, setSelectedVariantInventoryManagement, setSelectedVariantInventoryPolicy } = props;\n\n const { product } = data || {};\n const { variants } = product || {};\n const { id, handle } = product || {};\n\n const options = product?.options ? Object.entries(product.options) : [];\n const images = product?.images ?? [];\n\n const defaultSelected: any = {};\n\n function setDefaultFunction() {\n if (!variants?.length) return;\n\n defaultSelected['data-product-id'] = id;\n defaultSelected['data-product-handle'] = handle;\n defaultSelected['data-selected-option1'] = variants[0].option1;\n if (variants[0].option2) {\n defaultSelected['data-selected-option2'] = variants[0].option2;\n }\n defaultSelected['data-variant-id'] = variants[0].admin_graphql_api_id;\n defaultSelected['data-inventory-quantity'] = variants[0].inventory_quantity;\n defaultSelected['data-inventory-management'] = variants[0].inventory_management;\n defaultSelected['data-inventory-policy'] = variants[0].inventory_policy;\n }\n\n setDefaultFunction();\n\n function setSelectedOption(element: any, optionName: any) {\n const optionsButton = element.target.offsetParent.querySelector(`.options-button-${stringToSlug(optionName)}`).querySelectorAll(`button`);\n\n const defaultSelectedClassChanger = () => {\n optionsButton.forEach((button: any, index: any) => {\n button.classList.remove('sledge__product-variant-size-swatch-active');\n element.target.className += ' sledge__product-variant-size-swatch-active';\n });\n };\n\n const colorSelectedClassChanger = () => {\n optionsButton.forEach((button: any, index: any) => {\n button.classList.remove('sledge__product-variant-color-swatch-active');\n element.target.className += ' sledge__product-variant-color-swatch-active';\n });\n };\n\n switch (optionName) {\n case 'Color':\n colorSelectedClassChanger();\n break;\n case 'Size':\n defaultSelectedClassChanger();\n break;\n default:\n defaultSelectedClassChanger();\n }\n }\n\n function setSelectedVariant(element: any, value: any, optionIndex: number) {\n const parentCard = element.target.offsetParent;\n const selectedInput = parentCard.querySelector(`.sledge__product-grid-card-selected-option[data-product-id='${id}']`);\n\n setElementAttribute({\n element: selectedInput,\n attributeName: `data-selected-option${optionIndex}`,\n value: value\n });\n\n // define option1 and option 2\n const option1 = `[data-option-1=\"${stringToSlug(selectedInput?.attributes?.['data-selected-option1']?.value)}\"]`;\n const option2 = `${selectedInput?.attributes?.['data-selected-option2'] ? `[data-option-2=\"${stringToSlug(selectedInput?.attributes?.['data-selected-option2']?.value)}\"]` : ''}`;\n\n // define selected option\n const selectOption = parentCard.querySelector(`select option${option1}${option2}`);\n const variantId = selectOption.attributes['data-graphql-id'].value;\n const imageId = selectOption.attributes['data-image-id']?.value;\n const inventoryQuantity = selectOption.attributes['data-inventory-quantity']?.value;\n const inventoryManagement = selectOption.attributes['data-inventory-management']?.value;\n const inventoryPolicy = selectOption.attributes['data-inventory-policy']?.value;\n\n const setOther = () => {\n //set data-variant-id attribute\n setElementAttribute({\n element: selectedInput,\n attributeName: 'data-variant-id',\n value: selectOption?.attributes?.['data-graphql-id']?.value || ''\n });\n setElementAttribute({\n element: selectedInput,\n attributeName: 'data-inventory-quantity',\n value: inventoryQuantity || ''\n });\n setElementAttribute({\n element: selectedInput,\n attributeName: 'data-inventory-management',\n value: inventoryManagement || ''\n });\n setElementAttribute({\n element: selectedInput,\n attributeName: 'data-inventory-policy',\n value: inventoryPolicy || ''\n });\n\n if (variantId) setSelectedVariantId?.(variantId);\n if (inventoryQuantity) setSelectedVariantStock?.(inventoryQuantity);\n if (inventoryManagement) setSelectedVariantInventoryManagement?.(inventoryManagement);\n if (inventoryPolicy) setSelectedVariantInventoryPolicy?.(inventoryPolicy);\n\n //change product image by variant\n if (imageId)\n parentCard.querySelector(`img.sledge__product-grid-card-image-featured-image`).src = parentCard.querySelector(`div.sledge__product-grid-card-variant-images img[id=\"${imageId}\"]`).src;\n };\n\n setOther();\n\n const result = {\n variantId,\n imageId\n };\n\n return result;\n }\n\n return (\n <div className=\"sledge__product-grid-card-variant-swatch\">\n {/* variant trigger */}\n <input type=\"hidden\" {...defaultSelected} className=\"sledge__product-grid-card-selected-option\" />\n <select className=\"variant-picker sledge__product-grid-card-variant-picker\">\n {variants?.map((variant: any) => {\n const { title, option1, option2, position, id, admin_graphql_api_id, image_id, inventory_quantity, inventory_management, inventory_policy }: any = variant;\n\n let optionAttributes = {\n 'data-option-1': option1,\n 'data-option-2': option2,\n 'data-inventory-quantity': inventory_quantity,\n 'data-inventory-management': inventory_management,\n 'data-inventory-policy': inventory_policy,\n 'data-position': position,\n 'data-id': id,\n 'data-graphql-id': admin_graphql_api_id,\n 'data-image-id': image_id\n };\n\n return (\n <option key={id} {...optionAttributes}>\n {title}\n </option>\n );\n })}\n </select>\n <div className=\"sledge__product-grid-card-variant-images\">\n {images?.map((image: any) => (\n <input type=\"hidden\" key={image?.id} id={image?.id} value={image?.src} />\n ))}\n </div>\n\n {/* variant picker */}\n {options?.map((option: any, optionParentIndex: number) => {\n const optionName = option[0];\n const optionValues = option[1];\n\n let selectedOption = optionValues[0];\n\n return (\n <>\n {optionValues[0] !== 'Default Title' && (\n <div className={`sledge__product-variant-size-swatch-flex options-button-${stringToSlug(optionName)}`} key={optionParentIndex}>\n {optionValues.map((item: any, index: number) => {\n const defaultOptionClass = `\n${selectedOption === item ? 'sledge__product-variant-size-swatch-active' : ''} sledge__product-variant-size-swatch`;\n\n const colorOptionClass = `${selectedOption === item ? 'sledge__product-variant-color-swatch-active' : ''} sledge__product-variant-color-swatch`;\n const colorDataSettings = JSON.parse(localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) as any)?.colors || [];\n const getColorSwatch = colorDataSettings?.filter(({ name }: any) => name === item)[0] || {};\n const colorSwatch = getColorSwatch?.image ? `url(${getColorSwatch?.image})` : getColorSwatch?.rgb || item;\n\n return (\n <button\n type=\"button\"\n key={index}\n className={optionName === 'Color' ? colorOptionClass : defaultOptionClass}\n style={{\n background: optionName === 'Color' ? colorSwatch : null,\n backgroundSize: 'contain'\n }}\n onClick={(el) => {\n setSelectedVariant(el, item, optionParentIndex + 1);\n setSelectedOption(el, optionName);\n }}\n title={optionName === 'Color' ? null : item}\n >\n {optionName === 'Color' ? null : item}\n </button>\n );\n })}\n </div>\n )}\n </>\n );\n })}\n </div>\n );\n};\n\nconst ProductCard = React.memo((props: IProductCard) => {\n const {\n item,\n handleAddToCart,\n clickedAddToCartId,\n setting,\n showOptionOutOfStock = false,\n triggerPropAdditional,\n sourceApp = null,\n isComponentJsVersion = false,\n cards: CardsComponent,\n onAfterAddWishlist,\n onAfterRemoveWishlist,\n showPopupComponent,\n setShowPopupComponent,\n dataReviews,\n dataWishlists,\n generalDataSettings,\n previewSettings,\n isFlyout\n } = props;\n\n const {\n show_vendor = true,\n show_sku = true,\n show_price = true,\n show_add_to_cart = true,\n language_button_add_to_cart,\n language_button_out_of_stock,\n display_product_name_style = {},\n display_price_style = {},\n display_button_add_to_cart_style = {}\n } = setting || {};\n\n const { product, variants } = item || {};\n const { id, title, image, url, vendor = '', currency, handle } = product || {};\n const {\n id: variant_id = '',\n admin_graphql_api_id: variant_admin_graphql_api_id = '',\n title: variant_title = '',\n price = '',\n compare_at_price = '',\n sku = ''\n } = variants?.length ? variants[0] : {};\n\n const defaultSelectedVariantId = variant_admin_graphql_api_id ? variant_admin_graphql_api_id : '';\n const defaultSelectedVariantStock = variants?.length && Object.hasOwn(variants[0], 'inventory_quantity') ? variants[0].inventory_quantity : 0;\n const defaultSelectedVariantInventoryManagement = variants?.length && Object.hasOwn(variants[0], 'inventory_management') ? variants[0].inventory_management : null;\n const defaultSelectedVariantInventoryPolicy = variants?.length && Object.hasOwn(variants[0], 'inventory_policy') ? variants[0].inventory_policy : '';\n\n const [selectedVariantId, setSelectedVariantId] = React.useState(defaultSelectedVariantId);\n const [selectedVariantStock, setSelectedVariantStock] = React.useState(defaultSelectedVariantStock);\n const [selectedVariantInventoryManagement, setSelectedVariantInventoryManagement] = React.useState(defaultSelectedVariantInventoryManagement);\n const [selectedVariantInventoryPolicy, setSelectedVariantInventoryPolicy] = React.useState(defaultSelectedVariantInventoryPolicy);\n const [hasEntryImage, setHasEntryImage] = React.useState(false);\n\n const [imageRef, imageEntry] = useIntersectionObserver({\n threshold: 0.1,\n root: null,\n rootMargin: '0px'\n });\n\n React.useEffect(() => {\n if (!hasEntryImage && imageEntry?.isIntersecting) setHasEntryImage(imageEntry?.isIntersecting);\n }, [imageEntry]);\n\n let isLoadingAddToCart = clickedAddToCartId == selectedVariantId;\n let isOutOfStock = showOptionOutOfStock ? !Boolean(selectedVariantStock > 0 || selectedVariantInventoryManagement === null || selectedVariantInventoryPolicy === 'continue') : false;\n let isOnSale = parseFloat(String(compare_at_price)) ? parseFloat(String(compare_at_price)) > parseFloat(String(price)) : false;\n\n const { money_format } = generalDataSettings || {};\n\n let component = null;\n\n if (CardsComponent) {\n const CardsProps = {\n product: {\n ...product,\n ...{\n variants: variants?.map((variant: any, index: number) => {\n const isInventoryQuantity = Object.hasOwn(variants[index], 'inventory_quantity') ? variants[index].inventory_quantity > 0 : false;\n const isInventoryManagement = Object.hasOwn(variants[index], 'inventory_management') ? variants[index].inventory_management === null : false;\n const isInventoryPolicy = Object.hasOwn(variants[index], 'inventory_policy') ? variants[index].inventory_policy === 'continue' : false;\n\n return {\n ...variant,\n is_out_of_stock: !Boolean(isInventoryQuantity || isInventoryManagement || isInventoryPolicy)\n };\n })\n },\n ...(dataReviews && Object.keys(dataReviews).length\n ? {\n review: {\n total: dataReviews?.[id]?.review_count ? dataReviews?.[id].review_count : 0,\n average: dataReviews?.[id]?.rating?.average ? dataReviews?.[id].rating.average : 0\n }\n }\n : {})\n },\n showPopupComponent,\n setShowPopupComponent,\n sourceApp\n };\n\n component = <>{isComponentJsVersion ? <div dangerouslySetInnerHTML={{ __html: CardsComponent({ ...CardsProps }) }}></div> : <CardsComponent {...CardsProps} />}</>;\n } else {\n component = (\n <>\n {isFlyout ? (\n <div className=\"sledge__product-grid-card-flyout\">\n <div className=\"sledge__product-grid-card-flyout-wishlist-trigger\">\n <Trigger\n params={{\n productId: id,\n productVariantId: variant_id,\n productName: title,\n productVendor: vendor,\n productSku: sku,\n productVariantName: variant_title,\n productLink: url,\n productImage: image?.src || `${CDN_URL}/images/blank-image.png`,\n productCurrency: currency,\n productPrice: price\n }}\n {...triggerPropAdditional}\n onAfterAddWishlist={onAfterAddWishlist}\n onAfterRemoveWishlist={onAfterRemoveWishlist}\n wishlistChecked={dataWishlists?.[id]}\n />\n </div>\n\n <div className=\"sledge__product-grid-card-image-flyout\">\n <a\n href={url}\n onClick={() => {\n if (sourceApp === 'instant-search') {\n instantSearchProductClickTrigger({\n productId: id\n });\n } else if (productRecommendationSourceApps.includes(sourceApp as any)) {\n productRecommendationProductClickTrigger({\n productId: id,\n sourceApp\n });\n }\n }}\n className=\"sledge__product-grid-card-image-link-flyout\"\n >\n <img\n ref={imageRef}\n {...{\n src: image?.src || `${CDN_URL}/images/blank-image.png`,\n ['loaded']: ''\n }}\n alt=\"sledge-card-image\"\n loading=\"lazy\"\n className=\"sledge__product-grid-card-image-featured-image-flyout\"\n onError={({ currentTarget }) => {\n if (!currentTarget) return;\n\n currentTarget.onerror = null;\n currentTarget.src = `${CDN_URL}/images/blank-image.png`;\n }}\n />\n </a>\n </div>\n\n <div className=\"sledge__product-grid-card-desc-flyout\">\n {title ? (\n <a\n href={url}\n onClick={() => {\n if (sourceApp === 'instant-search') {\n instantSearchProductClickTrigger({\n productId: id\n });\n } else if (productRecommendationSourceApps.includes(sourceApp as any)) {\n productRecommendationProductClickTrigger({\n productId: id,\n sourceApp\n });\n }\n }}\n >\n <h3 className=\"sledge__product-grid-card-product-name-flyout\" style={display_product_name_style}>\n {title}\n </h3>\n </a>\n ) : null}\n\n {show_price ? (\n <div className=\"sledge__product-grid-card-price-flyout\">\n <div style={display_price_style} dangerouslySetInnerHTML={{ __html: shopifyFormatMoney(price * 100, money_format) }}></div>\n {isOnSale && (\n <div\n className=\"sledge__product-grid-card-compare-at-price-flyout\"\n dangerouslySetInnerHTML={{ __html: shopifyFormatMoney(compare_at_price * 100, money_format) }}\n ></div>\n )}\n </div>\n ) : null}\n </div>\n </div>\n ) : (\n <div className=\"sledge__product-grid-card\">\n <div className=\"sledge__product-grid-content\">\n <div className=\"sledge__product-grid-card-image\">\n <a\n href={url}\n onClick={() => {\n if (sourceApp === 'instant-search') {\n instantSearchProductClickTrigger({\n productId: id\n });\n } else if (productRecommendationSourceApps.includes(sourceApp as any)) {\n productRecommendationProductClickTrigger({\n productId: id,\n sourceApp\n });\n }\n }}\n className=\"sledge__product-grid-card-image-link\"\n >\n {isOnSale && <div className=\"sledge__product-grid-badge-on-sale\">ON SALE</div>}\n <Trigger\n params={{\n productId: id,\n productVariantId: variant_id,\n productName: title,\n productVendor: vendor,\n productSku: sku,\n productVariantName: variant_title,\n productLink: url,\n productImage: image?.src || `${CDN_URL}/images/blank-image.png`,\n productCurrency: currency,\n productPrice: price\n }}\n {...triggerPropAdditional}\n onAfterAddWishlist={onAfterAddWishlist}\n onAfterRemoveWishlist={onAfterRemoveWishlist}\n wishlistChecked={dataWishlists?.[id]}\n />\n <div className=\"sledge__product-grid-card-featured-image-element\">\n <img\n ref={imageRef}\n {...(hasEntryImage\n ? {\n src: image?.src || `${CDN_URL}/images/blank-image.png`,\n ['loaded']: ''\n }\n : {\n ['data-src']: image?.src || `${CDN_URL}/images/blank-image.png`\n })}\n alt=\"sledge-card-image\"\n loading=\"lazy\"\n className=\"sledge__product-grid-card-image-featured-image\"\n onError={({ currentTarget }) => {\n if (!currentTarget) return;\n\n currentTarget.onerror = null;\n currentTarget.src = `${CDN_URL}/images/blank-image.png`;\n }}\n />\n </div>\n <div className=\"sledge__product-grid-card-variant-images\">\n {product?.images?.map?.((image: any) => (\n <img\n key={image?.id}\n decoding=\"async\"\n id={image?.id}\n height=\"270\"\n loading=\"lazy\"\n src={image?.src}\n alt={product?.title}\n width={269.92}\n style={{ aspectRatio: 269.92 / 270 }}\n />\n ))}\n </div>\n </a>\n {isOutOfStock ? <div className=\"sledge__product-grid-card-out-of-stock\">{language_button_out_of_stock || 'Sold out'}</div> : null}\n </div>\n <div className=\"sledge__product-grid-card-desc\">\n <div className=\"sledge__product-grid-card-title\">\n {show_price ? (\n <div className=\"sledge__product-grid-card-price\">\n <div style={display_price_style} dangerouslySetInnerHTML={{ __html: shopifyFormatMoney(price * 100, money_format) }}></div>\n {isOnSale && (\n <div\n className=\"sledge__product-grid-card-compare-at-price\"\n dangerouslySetInnerHTML={{ __html: shopifyFormatMoney(compare_at_price * 100, money_format) }}\n ></div>\n )}\n </div>\n ) : null}\n\n {show_vendor && vendor ? (\n <div className=\"sledge__product-grid-badge-vendor\" title={vendor}>\n Vendor: {vendor}\n </div>\n ) : null}\n </div>\n <div className=\"sledge__product-grid-card-rating\">\n <Rating\n params={{\n productId: id\n }}\n size=\"xs\"\n withSkeletonLoading={false}\n isScrollToElementWidget={false}\n data={dataReviews?.[id]}\n />\n </div>\n {title ? (\n <a\n href={url}\n onClick={() => {\n if (sourceApp === 'instant-search') {\n instantSearchProductClickTrigger({\n productId: id\n });\n } else if (productRecommendationSourceApps.includes(sourceApp as any)) {\n productRecommendationProductClickTrigger({\n productId: id,\n sourceApp\n });\n }\n }}\n >\n <h3 className=\"sledge__product-grid-card-product-name\" style={display_product_name_style}>\n {title}\n </h3>\n </a>\n ) : null}\n <div className=\"sledge__product-grid-card-text\">{show_sku && sku ? <div>SKU: {sku}</div> : null}</div>\n <VariantSelector\n data={{\n product: {\n ...product,\n variants\n }\n }}\n setSelectedVariantId={setSelectedVariantId}\n setSelectedVariantStock={setSelectedVariantStock}\n setSelectedVariantInventoryManagement={setSelectedVariantInventoryManagement}\n setSelectedVariantInventoryPolicy={setSelectedVariantInventoryPolicy}\n />\n </div>\n </div>\n {show_add_to_cart ? (\n <div className=\"sledge__product-grid-button-wrapper\">\n <Button\n type=\"button\"\n colorType=\"light\"\n className=\"sledge__product-grid-button-add-to-cart\"\n style={{\n ...display_button_add_to_cart_style,\n ...(isLoadingAddToCart && {\n cursor: 'wait'\n })\n }}\n {...(isLoadingAddToCart || isOutOfStock\n ? {\n disabled: true\n }\n : {\n onClick: () => {\n handleAddToCart &&\n handleAddToCart({\n id: selectedVariantId,\n quantity: 1\n });\n }\n })}\n >\n {isOutOfStock ? (\n <>\n <BagIcon width={15} height={15} color=\"currentColor\" />\n <span>{language_button_out_of_stock || 'Sold out'}</span>\n </>\n ) : (\n <>\n {isLoadingAddToCart ? <LoadingDots /> : null}\n <BagIcon width={15} height={15} color=\"currentColor\" />\n <span>{language_button_add_to_cart || 'Add To Cart'}</span>\n </>\n )}\n </Button>\n </div>\n ) : null}\n </div>\n )}\n </>\n );\n }\n\n return <React.Fragment key={id}>{component}</React.Fragment>;\n});\n\nexport const ProductGrid = React.memo((props: IProductGrid) => {\n const { type, className = '', data, setting, sourceApp = null, useSlider = false, isFlyout = false, onAfterAddToCart, onAfterRenderProduct, currentColumnGrid } = props;\n const { redirect_add_to_cart = true } = setting || {};\n\n const [clickedAddToCartId, setClickedAddToCartId] = React.useState<string | number | null>(null);\n const [generalDataSettings, setGeneralDataSettings] = React.useState<any>({});\n\n const handleAddToCart = async (data: { id: string | number; quantity: number }) => {\n const { id, quantity } = data;\n\n setClickedAddToCartId(id);\n let resShopifyAddToCart = await shopifyAddToCart([\n {\n id: id,\n quantity: quantity\n }\n ]);\n\n if (resShopifyAddToCart?.items?.length) {\n if (sourceApp === 'wishlist') {\n await wishlistAddToCartTrigger({\n productId: id\n });\n } else if (sourceApp === 'instant-search') {\n await instantSearchAddToCartTrigger({\n productId: id\n });\n } else if (productRecommendationSourceApps.includes(sourceApp as any)) {\n await productRecommendationAddToCartTrigger({\n productId: id,\n sourceApp\n });\n }\n\n setClickedAddToCartId(null);\n onAfterAddToCart && onAfterAddToCart('success');\n\n if (redirect_add_to_cart) {\n window.location.href = generalDataSettings?.cart_url || '/cart';\n } else {\n window.sledgeToastNotification({\n title: 'Cart added',\n message: 'Successfully added to wishlist',\n type: 'success',\n icon: <BagIcon width={40} height={40} color=\"black\" />\n });\n }\n } else {\n onAfterAddToCart && onAfterAddToCart('failed');\n\n setTimeout(() => {\n setClickedAddToCartId(null);\n if (typeof window !== 'undefined' && window.sledgeToastNotification)\n window.sledgeToastNotification({\n title: 'Failed',\n message: resShopifyAddToCart?.description?.length ? resShopifyAddToCart.description : 'failed add to cart, please try again',\n type: 'failed',\n icon: <BagIcon width={40} height={40} color=\"black\" />\n });\n }, 1000);\n }\n };\n\n const handleSettings = () => {\n let responseGeneral: any;\n\n responseGeneral = JSON.parse((localStorage.getItem(LOCAL_STORAGE_KEY.GENERAL_SETTING) || null) as string);\n\n if (responseGeneral) setGeneralDataSettings(responseGeneral);\n };\n\n const Container = useSlider ? Carousel : 'div';\n\n const carouselSourceProp: any =\n (useSlider && {\n carouselSourceWidget: 'productGrid'\n }) ||\n null;\n\n React.useEffect(() => {\n dispatchCustomEvent(CUSTOM_EVENT_NAMES.AFTER_RENDER_PRODUCT, {\n state: 'success'\n });\n\n onAfterRenderProduct && onAfterRenderProduct('success');\n handleSettings();\n }, []);\n\n return (\n <Container\n className={`sledge__product-grid ${className}`}\n {...carouselSourceProp}\n data-grid-type={type}\n data-grid-desktop-column={currentColumnGrid?.desktop}\n data-grid-mobile-column={currentColumnGrid?.mobile}\n data-custom-card={Boolean(props?.cards)}\n data-flyout={isFlyout}\n >\n {data?.map((item: any, index: number) => {\n return (\n <ProductCard\n item={item}\n key={`sledge-product-card_${index}`}\n handleAddToCart={handleAddToCart}\n clickedAddToCartId={clickedAddToCartId}\n generalDataSettings={generalDataSettings}\n {...props}\n />\n );\n })}\n </Container>\n );\n});\n","import React from 'react';\n\nimport './InputField.css';\n\nimport * as Form from '@radix-ui/react-form';\n\nexport const InputField = (props: any) => {\n const { className = '', value = '', onChange, required, type, name = '', ...otherProps } = props;\n\n const handleChangeField = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange && onChange(e);\n };\n\n return (\n <div className={`sledge__input-field-wrapper ${className || ''}`}>\n <Form.Field className=\"FormField\" name={name}>\n <Form.Control asChild>\n <input\n className=\"sledge__input-field\"\n type={type}\n value={value}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => handleChangeField(e)}\n {...(required\n ? {\n required\n }\n : {})}\n {...otherProps}\n />\n </Form.Control>\n {required && (\n <Form.Message className=\"FormMessage\" match=\"valueMissing\">\n Required field\n </Form.Message>\n )}\n {type === 'email' && (\n <Form.Message className=\"FormMessage\" match=\"typeMismatch\">\n Please fill a valid email address\n </Form.Message>\n )}\n </Form.Field>\n </div>\n );\n};\n","import React from 'react';\nimport './CollectionGrid.css';\n\nimport { CDN_URL, CUSTOM_EVENT_NAMES } from '@core/lib/const';\nimport { dispatchCustomEvent, stripTags } from '@core/lib/helper';\n\nexport interface ICollectionGrid {\n className?: string;\n data: any;\n cards?: any;\n isComponentJsVersion?: any;\n onAfterRenderCollection?(state: 'success' | 'failed'): void;\n}\n\nexport const CollectionGrid = ({ className = '', data, cards: CardsComponent, isComponentJsVersion, onAfterRenderCollection }: ICollectionGrid) => {\n React.useEffect(() => {\n dispatchCustomEvent(CUSTOM_EVENT_NAMES.AFTER_RENDER_COLLECTION, {\n state: 'success'\n });\n\n onAfterRenderCollection && onAfterRenderCollection('success');\n }, []);\n\n return (\n <>\n {!data?.length ? null : (\n <div className={`sledge__collection-grid ${className}`}>\n {data.map((item: any, index: number) => {\n const { id, title, body_html, url, image } = item;\n\n if (CardsComponent) {\n const CardsProps = { data: item };\n\n return (\n <React.Fragment key={index}>\n {isComponentJsVersion ? <div dangerouslySetInnerHTML={{ __html: CardsComponent({ ...CardsProps }) }}></div> : <CardsComponent {...CardsProps} />}\n </React.Fragment>\n );\n } else {\n return (\n <a href={url} key={index}>\n <div className=\"sledge__collection-grid-card\">\n <div className=\"sledge__collection-grid-card-image-wrapper\">\n <div className=\"sledge__collection-grid-card-image\">\n <img src={image?.src || `${CDN_URL}/images/blank-image.png`} alt=\"sledge-card-image\" loading=\"lazy\" />\n </div>\n </div>\n <div className=\"sledge__collection-grid-card-content\">\n <div className=\"sledge__collection-grid-card-content-title\">{title}</div>\n {body_html ? <div className=\"sledge__collection-grid-card-content-description\">{stripTags(body_html)}</div> : null}\n </div>\n </div>\n </a>\n );\n }\n })}\n </div>\n )}\n </>\n );\n};\n","import React from 'react';\nimport './PageGrid.css';\n\nimport { CDN_URL, CUSTOM_EVENT_NAMES } from '@core/lib/const';\nimport { dispatchCustomEvent, stripTags } from '@core/lib/helper';\n\nexport interface IPageGrid {\n className?: string;\n data: any;\n cards?: any;\n isComponentJsVersion?: any;\n onAfterRenderPage?(state: 'success' | 'failed'): void;\n}\n\nexport const PageGrid = ({ className = '', data, cards: CardsComponent, isComponentJsVersion, onAfterRenderPage }: IPageGrid) => {\n React.useEffect(() => {\n dispatchCustomEvent(CUSTOM_EVENT_NAMES.AFTER_RENDER_PAGE, {\n state: 'success'\n });\n\n onAfterRenderPage && onAfterRenderPage('success');\n }, []);\n\n return (\n <>\n {!data?.length ? null : (\n <div className={`sledge__page-grid ${className}`}>\n {data.map((item: any, index: number) => {\n const { id, title, body_html, url, image } = item;\n\n if (CardsComponent) {\n const CardsProps = { data: item };\n\n return (\n <React.Fragment key={index}>\n {isComponentJsVersion ? <div dangerouslySetInnerHTML={{ __html: CardsComponent({ ...CardsProps }) }}></div> : <CardsComponent {...CardsProps} />}\n </React.Fragment>\n );\n } else {\n return (\n <a href={url} key={index}>\n <div className=\"sledge__page-grid-card\">\n <div className=\"sledge__page-grid-card-image-wrapper\">\n <div className=\"sledge__page-grid-card-image\">\n <img src={image?.src || `${CDN_URL}/images/blank-image.png`} alt=\"sledge-card-image\" loading=\"lazy\" />\n </div>\n </div>\n <div className=\"sledge__page-grid-card-content\">\n <div className=\"sledge__page-grid-card-content-title\">{title}</div>\n {body_html ? <div className=\"sledge__page-grid-card-content-description\">{stripTags(body_html)}</div> : null}\n </div>\n </div>\n </a>\n );\n }\n })}\n </div>\n )}\n </>\n );\n};\n","import React from 'react';\nimport './BlogGrid.css';\n\nimport { CDN_URL, CUSTOM_EVENT_NAMES } from '@core/lib/const';\nimport { Button, NoteIcon } from '@core/components';\nimport { convertDate, dispatchCustomEvent } from '@core/lib/helper';\n\nexport interface IBlogGrid {\n className?: string;\n data: any;\n cards?: any;\n isComponentJsVersion?: any;\n onAfterRenderBlog?(state: 'success' | 'failed'): void;\n}\n\nexport const BlogGrid = ({ className = '', data, cards: CardsComponent, isComponentJsVersion, onAfterRenderBlog }: IBlogGrid) => {\n React.useEffect(() => {\n dispatchCustomEvent(CUSTOM_EVENT_NAMES.AFTER_RENDER_BLOG, {\n state: 'success'\n });\n\n onAfterRenderBlog && onAfterRenderBlog('success');\n }, []);\n\n return (\n <>\n {!data?.length ? null : (\n <div className={`sledge__blog-grid ${className}`}>\n {data?.map((item: any, index: number) => {\n const { id, title, created_at, url, image } = item;\n\n if (CardsComponent) {\n const CardsProps = { data: item };\n\n return (\n <React.Fragment key={index}>\n {isComponentJsVersion ? <div dangerouslySetInnerHTML={{ __html: CardsComponent({ ...CardsProps }) }}></div> : <CardsComponent {...CardsProps} />}\n </React.Fragment>\n );\n } else {\n return (\n <div className=\"sledge__blog-grid-card\" key={index}>\n <div className=\"sledge__blog-grid-content\">\n <div className=\"sledge__blog-grid-card-image\">\n <a href={url}>\n <img src={image?.src || `${CDN_URL}/images/blank-image.png`} alt=\"sledge-card-image\" loading=\"lazy\" />\n </a>\n </div>\n <div className=\"sledge__blog-grid-card-desc\">\n <a href={url}>\n <div className=\"sledge__blog-grid-card-title\">{title}</div>\n </a>\n {created_at ? <div className=\"sledge__blog-grid-badge-vendor\">{convertDate(created_at)}</div> : null}\n </div>\n </div>\n <div className=\"sledge__blog-grid-button-wrapper\">\n <a href={url}>\n <Button type=\"button\" colorType=\"light\">\n <NoteIcon width={16} height={16} color=\"#000000\" />\n <span>View Blog</span>\n </Button>\n </a>\n </div>\n </div>\n );\n }\n })}\n </div>\n )}\n </>\n );\n};\n","import React from 'react';\nimport './ArticleGrid.css';\n\nimport { CDN_URL, CUSTOM_EVENT_NAMES } from '@core/lib/const';\nimport { Button, NoteIcon } from '@core/components';\nimport { convertDate, dispatchCustomEvent, stripTags } from '@core/lib/helper';\n\nexport interface IArticleGrid {\n className?: string;\n data: any;\n cards?: any;\n isComponentJsVersion?: any;\n onAfterRenderArticle?(state: 'success' | 'failed'): void;\n}\n\nexport const ArticleGrid = ({ className = '', data, cards: CardsComponent, isComponentJsVersion, onAfterRenderArticle }: IArticleGrid) => {\n React.useEffect(() => {\n dispatchCustomEvent(CUSTOM_EVENT_NAMES.AFTER_RENDER_ARTICLE, {\n state: 'success'\n });\n\n onAfterRenderArticle && onAfterRenderArticle('success');\n }, []);\n\n return (\n <>\n {!data?.length ? null : (\n <div className={`sledge__article-grid ${className}`}>\n {data?.map((item: any, index: number) => {\n const { id, title, created_at, summary_html, url, image } = item;\n\n if (CardsComponent) {\n const CardsProps = { data: item };\n\n return (\n <React.Fragment key={index}>\n {isComponentJsVersion ? <div dangerouslySetInnerHTML={{ __html: CardsComponent({ ...CardsProps }) }}></div> : <CardsComponent {...CardsProps} />}\n </React.Fragment>\n );\n } else {\n return (\n <div className=\"sledge__article-grid-card\" key={index}>\n <div className=\"sledge__article-grid-content\">\n <div className=\"sledge__article-grid-card-image\">\n <a href={url}>\n <img src={image?.src || `${CDN_URL}/images/blank-image.png`} alt=\"sledge-card-image\" loading=\"lazy\" />\n </a>\n </div>\n <div className=\"sledge__article-grid-card-desc\">\n <a href={url}>\n <div className=\"sledge__article-grid-card-title\">{title}</div>\n </a>\n {created_at ? <div className=\"sledge__article-grid-badge-vendor\">{convertDate(created_at)}</div> : null}\n {summary_html ? <div className=\"sledge__article-grid-card-text\">{stripTags(summary_html)}</div> : null}\n </div>\n </div>\n <div className=\"sledge__article-grid-button-wrapper\">\n <a href={url}>\n <Button type=\"button\" colorType=\"light\">\n <NoteIcon width={16} height={16} color=\"#000000\" />\n <span>View Article</span>\n </Button>\n </a>\n </div>\n </div>\n );\n }\n })}\n </div>\n )}\n </>\n );\n};\n","import React from 'react';\nimport * as TooltipElement from '@radix-ui/react-tooltip';\n\nimport './Tooltip.css';\n\nexport interface ITooltipProps {\n children: React.ReactNode;\n content?: React.ReactNode;\n innerHTMLContent?: string;\n withArrow?: boolean;\n customArrow?: string;\n sideOffset?: number;\n alignOffset?: number;\n wrapTrigger?: boolean;\n}\n\nexport const Tooltip = ({ children, content = null, innerHTMLContent = '', withArrow = true, customArrow = '', sideOffset = 5, alignOffset = 0, wrapTrigger = true }: ITooltipProps) => {\n const [open, setOpen] = React.useState(false);\n\n React.useEffect(() => {\n let arrowElement = document?.querySelector('.sledge__tooltip-arrow')?.parentElement;\n\n if (arrowElement && customArrow?.length) {\n arrowElement.classList.add('sledge__tooltip-arrow-parent');\n arrowElement.innerHTML = customArrow;\n }\n }, [open]);\n\n return (\n <TooltipElement.Provider delayDuration={0}>\n <TooltipElement.Root onOpenChange={setOpen}>\n <TooltipElement.Trigger asChild>{wrapTrigger ? <span>{children}</span> : children}</TooltipElement.Trigger>\n <TooltipElement.Portal>\n <TooltipElement.Content className=\"sledge__tooltip-content\" sideOffset={sideOffset} alignOffset={alignOffset}>\n {content}\n {innerHTMLContent && <div dangerouslySetInnerHTML={{ __html: innerHTMLContent }}></div>}\n\n {withArrow ? <TooltipElement.Arrow className=\"sledge__tooltip-arrow\" /> : null}\n </TooltipElement.Content>\n </TooltipElement.Portal>\n </TooltipElement.Root>\n </TooltipElement.Provider>\n );\n};\n","import React from 'react';\nimport * as ScrollAreaElement from '@radix-ui/react-scroll-area';\n\nimport './ScrollArea.css';\n\nexport interface IScrollAreaProps {\n children: React.ReactNode;\n isLoading?: boolean;\n className?: string;\n}\n\nexport const ScrollArea = ({ children, isLoading = false, className = '' }: IScrollAreaProps) => {\n return (\n <ScrollAreaElement.Root className={`sledge__scroll-area-root ${className}`}>\n <ScrollAreaElement.Viewport className={`sledge__scroll-area-viewport ${isLoading ? 'sledge__scroll-area-viewport-loading' : ''}`}>{children}</ScrollAreaElement.Viewport>\n {!isLoading && (\n <>\n <ScrollAreaElement.Scrollbar className=\"sledge__scroll-area-scrollbar\" orientation=\"vertical\">\n <ScrollAreaElement.Thumb className=\"sledge__scroll-area-thumb\" />\n </ScrollAreaElement.Scrollbar>\n <ScrollAreaElement.Scrollbar className=\"sledge__scroll-area-scrollbar\" orientation=\"horizontal\">\n <ScrollAreaElement.Thumb className=\"sledge__scroll-area-thumb\" />\n </ScrollAreaElement.Scrollbar>\n </>\n )}\n </ScrollAreaElement.Root>\n );\n};\n","import React from 'react';\nimport { LOCAL_STORAGE_KEY } from '@core/lib/const';\n\nexport interface ISkeletonItemProps {\n width: string;\n height: string;\n rounded: 'none' | 'sm' | 'md' | 'lg' | 'full';\n color: 'lighten' | 'darken';\n style?: React.CSSProperties;\n className?: string;\n}\n\nexport const SkeletonItem = ({ width, height, rounded, color, style = {}, className = '', ...otherProps }: ISkeletonItemProps) => {\n const [dataSettings, setDataSettings] = React.useState<any>({});\n\n const handleSettings = async (LOCAL_STORAGE_GENERAL_SETTING: any) => {\n let response: any;\n\n response = JSON.parse(LOCAL_STORAGE_GENERAL_SETTING as string);\n\n if (!response) return;\n\n setDataSettings(response);\n };\n\n React.useEffect(() => {\n handleSettings(localStorage.getItem(LOCAL_STORAGE_KEY.GENERAL_SETTING) || null);\n }, []);\n\n return (\n <>\n {dataSettings?.skeleton?.enable ? (\n <div\n className={`sledge__skeleton-item sledge__skeleton-item-animation ${className}`}\n style={{\n ...{\n width: width,\n height: height\n },\n ...(dataSettings?.skeleton?.colors?.main_color && {\n background: dataSettings?.skeleton?.colors?.main_color\n }),\n ...style\n }}\n data-skeleton-rounded={rounded}\n data-skeleton-color={color}\n {...otherProps}\n ></div>\n ) : null}\n </>\n );\n};\n","import React from 'react';\nimport { SkeletonItem } from './SkeletonItem';\nimport { LOCAL_STORAGE_KEY } from '@core/lib/const';\n\nexport interface ISkeletonProductGridProps {\n count: number;\n type: 'small' | 'medium' | 'large';\n currentColumnGrid?: any;\n isFlyout?: boolean;\n}\n\nexport const SkeletonProductGrid = ({ count, type, isFlyout = false, currentColumnGrid }: ISkeletonProductGridProps) => {\n const [dataSettings, setDataSettings] = React.useState<any>({});\n\n const handleSettings = async (LOCAL_STORAGE_GENERAL_SETTING: any) => {\n let response: any;\n\n response = JSON.parse(LOCAL_STORAGE_GENERAL_SETTING as string);\n\n if (!response) return;\n\n setDataSettings(response);\n };\n\n React.useEffect(() => {\n handleSettings(localStorage.getItem(LOCAL_STORAGE_KEY.GENERAL_SETTING) || null);\n }, []);\n\n let components = [];\n\n for (let i = 0; i < count; i++) {\n components.push(\n isFlyout ? (\n <div className=\"sledge__product-grid-card-flyout sledge__skeleton-product-grid-card-flyout\">\n <div className=\"sledge__product-grid-card-flyout-wishlist-trigger\">\n <SkeletonItem width=\"32px\" height=\"32px\" color=\"darken\" rounded=\"sm\" />\n </div>\n <div className=\"sledge__product-grid-card-image-flyout\">\n <SkeletonItem width=\"64px\" height=\"64px\" color=\"lighten\" rounded=\"sm\" />\n </div>\n <div className=\"sledge__product-grid-card-desc-flyout\">\n <SkeletonItem width=\"100px\" height=\"20px\" color=\"lighten\" rounded=\"md\" />\n <div className=\"sledge__product-grid-card-price-flyout\">\n <SkeletonItem width=\"80px\" height=\"18px\" color=\"lighten\" rounded=\"md\" />\n </div>\n </div>\n </div>\n ) : (\n <div className=\"sledge__product-grid-card\" key={i}>\n <div className=\"sledge__product-grid-content\">\n <div className=\"sledge__product-grid-card-image sledge__skeleton-product-grid-card-image\">\n <div className=\"sledge-wishlist__trigger-block\">\n <SkeletonItem width=\"32px\" height=\"32px\" color=\"darken\" rounded=\"sm\" />\n </div>\n <SkeletonItem\n width=\"100%\"\n height=\"100%\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0\n }}\n />\n </div>\n <div className=\"sledge__product-grid-card-desc\">\n <div className=\"sledge__product-grid-card-title\">\n <SkeletonItem width=\"79px\" height=\"28px\" color=\"lighten\" rounded=\"md\" />\n <SkeletonItem width=\"80px\" height=\"28px\" color=\"lighten\" rounded=\"md\" />\n </div>\n <div className=\"sledge__product-grid-card-rating\">\n <SkeletonItem width=\"134px\" height=\"25px\" color=\"lighten\" rounded=\"md\" />\n </div>\n <div className=\"sledge__product-grid-card-text\">\n <SkeletonItem\n width=\"100%\"\n height=\"35px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n marginBottom: '16px'\n }}\n />\n </div>\n </div>\n </div>\n <div className=\"sledge__product-grid-button-wrapper\">\n <SkeletonItem width=\"100%\" height=\"40px\" color=\"lighten\" rounded=\"md\" />\n </div>\n </div>\n )\n );\n }\n\n return (\n <>\n {dataSettings?.skeleton?.enable ? (\n <div\n className=\"sledge__product-grid sledge__skeleton-product-grid sledge__skeleton-pointer-events-none\"\n data-grid-type={type}\n data-grid-desktop-column={currentColumnGrid?.desktop}\n data-grid-mobile-column={currentColumnGrid?.mobile}\n >\n {components}\n </div>\n ) : null}\n </>\n );\n};\n","import Masonry, { ResponsiveMasonry } from 'react-responsive-masonry';\nimport { SkeletonItem } from './SkeletonItem';\n\nexport interface ISkeletonReviewGridProps {\n count: number;\n type: 'grid' | 'list' | 'image_grid';\n gridItemHeights?: string[];\n}\n\nexport const SkeletonReviewGrid = ({ count, type, gridItemHeights = [] }: ISkeletonReviewGridProps) => {\n let components = [];\n\n for (let i = 0; i < count; i++) {\n components.push(\n <div className=\"sledge-product-review__widget-review-card\" key={i}>\n <SkeletonItem\n width=\"100%\"\n height={type === 'list' || ((type === 'grid' || type === 'image_grid') && !gridItemHeights?.length) ? '111px' : gridItemHeights[i]}\n color=\"lighten\"\n rounded=\"md\"\n />\n </div>\n );\n }\n\n return (\n <ResponsiveMasonry\n columnsCountBreakPoints={type === 'list' ? { 350: 1 } : { 350: 1, 750: 3, 1024: 4 }}\n className=\"sledge-product-review__widget-review-grid sledge__skeleton-review-grid sledge__skeleton-pointer-events-none\"\n >\n <Masonry gutter=\"30px\">{components}</Masonry>\n </ResponsiveMasonry>\n );\n};\n","import { SkeletonItem } from './SkeletonItem';\n\nexport interface ISkeletonCollectionGridProps {\n count: number;\n}\n\nexport const SkeletonCollectionGrid = ({ count }: ISkeletonCollectionGridProps) => {\n let components = [];\n\n for (let i = 0; i < count; i++) {\n components.push(\n <div className=\"sledge__collection-grid-card\" key={i}>\n <div className=\"sledge__collection-grid-card-content\">\n <div className=\"sledge__collection-grid-card-content-title\">\n <SkeletonItem width=\"139px\" height=\"32px\" color=\"darken\" rounded=\"md\" />\n </div>\n <div className=\"sledge__collection-grid-card-content-description\">\n <SkeletonItem width=\"238px\" height=\"48px\" color=\"darken\" rounded=\"md\" />\n </div>\n </div>\n </div>\n );\n }\n\n return <div className=\"sledge__collection-grid sledge__skeleton-collection-grid sledge__skeleton-pointer-events-none\">{components}</div>;\n};\n","import { SkeletonItem } from './SkeletonItem';\n\nexport interface ISkeletonPageGridProps {\n count: number;\n}\n\nexport const SkeletonPageGrid = ({ count }: ISkeletonPageGridProps) => {\n let components = [];\n\n for (let i = 0; i < count; i++) {\n components.push(\n <div className=\"sledge__page-grid-card\" key={i}>\n <div className=\"sledge__page-grid-card-content\">\n <div className=\"sledge__page-grid-card-content-title\">\n <SkeletonItem width=\"139px\" height=\"32px\" color=\"darken\" rounded=\"md\" />\n </div>\n <div className=\"sledge__page-grid-card-content-description\">\n <SkeletonItem width=\"238px\" height=\"48px\" color=\"darken\" rounded=\"md\" />\n </div>\n </div>\n </div>\n );\n }\n\n return <div className=\"sledge__page-grid sledge__skeleton-page-grid sledge__skeleton-pointer-events-none\">{components}</div>;\n};\n","import { SkeletonItem } from './SkeletonItem';\n\nexport interface ISkeletonBlogGridProps {\n count: number;\n}\n\nexport const SkeletonBlogGrid = ({ count }: ISkeletonBlogGridProps) => {\n let components = [];\n\n for (let i = 0; i < count; i++) {\n components.push(\n <div className=\"sledge__blog-grid-card\" key={i}>\n <div className=\"sledge__blog-grid-content\">\n <div className=\"sledge__blog-grid-card-image sledge__skeleton-blog-grid-card-image\">\n <SkeletonItem\n width=\"100%\"\n height=\"100%\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0\n }}\n />\n </div>\n <div className=\"sledge__blog-grid-card-desc\">\n <SkeletonItem width=\"100%\" height=\"40px\" color=\"lighten\" rounded=\"md\" />\n <SkeletonItem\n width=\"79px\"\n height=\"26px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n marginTop: '12px',\n marginBottom: '16px'\n }}\n />\n <SkeletonItem width=\"100%\" height=\"72px\" color=\"lighten\" rounded=\"md\" />\n </div>\n </div>\n <div className=\"sledge__blog-grid-button-wrapper\">\n <SkeletonItem width=\"100%\" height=\"40px\" color=\"lighten\" rounded=\"md\" />\n </div>\n </div>\n );\n }\n\n return <div className=\"sledge__blog-grid sledge__skeleton-blog-grid sledge__skeleton-pointer-events-none\">{components}</div>;\n};\n","import { SkeletonItem } from './SkeletonItem';\n\nexport interface ISkeletonArticleGridProps {\n count: number;\n}\n\nexport const SkeletonArticleGrid = ({ count }: ISkeletonArticleGridProps) => {\n let components = [];\n\n for (let i = 0; i < count; i++) {\n components.push(\n <div className=\"sledge__article-grid-card\" key={i}>\n <div className=\"sledge__article-grid-content\">\n <div className=\"sledge__article-grid-card-image sledge__skeleton-article-grid-card-image\">\n <SkeletonItem\n width=\"100%\"\n height=\"100%\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0\n }}\n />\n </div>\n <div className=\"sledge__article-grid-card-desc\">\n <SkeletonItem width=\"100%\" height=\"40px\" color=\"lighten\" rounded=\"md\" />\n <SkeletonItem\n width=\"79px\"\n height=\"26px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n marginTop: '12px',\n marginBottom: '16px'\n }}\n />\n <SkeletonItem width=\"100%\" height=\"72px\" color=\"lighten\" rounded=\"md\" />\n </div>\n </div>\n <div className=\"sledge__article-grid-button-wrapper\">\n <SkeletonItem width=\"100%\" height=\"40px\" color=\"lighten\" rounded=\"md\" />\n </div>\n </div>\n );\n }\n\n return <div className=\"sledge__article-grid sledge__skeleton-article-grid sledge__skeleton-pointer-events-none\">{components}</div>;\n};\n","import './SkeletonLoading.css';\n\nimport { SkeletonItem } from './SkeletonItem';\nimport { SkeletonProductGrid } from './SkeletonProductGrid';\nimport { SkeletonReviewGrid } from './SkeletonReviewGrid';\nimport { SkeletonCollectionGrid } from './SkeletonCollectionGrid';\nimport { SkeletonPageGrid } from './SkeletonPageGrid';\nimport { SkeletonBlogGrid } from './SkeletonBlogGrid';\nimport { SkeletonArticleGrid } from './SkeletonArticleGrid';\n\nexport const SkeletonLoading = {\n Item: SkeletonItem,\n ReviewGrid: SkeletonReviewGrid,\n ProductGrid: SkeletonProductGrid,\n CollectionGrid: SkeletonCollectionGrid,\n PageGrid: SkeletonPageGrid,\n BlogGrid: SkeletonBlogGrid,\n ArticleGrid: SkeletonArticleGrid\n};\n","import './LoadingDots.css';\n\nexport const LoadingDots = () => {\n return (\n <div className=\"sledge__loading-dots\">\n <div className=\"sledge__loading-icon-dot\"></div>\n <div className=\"sledge__loading-icon-dot\"></div>\n <div className=\"sledge__loading-icon-dot\"></div>\n </div>\n );\n};\n","import React from 'react';\nimport { IProductGrid } from '@core/components';\nimport useEmblaCarousel, { EmblaOptionsType as CarouselOptionsType, EmblaCarouselType as CarouselType } from 'embla-carousel-react';\nimport './Carousel.css';\n\nexport interface CarouselPropType {\n options?: CarouselOptionsType;\n children: React.ReactNode[];\n className?: string;\n 'data-grid-type'?: IProductGrid['type'];\n carouselSourceWidget?: 'productGrid' | 'blogGrid' | 'articleGrid' | 'collectionGrid' | 'pageGrid';\n}\n\nexport const Carousel = (props: CarouselPropType) => {\n const { children, className = '', 'data-grid-type': dataGridType, carouselSourceWidget } = props;\n const [active, setActive] = React.useState<boolean>(true);\n\n const {\n options = {\n slidesToScroll: 'auto',\n align: 'start',\n dragFree: true,\n duration: 35\n }\n } = props;\n\n const [carouselRef, carouselApi] = useEmblaCarousel(options);\n const [prevBtnDisabled, setPrevBtnDisabled] = React.useState(true);\n const [nextBtnDisabled, setNextBtnDisabled] = React.useState(true);\n const [selectedIndex, setSelectedIndex] = React.useState(0);\n const [scrollSnaps, setScrollSnaps] = React.useState<number[]>([]);\n\n const scrollPrev = React.useCallback(() => carouselApi && carouselApi.scrollPrev(), [carouselApi]);\n const scrollNext = React.useCallback(() => carouselApi && carouselApi.scrollNext(), [carouselApi]);\n const scrollTo = React.useCallback((index: number) => carouselApi && carouselApi.scrollTo(index), [carouselApi]);\n\n const onSelect = React.useCallback((carouselApi: CarouselType) => {\n setSelectedIndex(carouselApi.selectedScrollSnap());\n setPrevBtnDisabled(!carouselApi.canScrollPrev());\n setNextBtnDisabled(!carouselApi.canScrollNext());\n }, []);\n\n const onInit = React.useCallback((carouselApi: CarouselType) => {\n setScrollSnaps(carouselApi.scrollSnapList());\n }, []);\n\n //init carousel\n React.useEffect(() => {\n if (!carouselApi) return;\n\n onInit(carouselApi);\n onSelect(carouselApi);\n\n carouselApi.on('reInit', onInit);\n carouselApi.on('reInit', onSelect);\n carouselApi.on('select', onSelect);\n }, [carouselApi, onSelect]);\n\n //trigger active carousel\n React.useEffect(() => {\n if (!carouselApi) return;\n\n if (prevBtnDisabled && nextBtnDisabled) setActive(false);\n else setActive(true);\n }, [carouselApi, prevBtnDisabled, nextBtnDisabled]);\n\n //trigger when children added\n React.useEffect(() => {\n if (!carouselApi) return;\n\n carouselApi.reInit(options);\n }, [carouselApi, React.Children.count(children)]);\n\n //trigger draggable\n React.useEffect(() => {\n if (!carouselApi) return;\n\n if (!active) carouselApi?.internalEngine().dragHandler.destroy();\n else carouselApi?.internalEngine().dragHandler.init(carouselApi);\n }, [active]);\n\n let carouselAttributes: React.HTMLAttributes<HTMLDivElement> | CarouselPropType | { active?: boolean } = {};\n\n //attributes for different widget\n switch (carouselSourceWidget) {\n case 'productGrid':\n carouselAttributes = {\n className: 'sledge__carousel-container sledge__product-grid',\n 'data-grid-type': dataGridType\n };\n break;\n default:\n carouselAttributes = {\n className: 'sledge__carousel-container'\n };\n break;\n }\n\n return (\n <div className={`sledge__carousel ${className}`}>\n <Navigation\n state={{\n prevBtnDisabled,\n nextBtnDisabled\n }}\n position=\"left\"\n disabled={prevBtnDisabled}\n onClick={scrollPrev}\n className=\"sledge__carousel-button-prev\"\n />\n <div className={`sledge__carousel-viewport ${(active && 'is-active') || ''}`} ref={carouselRef}>\n <div {...carouselAttributes}>{children}</div>\n </div>\n <Navigation\n state={{\n prevBtnDisabled,\n nextBtnDisabled\n }}\n position=\"right\"\n disabled={nextBtnDisabled}\n onClick={scrollNext}\n className=\"sledge__carousel-button-next\"\n />\n <div className=\"sledge__carousel-dots\">\n {scrollSnaps.map((_, index) => (\n <DotButton key={index} onClick={() => scrollTo(index)} className={'sledge__carousel-dot'.concat(index === selectedIndex ? ' sledge__carousel-dot--selected' : '')} />\n ))}\n </div>\n </div>\n );\n};\n\nexport const Navigation: React.FC<any> = (props) => {\n const { children, state, className, position, ...restProps } = props;\n const { prevBtnDisabled, nextBtnDisabled } = state;\n\n if (prevBtnDisabled && nextBtnDisabled) return null;\n\n const LeftIcon = (\n <svg width={16} height={16} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10.6875 2.97945C10.865 3.15697 10.8812 3.43474 10.7359 3.63048L10.6875 3.68656L6.37465 7.99967L10.6875 12.3128C10.865 12.4903 10.8812 12.7681 10.7359 12.9638L10.6875 13.0199C10.51 13.1974 10.2323 13.2135 10.0365 13.0683L9.98043 13.0199L5.31377 8.35323C5.13625 8.17572 5.12012 7.89794 5.26535 7.7022L5.31377 7.64612L9.98043 2.97945C10.1757 2.78419 10.4923 2.78419 10.6875 2.97945Z\"\n fill=\"#767676\"\n />\n </svg>\n );\n\n const RightIcon = (\n <svg width={17} height={17} viewBox=\"0 0 17 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.60738 13.1299C5.42987 12.9524 5.41374 12.6746 5.55897 12.4789L5.60738 12.4228L9.92027 8.1097L5.60738 3.79659C5.42987 3.61908 5.41374 3.3413 5.55897 3.14556L5.60738 3.08948C5.7849 2.91197 6.06267 2.89583 6.25841 3.04107L6.31449 3.08948L10.9812 7.75615C11.1587 7.93366 11.1748 8.21143 11.0296 8.40718L10.9812 8.46325L6.31449 13.1299C6.11923 13.3252 5.80265 13.3252 5.60738 13.1299Z\"\n fill=\"#767676\"\n />\n </svg>\n );\n\n const Icon = () => (position === 'left' ? LeftIcon : RightIcon);\n\n return (\n <button className={`sledge__carousel-button ${className}`} type=\"button\" {...restProps}>\n <Icon />\n </button>\n );\n};\n\nexport const DotButton: React.FC<any> = (props) => {\n const { children, ...restProps } = props;\n\n return (\n <button type=\"button\" {...restProps}>\n {children}\n </button>\n );\n};\n","import React from 'react';\nimport './FlyoutSidebar.css';\nimport { CloseIcon } from '@core/components';\n\nexport interface IFlyoutSidebarProps {\n title: React.ReactNode;\n content: React.ReactNode;\n footer?: React.ReactNode;\n open: boolean;\n setOpen(value: React.SetStateAction<boolean>): void;\n position?: 'left' | 'right' | 'top' | 'bottom';\n className?: string;\n withBlurEffect?: boolean;\n}\n\nexport const FlyoutSidebar = ({ title, content, footer = null, open, setOpen, position = 'left', className = '', withBlurEffect = false }: IFlyoutSidebarProps) => {\n const [isLoading, setIsLoading] = React.useState(true);\n const [isScrollAtBottom, setIsScrollAtBottom] = React.useState(false);\n\n const contentContainerRef = React.useRef(null);\n\n React.useLayoutEffect(() => {\n if (!withBlurEffect) return;\n\n const container: any = contentContainerRef.current;\n if (!container) return;\n\n const checkScroll = () => {\n const bottomPosition = container.scrollHeight - container.scrollTop;\n const isBottom = bottomPosition <= container.clientHeight + 1;\n setIsScrollAtBottom(isBottom);\n };\n\n container.addEventListener('scroll', checkScroll);\n window.addEventListener('resize', checkScroll);\n\n return () => {\n container.removeEventListener('scroll', checkScroll);\n window.removeEventListener('resize', checkScroll);\n };\n }, []);\n\n React.useEffect(() => {\n open ? document.body.classList.add('sledge__open-flyout-state') : document.body.classList.remove('sledge__open-flyout-state');\n\n // Trigger Re-render on open change\n if (!open) return;\n\n setIsLoading(true);\n setTimeout(() => {\n setIsLoading(false);\n }, 0);\n }, [open]);\n\n const showBlurEffect = withBlurEffect && !isScrollAtBottom;\n\n return (\n <div className={`sledge__flyout-mobile ${className}`} data-open={open} data-position={position}>\n <div className=\"sledge__flyout-overlay\" onClick={() => setOpen(false)} />\n <div className=\"sledge__flyout-mobile-wrapper\">\n <div className=\"sledge__flyout-header\">\n <div className=\"sledge__flyout-mobile-title\">{title}</div>\n <div className=\"sledge__flyout-close-field-wrapper\">\n <button className=\"sledge__flyout-close-field\" type=\"button\" onClick={() => setOpen(false)}>\n <CloseIcon width={14} height={14} color=\"#393d4e\" />\n </button>\n </div>\n </div>\n <div ref={contentContainerRef} className={`sledge__flyout-mobile-content ${showBlurEffect ? 'sledge__flyout-mobile-content-blur-effect' : ''}`}>\n {isLoading ? null : content}\n </div>\n {footer ? <div className=\"sledge__flyout-mobile-footer\">{isLoading ? null : footer}</div> : null}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { VirtualItem, useVirtualizer } from '@tanstack/react-virtual';\n\nexport interface IVirtualizedListProps {\n scrollElement?: Element | (Window & typeof globalThis) | undefined | null;\n rowCount: number;\n rowRenderer: (props: VirtualItem) => React.ReactNode;\n selector?: string;\n parentRef?: any;\n}\n\nconst getElement = ({ selector, setUsedScrollElement }: { selector: string; setUsedScrollElement: any }) => {\n const element: Element | (Window & typeof globalThis) | null = document.querySelector(selector);\n if (!element)\n setTimeout(() => {\n getElement({ selector, setUsedScrollElement });\n }, 10);\n else setUsedScrollElement(element);\n};\n\nexport const VirtualizedList = ({ scrollElement, rowCount, rowRenderer, selector, parentRef = null }: IVirtualizedListProps) => {\n const [usedScrollElement, setUsedScrollElement]: any = React.useState(scrollElement);\n\n if (!usedScrollElement && selector) getElement({ selector, setUsedScrollElement });\n\n const virtualizer = useVirtualizer({\n count: rowCount,\n getScrollElement: () => parentRef?.current || usedScrollElement,\n estimateSize: () => 45\n });\n\n const items = virtualizer.getVirtualItems();\n\n return (\n <div\n style={{\n height: virtualizer.getTotalSize(),\n width: '100%',\n position: 'relative'\n }}\n className=\"sledge__virtualized-wrapper\"\n >\n <div\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n transform: `translateY(${items[0]?.start ?? 0}px)`\n }}\n className=\"sledge__virtualized-list\"\n >\n {items.map((virtualRow) => (\n <div key={virtualRow.key} data-index={virtualRow.index} ref={virtualizer.measureElement} className=\"sledge__virtualized-measure-element\">\n {rowRenderer(virtualRow)}\n </div>\n ))}\n </div>\n </div>\n );\n};\n","import './Alert.css';\n\nexport interface IAlertProps {\n children: any;\n className?: string;\n type: 'info';\n icon?: any;\n}\n\nexport const Alert = ({ children, className = '', type, icon = null }: IAlertProps) => {\n return (\n <div className={`sledge__alert ${className}`} data-alert-type={type}>\n {icon && <div>{icon}</div>}\n\n <div>{children}</div>\n </div>\n );\n};\n","import React from 'react';\nimport { SearchIcon } from '@core/components';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\nimport { isFunction } from '@core/lib/helper';\nimport { useEffectOnChange, usePreviewSettings } from '@core/hooks';\n\nexport interface ISearchIconWidgetProps {\n query?: {\n keyword: string;\n };\n size?: 'xs' | 'sm' | 'md' | string;\n children?: any;\n onAfterAddToCart?(state: 'success' | 'failed'): void;\n onAfterAddWishlist?(state: 'success' | 'failed'): void;\n onAfterRemoveWishlist?(state: 'success' | 'failed'): void;\n onAfterRenderProduct?(state: 'success' | 'failed'): void;\n urlSearchResult?: string;\n previewSettings?: any;\n}\n\nexport const SearchIconWidget = (props: ISearchIconWidgetProps) => {\n const { isRenderApp, isJsVersion, componentRef } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { instantSearch: isRenderAppInstantSearch } = isRenderApp || {};\n const { searchIconWidget: searchIconWidgetRef } = componentRef || {};\n\n const { size = 'sm', children, onAfterAddToCart, onAfterAddWishlist, onAfterRemoveWishlist, onAfterRenderProduct, urlSearchResult, query, previewSettings: previewSettingsProp } = props || {};\n\n // Separate Components\n let productCardsComponent: any = null;\n let suggestionKeywordListsComponent: any = null;\n let otherIndexListsComponent: any = null;\n let searchViewMoreResultComponent: any = null;\n React.Children.map(children, (child) => {\n if (React.isValidElement(child) && isFunction(child.type)) {\n const { productCard, suggestionKeywordList, otherIndexList, searchViewMoreResult }: any = child?.props || {};\n\n if (productCard && isFunction(productCard)) productCardsComponent = productCard;\n if (suggestionKeywordList && isFunction(suggestionKeywordList)) suggestionKeywordListsComponent = suggestionKeywordList;\n if (otherIndexList && isFunction(otherIndexList)) otherIndexListsComponent = otherIndexList;\n if (searchViewMoreResult && isFunction(searchViewMoreResult)) searchViewMoreResultComponent = searchViewMoreResult;\n }\n });\n\n const { instantSearchPreviewSettings, previewSettings } = usePreviewSettings({\n defaultSettings: previewSettingsProp,\n nestedProperty: 'sledge.instantSearch.searchIconPopup.preview'\n });\n\n const [sizing, setSizing] = React.useState({\n width: 0,\n height: 0\n });\n\n React.useEffect(() => {\n if (!isRenderAppInstantSearch) return;\n\n if (size === 'xs') {\n setSizing({\n width: 14,\n height: 14\n });\n } else if (size === 'sm') {\n setSizing({\n width: 20,\n height: 20\n });\n } else {\n setSizing({\n width: 25,\n height: 25\n });\n }\n }, [isRenderAppInstantSearch]);\n\n useEffectOnChange(() => {\n handleShowWidget({\n isPreviewSettings: true\n });\n }, [previewSettings]);\n\n const handleShowWidget = (props?: any) => {\n if (typeof window !== 'undefined' && window.sledgeInstantSearchIconWidgetPopup)\n window.sledgeInstantSearchIconWidgetPopup({\n onAfterAddToCart,\n onAfterAddWishlist,\n onAfterRemoveWishlist,\n onAfterRenderProduct,\n isJsVersion,\n productCardsComponent,\n suggestionKeywordListsComponent,\n otherIndexListsComponent,\n searchViewMoreResultComponent,\n urlSearchResult,\n query,\n instantSearchPreviewSettings,\n previewSettings,\n ...(props || {})\n });\n };\n\n return (\n <span className=\"sledge-instant-search__icon-widget\" onClick={handleShowWidget} ref={searchIconWidgetRef}>\n <SearchIcon {...sizing} color=\"currentColor\" />\n </span>\n );\n};\n","import React from 'react';\n\nexport const OtherIndexLists = ({\n listsComponent: ListsComponent,\n name,\n type,\n items,\n isComponentJsVersion,\n showPopupComponent,\n setShowPopupComponent,\n languageSettings\n}: {\n listsComponent?: any;\n name?: string;\n type?: string;\n items?: any[];\n isComponentJsVersion?: any;\n showPopupComponent?: boolean;\n setShowPopupComponent?(value: boolean): void;\n languageSettings?: any;\n}) => {\n if (ListsComponent) {\n const ListsProps = { name, type, items, showPopupComponent, setShowPopupComponent };\n\n return <React.Fragment>{isComponentJsVersion ? <div dangerouslySetInnerHTML={{ __html: ListsComponent({ ...ListsProps }) }}></div> : <ListsComponent {...ListsProps} />}</React.Fragment>;\n } else {\n return (\n <>\n <div className=\"sledge-instant-search__icon-widget-search-form-result-title\">{name}</div>\n {items?.length ? (\n <ul className=\"sledge-instant-search__icon-widget-search-form-result-list\">\n {items.map((hit: any, index: number) => {\n const { title, url } = hit;\n\n return (\n <li key={index}>\n <a href={url} className=\"sledge-instant-search__icon-widget-search-form-result-list-link\">\n {title}\n </a>\n </li>\n );\n })}\n </ul>\n ) : (\n <ul className=\"sledge-instant-search__icon-widget-search-form-result-list\">\n <li className=\"sledge-instant-search__icon-widget-search-form-result-item-disabled\">{languageSettings?.title_no_result || `No ${name?.toLowerCase()} were found`}</li>\n </ul>\n )}\n </>\n );\n }\n};\n","import React from 'react';\nimport { SearchIcon } from '@core/components';\nimport { DEFAULT_QUERY_PARAM, DEFAULT_SEARCH_RESULT_URL } from '@core/lib/const';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\n\nexport const SuggestionKeywordLists = ({\n listsComponent: ListsComponent,\n keywords,\n isComponentJsVersion = false,\n showPopupComponent,\n setShowPopupComponent,\n urlSearchResult = '',\n query\n}: {\n listsComponent?: any;\n keywords?: any[];\n isComponentJsVersion?: any;\n showPopupComponent?: boolean;\n setShowPopupComponent?(value: boolean): void;\n urlSearchResult?: string;\n query?: {\n keyword?: string;\n };\n}) => {\n if (ListsComponent) {\n const { triggerRenderMultipleComponent } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { trigger: triggerRenderInstantSearchResult } = triggerRenderMultipleComponent?.instantSearch?.searchResult || {};\n\n const setRenderSearchResult = (value: any) => {\n if (triggerRenderInstantSearchResult) triggerRenderInstantSearchResult(value);\n };\n\n const ListsProps = { keywords, showPopupComponent, setShowPopupComponent, setRenderSearchResult };\n\n return <React.Fragment>{isComponentJsVersion ? <div dangerouslySetInnerHTML={{ __html: ListsComponent({ ...ListsProps }) }}></div> : <ListsComponent {...ListsProps} />}</React.Fragment>;\n } else {\n const queryKeyword = query?.keyword ? query.keyword : DEFAULT_QUERY_PARAM.KEYWORD;\n\n return (\n <>\n <div className=\"sledge-instant-search__icon-widget-search-form-result-title\">Suggestions</div>\n <ul className=\"sledge-instant-search__icon-widget-search-form-result-list\">\n {keywords?.map((keyword: string, index: number) => {\n return (\n <li key={index}>\n <a\n href={`${urlSearchResult || DEFAULT_SEARCH_RESULT_URL}?${queryKeyword}=${keyword}`}\n className=\"sledge-instant-search__icon-widget-search-form-result-list-link sledge-instant-search__icon-widget-search-form-result-list-link-suggestion\"\n >\n <SearchIcon width={12} height={12} color=\"#677487\" /> {keyword}\n </a>\n </li>\n );\n })}\n </ul>\n </>\n );\n }\n};\n","import React from 'react';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\nimport { DEFAULT_QUERY_PARAM, DEFAULT_SEARCH_RESULT_URL } from '@core/lib/const';\n\nexport const SearchViewMoreResult = ({\n component: Component,\n keyword,\n isComponentJsVersion = false,\n showPopupComponent,\n setShowPopupComponent,\n urlSearchResult = '',\n redirectObjectDirection = '',\n query,\n languageSettings\n}: {\n component?: any;\n keyword?: string;\n isComponentJsVersion?: any;\n showPopupComponent?: boolean;\n setShowPopupComponent?(value: boolean): void;\n urlSearchResult?: string;\n redirectObjectDirection?: string;\n query?: {\n keyword?: string;\n };\n languageSettings?: any;\n}) => {\n if (Component) {\n const { triggerRenderMultipleComponent } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { trigger: triggerRenderInstantSearchResult } = triggerRenderMultipleComponent?.instantSearch?.searchResult || {};\n\n const setRenderSearchResult = (value: any) => {\n if (triggerRenderInstantSearchResult) triggerRenderInstantSearchResult(value);\n };\n\n const ComponentProps = { keyword, showPopupComponent, setShowPopupComponent, setRenderSearchResult, redirectObjectDirection };\n\n return <React.Fragment>{isComponentJsVersion ? <div dangerouslySetInnerHTML={{ __html: Component({ ...ComponentProps }) }}></div> : <Component {...ComponentProps} />}</React.Fragment>;\n } else {\n const queryKeyword = query?.keyword ? query.keyword : DEFAULT_QUERY_PARAM.KEYWORD;\n\n return (\n <a\n href={redirectObjectDirection ? redirectObjectDirection : `${urlSearchResult || DEFAULT_SEARCH_RESULT_URL}?${queryKeyword}=${keyword}`}\n className=\"sledge-instant-search__icon-widget-button-more\"\n >\n {languageSettings?.view_more_result || 'View More Result'}\n </a>\n );\n }\n};\n","import { OtherIndexLists } from './OtherIndexLists';\nimport { SuggestionKeywordLists } from './SuggestionKeywordLists';\nimport { SearchViewMoreResult } from './SearchViewMoreResult';\n\nexport const Global = {\n OtherIndexLists,\n SuggestionKeywordLists,\n SearchViewMoreResult\n};\n","import React from 'react';\nimport * as Dialog from '@radix-ui/react-dialog';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\nimport { multiSearch, searchTrigger } from '@core/api/instant-search';\nimport { DEFAULT_QUERY_PARAM, DEFAULT_QUERY_PRODUCT_MEILISEARCH, DEFAULT_SEARCH_RESULT_URL, LOCAL_STORAGE_KEY, OBJECT_DATA_STRING_KEY } from '@core/lib/const';\nimport { useEffectOnChange, usePrevious } from '@core/hooks';\nimport { ProductGrid, SearchInputField, SearchIcon, ScrollArea, SkeletonLoading, Alert, InfoCircleIcon } from '@core/components';\nimport { Global } from '@react-instant-search/components/Global';\nimport { getProductsReviewInfo } from '@core/api/product-review';\n\ndeclare global {\n interface Window {\n sledgeInstantSearchIconWidgetPopup(props: {\n onAfterAddToCart?(state: 'success' | 'failed'): void;\n onAfterAddWishlist?(state: 'success' | 'failed'): void;\n onAfterRemoveWishlist?(state: 'success' | 'failed'): void;\n onAfterRenderProduct?(state: 'success' | 'failed'): void;\n isJsVersion?: any;\n productCardsComponent?: any;\n suggestionKeywordListsComponent?: any;\n otherIndexListsComponent?: any;\n searchViewMoreResultComponent?: any;\n urlSearchResult?: string;\n query?: {\n keyword?: string;\n };\n instantSearchPreviewSettings?: any;\n previewSettings?: any;\n forceShowInfo?: boolean;\n isPreviewSettings?: boolean;\n }): void;\n }\n}\n\nexport const SearchIconWidgetPopup = () => {\n const { isRenderApp } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { instantSearch: isRenderAppInstantSearch } = isRenderApp || {};\n\n const [isLoading, setIsLoading] = React.useState(true);\n const [showInfo, setShowInfo] = React.useState(false);\n const [keyword, setKeyword] = React.useState('');\n const [searchResultProduct, setSearchResultProduct] = React.useState([]);\n const [searchResultOther, setSearchResultOther] = React.useState([]);\n const [dataReviews, setDataReviews] = React.useState({});\n const [displaySettings, setDisplaySettings] = React.useState<any>({});\n const [suggestionSettings, setSuggestionSettings] = React.useState<any>({});\n const [suggestionIndex, setSuggestionIndex] = React.useState('');\n const [urlSearchResult, setUrlSearchResult] = React.useState('');\n const [languageSettings, setLanguageSettings] = React.useState<any>({});\n const [redirectsSettings, setRedirectsSettings] = React.useState([]);\n const [redirectObject, setRedirectObject] = React.useState<any>({});\n const [isRedirect, setIsRedirect] = React.useState(false);\n const [handleFunctions, setHandleFunctions] = React.useState<any>({\n onAfterAddToCart: (state: 'success' | 'failed') => {},\n onAfterAddWishlist: (state: 'success' | 'failed') => {},\n onAfterRemoveWishlist: (state: 'success' | 'failed') => {},\n onAfterRenderProduct: (state: 'success' | 'failed') => {},\n isJsVersion: null,\n productCardsComponent: null,\n suggestionKeywordListsComponent: null,\n otherIndexListsComponent: null,\n searchViewMoreResultComponent: null,\n query: {},\n instantSearchPreviewSettings: null,\n previewSettings: null\n });\n const [totalHitsProduct, setTotalHitsProduct] = React.useState(0);\n const [instantSearchSettings, setInstantSearchSettings] = React.useState<any>({});\n\n const searchFieldRef = React.useRef<HTMLInputElement>(null);\n\n const previousState: any = usePrevious({ keyword });\n\n const { direction: redirectObjectDirection } = redirectObject || {};\n\n const handleMultiSearch = async (params: { data: any; onSearch?: boolean; withFetchReviewInfo?: boolean }) => {\n const { data, onSearch = false, withFetchReviewInfo = false } = params;\n\n const valueRedirectObject: any = redirectsSettings.find(({ keyword: redirectKeyword }) => String(redirectKeyword)?.toLowerCase() === keyword);\n const valueIsRedirect = Boolean(valueRedirectObject?.direction?.length);\n\n setRedirectObject(valueRedirectObject);\n setIsRedirect(valueIsRedirect);\n\n setIsLoading(true);\n\n const { index_product, tabs, hidden_tags, display, show_out_of_stock, attributes_to_retrieve, default_sort, search_use_default_sort, collections_all_id } = data;\n const suggestion = display?.search?.suggestion || {};\n const instantSearchLimit = Number(display?.search?.instantsearch_limit || 6);\n\n let response: any;\n let body = {\n queries: tabs.map((tab: any) => {\n const { index } = tab;\n\n let isProductIndex = index.includes(index_product);\n let additionalFilter = DEFAULT_QUERY_PRODUCT_MEILISEARCH;\n\n if (hidden_tags?.length) additionalFilter.push(`tags NOT IN [${hidden_tags}]`);\n if (!show_out_of_stock) additionalFilter.push(`'availability' IN ${JSON.stringify(['in stock'])}`);\n\n let sort: string[] = [];\n if (isProductIndex && search_use_default_sort && default_sort) {\n if (String(default_sort).includes(OBJECT_DATA_STRING_KEY.COLLECTION_ID)) {\n sort = collections_all_id ? [String(default_sort).replaceAll(OBJECT_DATA_STRING_KEY.COLLECTION_ID, String(collections_all_id))] : [];\n } else {\n sort = [default_sort];\n }\n } else {\n sort = [];\n }\n\n return {\n indexUid: index,\n q: keyword,\n sort,\n hitsPerPage: isProductIndex ? instantSearchLimit : 4,\n filter: isProductIndex ? [...new Set(additionalFilter)].join(' AND ') : '',\n attributesToRetrieve: attributes_to_retrieve\n };\n })\n };\n\n response = await multiSearch(body);\n\n if (!response) return;\n\n const { results } = response;\n\n let valueSearchResultProduct = results?.filter(({ indexUid }: any) => indexUid?.includes(index_product));\n\n setTotalHitsProduct(valueSearchResultProduct[0]?.totalHits || 0);\n\n if (onSearch && keyword?.length) {\n searchTrigger({\n keyword: keyword,\n resultCount: valueSearchResultProduct[0]?.totalHits || 0\n });\n }\n\n let valueSearchResultOther =\n results\n ?.filter(({ indexUid }: any) => !indexUid?.includes(index_product))\n ?.map((result: any) => {\n const { indexUid } = result;\n\n const { name, type } = tabs?.find(({ index }: any) => index.includes(indexUid));\n\n return {\n ...result,\n ...{\n name: name || '',\n type: type || ''\n }\n };\n }) || [];\n\n let getValueSearchResultProduct = valueSearchResultProduct?.length ? valueSearchResultProduct[0]?.hits : [];\n let valueSuggestionIndex = !keyword.length ? 'zero_character' : !getValueSearchResultProduct?.length ? 'no_result' : '';\n\n let isPriorityZeroCharacter = Boolean(\n !keyword.length && Object.keys(suggestion).length && suggestion[valueSuggestionIndex]?.products?.active && suggestion[valueSuggestionIndex]?.products?.list?.length\n );\n\n let dataSearchResultProduct = isPriorityZeroCharacter ? suggestion[valueSuggestionIndex]?.products?.list : getValueSearchResultProduct;\n\n if (withFetchReviewInfo) {\n let searchResultProductIds = dataSearchResultProduct.map(({ id }: any) => id);\n let valueDataReviews = await getProductsReviewInfo(searchResultProductIds);\n\n if (valueDataReviews?.status?.code === 200) setDataReviews(valueDataReviews?.data);\n } else {\n setDataReviews({});\n }\n\n setSearchResultProduct(dataSearchResultProduct);\n setSearchResultOther(valueSearchResultOther);\n setSuggestionIndex(valueSuggestionIndex);\n setIsLoading(false);\n };\n\n const handleSettings = async ({ LOCAL_STORAGE_INSTANT_SEARCH_SETTING, isPreviewSettings = false }: { LOCAL_STORAGE_INSTANT_SEARCH_SETTING: any; isPreviewSettings?: boolean }) => {\n let response: any;\n\n response = handleFunctions?.instantSearchPreviewSettings || JSON.parse(LOCAL_STORAGE_INSTANT_SEARCH_SETTING as string);\n\n if (!response) return;\n\n setInstantSearchSettings(response);\n\n const { display, languages, redirects } = response;\n\n setDisplaySettings(display);\n setSuggestionSettings(display?.search?.suggestion);\n setLanguageSettings(languages);\n setRedirectsSettings(redirects);\n\n if (!isPreviewSettings)\n await handleMultiSearch({\n data: response,\n withFetchReviewInfo: true\n });\n };\n\n React.useEffect(() => {\n if (!isRenderAppInstantSearch) return;\n\n if (typeof window !== 'undefined') {\n window.sledgeInstantSearchIconWidgetPopup = ({\n onAfterAddToCart = () => {},\n onAfterAddWishlist = () => {},\n onAfterRemoveWishlist = () => {},\n onAfterRenderProduct = () => {},\n isJsVersion = null,\n productCardsComponent = () => {},\n suggestionKeywordListsComponent = () => {},\n otherIndexListsComponent = () => {},\n searchViewMoreResultComponent = () => {},\n urlSearchResult = '',\n query = {},\n instantSearchPreviewSettings = null,\n previewSettings = null,\n forceShowInfo = true,\n isPreviewSettings = false\n }) => {\n setHandleFunctions({\n onAfterAddToCart,\n onAfterAddWishlist,\n onAfterRemoveWishlist,\n onAfterRenderProduct,\n isJsVersion,\n productCardsComponent,\n suggestionKeywordListsComponent,\n otherIndexListsComponent,\n searchViewMoreResultComponent,\n query,\n instantSearchPreviewSettings,\n previewSettings\n });\n\n if (isPreviewSettings) return;\n\n setShowInfo(forceShowInfo);\n setUrlSearchResult(urlSearchResult);\n };\n }\n\n handleSettings({\n LOCAL_STORAGE_INSTANT_SEARCH_SETTING: localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || null\n });\n }, [isRenderAppInstantSearch]);\n\n React.useEffect(() => {\n // Firefox\n showInfo ? document.body.classList.add('sledge__open-popup-state') : document.body.classList.remove('sledge__open-popup-state');\n }, [showInfo]);\n\n React.useEffect(() => {\n if (Boolean(previousState && previousState?.keyword !== keyword)) {\n const INSTANT_SEARCH_SETTING = handleFunctions?.instantSearchPreviewSettings || JSON.parse((localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || null) as string);\n\n const delayDebounceFn = setTimeout(() => {\n if (INSTANT_SEARCH_SETTING)\n handleMultiSearch({\n data: INSTANT_SEARCH_SETTING,\n onSearch: true\n });\n }, 500);\n return () => clearTimeout(delayDebounceFn);\n }\n }, [keyword]);\n\n useEffectOnChange(() => {\n handleSettings({\n LOCAL_STORAGE_INSTANT_SEARCH_SETTING: localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || null,\n isPreviewSettings: true\n });\n }, [handleFunctions?.instantSearchPreviewSettings]);\n\n const alertFirstSyncComponent =\n !isLoading && !totalHitsProduct && instantSearchSettings?.first_sync ? (\n <Alert className=\"sledge-instant-search__icon-widget-popup-alert-first-sync\" type=\"info\" icon={<InfoCircleIcon width={24} height={24} color=\"#003a5a\" />}>\n <div>Products and Collections indexing is in progress. Product Filter and Instant Search widgets may appear empty during this process.</div>\n <p></p>\n <div>The products and collections will become visible in the widgets once indexing is complete.</div>\n </Alert>\n ) : null;\n\n return (\n <Dialog.Root open={showInfo} onOpenChange={setShowInfo}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"sledge__popup-overlay\" />\n <Dialog.Overlay className=\"sledge__popup-overlay-blur\" />\n <Dialog.Content className=\"sledge-instant-search__icon-widget-popup-detail-content\" data-layout-type={displaySettings?.search?.layout || ''}>\n {alertFirstSyncComponent}\n\n <SearchInputField\n type=\"text\"\n icon={<SearchIcon width={20} height={20} color=\"#000000\" />}\n placeholder={languageSettings?.search_form_placeholder?.widget || 'Search anything...'}\n value={keyword}\n fieldRef={searchFieldRef}\n onChange={({ value }: any) => setKeyword(value)}\n onKeyDown={(event: KeyboardEvent) => {\n // TODO: This method just for js version, find a way to add additional function after enter key on headless (maybe we can expose onEnterKey)\n if (event.key === 'Enter') {\n const query: any = handleFunctions.query;\n const queryKeyword = query?.keyword ? query.keyword : DEFAULT_QUERY_PARAM.KEYWORD;\n const urlToSearchResult = isRedirect ? redirectObjectDirection : `${urlSearchResult || DEFAULT_SEARCH_RESULT_URL}?${queryKeyword}=${keyword}`;\n\n window.location.href = urlToSearchResult;\n }\n }}\n className=\"sledge-instant-search__icon-widget-search-form-field\"\n withClearField\n />\n\n <div className=\"sledge-instant-search__icon-widget-search-form-result\">\n {isLoading ? (\n <ScrollArea>\n <div className=\"sledge-instant-search__icon-widget-search-form-result-wrapper\">\n <div className=\"sledge-instant-search__icon-widget-search-form-result-flex\">\n <div className=\"sledge-instant-search__icon-widget-search-form-result-flex-item-other sledge-instant-search__icon-widget-search-form-result-flex-item-other-skeleton\">\n {[0, 1, 2].map((index: number) => (\n <React.Fragment key={index}>\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"42px\"\n color=\"lighten\"\n rounded=\"md\"\n {...(Boolean(index) && {\n style: { marginTop: '12px' }\n })}\n />\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n gap: '12px',\n marginTop: '12px'\n }}\n >\n {[1, 2, 3].map((index: number) => (\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n key={index}\n style={{\n maxWidth: '140px'\n }}\n />\n ))}\n </div>\n </React.Fragment>\n ))}\n </div>\n <div className=\"sledge-instant-search__icon-widget-search-form-result-flex-item-product\">\n <SkeletonLoading.ProductGrid count={6} type=\"medium\" />\n </div>\n </div>\n </div>\n </ScrollArea>\n ) : (\n <ScrollArea>\n <div className=\"sledge-instant-search__icon-widget-search-form-result-wrapper\">\n <div className=\"sledge-instant-search__icon-widget-search-form-result-flex\">\n <div className=\"sledge-instant-search__icon-widget-search-form-result-flex-item-other\">\n {Object.keys(suggestionSettings).length &&\n suggestionSettings[suggestionIndex]?.keywords?.active &&\n suggestionSettings[suggestionIndex]?.keywords?.list?.length ? (\n <Global.SuggestionKeywordLists\n listsComponent={handleFunctions.suggestionKeywordListsComponent}\n keywords={suggestionSettings[suggestionIndex].keywords.list}\n isComponentJsVersion={handleFunctions.isJsVersion}\n showPopupComponent={showInfo}\n setShowPopupComponent={setShowInfo}\n urlSearchResult={urlSearchResult}\n query={handleFunctions.query}\n />\n ) : null}\n\n {searchResultOther &&\n searchResultOther.map((item: any, index: number) => {\n const { hits, name, type } = item;\n\n return (\n <React.Fragment key={index}>\n <Global.OtherIndexLists\n listsComponent={handleFunctions.otherIndexListsComponent}\n name={name}\n type={type}\n items={hits}\n isComponentJsVersion={handleFunctions.isJsVersion}\n showPopupComponent={showInfo}\n setShowPopupComponent={setShowInfo}\n languageSettings={languageSettings}\n />\n </React.Fragment>\n );\n })}\n </div>\n <div className=\"sledge-instant-search__icon-widget-search-form-result-flex-item-product\">\n {searchResultProduct?.length ? (\n <div className=\"sledge-instant-search__icon-widget-search-form-result-product\">\n <ProductGrid\n sourceApp=\"instant-search\"\n type=\"medium\"\n data={searchResultProduct.map((item: any) => {\n const { variants, ...product } = item || {};\n\n return {\n product,\n variants\n };\n })}\n setting={{\n show_vendor: displaySettings?.search?.show_vendor,\n show_sku: displaySettings?.search?.show_sku,\n show_price: displaySettings?.search?.show_price,\n language_button_add_to_cart: languageSettings?.add_to_cart,\n language_button_out_of_stock: languageSettings && languageSettings['out of stock'] ? languageSettings['out of stock'] : ''\n }}\n showOptionOutOfStock={true}\n isComponentJsVersion={handleFunctions.isJsVersion}\n cards={handleFunctions.productCardsComponent}\n onAfterAddToCart={handleFunctions.onAfterAddToCart}\n onAfterAddWishlist={handleFunctions.onAfterAddWishlist}\n onAfterRemoveWishlist={handleFunctions.onAfterRemoveWishlist}\n onAfterRenderProduct={handleFunctions.onAfterRenderProduct}\n showPopupComponent={showInfo}\n setShowPopupComponent={setShowInfo}\n dataReviews={dataReviews}\n previewSettings={handleFunctions?.previewSettings}\n />\n </div>\n ) : Object.keys(suggestionSettings).length &&\n suggestionSettings[suggestionIndex]?.products?.active &&\n suggestionSettings[suggestionIndex]?.products?.list?.length ? (\n <>\n <div className=\"sledge-instant-search__icon-widget-search-form-result-product-suggestion-no-result-text\">\n <span>Sorry</span>, nothing found for <span>{keyword}</span>. Did you mean:\n </div>\n <ProductGrid\n sourceApp=\"instant-search\"\n type=\"medium\"\n data={suggestionSettings[suggestionIndex].products.list.map((item: any) => {\n const { variants, ...product } = item || {};\n\n return {\n product,\n variants\n };\n })}\n setting={{\n show_vendor: displaySettings?.search?.show_vendor,\n show_sku: displaySettings?.search?.show_sku,\n show_price: displaySettings?.search?.show_price,\n language_button_add_to_cart: languageSettings?.add_to_cart,\n language_button_out_of_stock: languageSettings && languageSettings['out of stock'] ? languageSettings['out of stock'] : ''\n }}\n showOptionOutOfStock={true}\n isComponentJsVersion={handleFunctions.isJsVersion}\n cards={handleFunctions.productCardsComponent}\n onAfterAddToCart={handleFunctions.onAfterAddToCart}\n onAfterAddWishlist={handleFunctions.onAfterAddWishlist}\n onAfterRemoveWishlist={handleFunctions.onAfterRemoveWishlist}\n onAfterRenderProduct={handleFunctions.onAfterRenderProduct}\n showPopupComponent={showInfo}\n setShowPopupComponent={setShowInfo}\n previewSettings={handleFunctions?.previewSettings}\n />\n </>\n ) : (\n <>\n <div className=\"sledge-instant-search__icon-widget-search-form-result-title\">{languageSettings?.product || 'Products'}</div>\n <div className=\"sledge-instant-search__icon-widget-search-form-result-item-disabled\">\n {languageSettings?.text_no_result || 'No product were found'}\n </div>\n </>\n )}\n {searchResultProduct?.length ||\n (Object.keys(suggestionSettings).length &&\n suggestionSettings[suggestionIndex]?.products?.active &&\n suggestionSettings[suggestionIndex]?.products?.list?.length) ? (\n <div className=\"sledge-instant-search__icon-widget-button-more-wrapper\">\n <Global.SearchViewMoreResult\n component={handleFunctions.searchViewMoreResultComponent}\n keyword={keyword}\n isComponentJsVersion={handleFunctions.isJsVersion}\n showPopupComponent={showInfo}\n setShowPopupComponent={setShowInfo}\n urlSearchResult={urlSearchResult}\n redirectObjectDirection={redirectObjectDirection}\n query={handleFunctions.query}\n languageSettings={languageSettings}\n />\n </div>\n ) : null}\n </div>\n </div>\n </div>\n </ScrollArea>\n )}\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n","import '@core/lib/polyfills';\n\nimport {\n DEFAULT_QUERY_PRODUCT_MEILISEARCH,\n DEFAULT_QUERY_PUBLISHED_FILTER,\n HIERARCHICAL_FACET_OBJECT_ALIASES,\n LOCAL_STORAGE_KEY,\n MAX_LIMIT_HIERARCHICAL,\n SEPARATOR_HIERARCHICAL_FACET\n} from '@core/lib/const';\nimport { multiSearch, search } from '@core/api/instant-search';\n\ninterface IDetectQueryStringFilter {\n facets: any;\n facetsQueryStringObject: any;\n callback(facetsQueryStringObject: any): void;\n}\n\ninterface ICreateQueryFilter extends IDetectQueryStringFilter {\n additional?: any[];\n allowedFilterSlider?: any[];\n separator: string;\n separatorCollection: string;\n hierarchicalFacetAliases?: any[];\n defaultFilterItems?: any[];\n}\n\ninterface ICreateHierarchicalFacet {\n indexValue: any;\n filter: any;\n searchResultFacets: any;\n separator: string;\n separatorCollection: string;\n clickedFacetsObject: any;\n hiddens: any[];\n hiddensCollection: any[];\n displaySettings: any;\n searchFacetDistribution: any;\n hierarchicalFacetAliases?: any[];\n hierarchicalCollectionsSettings?: any;\n}\n\nconst sortFacets = ({ facets, sortingOrder }: { facets: any[]; sortingOrder: any[] }) => {\n // Handle edge cases\n if (!facets?.length || !sortingOrder?.length) return facets;\n\n const sortRecursively = (objects: any[], orderArray: any[]): any[] => {\n // Determine sorting type based on first object structure\n const isCollectionIdSort = objects?.[0]?.parseObject?.collection_id !== undefined;\n const sortKey = isCollectionIdSort ? 'collection_id' : 'name';\n\n // Create map for quick lookups\n const objectsMap = new Map(objects.map((obj: any) => [isCollectionIdSort ? obj.parseObject[sortKey] : obj[sortKey], obj]));\n\n const sorted: any[] = [];\n const usedKeys = new Set<string>();\n\n // Sort according to order array\n orderArray.forEach((sortItem: any) => {\n const lookupKey = isCollectionIdSort ? sortItem?.id : sortItem;\n const matchingObject = objectsMap.get(lookupKey);\n\n if (lookupKey && matchingObject) {\n usedKeys.add(lookupKey);\n\n // Check if both objects have children before recursive call\n const hasMatchingChildren = matchingObject?.children?.length > 0 && sortItem?.children?.length > 0;\n\n sorted.push({\n ...matchingObject,\n ...(hasMatchingChildren\n ? {\n children: hasMatchingChildren ? sortRecursively(matchingObject?.children, sortItem?.children) : matchingObject?.children?.length ? matchingObject?.children : []\n }\n : {})\n });\n }\n });\n\n // Add remaining items that weren't in sorting order\n objects.forEach((obj: any) => {\n const objKey = isCollectionIdSort ? obj.parseObject[sortKey] : obj[sortKey];\n if (!usedKeys.has(objKey)) {\n sorted.push(obj);\n }\n });\n\n return sorted;\n };\n\n try {\n // Handle root level sorting\n const rootObjects = facets;\n const rootSortOrder = sortingOrder;\n\n // Check for root level matches and sort\n const sorted = sortRecursively(rootObjects, rootSortOrder);\n\n return sorted;\n } catch (error) {\n return facets;\n }\n};\n\nexport const parseFacetObject = ({ facet = '' }: { facet: string }) => {\n if (facet && String(facet)?.includes(SEPARATOR_HIERARCHICAL_FACET)) return JSON.parse(String(facet)?.replaceAll(SEPARATOR_HIERARCHICAL_FACET, ',')) as any;\n return null;\n};\n\nexport const detectQueryStringFilter = ({ facets, facetsQueryStringObject, callback }: IDetectQueryStringFilter) => {\n const searchParams = new URLSearchParams(document.location.search);\n const searchParamsObject = Object.fromEntries(searchParams);\n\n for (const searchParamsKey in searchParamsObject) {\n let ifFacetsQueryStringObject = facets?.length && facets.includes(searchParamsKey);\n\n if (ifFacetsQueryStringObject) facetsQueryStringObject[searchParamsKey] = searchParamsObject[searchParamsKey].split(',');\n }\n\n if (Object.keys(facetsQueryStringObject).length) callback(facetsQueryStringObject);\n\n return facetsQueryStringObject;\n};\n\nexport const detectArrFacetHierarchical = ({\n clickedFacetsObject,\n separator,\n separatorCollection,\n hierarchicalFacetAliases\n}: {\n clickedFacetsObject: any;\n separator: string;\n separatorCollection: string;\n hierarchicalFacetAliases?: any[];\n}) => {\n let facetHierarchical = hierarchicalFacetAliases?.reduce((item, key) => {\n let defaultLevelHierarchical: any = {};\n\n for (let iLevel = 0; iLevel < MAX_LIMIT_HIERARCHICAL; iLevel++) {\n defaultLevelHierarchical[`lvl${iLevel}`] = [];\n }\n\n return { ...item, [key]: defaultLevelHierarchical };\n }, {});\n\n Object.entries(clickedFacetsObject).map((facet: any) => {\n if (facet?.length && facet[1].length) {\n const isCollection = String(facet[0])?.includes(HIERARCHICAL_FACET_OBJECT_ALIASES.collections);\n\n let isHierarchical = hierarchicalFacetAliases?.includes(facet[0]);\n\n if (isHierarchical)\n facet[1]?.map((item: any) => {\n const arrItem = String(item).split(isCollection ? separatorCollection : separator);\n\n if (arrItem?.length && Object.hasOwn(facetHierarchical[facet[0]], `lvl${arrItem.length - 1}`)) facetHierarchical[facet[0]][`lvl${arrItem.length - 1}`].push(item);\n });\n }\n });\n\n return facetHierarchical;\n};\n\nexport const createQueryFilter = ({\n facets,\n facetsQueryStringObject,\n callback,\n additional = [],\n separator,\n separatorCollection,\n allowedFilterSlider,\n hierarchicalFacetAliases,\n defaultFilterItems\n}: ICreateQueryFilter) => {\n let filters = additional?.filter((item) => item);\n\n let detectClickedFacets = detectQueryStringFilter({\n facets,\n facetsQueryStringObject,\n callback\n });\n let facetHierarchical = detectArrFacetHierarchical({\n clickedFacetsObject: detectClickedFacets,\n separator,\n separatorCollection,\n hierarchicalFacetAliases\n });\n\n const facetEntries = Object.entries(detectClickedFacets) || [];\n\n for (const facetEntry of facetEntries) {\n const detectClickedFacet: any = facetEntry;\n\n if (!(detectClickedFacet?.length && detectClickedFacet[1].length)) continue;\n\n let isCustom = ['variants.inventory_quantity'].includes(detectClickedFacet[0]);\n let isRange = allowedFilterSlider?.includes(detectClickedFacet[0]);\n let isHierarchical = hierarchicalFacetAliases?.includes(detectClickedFacet[0]);\n let filterSettings = defaultFilterItems?.find(({ value }: any) => value === detectClickedFacet[0])?.settings;\n\n const { query_filter } = filterSettings || {};\n\n if (isHierarchical) {\n let arrItemHierarchicals: any = [];\n Object.entries(facetHierarchical[detectClickedFacet[0]]).map((itemHierarchical: any) => {\n if (itemHierarchical[1]?.length) arrItemHierarchicals.push([`${detectClickedFacet[0]}.${itemHierarchical[0]}`, itemHierarchical[1]]);\n });\n\n let filterItemHierarchicals = arrItemHierarchicals\n ?.map((filterHierarchical: any) => {\n if (query_filter === 'AND') {\n return filterHierarchical?.[1]?.length ? filterHierarchical?.[1]?.map?.((item: any) => `'${filterHierarchical[0]}' = ${JSON.stringify(item)}`)?.join?.(' AND ') : '';\n } else {\n return `'${filterHierarchical[0]}' IN ${JSON.stringify(filterHierarchical[1])}`;\n }\n })\n .join(' AND ');\n\n filters.push(filterItemHierarchicals);\n } else {\n let filterItem = '';\n if (query_filter === 'AND') {\n filterItem = detectClickedFacet?.[1]?.length ? detectClickedFacet?.[1]?.map?.((item: any) => `'${detectClickedFacet[0]}' = ${JSON.stringify(item)}`)?.join?.(' AND ') : '';\n } else {\n filterItem = `'${detectClickedFacet[0]}' IN ${JSON.stringify(detectClickedFacet[1])}`;\n }\n\n if (isRange) filterItem = `'${detectClickedFacet[0]}' >= ${detectClickedFacet[1][0]} AND '${detectClickedFacet[0]}' <= ${detectClickedFacet[1][1]}`;\n if (isCustom) {\n if (Array.isArray(detectClickedFacet[1]) && detectClickedFacet[1]?.length > 1) {\n filterItem = `(${detectClickedFacet[1]\n ?.map((item: any) => {\n return `'${detectClickedFacet[0]}' ${item}`;\n })\n .join(' OR ')})`;\n } else {\n filterItem = `'${detectClickedFacet[0]}' ${detectClickedFacet[1]}`;\n }\n }\n\n filters.push(filterItem);\n }\n }\n\n return [...new Set(filters.concat(DEFAULT_QUERY_PRODUCT_MEILISEARCH))].join(' AND ');\n};\n\nexport const createHierarchicalFacet = ({\n indexValue,\n filter,\n searchResultFacets,\n separator,\n separatorCollection,\n clickedFacetsObject,\n hiddens,\n hiddensCollection,\n displaySettings,\n searchFacetDistribution,\n hierarchicalFacetAliases,\n hierarchicalCollectionsSettings\n}: ICreateHierarchicalFacet) => {\n const { hide_unrelated } = filter;\n\n const { hidden_ids: hierarchical_collections_hidden_ids, structure: hierarchical_collections_structure } = hierarchicalCollectionsSettings || {};\n\n const isCollection = String(indexValue)?.includes(HIERARCHICAL_FACET_OBJECT_ALIASES.collections);\n const hiddensProp = isCollection ? hiddensCollection : hiddens;\n\n let arrSelectedFacetHierarchical = detectArrFacetHierarchical({\n clickedFacetsObject,\n separator,\n separatorCollection,\n hierarchicalFacetAliases\n });\n\n let hierarchicalFacets: any = [];\n for (let level = 0; level < MAX_LIMIT_HIERARCHICAL; level++) {\n let facets = searchResultFacets[`${indexValue}.lvl${level}`];\n\n let isHideFacetWhenZeroValue = displaySettings?.filter?.hide_when_zero_value;\n if (isHideFacetWhenZeroValue) {\n let filteredFacets = searchFacetDistribution?.[`${indexValue}.lvl${level}`] || {};\n facets = Object.keys(filteredFacets).map((item) => {\n return {\n name: item,\n value: item,\n total: filteredFacets[item] || 0\n };\n });\n }\n\n // If facets not found\n if (!facets || (facets && !Object.keys(facets).length)) continue;\n\n let parent = hierarchicalFacets;\n\n for (let facet of facets) {\n const names = facet.name.split(isCollection ? separatorCollection : separator);\n const name = names?.[names.length - 1]?.trim?.();\n const parseObject = parseFacetObject({ facet: name });\n const isFacetObject = Boolean(parseObject?.collection_id);\n const selectedFacetHierarchical = arrSelectedFacetHierarchical[indexValue][`lvl${level}`];\n const isWhenSelectedHideSiblings = hide_unrelated && selectedFacetHierarchical?.length && !selectedFacetHierarchical.includes(facet.value);\n\n let isHidden = false;\n if (isCollection && isFacetObject && hierarchical_collections_hidden_ids?.length) {\n isHidden = hierarchical_collections_hidden_ids?.includes(parseObject?.collection_id);\n } else {\n isHidden = hiddensProp?.find((hierarchical_hidden: any) => facet.value?.startsWith(hierarchical_hidden));\n }\n\n // Hide item tree\n if (isWhenSelectedHideSiblings || isHidden) continue;\n\n if (level > 0) {\n parent = hierarchicalFacets;\n\n for (let i = 0; i < names.length - 1; i++) {\n let foundIndex = parent?.findIndex((f: any) => f.name.trim().toLowerCase() === names[i].trim().toLowerCase());\n\n parent = parent?.[foundIndex]?.children;\n }\n\n parent?.push({\n ...facet,\n name,\n level,\n parseObject,\n children: []\n });\n }\n\n if (level === 0)\n parent?.push({\n ...facet,\n name,\n level: 0,\n parseObject,\n children: []\n });\n }\n }\n\n // User-based sorting\n if (isCollection) {\n hierarchicalFacets = sortFacets({\n facets: hierarchicalFacets,\n sortingOrder: hierarchical_collections_structure\n });\n }\n\n return hierarchicalFacets;\n};\n\nexport const handleConditionNotUpdateFacetDistribution = ({\n value,\n clickedFacets,\n keepCounterFacets,\n allowedFilterSlider,\n filterSettings\n}: {\n value: any;\n clickedFacets: any;\n keepCounterFacets: any;\n allowedFilterSlider?: any;\n filterSettings?: any;\n}) => {\n const { query_filter } = filterSettings || {};\n\n let arrFacetSelected: any[] = [];\n Object.entries(clickedFacets).map((facet: any) => {\n if (facet?.length && facet[1].length) {\n arrFacetSelected.push(facet[0]);\n }\n });\n\n let isHasFacetSelected = arrFacetSelected?.length;\n let isNoneFacetSelected = !isHasFacetSelected;\n let isOnFacetSelectedOne = isHasFacetSelected && arrFacetSelected.includes(value) && isHasFacetSelected === 1;\n let isSelectedFacetWithPrice = false;\n allowedFilterSlider?.map((filterSlider: any) => {\n if (!filterSlider) return;\n\n isSelectedFacetWithPrice = arrFacetSelected.includes(filterSlider);\n });\n\n let isPriorityFacet = isHasFacetSelected && !isOnFacetSelectedOne && keepCounterFacets?.includes(value) && !isSelectedFacetWithPrice;\n\n // Always update when query filter logic is AND\n return query_filter === 'AND' ? false : isNoneFacetSelected || isOnFacetSelectedOne || isPriorityFacet;\n};\n\nexport const handleFacetValues = ({\n filter,\n items,\n languageSettings,\n clickedFacets,\n searchFacetDistribution,\n displaySettings,\n settings,\n keepCounterFacets,\n allowedFilterSlider\n}: {\n filter?: any;\n items?: any;\n languageSettings?: any;\n clickedFacets?: any;\n searchFacetDistribution?: any;\n displaySettings?: any;\n settings?: any;\n keepCounterFacets?: any;\n allowedFilterSlider?: any;\n}): any => {\n const { value, settings: filterSettings } = filter;\n\n let aliases: any = {};\n if (filter.value === HIERARCHICAL_FACET_OBJECT_ALIASES.product_type) aliases = settings.productTypeAliases || {};\n if (filter.value === HIERARCHICAL_FACET_OBJECT_ALIASES.collections) aliases = settings.collectionAliases || {};\n\n const isCollection = String(filter?.value)?.includes(HIERARCHICAL_FACET_OBJECT_ALIASES.collections);\n\n const isHideFacetWhenZeroValue = displaySettings?.filter?.hide_when_zero_value;\n\n const { prefix, filter_list, delete_prefix, selected_filter, structure, hiddens } = filterSettings || {};\n\n let facetValues: any[] = [];\n\n if (!items?.length) return facetValues;\n\n for (const item of items) {\n const isManualFilter = item && filter_list === 'manual' && !selected_filter?.includes(item?.value);\n const isPrefixFilter = item && filter_list === 'prefix' && !prefix?.find((prefixItem: any) => item?.value?.startsWith(prefixItem));\n const isHidden = hiddens?.includes?.(item?.value);\n\n if (!item || isManualFilter || isPrefixFilter || isHidden) continue;\n\n const isFacetHierarchical = Object.hasOwn(item, 'children');\n\n let labelName = item.name;\n if (isFacetHierarchical && isCollection) labelName = parseFacetObject({ facet: labelName })?.collection_title || labelName;\n\n let getValue = isFacetHierarchical ? `${value}.lvl${item.level}` : value;\n\n if (languageSettings && (languageSettings[item.value] || languageSettings[item.name])) labelName = languageSettings[item.value] || languageSettings[item.name];\n\n let counter = handleConditionNotUpdateFacetDistribution({\n value: getValue,\n clickedFacets,\n keepCounterFacets,\n allowedFilterSlider,\n filterSettings\n })\n ? item?.total || 0\n : searchFacetDistribution?.[getValue] && searchFacetDistribution?.[getValue]?.[item.value]\n ? searchFacetDistribution[getValue][item.value]\n : 0;\n\n let getLabelName = aliases[labelName] || labelName;\n delete_prefix?.map((deletePrefix: any) => {\n if (String(getLabelName).startsWith(deletePrefix)) getLabelName = String(getLabelName).replace(deletePrefix, '');\n });\n\n if (!(isHideFacetWhenZeroValue && !counter))\n facetValues.push({\n ...item,\n labelName: getLabelName,\n counter\n });\n }\n\n facetValues = sortFacets({\n facets: facetValues,\n sortingOrder: structure\n });\n\n return facetValues;\n};\n\nexport const keyOpenFilters = ({ items = [] }: { items?: any }) => {\n return items?.length\n ? items\n .map((props: any, index: number) => {\n const { value, settings } = props;\n const { collapse } = settings || {};\n\n return collapse ? null : `${value}-${index}`;\n })\n .filter((item: any) => item)\n : [];\n};\n\nexport const handleSearchResponse = async (props: {\n layoutType?: 'product-filter' | 'default';\n clickedTabIndexId?: string | number | null;\n clickedTabIndexType?: string | null;\n keyword?: string;\n sort?: any[];\n page?: any;\n limit?: any;\n isUseMultiSearch?: boolean;\n facets?: any[];\n attributesToRetrieve?: any;\n clickedFacets?: any;\n setClickedFacets?(value: React.SetStateAction<any>): void;\n allowedFilterSlider?: any[];\n hierarchicalFacetAliases?: any[];\n defaultFilterItems?: any[];\n setValueFilterPriceChange?(value: React.SetStateAction<number[]>): void;\n setValueFilterOnSaleChange?(value: React.SetStateAction<number[]>): void;\n setValueFilterSliderOthers?(value: React.SetStateAction<any>): void;\n collectionId?: string | number | '';\n hiddenTags?: [];\n showOutOfStock?: boolean;\n hierarchicalProductTypeSettings?: any;\n hierarchicalCollectionsSettings?: any;\n usePublishedFilter?: boolean;\n tabs?: any[];\n}) => {\n const {\n layoutType = 'default',\n clickedTabIndexId,\n clickedTabIndexType = 'product',\n keyword,\n sort = [],\n page = 1,\n limit = 1,\n isUseMultiSearch,\n facets,\n attributesToRetrieve = [],\n clickedFacets,\n setClickedFacets,\n allowedFilterSlider,\n hierarchicalFacetAliases,\n defaultFilterItems,\n setValueFilterPriceChange,\n setValueFilterOnSaleChange,\n setValueFilterSliderOthers,\n collectionId,\n hiddenTags,\n showOutOfStock,\n hierarchicalProductTypeSettings,\n hierarchicalCollectionsSettings,\n usePublishedFilter,\n tabs = []\n } = props;\n\n const isResultForProduct = clickedTabIndexType === 'product';\n\n const isTypeCategoryHasPublished = ({ usePublishedFilter, type }: { usePublishedFilter?: boolean; type?: any }) =>\n Boolean(usePublishedFilter && type && ['collection', 'page', 'article'].includes(type));\n\n const { separator: hierarchical_separator, hiddens: hierarchical_hiddens } = hierarchicalProductTypeSettings || {};\n const {\n separator: hierarchical_collections_separator,\n hiddens: hierarchical_collections_hiddens,\n hidden_ids: hierarchical_collections_hidden_ids,\n structure: hierarchical_collections_structure\n } = hierarchicalCollectionsSettings || {};\n\n let response: any;\n let filterProduct: any = createQueryFilter({\n facets,\n facetsQueryStringObject: clickedFacets,\n callback: (facetsQueryStringObject) => {\n setClickedFacets?.(facetsQueryStringObject);\n\n if (facetsQueryStringObject['variants.price']) setValueFilterPriceChange?.(facetsQueryStringObject['variants.price']);\n if (facetsQueryStringObject['variants.sale_percent']) setValueFilterOnSaleChange?.(facetsQueryStringObject['variants.sale_percent']);\n\n // Set value filter slider others\n allowedFilterSlider?.map((filterSlider: any) => {\n if (!filterSlider || (filterSlider && ['variants.price', 'variants.sale_percent'].includes(filterSlider))) return;\n\n if (facetsQueryStringObject[filterSlider]) setValueFilterSliderOthers?.((prevState: any) => ({ ...prevState, [filterSlider]: facetsQueryStringObject[filterSlider] }));\n });\n },\n separator: hierarchical_separator,\n separatorCollection: hierarchical_collections_separator,\n additional: [\n hiddenTags?.length ? `'tags' NOT IN ${JSON.stringify(hiddenTags)}` : null,\n collectionId ? `'collections.id' = '${collectionId}'` : null,\n !showOutOfStock ? `'availability' IN ${JSON.stringify(['in stock'])}` : null\n ],\n allowedFilterSlider,\n hierarchicalFacetAliases,\n defaultFilterItems\n });\n\n let filterCategory = '';\n if (isTypeCategoryHasPublished({ usePublishedFilter, type: clickedTabIndexType })) {\n filterCategory = DEFAULT_QUERY_PUBLISHED_FILTER;\n }\n\n let bodyProductOrCategory = isResultForProduct\n ? {\n q: keyword,\n sort,\n page,\n hitsPerPage: limit,\n facets,\n attributesToRetrieve,\n filter: filterProduct\n }\n : {\n q: keyword,\n sort,\n page,\n hitsPerPage: 12,\n filter: filterCategory\n };\n\n if (isResultForProduct && layoutType === 'product-filter') {\n response = await search(clickedTabIndexId, bodyProductOrCategory);\n } else {\n if (isUseMultiSearch) {\n let getTabs = isUseMultiSearch ? tabs : tabs.filter(({ index }: any) => index?.includes(clickedTabIndexId));\n let body = {\n queries: getTabs.map((tab: any) => {\n const { index, type } = tab;\n\n let isCurrentIndex = index.includes(clickedTabIndexId);\n let isProductIndex = type === 'product';\n\n return {\n indexUid: index,\n ...(isCurrentIndex\n ? bodyProductOrCategory\n : {\n q: keyword || '',\n hitsPerPage: 1,\n filter: isTypeCategoryHasPublished({ usePublishedFilter: usePublishedFilter, type }) ? DEFAULT_QUERY_PUBLISHED_FILTER : isProductIndex ? filterProduct : '',\n attributesToRetrieve: [],\n limit: 0,\n page: 0,\n ...(isProductIndex\n ? {\n facets\n }\n : {})\n })\n };\n })\n };\n\n response = await multiSearch(body);\n } else {\n response = await search(clickedTabIndexId, bodyProductOrCategory);\n }\n }\n\n return response;\n};\n","import React from 'react';\nimport { SelectField } from '@core/components';\n\nexport const Sort = React.memo(\n (props: {\n label?: string;\n options?: Array<{\n label: string;\n value: string;\n }>;\n clickedOption?: any;\n handleChangeOption?: any;\n overridePlaceholderOnMobile?: any;\n }) => {\n const { label = '', options = [], clickedOption = '', handleChangeOption = null, overridePlaceholderOnMobile = null } = props;\n\n return (\n <>\n {options?.length ? (\n <>\n <span className=\"sledge-instant-search__result-data-summary-select-field-sort\">{label || 'Sort by'}:</span>\n <SelectField\n align=\"end\"\n prefixLabel={\n <svg width={18} height={18} viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M12.6296 4.34737C12.9144 4.34737 13.1497 4.55898 13.1869 4.83354L13.1921 4.90987L13.192 13.7599L15.2892 11.6543C15.5083 11.4341 15.8645 11.4333 16.0847 11.6525C16.2848 11.8517 16.3037 12.1641 16.1408 12.3847L16.0865 12.4479L13.0282 15.5204C13.0097 15.5386 12.991 15.555 12.9712 15.5701L13.0282 15.5204C13.0006 15.5482 12.9708 15.5724 12.9394 15.5932C12.9285 15.6 12.9171 15.607 12.9055 15.6135C12.8946 15.62 12.8837 15.6258 12.8725 15.6311C12.8615 15.6359 12.8504 15.6408 12.8391 15.6454C12.8247 15.6515 12.8099 15.6568 12.795 15.6613C12.7862 15.6637 12.7772 15.6662 12.7681 15.6685C12.7519 15.673 12.7357 15.6763 12.7193 15.6789C12.7116 15.6798 12.7036 15.6809 12.6955 15.6819C12.677 15.6844 12.6587 15.6857 12.6404 15.686C12.6368 15.6857 12.6332 15.6857 12.6296 15.6857L12.6186 15.686C12.6003 15.6857 12.582 15.6844 12.5637 15.6823L12.6296 15.6857C12.5989 15.6857 12.5689 15.6833 12.5396 15.6785C12.5233 15.6763 12.5071 15.673 12.4909 15.6689C12.4824 15.6663 12.4738 15.6639 12.4654 15.6614C12.4493 15.6569 12.4332 15.6512 12.4174 15.6448C12.4088 15.6408 12.4005 15.6372 12.3922 15.6333C12.3793 15.6278 12.3663 15.6211 12.3535 15.6139C12.342 15.6069 12.3307 15.6 12.3196 15.5926C12.3109 15.5875 12.3024 15.5815 12.294 15.5752L12.288 15.5701C12.2682 15.555 12.2494 15.5386 12.2318 15.5209L12.2308 15.5204L9.1725 12.4479C8.95334 12.2278 8.95416 11.8716 9.17434 11.6525C9.3745 11.4532 9.68704 11.4358 9.90687 11.5997L9.96983 11.6543L12.067 13.7614L12.0671 4.90987C12.0671 4.59921 12.3189 4.34737 12.6296 4.34737ZM5.18325 2.3122L5.19421 2.31189C5.21254 2.31224 5.23085 2.31348 5.24908 2.31562L5.18325 2.3122C5.21389 2.3122 5.24396 2.31465 5.27328 2.31937C5.28931 2.32156 5.3054 2.32487 5.32136 2.32889C5.33074 2.33164 5.3403 2.33433 5.34975 2.33725C5.36452 2.34142 5.37882 2.34648 5.39293 2.35213C5.40313 2.35668 5.41346 2.36119 5.42362 2.366C5.4357 2.37123 5.4476 2.37737 5.45931 2.38397C5.46933 2.39014 5.47926 2.39616 5.48898 2.40246C5.49898 2.40841 5.50899 2.41537 5.51882 2.42269L5.582 2.47746L8.64033 5.54996C8.85949 5.77013 8.85867 6.12629 8.63849 6.34545C8.43833 6.54469 8.12579 6.56212 7.90596 6.39822L7.843 6.34361L5.74525 4.23564L5.74575 13.088C5.74575 13.3987 5.49391 13.6505 5.18325 13.6505C4.89848 13.6505 4.66313 13.4389 4.62588 13.1644L4.62075 13.088L4.62025 4.23639L2.52367 6.34361C2.32443 6.54377 2.01197 6.56265 1.79139 6.39977L1.72817 6.34545C1.52801 6.14621 1.50914 5.83376 1.67202 5.61317L1.72633 5.54996L4.78467 2.47746L4.81779 2.44709C4.82557 2.44043 4.83353 2.43399 4.84167 2.42776L4.78467 2.47746C4.81226 2.44974 4.84202 2.42549 4.87341 2.40473C4.88436 2.39791 4.89574 2.39094 4.90738 2.38438C4.91819 2.37787 4.92917 2.37215 4.9403 2.36682C4.95128 2.36196 4.96242 2.35706 4.97375 2.35251C4.98814 2.34636 5.00289 2.34115 5.0178 2.33657C5.02687 2.33414 5.03616 2.33154 5.04555 2.32918C5.06066 2.32503 5.07593 2.32186 5.09129 2.31932C5.10053 2.31817 5.10959 2.31691 5.11871 2.31586C5.13607 2.31348 5.15388 2.31227 5.17171 2.3119C5.17564 2.31224 5.17944 2.3122 5.18325 2.3122Z\"\n fill=\"black\"\n />\n </svg>\n }\n options={options.map((item: any) => {\n const { label, value } = item;\n return {\n label: label,\n value: value\n };\n })}\n value={clickedOption}\n onChange={({ value }: any) => handleChangeOption?.(value)}\n overridePlaceholderOnMobile={overridePlaceholderOnMobile}\n className=\"sledge-instant-search__result-select-field-sort\"\n />\n </>\n ) : null}\n </>\n );\n }\n);\n","import React from 'react';\nimport { SelectField } from '@core/components';\n\nexport const Limit = React.memo(\n (props: {\n label?: string;\n options?: Array<{\n label: string;\n value: string;\n }>;\n clickedOption?: any;\n handleChangeOption?: any;\n overridePlaceholderOnMobile?: any;\n }) => {\n const { label = '', options = [], clickedOption = '', handleChangeOption = null, overridePlaceholderOnMobile = null } = props;\n\n return (\n <>\n {options?.length ? (\n <>\n <span className=\"sledge-instant-search__result-data-summary-select-field-limit\">{label || 'Limit'}:</span>\n <SelectField\n align=\"end\"\n options={options.map((item: any) => {\n return {\n label: item,\n value: Number(item)\n };\n })}\n value={Number(clickedOption)}\n onChange={({ value }: any) => handleChangeOption?.(value)}\n overridePlaceholderOnMobile={overridePlaceholderOnMobile}\n className=\"sledge-instant-search__result-select-field-limit\"\n />\n </>\n ) : null}\n </>\n );\n }\n);\n","import React from 'react';\nimport { SearchIcon, SearchInputField } from '@core/components';\n\nexport const Search = React.memo((props: { placeholder?: string; value?: string; handleChangeSearch?: any }) => {\n const { placeholder = '', value = '', handleChangeSearch = null } = props;\n\n return (\n <SearchInputField\n type=\"text\"\n icon={<SearchIcon width={18} height={18} color=\"#868686\" />}\n placeholder={placeholder || 'Search products...'}\n value={value || ''}\n onChange={({ value }: any) => handleChangeSearch?.(value)}\n onResetField={() => handleChangeSearch?.('')}\n className=\"sledge-instant-search__result-data-keyword-form\"\n withClearField\n />\n );\n});\n","export const Tab = (props: {\n items?: Array<{\n name: string;\n index: string;\n type: string;\n total: number;\n }>;\n layoutType?: 'product-filter' | 'default';\n clickedTabIndexId?: string | number | null;\n handleChangeTab?: any;\n}) => {\n const { items = [], layoutType = 'default', clickedTabIndexId = null, handleChangeTab = null } = props;\n\n return (\n <>\n {layoutType === 'default' && items?.length ? (\n <div className=\"sledge-instant-search__result-tab\">\n <ul className=\"sledge-instant-search__result-tab-list\">\n {items.map((item: any) => {\n const { name, index, type, total } = item;\n\n let isActive = clickedTabIndexId === index;\n\n return (\n <li\n onClick={(e) =>\n handleChangeTab?.({\n id: index,\n name,\n type\n })\n }\n className={`${isActive ? 'sledge-instant-search__result-tab-list-item-active' : ''}`}\n key={index}\n >\n {name}\n <span className=\"sledge-instant-search__result-tab-total\">{total || 0}</span>\n </li>\n );\n })}\n </ul>\n </div>\n ) : null}\n </>\n );\n};\n","import React from 'react';\nimport { useIntersectionObserver } from '@core/hooks';\nimport { Button, Pagination, Progress } from '@core/components';\nimport { OBJECT_DATA_STRING_KEY } from '@core/lib/const';\n\nconst ButtonLoadMore = ({ text, onClick, isInfiniteScroll, currentPage, totalPage, totalResult, pageInfo: pageInfoProp, isVisibleLoadMore, ...otherProps }: any) => {\n const [ref, entry] = useIntersectionObserver({\n threshold: 0,\n root: null,\n rootMargin: '0px'\n });\n\n const [pageInfo, setPageInfo] = React.useState<any>(null);\n\n const handlePageInfo = () => {\n const defaultPageInfo = (\n <>\n Page {currentPage} of {totalPage} - total {totalResult} result\n </>\n );\n\n if (pageInfoProp) {\n pageInfoProp = pageInfoProp.replaceAll(OBJECT_DATA_STRING_KEY.CURRENT_PAGE, String(currentPage));\n pageInfoProp = pageInfoProp.replaceAll(OBJECT_DATA_STRING_KEY.TOTAL_PAGE, String(totalPage));\n pageInfoProp = pageInfoProp.replaceAll(OBJECT_DATA_STRING_KEY.TOTAL_RESULT, String(totalResult));\n }\n\n setPageInfo(pageInfoProp ? pageInfoProp : defaultPageInfo);\n };\n\n React.useEffect(() => {\n handlePageInfo();\n\n if (isInfiniteScroll && isVisibleLoadMore && entry?.isIntersecting) {\n const delay = setTimeout(() => onClick?.(), 250);\n return () => clearTimeout(delay);\n }\n }, [entry]);\n\n return (\n <div className=\"sledge__pagination\" ref={ref}>\n {entry?.isIntersecting && (\n <div className=\"sledge-instant-search__load-more\">\n <span>{pageInfo}</span>\n <Progress value={currentPage} total={totalPage} delay={0} />\n {isVisibleLoadMore && (\n <Button type=\"button\" role=\"button\" colorType=\"light\" onClick={onClick} {...otherProps}>\n {text}\n </Button>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport const PaginationOrLoadMore = (props: {\n type?: string;\n isLoadMore?: boolean;\n isLoadingButtonLoadMore?: boolean;\n handleLoadMore?: any;\n buttonLoadMoreText?: string;\n isInfiniteScroll?: boolean;\n currentPage?: number;\n totalPage?: number;\n totalResult?: any;\n pageInfo?: any;\n isVisibleLoadMore?: boolean;\n handlePageChange?: any;\n}) => {\n const {\n type,\n isLoadMore = false,\n isLoadingButtonLoadMore = false,\n handleLoadMore = null,\n buttonLoadMoreText = 'Load More',\n isInfiniteScroll = false,\n currentPage = 1,\n totalPage = 1,\n totalResult = 0,\n pageInfo = null,\n isVisibleLoadMore = false,\n handlePageChange = null\n } = props;\n\n return (\n <>\n {isLoadMore ? (\n <ButtonLoadMore\n disabled={isLoadingButtonLoadMore}\n onClick={handleLoadMore}\n style={{\n ...(isLoadingButtonLoadMore && {\n cursor: 'wait'\n })\n }}\n text={buttonLoadMoreText}\n isInfiniteScroll={isInfiniteScroll}\n currentPage={currentPage}\n totalPage={totalPage}\n totalResult={totalResult}\n pageInfo={pageInfo}\n isVisibleLoadMore={isVisibleLoadMore}\n />\n ) : (\n <Pagination type={type} currentPage={currentPage} totalPage={totalPage} totalResult={totalResult} onChange={(page: number) => handlePageChange?.(page)} pageInfo={pageInfo} />\n )}\n </>\n );\n};\n","import React from 'react';\nimport { HIERARCHICAL_FACET_OBJECT_ALIASES } from '@core/lib/const';\nimport { shopifyFormatMoney } from '@core/lib/helper';\nimport { parseFacetObject } from '@react-instant-search/components/SearchResultWidget/utils';\n\nexport interface IFacetBlockSelectedProps {\n defaultFilterItems?: any[];\n languageSettings?: any;\n generalDataSettings?: any;\n hierarchicalCollectionsSettings?: any;\n hierarchicalProductTypeSettings?: any;\n displaySettings?: any;\n settings?: any;\n handleFilterChange?(props: any): void;\n allowedFilterSlider?: any[];\n}\n\nexport const FacetBlockSelected = React.memo(\n (\n props: {\n label: any;\n name: any;\n value: any;\n index: number;\n } & IFacetBlockSelectedProps\n ) => {\n const {\n label,\n name,\n value: valueProp,\n index,\n defaultFilterItems = [],\n generalDataSettings = {},\n languageSettings = {},\n hierarchicalCollectionsSettings = {},\n hierarchicalProductTypeSettings = {},\n displaySettings = {},\n settings = {},\n handleFilterChange,\n allowedFilterSlider\n } = props;\n\n const { money_format } = generalDataSettings || {};\n const { separator: hierarchical_collections_separator } = hierarchicalCollectionsSettings || {};\n const {\n color: filter_option_color,\n font_size: filter_option_font_size,\n font_weight: filter_option_font_weight,\n text_transform: filter_option_text_transform\n } = displaySettings?.filter?.option || {};\n\n const filter_option_style = {\n ...(filter_option_color && { color: filter_option_color }),\n ...(filter_option_font_size && { fontSize: filter_option_font_size }),\n ...(filter_option_font_weight && { fontWeight: filter_option_font_weight }),\n ...(filter_option_text_transform && { textTransform: filter_option_text_transform })\n };\n\n let value = valueProp;\n\n // Parse facet object\n if (name === HIERARCHICAL_FACET_OBJECT_ALIASES.collections) {\n if (String(value)?.includes(hierarchical_collections_separator)) {\n let arrValue = String(value).split(hierarchical_collections_separator);\n value = arrValue?.length ? arrValue.map((item: any) => parseFacetObject({ facet: item })?.collection_title || item).join(hierarchical_collections_separator) : valueProp;\n } else {\n value = parseFacetObject({ facet: valueProp })?.collection_title || valueProp;\n }\n }\n\n let valueText = languageSettings?.[value] || value;\n let isRange = allowedFilterSlider?.includes(name);\n let getLabel = label;\n let getSettings: any = {};\n let isPriceValue = false;\n let isSalePercent = false;\n if (name === 'variants.price') {\n isPriceValue = true;\n } else if (name === 'variants.sale_percent') {\n isSalePercent = true;\n }\n\n if (defaultFilterItems?.length) {\n defaultFilterItems.map((defaultFilterItem) => {\n const { label: defaultFilterItemLabel, items, settings: defaultFilterItemSettings } = defaultFilterItem;\n\n if (items?.includes(value)) {\n getLabel = defaultFilterItemLabel;\n getSettings = defaultFilterItemSettings;\n }\n });\n }\n\n getSettings?.delete_prefix?.map((deletePrefix: any) => {\n if (String(valueText).startsWith(deletePrefix)) valueText = String(valueText).replace(deletePrefix, '');\n });\n\n if (isRange) {\n // Detect same value on array\n const getValueRange = new Set(value).size === 1 ? [value[0]] : value;\n\n valueText = getValueRange?.map((valueItem: any) => (isPriceValue ? shopifyFormatMoney(valueItem * 100, money_format) : isSalePercent ? `${valueItem}%` : valueItem))?.join(' - ');\n } else {\n valueText = String(valueText)?.replaceAll(hierarchical_collections_separator, ' > ');\n }\n\n valueText = String(valueText)?.replaceAll('_', ' ');\n\n let aliases: any = {};\n let aliasValue: string = '';\n let aliasSeparator = '';\n if (name === HIERARCHICAL_FACET_OBJECT_ALIASES.collections) {\n aliases = settings.collectionAliases || {};\n aliasSeparator = hierarchicalCollectionsSettings.separator;\n }\n if (name === HIERARCHICAL_FACET_OBJECT_ALIASES.product_type) {\n aliases = settings.productTypeAliases || {};\n aliasSeparator = hierarchicalProductTypeSettings.separator;\n }\n if ([HIERARCHICAL_FACET_OBJECT_ALIASES.collections, HIERARCHICAL_FACET_OBJECT_ALIASES.product_type].includes(name) && aliasSeparator) {\n const splitedValues = value.split(aliasSeparator);\n let newSplitedValues = [];\n for (const splitedValue of splitedValues) {\n newSplitedValues.push(aliases[splitedValue.trim()] || splitedValue);\n }\n aliasValue = newSplitedValues.join(' > ');\n }\n\n return (\n <div key={index} className=\"sledge-instant-search__result-filter-item-refine-selected\" style={filter_option_style}>\n <span\n className=\"sledge-instant-search__result-filter-item-title-refine-list\"\n data-value={`${getLabel}: ${aliasValue || valueText}`}\n dangerouslySetInnerHTML={{ __html: `${getLabel}: ${aliasValue || valueText}` }}\n ></span>\n <span\n className=\"sledge-instant-search__result-filter-item-refine-title-clear\"\n onClick={() =>\n handleFilterChange?.({\n parentId: name,\n value\n })\n }\n >\n <svg width={12} height={12} viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n </span>\n </div>\n );\n }\n);\n","import { motion } from 'framer-motion';\nimport { stringToSlug } from '@core/lib/helper';\nimport { ROTATE_FILTER_ARROW_ANIMATION } from '@core/lib/animation';\nimport { ChevronArrowDownIcon, SkeletonLoading } from '@core/components';\nimport { FacetBlockSelected, IFacetBlockSelectedProps } from './FacetBlockSelected';\n\nexport interface IFilterVerticalProps extends IFacetBlockSelectedProps {\n items?: any[];\n filterSettings?: any;\n filterTitleStyle?: any;\n handleOpenFilterVertical?: any;\n clickedOpenFilters?: any;\n filterLayoutType?: 'standard' | 'flyout';\n layoutType?: 'product-filter' | 'default';\n collectionId?: string | number | '';\n dataClickedFacets?: any;\n handleFilterReset?: any;\n isSkeleton?: boolean;\n}\n\nconst FilterItem = (props: {\n filter: {\n value: any;\n label: string;\n display: string;\n };\n filterSettings(props: {\n filter: {\n value: any;\n label: string;\n display: string;\n indexFilter: number;\n };\n scrollElementSelector?: string;\n }): { isRender: boolean; classesUlElement: string[]; getFacetComponent(props?: { ulClasses?: string }): any; isLastIndex: boolean };\n indexFilter: number;\n filterTitleStyle?: any;\n handleOpenFilterVertical(id: string | number): void;\n clickedOpenFilters: any;\n filterLayoutType: 'standard' | 'flyout';\n layoutType?: 'product-filter' | 'default';\n collectionId?: string | number | '';\n}) => {\n const { filter, filterSettings, indexFilter, filterTitleStyle = {}, handleOpenFilterVertical, clickedOpenFilters, filterLayoutType, layoutType, collectionId } = props;\n\n const { value, label } = filter;\n\n const getValue = `${value}-${indexFilter}`;\n\n const filterItemId = `filter-${indexFilter}-${layoutType}-${collectionId || 'all'}-${filterLayoutType}-${stringToSlug(getValue)}`;\n\n const { isRender, classesUlElement, getFacetComponent } = filterSettings({\n filter: {\n ...filter,\n indexFilter\n },\n scrollElementSelector: `#${filterItemId} .sledge-instant-search__result-filter-item-list`\n });\n\n return isRender ? (\n <div className=\"sledge-instant-search__result-filter-item\" id={filterItemId} key={indexFilter}>\n <div className=\"sledge-instant-search__result-filter-item-title\" onClick={() => handleOpenFilterVertical(getValue)}>\n <span className=\"sledge-instant-search__result-filter-title\" style={filterTitleStyle}>\n {label}\n </span>\n <motion.div initial={false} animate={clickedOpenFilters.includes(getValue) ? 'open' : 'closed'} variants={ROTATE_FILTER_ARROW_ANIMATION}>\n <ChevronArrowDownIcon width={15} height={15} color=\"#000000\" />\n </motion.div>\n </div>\n {clickedOpenFilters.includes(getValue) && (\n <div className=\"sledge-instant-search__result-filter-item-wrapper\">\n {getFacetComponent({\n ulClasses: classesUlElement.join(' ')\n })}\n </div>\n )}\n </div>\n ) : null;\n};\n\nconst FilterSelected = (\n props: {\n items?: any[];\n handleFilterReset?: any;\n } & IFacetBlockSelectedProps\n) => {\n const {\n items = [],\n handleFilterReset = null,\n defaultFilterItems = [],\n generalDataSettings = {},\n languageSettings = {},\n hierarchicalCollectionsSettings = {},\n hierarchicalProductTypeSettings = {},\n displaySettings = {},\n settings = {},\n handleFilterChange,\n allowedFilterSlider\n } = props;\n\n const { filter: language_filter, clear_filter: language_clear_filter } = languageSettings || {};\n\n return (\n <>\n {Boolean(items?.length && displaySettings?.filter?.show_refine_by_block) ? (\n <div className=\"sledge-instant-search__result-filter-item\">\n <div className=\"sledge-instant-search__result-filter-item-title-refine\">\n <strong className=\"sledge-instant-search__result-filter-item-title-refine-heading\">{language_filter || 'Filter'}</strong>\n <span className=\"sledge-instant-search__result-filter-item-title-refine-clear\" onClick={handleFilterReset}>\n {language_clear_filter || 'Clear All'}\n </span>\n </div>\n <div className=\"sledge-instant-search__result-filter-item-refine-selected-flex\">\n {items.map((item: any, index: number) => {\n const { label, name, value } = item;\n\n return (\n <FacetBlockSelected\n label={label}\n name={name}\n value={value}\n index={index}\n defaultFilterItems={defaultFilterItems}\n generalDataSettings={generalDataSettings}\n languageSettings={languageSettings}\n hierarchicalCollectionsSettings={hierarchicalCollectionsSettings}\n hierarchicalProductTypeSettings={hierarchicalProductTypeSettings}\n displaySettings={displaySettings}\n settings={settings}\n handleFilterChange={handleFilterChange}\n allowedFilterSlider={allowedFilterSlider}\n />\n );\n })}\n </div>\n </div>\n ) : null}\n </>\n );\n};\n\nexport const FilterVertical = (props: IFilterVerticalProps) => {\n const {\n items = [],\n filterSettings = null,\n filterTitleStyle = {},\n handleOpenFilterVertical = null,\n clickedOpenFilters = [],\n filterLayoutType = 'standard',\n layoutType = 'default',\n collectionId = '',\n dataClickedFacets = [],\n handleFilterReset,\n isSkeleton,\n defaultFilterItems = [],\n generalDataSettings = {},\n languageSettings = {},\n hierarchicalCollectionsSettings = {},\n hierarchicalProductTypeSettings = {},\n displaySettings = {},\n settings = {},\n handleFilterChange,\n allowedFilterSlider\n } = props;\n\n return (\n <div className=\"sledge-instant-search__result-filter\">\n {isSkeleton ? (\n <>\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: '8px',\n justifyContent: 'space-between',\n marginBottom: '23px'\n }}\n >\n <SkeletonLoading.Item width=\"117px\" height=\"28px\" color=\"lighten\" rounded=\"md\" />\n <SkeletonLoading.Item width=\"80px\" height=\"28px\" color=\"lighten\" rounded=\"md\" />\n </div>\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '18px'\n }}\n />\n {[1, 2, 3].map((index: number) => (\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n key={index}\n style={{\n maxWidth: '163px',\n marginBottom: '9px'\n }}\n />\n ))}\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '163px',\n marginBottom: '18px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '14px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '163px',\n marginBottom: '9px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '163px',\n marginBottom: '17px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '38px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '35px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '12px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '163px',\n marginBottom: '9px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '163px',\n marginBottom: '20px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '12px'\n }}\n />\n {[1, 2, 3].map((index: number) => (\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n key={index}\n style={{\n maxWidth: '163px',\n marginBottom: '9px'\n }}\n />\n ))}\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '11px'\n }}\n />\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: '12px'\n }}\n >\n {[1, 2, 3, 4, 5, 6, 7, 8, 9].map((index: number) => (\n <SkeletonLoading.Item width=\"34px\" height=\"34px\" color=\"lighten\" rounded=\"full\" key={index} />\n ))}\n </div>\n </>\n ) : items?.length ? (\n <>\n <FilterSelected\n items={dataClickedFacets}\n handleFilterReset={handleFilterReset}\n defaultFilterItems={defaultFilterItems}\n generalDataSettings={generalDataSettings}\n languageSettings={languageSettings}\n hierarchicalCollectionsSettings={hierarchicalCollectionsSettings}\n hierarchicalProductTypeSettings={hierarchicalProductTypeSettings}\n displaySettings={displaySettings}\n settings={settings}\n handleFilterChange={handleFilterChange}\n allowedFilterSlider={allowedFilterSlider}\n />\n\n {items.map((filter: any, indexFilter) => (\n <FilterItem\n filter={filter}\n filterSettings={filterSettings}\n indexFilter={indexFilter}\n filterTitleStyle={filterTitleStyle}\n handleOpenFilterVertical={handleOpenFilterVertical}\n clickedOpenFilters={clickedOpenFilters}\n filterLayoutType={filterLayoutType}\n layoutType={layoutType}\n collectionId={collectionId}\n />\n ))}\n </>\n ) : null}\n </div>\n );\n};\n","import React from 'react';\nimport { motion } from 'framer-motion';\nimport { stringToSlug } from '@core/lib/helper';\nimport { ROTATE_FILTER_ARROW_ANIMATION } from '@core/lib/animation';\nimport { Button, ChevronArrowDownIcon, Popover, SkeletonLoading } from '@core/components';\nimport { FacetBlockSelected, IFacetBlockSelectedProps } from './FacetBlockSelected';\n\nexport interface IFilterHorizontalProps extends IFacetBlockSelectedProps {\n items?: any[];\n filterSettings?: any;\n deviceType?: 'mobile' | 'desktop';\n clickedOpenFilterHorizontalId?: string | number | null | '';\n setClickedOpenFilterHorizontalId?(value: React.SetStateAction<string | number | null | ''>): void;\n clickedOpenFilterHorizontalMobileId?: string | number | null | '';\n setClickedOpenFilterHorizontalMobileId?(value: React.SetStateAction<string | number | null | ''>): void;\n layoutType?: 'product-filter' | 'default';\n collectionId?: string | number | '';\n dataClickedFacets?: any;\n handleFilterReset?: any;\n isSkeleton?: boolean;\n isHorizontalGroup?: boolean;\n showOnlyItems?: boolean;\n components?:\n | {\n sort?: any;\n }\n | any;\n}\n\nconst FilterItem = (props: {\n filter: {\n value: any;\n label: string;\n display: string;\n };\n filterSettings(props: {\n filter: {\n value: any;\n label: string;\n display: string;\n indexFilter: number;\n };\n scrollElementSelector?: string;\n }): { isRender: boolean; classesUlElement: string[]; getFacetComponent(props?: { ulClasses?: string }): any; isLastIndex: boolean };\n indexFilter: number;\n deviceType: 'mobile' | 'desktop';\n clickedOpenFilterHorizontalId?: string | number | null | '';\n setClickedOpenFilterHorizontalId?(value: React.SetStateAction<string | number | null | ''>): void;\n clickedOpenFilterHorizontalMobileId?: string | number | null | '';\n setClickedOpenFilterHorizontalMobileId?(value: React.SetStateAction<string | number | null | ''>): void;\n allowedFilter?: any[];\n layoutType?: 'product-filter' | 'default';\n collectionId?: string | number | '';\n isHorizontalGroup?: boolean;\n}) => {\n const {\n filter,\n filterSettings,\n indexFilter,\n deviceType,\n clickedOpenFilterHorizontalId,\n setClickedOpenFilterHorizontalId,\n clickedOpenFilterHorizontalMobileId,\n setClickedOpenFilterHorizontalMobileId,\n allowedFilter = [],\n layoutType,\n collectionId,\n isHorizontalGroup = false\n } = props;\n\n const { value, label } = filter;\n\n const filterItemId = `filter-${indexFilter}-${layoutType}-${collectionId || 'all'}-${deviceType}-${stringToSlug(value)}`;\n\n const getValueOpenFilterId = deviceType === 'mobile' ? clickedOpenFilterHorizontalMobileId : clickedOpenFilterHorizontalId;\n const valueOpenFilterHorizontal = `${value}-${indexFilter}`;\n\n const isOpenFilterHorizontal = getValueOpenFilterId === valueOpenFilterHorizontal;\n\n const { isRender, classesUlElement, getFacetComponent, isLastIndex } = filterSettings({\n filter: {\n ...filter,\n indexFilter\n },\n scrollElementSelector: `#${filterItemId} .sledge-instant-search__result-filter-item-list`\n });\n\n return isRender ? (\n <React.Fragment key={indexFilter}>\n <Popover\n trigger={\n <Button\n type=\"button\"\n onClick={() => {\n if (deviceType === 'mobile') {\n setClickedOpenFilterHorizontalMobileId?.(valueOpenFilterHorizontal);\n } else {\n setClickedOpenFilterHorizontalId?.(valueOpenFilterHorizontal);\n }\n }}\n className={\n isHorizontalGroup\n ? 'sledge-instant-search__result-filter-trigger-horizontal-group'\n : `${isLastIndex ? (allowedFilter?.length % 2 ? 'sledge-instant-search__result-filter-trigger-odd' : 'sledge-instant-search__result-filter-trigger-even') : ''}`\n }\n >\n {label}\n <motion.div initial=\"closed\" animate={isOpenFilterHorizontal ? 'open' : 'closed'} variants={ROTATE_FILTER_ARROW_ANIMATION} className=\"sort-trigger-icon\">\n <ChevronArrowDownIcon width={20} height={20} color=\"#000000\" />\n </motion.div>\n </Button>\n }\n content={\n <div className=\"sledge-instant-search__result-filter-horizontal-facet\" id={filterItemId}>\n {isOpenFilterHorizontal && (\n <div className=\"sledge-instant-search__result-filter-item-wrapper\">\n {getFacetComponent({\n ulClasses: classesUlElement.join(' ')\n })}\n </div>\n )}\n </div>\n }\n withOpenState\n isOpen={isOpenFilterHorizontal}\n setIsOpen={(open) => {\n if (deviceType === 'mobile') {\n setClickedOpenFilterHorizontalMobileId?.(!open ? '' : valueOpenFilterHorizontal);\n } else {\n setClickedOpenFilterHorizontalId?.(!open ? '' : valueOpenFilterHorizontal);\n }\n }}\n hideCloseIcon\n align=\"center\"\n className=\"sledge-instant-search__filter-horizontal-facet-content\"\n customArrow={`<svg style=\"transform: rotate(180deg); margin-bottom: 3px; stroke-dasharray: 0,0,36;\" width=\"44\" height=\"12\" viewBox=\"0 0 44 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M23.2222 1.99825e-06C23.2222 11.9998 4.88979 11.9999 0.000354767 12L23.2222 12L44 12C23.2222 12 23.2222 1.99825e-06 23.2222 1.99825e-06Z\" fill=\"white\" stroke=\"#393d4e\" stroke-width=\"1px\" /></svg>`}\n />\n </React.Fragment>\n ) : null;\n};\n\nconst FilterSelected = (\n props: {\n items?: any[];\n handleFilterReset?: any;\n } & IFacetBlockSelectedProps\n) => {\n const {\n items = [],\n handleFilterReset = null,\n defaultFilterItems = [],\n generalDataSettings = {},\n languageSettings = {},\n hierarchicalCollectionsSettings = {},\n hierarchicalProductTypeSettings = {},\n displaySettings = {},\n settings = {},\n handleFilterChange,\n allowedFilterSlider\n } = props;\n\n const { clear_filter: language_clear_filter } = languageSettings || {};\n\n return (\n <>\n {Boolean(items?.length && displaySettings?.filter?.show_refine_by_block) ? (\n <div className=\"sledge-instant-search__result-filter-horizontal\">\n <div className=\"sledge-instant-search__result-filter-horizontal-refine-item sledge-instant-search__result-filter-horizontal-refine-item-clear-all\" onClick={handleFilterReset}>\n {language_clear_filter || 'Clear All'}\n </div>\n {items.map((item: any, index: number) => {\n const { label, name, value } = item;\n\n return (\n <FacetBlockSelected\n label={label}\n name={name}\n value={value}\n index={index}\n defaultFilterItems={defaultFilterItems}\n generalDataSettings={generalDataSettings}\n languageSettings={languageSettings}\n hierarchicalCollectionsSettings={hierarchicalCollectionsSettings}\n hierarchicalProductTypeSettings={hierarchicalProductTypeSettings}\n displaySettings={displaySettings}\n settings={settings}\n handleFilterChange={handleFilterChange}\n allowedFilterSlider={allowedFilterSlider}\n />\n );\n })}\n </div>\n ) : null}\n </>\n );\n};\n\nexport const FilterHorizontal = (props: IFilterHorizontalProps) => {\n const {\n items = [],\n filterSettings = null,\n deviceType = 'desktop',\n clickedOpenFilterHorizontalId,\n setClickedOpenFilterHorizontalId,\n clickedOpenFilterHorizontalMobileId,\n setClickedOpenFilterHorizontalMobileId,\n layoutType = 'default',\n collectionId = '',\n dataClickedFacets = [],\n handleFilterReset,\n isSkeleton,\n defaultFilterItems = [],\n generalDataSettings = {},\n languageSettings = {},\n hierarchicalCollectionsSettings = {},\n hierarchicalProductTypeSettings = {},\n displaySettings = {},\n settings = {},\n handleFilterChange,\n showOnlyItems = false,\n components = {},\n isHorizontalGroup = false,\n allowedFilterSlider\n } = props;\n\n const { sort = null } = components;\n\n const wrapperAdditionalProps = {\n ...(isHorizontalGroup && { 'horizontal-group': '' })\n };\n\n return (\n <>\n {isSkeleton ? (\n <div className=\"sledge-instant-search__result-filter-horizontal-skeleton\" {...wrapperAdditionalProps}>\n {[1, 2, 3, 4, 5, 6, 7].map((index: number) => (\n <SkeletonLoading.Item width=\"106px\" height=\"42px\" rounded=\"md\" color=\"lighten\" key={index} />\n ))}\n </div>\n ) : items?.length ? (\n <div className=\"sledge-instant-search__result-filter-horizontal-wrapper\" {...wrapperAdditionalProps}>\n <div\n className={`sledge-instant-search__result-filter-horizontal ${\n isHorizontalGroup ? 'sledge-instant-search__result-filter-flex-horizontal-group' : 'sledge-instant-search__result-filter-horizontal-component'\n }`}\n >\n {items.map((filter: any, indexFilter) => (\n <FilterItem\n filter={filter}\n filterSettings={filterSettings}\n indexFilter={indexFilter}\n deviceType={deviceType}\n clickedOpenFilterHorizontalId={clickedOpenFilterHorizontalId}\n setClickedOpenFilterHorizontalId={setClickedOpenFilterHorizontalId}\n clickedOpenFilterHorizontalMobileId={clickedOpenFilterHorizontalMobileId}\n setClickedOpenFilterHorizontalMobileId={setClickedOpenFilterHorizontalMobileId}\n allowedFilter={items}\n layoutType={layoutType}\n collectionId={collectionId}\n isHorizontalGroup={isHorizontalGroup}\n />\n ))}\n <div className=\"sledge-instant-search__result-filter-horizontal-sort\">{sort}</div>\n </div>\n\n {showOnlyItems ? null : (\n <FilterSelected\n items={dataClickedFacets}\n handleFilterReset={handleFilterReset}\n defaultFilterItems={defaultFilterItems}\n generalDataSettings={generalDataSettings}\n languageSettings={languageSettings}\n hierarchicalCollectionsSettings={hierarchicalCollectionsSettings}\n hierarchicalProductTypeSettings={hierarchicalProductTypeSettings}\n displaySettings={displaySettings}\n settings={settings}\n handleFilterChange={handleFilterChange}\n allowedFilterSlider={allowedFilterSlider}\n />\n )}\n </div>\n ) : null}\n </>\n );\n};\n","import { SkeletonLoading } from '@core/components';\nimport { FacetBlockSelected, IFacetBlockSelectedProps } from './FacetBlockSelected';\n\nexport interface IFilterActiveProps extends IFacetBlockSelectedProps {\n items?: any[];\n deviceType?: 'mobile' | 'desktop';\n dataClickedFacets?: any;\n handleFilterReset?: any;\n isSkeleton?: boolean;\n}\n\nconst FilterSelected = (\n props: {\n items?: any[];\n handleFilterReset?: any;\n } & IFacetBlockSelectedProps\n) => {\n const {\n items = [],\n handleFilterReset = null,\n defaultFilterItems = [],\n generalDataSettings = {},\n languageSettings = {},\n hierarchicalCollectionsSettings = {},\n hierarchicalProductTypeSettings = {},\n displaySettings = {},\n settings = {},\n handleFilterChange,\n allowedFilterSlider\n } = props;\n\n const { clear_filter: language_clear_filter } = languageSettings || {};\n\n return (\n <>\n {Boolean(items?.length && displaySettings?.filter?.show_refine_by_block) ? (\n <div className=\"sledge-instant-search__result-filter-horizontal sledge-instant-search__result-filter-active\">\n <div className=\"sledge-instant-search__result-filter-horizontal-refine-item sledge-instant-search__result-filter-horizontal-refine-item-clear-all\" onClick={handleFilterReset}>\n {language_clear_filter || 'Clear All'}\n </div>\n {items.map((item: any, index: number) => {\n const { label, name, value } = item;\n\n return (\n <FacetBlockSelected\n label={label}\n name={name}\n value={value}\n index={index}\n defaultFilterItems={defaultFilterItems}\n generalDataSettings={generalDataSettings}\n languageSettings={languageSettings}\n hierarchicalCollectionsSettings={hierarchicalCollectionsSettings}\n hierarchicalProductTypeSettings={hierarchicalProductTypeSettings}\n displaySettings={displaySettings}\n settings={settings}\n handleFilterChange={handleFilterChange}\n allowedFilterSlider={allowedFilterSlider}\n />\n );\n })}\n </div>\n ) : null}\n </>\n );\n};\n\nexport const FilterActive = (props: IFilterActiveProps) => {\n const {\n items = [],\n dataClickedFacets = [],\n handleFilterReset,\n isSkeleton,\n defaultFilterItems = [],\n generalDataSettings = {},\n languageSettings = {},\n hierarchicalCollectionsSettings = {},\n hierarchicalProductTypeSettings = {},\n displaySettings = {},\n settings = {},\n handleFilterChange,\n allowedFilterSlider\n } = props;\n\n return (\n <>\n {isSkeleton ? (\n <div className=\"sledge-instant-search__result-filter-horizontal-skeleton\">\n {[1, 2, 3, 4, 5, 6, 7].map((index: number) => (\n <SkeletonLoading.Item width=\"106px\" height=\"42px\" rounded=\"md\" color=\"lighten\" key={index} />\n ))}\n </div>\n ) : items?.length ? (\n <div className=\"sledge-instant-search__result-filter-horizontal-wrapper sledge-instant-search__result-filter-active-wrapper\">\n <FilterSelected\n items={dataClickedFacets}\n handleFilterReset={handleFilterReset}\n defaultFilterItems={defaultFilterItems}\n generalDataSettings={generalDataSettings}\n languageSettings={languageSettings}\n hierarchicalCollectionsSettings={hierarchicalCollectionsSettings}\n hierarchicalProductTypeSettings={hierarchicalProductTypeSettings}\n displaySettings={displaySettings}\n settings={settings}\n handleFilterChange={handleFilterChange}\n allowedFilterSlider={allowedFilterSlider}\n />\n </div>\n ) : null}\n </>\n );\n};\n","import React from 'react';\n\nimport '@core/lib/polyfills';\n\nimport { motion } from 'framer-motion';\nimport { Checkbox, ChevronArrowDownIcon, ColorSwatch, RadioGroup, SearchIcon, SearchInputField, Select, Slider, VirtualizedList } from '@core/components';\nimport { handleFacetValues } from '@react-instant-search/components/SearchResultWidget/utils';\nimport { ROTATE_FILTER_ARROW_ANIMATION } from '@core/lib/animation';\nimport { getTextBetween, shopifyFormatMoney, stringToSlug } from '@core/lib/helper';\nimport { DEFAULT_FACET_LIMIT, OBJECT_DATA_STRING_KEY } from '@core/lib/const';\nimport { usePrevious } from '@core/hooks';\n\nexport const Facet = (props: {\n filter: { value: any; label: string; display: string; indexFilter: number; items: any; settings?: any };\n isFirstLoading: boolean | undefined;\n displaySettings: any;\n generalDataSettings: any;\n searchFacetDistribution: any;\n clickedFacets: any;\n setClickedFacets?(value: React.SetStateAction<any>): void;\n handleFilterChange(props: any): void;\n defaultFacetStats: any;\n valueFilterPriceChange?: number[];\n setValueFilterPriceChange?(value: React.SetStateAction<number[]>): void;\n valueFilterOnSaleChange?: number[];\n setValueFilterOnSaleChange?(value: React.SetStateAction<number[]>): void;\n valueFilterSliderOthers?: any;\n setValueFilterSliderOthers?(value: React.SetStateAction<any>): void;\n separatedFilterItem: any;\n setSeparatedFilterItem?(value: React.SetStateAction<any>): void;\n settings?: any;\n scrollElementSelector?: string;\n layoutType?: 'product-filter' | 'default';\n collectionId?: string | number | '';\n colorSwatches?: any[];\n ulClasses?: string;\n languageSettings?: any;\n triggerClickedFacets?: boolean;\n setTriggerClickedFacets?(value: React.SetStateAction<boolean>): void;\n handleQueryStringFilter?(value: any): void;\n previousStateFromOutside?: any;\n keepCounterFacets?: any;\n allowedFilterSlider?: any;\n}) => {\n const {\n filter,\n isFirstLoading,\n displaySettings,\n generalDataSettings,\n searchFacetDistribution,\n clickedFacets,\n setClickedFacets,\n handleFilterChange,\n defaultFacetStats,\n valueFilterPriceChange,\n setValueFilterPriceChange,\n valueFilterOnSaleChange,\n setValueFilterOnSaleChange,\n valueFilterSliderOthers,\n setValueFilterSliderOthers,\n separatedFilterItem,\n setSeparatedFilterItem,\n settings,\n scrollElementSelector,\n layoutType,\n collectionId,\n colorSwatches,\n ulClasses = '',\n languageSettings,\n triggerClickedFacets,\n setTriggerClickedFacets,\n handleQueryStringFilter,\n previousStateFromOutside,\n keepCounterFacets,\n allowedFilterSlider\n } = props;\n\n const [keywordFacet, setKeywordFacet] = React.useState('');\n const [showFacet, setShowFacet] = React.useState(false);\n\n const searchFacetRef = React.useRef<any>(null);\n const ulListRef = React.useRef<any>(null);\n\n const previousState: any = usePrevious({ keywordFacet });\n\n const { money_format, default_currency_symbol } = generalDataSettings || {};\n const { button_load_more } = generalDataSettings?.languages || {};\n\n const { search_filter_placeholder, search_filter_show_more_result, search_filter_no_result, filter_select_placeholder, highest_price_info } = languageSettings || {};\n\n const {\n color: filter_option_color,\n font_size: filter_option_font_size,\n font_weight: filter_option_font_weight,\n text_transform: filter_option_text_transform\n } = displaySettings?.filter?.option || {};\n\n const { item_pagination: is_item_pagination = true, item_pagination_limit = DEFAULT_FACET_LIMIT } = displaySettings?.filter || {};\n\n const filter_option_style = {\n ...(filter_option_color && { color: filter_option_color }),\n ...(filter_option_font_size && { fontSize: filter_option_font_size }),\n ...(filter_option_font_weight && { fontWeight: filter_option_font_weight }),\n ...(filter_option_text_transform && { textTransform: filter_option_text_transform })\n };\n\n let { value, label, display, indexFilter, items, settings: filterSettings } = filter;\n const { show_search, auto_select_search, hide_filter_list } = filterSettings || {};\n\n const show_filter_list_when_search = !hide_filter_list;\n\n if (isFirstLoading) return null;\n\n let blockComponent = null;\n\n const isShowNumberMatchingProduct = displaySettings?.filter?.show_number_matching_product;\n const isDisplaySlider = ['slider', 'input_range', 'slider_with_input_range'].includes(display.toLowerCase());\n const isDisplayInputRange = display.toLowerCase() === 'input_range';\n const getValue = `${value}-${indexFilter}`;\n\n if (show_search && keywordFacet && !isDisplaySlider) items = items?.filter(({ name }: any) => String(name)?.toLowerCase()?.includes(keywordFacet?.toLowerCase()));\n\n const handleFacetValuesProps = {\n filter,\n languageSettings,\n clickedFacets,\n searchFacetDistribution,\n displaySettings,\n settings,\n keepCounterFacets,\n allowedFilterSlider\n };\n\n const handleFacetLoadMore = ({ facetItems }: { facetItems: any }): { haveNextPage: boolean; currentItems: any; totalItems?: number } => {\n const arrFacetValues = isDisplaySlider\n ? facetItems\n : handleFacetValues({\n ...handleFacetValuesProps,\n items: facetItems\n });\n\n if (!is_item_pagination || isDisplaySlider) {\n return {\n haveNextPage: false,\n currentItems: arrFacetValues\n };\n }\n\n const lastItemLimit = separatedFilterItem[getValue] || Number(item_pagination_limit);\n\n let haveNextPage = Boolean(lastItemLimit < arrFacetValues?.length);\n let sliced: any = arrFacetValues;\n if (haveNextPage) sliced = sliced.slice(0, lastItemLimit);\n\n let currentItems = sliced;\n\n return {\n haveNextPage,\n currentItems,\n totalItems: Number(arrFacetValues?.length)\n };\n };\n\n const handleSearchShowMore = () => {\n setShowFacet(true);\n\n searchFacetRef?.current && searchFacetRef?.current?.focus?.();\n };\n\n const { haveNextPage, currentItems, totalItems } = handleFacetLoadMore({\n facetItems: items\n });\n\n const filterSearchShowMoreId = stringToSlug(`filter-search-show-more-${getValue}`);\n\n React.useEffect(() => {\n if (!show_search) return;\n\n setTimeout(() => document.querySelector(`#${filterSearchShowMoreId}`)?.addEventListener('click', () => handleSearchShowMore()), 100);\n\n let isKeywordFacetChanged = Boolean(previousState && previousState.keywordFacet !== keywordFacet);\n let isPreviousStateFromOutsideChanged = Boolean(previousStateFromOutside && previousStateFromOutside?.clickedFacets !== clickedFacets);\n\n if (keywordFacet && isKeywordFacetChanged) {\n const delayDebounceFn = setTimeout(() => {\n const isAutoSelectFacet = Boolean(auto_select_search && totalItems && Number(totalItems) === 1);\n\n let autoSelectFacets = currentItems\n ?.map(({ value: itemValue }: any) => {\n return clickedFacets?.[value]?.includes?.(itemValue) ? null : itemValue;\n })\n ?.filter((item: any) => item);\n\n if (isAutoSelectFacet && autoSelectFacets?.length) {\n let valueClickedFacets = {\n ...clickedFacets,\n ...{\n [value]: [...new Set([...(clickedFacets?.[value]?.length ? clickedFacets?.[value] : []), ...autoSelectFacets])]\n }\n };\n\n let handleQueryStringFilterProp = valueClickedFacets;\n\n // Hide the additional filter in query param\n if (Object.hasOwn(handleQueryStringFilterProp, 'variants.inventory_quantity')) delete handleQueryStringFilterProp?.['variants.inventory_quantity'];\n\n handleQueryStringFilter?.(handleQueryStringFilterProp);\n\n setClickedFacets?.(valueClickedFacets);\n setTriggerClickedFacets?.(!triggerClickedFacets);\n }\n }, 500);\n return () => clearTimeout(delayDebounceFn);\n }\n if (!(showFacet && isPreviousStateFromOutsideChanged)) setShowFacet(false);\n }, [keywordFacet, clickedFacets]);\n\n const loadMoreComponent = (\n <div\n className=\"sledge-instant-search__result-filter-item-show-more\"\n onClick={() =>\n setSeparatedFilterItem?.((old: any) => {\n const fixState = {\n ...old,\n [getValue]: (old[getValue] || Number(item_pagination_limit)) + Number(item_pagination_limit)\n };\n\n return fixState;\n })\n }\n >\n {button_load_more || 'Load More'}\n <ChevronArrowDownIcon width={15} height={15} color=\"#000000\" />\n </div>\n );\n\n const handleFacetCheckbox = (props: { facetValues: any; virtualized?: any }) => {\n const { facetValues, virtualized } = props;\n const { index, key } = virtualized || {};\n\n return handleFacetValues({\n ...handleFacetValuesProps,\n items: virtualized && Object.keys(virtualized)?.length ? [facetValues[index]] : facetValues\n })?.map((facetValue: any) => {\n const { labelName, value: itemValue, counter, children, level } = facetValue;\n\n const isFacetHierarchical = Object.hasOwn(facetValue, 'children');\n const isHasChildren = isFacetHierarchical && children?.length;\n const isChecked = Boolean(clickedFacets && clickedFacets[value]?.includes(itemValue));\n\n const { haveNextPage, currentItems } = handleFacetLoadMore({\n facetItems: children\n });\n\n const blockComponentChildren = handleFacetCheckbox({\n facetValues: currentItems\n });\n\n const content = (\n <Checkbox\n id={`${getValue}_${index}${isFacetHierarchical ? `_${stringToSlug(itemValue)}` : ''}`}\n name={value}\n value={itemValue}\n label={\n <>\n <span>{`${labelName}${counter !== undefined && isShowNumberMatchingProduct ? ` (${counter})` : ''}`}</span>\n {isHasChildren ? (\n <motion.div\n initial={false}\n animate={isChecked ? 'open' : 'closed'}\n variants={ROTATE_FILTER_ARROW_ANIMATION}\n className=\"sledge-instant-search__result-filter-checkbox-item-level-arrow\"\n >\n <ChevronArrowDownIcon width={15} height={15} color=\"#000000\" />\n </motion.div>\n ) : null}\n </>\n }\n onClick={(e) => {\n e.stopPropagation();\n\n handleFilterChange({\n parentId: value,\n value: e.currentTarget.value\n });\n }}\n checked={isChecked}\n labelStyle={filter_option_style}\n />\n );\n\n return (\n <>\n <li\n key={key}\n className={`sledge-instant-search__result-filter-checkbox-item ${\n isFacetHierarchical ? `sledge-instant-search__result-filter-checkbox-item-level sledge-instant-search__result-filter-checkbox-item-level-${level}` : ''\n }`}\n onClick={(e) => {\n e.preventDefault();\n\n handleFilterChange({\n parentId: value,\n value: itemValue\n });\n }}\n >\n {content}\n </li>\n {isHasChildren && isChecked\n ? haveNextPage\n ? React.cloneElement(\n <>\n {blockComponentChildren}\n {loadMoreComponent}\n </>\n )\n : blockComponentChildren\n : null}\n </>\n );\n });\n };\n\n let scrollElement = document.querySelector(\n scrollElementSelector || `#filter-${indexFilter}-${layoutType}-${collectionId || 'all'}-standard-${stringToSlug(value)} .sledge-instant-search__result-filter-item-list`\n );\n\n const isShowSearch = Boolean(\n show_search && (display.toLowerCase() === 'checkbox' || display.toLowerCase() === 'tree' || display.toLowerCase() === 'radio') && (totalItems || (keywordFacet && !totalItems))\n );\n\n const defaultSearchShowMoreFilter = (\n <>\n {totalItems} items found,{' '}\n <span className=\"sledge-instant-search__result-filter-search-text-action\" id={filterSearchShowMoreId} onClick={() => setShowFacet(true)}>\n click here\n </span>{' '}\n to show\n </>\n );\n\n let searchFilterShowMoreResult = search_filter_show_more_result;\n if (searchFilterShowMoreResult) {\n const getActionText = getTextBetween({\n start: '<action>',\n end: '</action>',\n text: search_filter_show_more_result\n });\n\n searchFilterShowMoreResult = searchFilterShowMoreResult.replaceAll(OBJECT_DATA_STRING_KEY.TOTAL_FILTER_ITEM, String(Number(totalItems)));\n searchFilterShowMoreResult = searchFilterShowMoreResult.replaceAll(\n `<action>${getActionText}</action>`,\n `\n <span class=\"sledge-instant-search__result-filter-search-text-action\" id=\"${filterSearchShowMoreId}\">\n ${getActionText}\n </span>`\n );\n }\n\n if (isDisplaySlider) {\n items = defaultFacetStats?.[value] && Object.keys(defaultFacetStats[value]).length ? defaultFacetStats[value] : {};\n if (items && Object.keys(items)?.length) {\n items = {\n min: items?.min < 0 ? 0 : items?.min,\n max: items?.max\n };\n }\n\n let valueFilterSliderChange: any = [];\n let isPriceValue = false;\n let isSalePercent = false;\n if (value === 'variants.price') {\n valueFilterSliderChange = valueFilterPriceChange;\n isPriceValue = true;\n } else if (value === 'variants.sale_percent') {\n valueFilterSliderChange = valueFilterOnSaleChange;\n isSalePercent = true;\n } else {\n valueFilterSliderChange = valueFilterSliderOthers?.[value];\n }\n\n let defaultValueMin = valueFilterSliderChange?.[0] || items?.min;\n let defaultValueMax = valueFilterSliderChange?.[1] || items?.max;\n\n // Filtering slider value when hit before min or after max\n const isTypeSliderWithInputRange = display.toLowerCase() === 'slider_with_input_range';\n if (isTypeSliderWithInputRange) {\n defaultValueMin = items?.min && Number(defaultValueMin) < Number(items?.min) ? items?.min : defaultValueMin;\n defaultValueMax = items?.max && Number(defaultValueMax) > Number(items?.max) ? items?.max : defaultValueMax;\n }\n\n let contentDefaultValueMin = isPriceValue ? shopifyFormatMoney(defaultValueMin * 100, money_format) : isSalePercent ? `${defaultValueMin}%` : defaultValueMin;\n let contentDefaultValueMax = isPriceValue ? shopifyFormatMoney(defaultValueMax * 100, money_format) : isSalePercent ? `${defaultValueMax}%` : defaultValueMax;\n\n let contentFacetStatsMax = isPriceValue ? shopifyFormatMoney(items?.max * 100, money_format) : isSalePercent ? `${items?.max}%` : items?.max;\n let descriptionInputRange = highest_price_info\n ? String(highest_price_info).replaceAll(OBJECT_DATA_STRING_KEY.PRICE_MAX_MONEY_FORMAT, contentFacetStatsMax)\n : `The highest price is ${contentFacetStatsMax}`;\n\n blockComponent = (\n <Slider\n type={display.toLowerCase()}\n valueFilterSliderChange={valueFilterSliderChange}\n labelStyle={filter_option_style}\n {...(isDisplayInputRange\n ? {\n prefixInputRange: default_currency_symbol,\n descriptionInputRange\n }\n : {})}\n value={defaultValueMin === defaultValueMax ? [defaultValueMax] : [defaultValueMin, defaultValueMax]}\n textValue={defaultValueMin === defaultValueMax ? [contentDefaultValueMax] : [contentDefaultValueMin, contentDefaultValueMax]}\n {...(items?.min === items?.max\n ? {}\n : {\n min: items?.min\n })}\n max={items?.max}\n step={1}\n setValueCommit={(valueCommit) =>\n handleFilterChange({\n parentId: value,\n value: valueCommit\n })\n }\n setValueChange={(valueChange) => {\n if (value === 'variants.price') {\n setValueFilterPriceChange?.(valueChange);\n } else if (value === 'variants.sale_percent') {\n setValueFilterOnSaleChange?.(valueChange);\n } else {\n setValueFilterSliderOthers?.((prevState: any) => ({ ...prevState, [value]: valueChange }));\n }\n }}\n wrapperClassName=\"sledge-instant-search__result-filter-item-list-slider\"\n minMaxClassName=\"sledge-instant-search__result-filter-item-list-slider-minmax\"\n minMaxTextClassName=\"sledge-instant-search__result-filter-minmax-field\"\n />\n );\n } else if ((display.toLowerCase() === 'checkbox' || display.toLowerCase() === 'tree') && currentItems?.length) {\n blockComponent =\n display.toLowerCase() === 'checkbox' ? (\n <VirtualizedList\n selector={scrollElementSelector}\n {...(scrollElement && {\n scrollElement\n })}\n rowCount={currentItems?.length}\n rowRenderer={(props) =>\n handleFacetCheckbox({\n facetValues: currentItems,\n virtualized: props\n })\n }\n parentRef={ulListRef}\n />\n ) : (\n <>\n {handleFacetCheckbox({\n facetValues: currentItems\n })}\n </>\n );\n } else if (display.toLowerCase() === 'radio' && currentItems?.length) {\n blockComponent = (\n <li>\n <RadioGroup\n id={getValue}\n name={getValue}\n onValueChange={(valueChange) =>\n handleFilterChange({\n parentId: value,\n value: valueChange,\n force: true\n })\n }\n items={currentItems?.map((item: any) => {\n const { labelName, value, counter } = item;\n\n return {\n label: `${labelName} ${counter !== undefined && isShowNumberMatchingProduct ? ` (${counter})` : ''}`,\n value\n };\n })}\n defaultValue={clickedFacets && clickedFacets[value]?.length ? clickedFacets[value][0] : ''}\n labelStyle={filter_option_style}\n useVirtualized\n selector={scrollElementSelector}\n {...(scrollElement && {\n scrollElement\n })}\n parentRef={ulListRef}\n />\n </li>\n );\n } else if (display.toLowerCase() === 'select' && currentItems?.length) {\n blockComponent = (\n <li>\n <Select\n placeholder={filter_select_placeholder ? String(filter_select_placeholder).replaceAll(OBJECT_DATA_STRING_KEY.FILTER_TITLE, label) : `Select ${label}`}\n name={value}\n onValueChange={(getValue) =>\n handleFilterChange({\n parentId: value,\n value: getValue,\n force: true\n })\n }\n items={currentItems?.map((item: any) => {\n const { labelName, value, counter } = item;\n\n return {\n label: `${labelName} ${counter !== undefined && isShowNumberMatchingProduct ? ` (${counter})` : ''}`,\n value\n };\n })}\n defaultValue={clickedFacets && clickedFacets[value]?.length ? clickedFacets[value][0] : ''}\n labelStyle={filter_option_style}\n />\n </li>\n );\n } else if (display.toLowerCase() === 'swatch' && currentItems?.length) {\n blockComponent = (\n <>\n {currentItems?.map((item: any, index: number) => {\n let getColorSwatch = colorSwatches?.filter(({ name }: any) => name?.includes(item.value))[0] || {};\n\n return (\n <li key={index}>\n <ColorSwatch\n id={`${getValue}_${index}`}\n name={value}\n value={item.value}\n rgb={getColorSwatch?.rgb}\n image={getColorSwatch?.image}\n onClick={(e) =>\n handleFilterChange({\n parentId: value,\n value: e.currentTarget.value\n })\n }\n checked={Boolean(clickedFacets && clickedFacets[value]?.includes(item.value))}\n />\n </li>\n );\n })}\n </>\n );\n } else {\n blockComponent = (\n <li className=\"sledge-instant-search__result-filter-item-no-result\" style={filter_option_style}>\n {search_filter_no_result || 'No result...'}\n </li>\n );\n }\n\n if (haveNextPage) {\n blockComponent = React.cloneElement(\n <>\n {blockComponent}\n {loadMoreComponent}\n </>\n );\n }\n\n return (\n <>\n {isShowSearch ? (\n <div className=\"sledge-instant-search__result-filter-search-wrapper\">\n <SearchInputField\n type=\"text\"\n icon={<SearchIcon width={18} height={18} color=\"#868686\" />}\n placeholder={search_filter_placeholder || 'Search filters...'}\n fieldRef={searchFacetRef}\n value={keywordFacet}\n onChange={({ value }: any) => setKeywordFacet(value)}\n onResetField={() => setKeywordFacet('')}\n className=\"sledge-instant-search__result-filter-search-form\"\n withClearField\n />\n {keywordFacet && totalItems && Number(totalItems) > 1 && !show_filter_list_when_search && !showFacet ? (\n <div className=\"sledge-instant-search__result-filter-search-text\" style={filter_option_style}>\n {searchFilterShowMoreResult ? <div dangerouslySetInnerHTML={{ __html: searchFilterShowMoreResult }}></div> : defaultSearchShowMoreFilter}\n </div>\n ) : null}\n </div>\n ) : null}\n {!show_search || (show_search && (show_filter_list_when_search || (!show_filter_list_when_search && (!totalItems || (Number(totalItems) === 1 && keywordFacet))) || showFacet)) ? (\n <ul ref={ulListRef} className={ulClasses}>\n {blockComponent}\n </ul>\n ) : null}\n </>\n );\n};\n","import React from 'react';\nimport { LOCAL_STORAGE_KEY } from '@core/lib/const';\n\nexport interface IColumnGridSelector {\n desktop: 'list' | 'column-2' | 'column-3' | 'column-4' | 'column-5';\n mobile: 'list' | 'column-2';\n}\n\nexport const ColumnGridSelector = ({\n currentColumnGrid,\n setCurrentColumnGrid,\n isDesktopLayout,\n showText = true\n}: {\n currentColumnGrid?: IColumnGridSelector | null;\n setCurrentColumnGrid?: any;\n isDesktopLayout: boolean | undefined;\n showText?: boolean | undefined;\n}) => {\n const desktopColumns = localStorage.getItem(LOCAL_STORAGE_KEY.GRID_DESKTOP_COLUMN) || 'column-3';\n const mobileColumns = localStorage.getItem(LOCAL_STORAGE_KEY.GRID_MOBILE_COLUMN) || 'column-2';\n\n const changeGridLayout = (type: 'desktop' | 'mobile', value: IColumnGridSelector['desktop']) => {\n const newLayout = { ...currentColumnGrid, [type]: value };\n setCurrentColumnGrid?.(newLayout);\n\n if (type === 'desktop') {\n localStorage.setItem(LOCAL_STORAGE_KEY.GRID_DESKTOP_COLUMN, value);\n } else {\n localStorage.setItem(LOCAL_STORAGE_KEY.GRID_MOBILE_COLUMN, value);\n }\n };\n\n React.useEffect(() => {\n setCurrentColumnGrid?.({\n desktop: desktopColumns,\n mobile: mobileColumns\n });\n }, []);\n\n return (\n // TODO: Need refactoring / need settings from backend\n <>\n {showText && <span className=\"sledge-instant-search__column-grid-selector-text\">View as</span>}\n\n <button\n onClick={() => changeGridLayout(isDesktopLayout ? 'desktop' : 'mobile', 'list')}\n className={`sledge-instant-search__column-grid-selector-button\n ${isDesktopLayout ? (currentColumnGrid?.desktop === 'list' ? 'sledge-instant-search__column-grid-selector-button--active' : '') : currentColumnGrid?.mobile === 'list' ? 'sledge-instant-search__column-grid-selector-button--active' : ''}`}\n >\n <ListColumnIcon />\n </button>\n\n <button\n onClick={() => changeGridLayout(isDesktopLayout ? 'desktop' : 'mobile', 'column-2')}\n className={`sledge-instant-search__column-grid-selector-button ${isDesktopLayout ? (currentColumnGrid?.desktop === 'column-2' ? 'sledge-instant-search__column-grid-selector-button--active' : '') : currentColumnGrid?.mobile === 'column-2' ? 'sledge-instant-search__column-grid-selector-button--active' : ''}`}\n >\n <GricColumnIcon total={2} />\n </button>\n\n <button\n onClick={() => changeGridLayout('desktop', 'column-3')}\n className={`sledge__hide-element-lg-on-mobile sledge-instant-search__column-grid-selector-button ${isDesktopLayout ? (currentColumnGrid?.desktop === 'column-3' ? 'sledge-instant-search__column-grid-selector-button--active' : '') : ''}`}\n >\n <GricColumnIcon total={3} />\n </button>\n\n <button\n onClick={() => changeGridLayout('desktop', 'column-4')}\n className={`sledge__hide-element-lg-on-mobile sledge-instant-search__column-grid-selector-button ${isDesktopLayout ? (currentColumnGrid?.desktop === 'column-4' ? 'sledge-instant-search__column-grid-selector-button--active' : '') : ''}`}\n >\n <GricColumnIcon total={4} />\n </button>\n <button\n onClick={() => changeGridLayout('desktop', 'column-5')}\n className={`sledge__hide-element-lg-on-mobile sledge-instant-search__column-grid-selector-button ${isDesktopLayout ? (currentColumnGrid?.desktop === 'column-5' ? 'sledge-instant-search__column-grid-selector-button--active' : '') : ''}`}\n >\n <GricColumnIcon total={5} />\n </button>\n </>\n );\n};\n\nconst ListColumnIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={20} height={20} viewBox=\"0 0 20 20\" fill=\"none\">\n <rect width={20} height={9} fill=\"#ECECEC\" />\n <rect y={11} width={20} height={9} fill=\"#ECECEC\" />\n </svg>\n);\n\nconst GricColumnIcon = ({ total }: { total?: 2 | 3 | 4 | 5 }) => {\n let gridIcon = null;\n\n switch (total) {\n case 2:\n gridIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={20} height={20} viewBox=\"0 0 20 20\" fill=\"none\">\n <rect x={20} width={20} height={9} transform=\"rotate(90 20 0)\" fill=\"#ECECEC\" />\n <rect x={9} width={20} height={9} transform=\"rotate(90 9 0)\" fill=\"#ECECEC\" />\n </svg>\n );\n break;\n\n case 3:\n gridIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={20} height={20} viewBox=\"0 0 20 20\" fill=\"none\">\n <rect x={13} width={20} height={6} transform=\"rotate(90 13 0)\" fill=\"#ECECEC\" />\n <rect x={20} width={20} height={6} transform=\"rotate(90 20 0)\" fill=\"#ECECEC\" />\n <rect x={6} width={20} height={6} transform=\"rotate(90 6 0)\" fill=\"#ECECEC\" />\n </svg>\n );\n break;\n\n case 4:\n gridIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={20} height={20} viewBox=\"0 0 20 20\" fill=\"none\">\n <rect x={20} y=\"0.00012207\" width={20} height={4} transform=\"rotate(90 20 0.00012207)\" fill=\"#ECECEC\" />\n <rect x={15} y=\"0.00012207\" width={20} height={4} transform=\"rotate(90 15 0.00012207)\" fill=\"#ECECEC\" />\n <rect x={10} y=\"0.00012207\" width={20} height={5} transform=\"rotate(90 10 0.00012207)\" fill=\"#ECECEC\" />\n <rect x={4} y=\"0.00012207\" width={20} height={4} transform=\"rotate(90 4 0.00012207)\" fill=\"#ECECEC\" />\n </svg>\n );\n break;\n\n case 5:\n gridIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={20} height={20} viewBox=\"0 0 20 20\" fill=\"none\">\n <rect x={7} y=\"0.00012207\" width={20} height={3} transform=\"rotate(90 7 0.00012207)\" fill=\"#ECECEC\" />\n <rect x={12} y=\"0.00012207\" width={20} height={4} transform=\"rotate(90 12 0.00012207)\" fill=\"#ECECEC\" />\n <rect x={16} y=\"0.00012207\" width={20} height={3} transform=\"rotate(90 16 0.00012207)\" fill=\"#ECECEC\" />\n <rect x={20} y=\"0.00012207\" width={20} height={3} transform=\"rotate(90 20 0.00012207)\" fill=\"#ECECEC\" />\n <rect x={3} y=\"0.00012207\" width={20} height={3} transform=\"rotate(90 3 0.00012207)\" fill=\"#ECECEC\" />\n </svg>\n );\n break;\n default:\n break;\n }\n\n return gridIcon;\n};\n","export const ResultWrapper = (props: { children: any; displaySettings?: any }) => {\n const { children, displaySettings } = props;\n\n return (\n <div className=\"sledge-instant-search__result-wrapper\" data-filter-layout={displaySettings?.filter?.layout}>\n {children}\n </div>\n );\n};\n\nexport const ResultData = (props: { children: any }) => {\n const { children } = props;\n\n return <div className=\"sledge-instant-search__result-data\">{children}</div>;\n};\n\nexport const ResultDataKeyword = (props: { children: any }) => {\n const { children } = props;\n\n return <div className=\"sledge-instant-search__result-data-keyword\">{children}</div>;\n};\n\nexport const SearchFieldDesktop = (props: { children: any }) => {\n const { children } = props;\n\n return <div className=\"sledge-instant-search__search-field-lg\">{children}</div>;\n};\n\nexport const SelectFieldWrapper = (props: { children: any }) => {\n const { children } = props;\n\n return <div className=\"sledge-instant-search__result-data-summary-item sledge-instant-search__result-data-summary-select-field\">{children}</div>;\n};\n\nexport const SelectFieldItem = (props: { children: any }) => {\n const { children } = props;\n\n return <div className=\"sledge-instant-search__result-data-summary-select-field-item\">{children}</div>;\n};\n\nexport const SummaryTextHorizontal = (props: { children: any }) => {\n const { children } = props;\n\n return <div className=\"sledge-instant-search__result-data-summary sledge-instant-search__result-data-summary-filter-horizontal\">{children}</div>;\n};\n\nexport const SummaryTextVertical = (props: { children: any; className?: string }) => {\n const { children, className } = props;\n\n return <div className={`sledge-instant-search__result-data-summary sledge-instant-search__result-data-summary-filter-vertical ${className}`}>{children}</div>;\n};\n\nexport const RenderLayout = (props: { children: any; device: 'desktop' | 'mobile'; layout?: any }) => {\n const { children, device, layout = '' } = props;\n\n return (\n <div className=\"sledge-instant-search__render-layout\" data-render-device={device} data-render-layout={layout}>\n {children}\n </div>\n );\n};\n\nexport const FilterHorizontalBlockMobile = (props: { children: any }) => {\n const { children } = props;\n\n return <div className=\"sledge-instant-search__filter-horizontal-block-mobile\">{children}</div>;\n};\n\nexport const ResultSearchFieldFlex = (props: { children: any }) => {\n const { children } = props;\n\n return <div className=\"sledge-instant-search__result-search-field-flex\">{children}</div>;\n};\n\nexport const ColumnGridSelectorWrapper = (props: { children: any }) => {\n const { children } = props;\n\n return <div className=\"sledge-instant-search__column-grid-selector-wrapper\">{children}</div>;\n};\n\nexport const ProductGridPaginationWrapper = (props: { children: any }) => {\n const { children } = props;\n\n return <div className=\"sledge-instant-search__result-product-grid-pagination-wrapper\">{children}</div>;\n};\n","import { IFilterHorizontalProps, IFilterVerticalProps } from '@react-instant-search/components/SearchResultWidget/components';\nimport {\n RenderLayout,\n ResultData,\n ResultDataKeyword,\n ResultSearchFieldFlex,\n ResultWrapper,\n SearchFieldDesktop,\n SelectFieldItem,\n SelectFieldWrapper,\n SummaryTextHorizontal,\n SummaryTextVertical,\n ColumnGridSelectorWrapper,\n ProductGridPaginationWrapper\n} from './Elements';\nimport { Button, FilterIcon, FlyoutSidebar } from '@core/components';\nimport { motion } from 'framer-motion';\nimport { IFilterActiveProps } from '../components/FilterActive';\n\nexport interface IDesktopLayoutProps {\n displaySettings?: any;\n languageSettings?: any;\n allowedFilter?: any[];\n isFirstLoading?: boolean;\n isLoading?: boolean;\n isLoadingProduct?: boolean;\n isLoadingSetting?: boolean;\n searchResult?: any[];\n propsData?: any;\n hideFilterWhenOneValue?: boolean;\n openFilterFlyout?: boolean;\n setOpenFilterFlyout?(value: React.SetStateAction<boolean>): void;\n openFilterToggle?: boolean;\n setOpenFilterToggle?(value: React.SetStateAction<boolean>): void;\n components?: {\n filterVertical?(props?: IFilterVerticalProps): any;\n filterHorizontal?(props?: IFilterHorizontalProps): any;\n filterActive?(props?: IFilterActiveProps): any;\n summaryText?: any;\n searchField?: any;\n sort?: any;\n limit?: any;\n productGrid?: any;\n pagination?: any;\n resultEmpty?: any;\n columnGridSelector?: any;\n };\n skeleton?: {\n filterVertical?: any;\n filterHorizontal?: any;\n summaryText?: any;\n searchField?: any;\n selectOption?: any;\n searchAndSelectOption?: any;\n productGrid?: any;\n };\n handleSearchResultFirstTime?: boolean;\n}\n\nconst FilterVerticalLayout = (props: IDesktopLayoutProps) => {\n const {\n displaySettings,\n allowedFilter,\n isFirstLoading,\n isLoading,\n isLoadingProduct,\n isLoadingSetting,\n searchResult = [],\n hideFilterWhenOneValue,\n components,\n skeleton,\n handleSearchResultFirstTime\n } = props;\n\n const {\n filterVertical = null,\n summaryText = null,\n searchField = null,\n sort = null,\n limit = null,\n productGrid = null,\n pagination = null,\n resultEmpty = null,\n columnGridSelector = null\n } = components || {};\n\n const {\n filterVertical: filterVerticalSkeleton,\n summaryText: summaryTextSkeleton,\n searchField: searchFieldSkeletonComponent,\n selectOption: selectOptionSkeletonComponent,\n searchAndSelectOption: searchAndSelectOptionSkeleton,\n productGrid: productGridSkeleton\n } = skeleton || {};\n\n const isAllowedFilterTree = allowedFilter?.find(({ display }: any) => display?.toLowerCase() === 'tree');\n const isShowFilter = displaySettings?.filter?.enable_on_search && !hideFilterWhenOneValue;\n\n return (\n <ResultWrapper displaySettings={displaySettings}>\n <>\n {isShowFilter\n ? filterVertical?.({\n filterLayoutType: 'standard',\n isSkeleton: Boolean((!isAllowedFilterTree && isFirstLoading) || (isAllowedFilterTree && isLoadingProduct) || isLoadingSetting || handleSearchResultFirstTime)\n })\n : null}\n\n <ResultData>\n {isFirstLoading ? (\n searchAndSelectOptionSkeleton\n ) : (\n <ResultDataKeyword>\n <SearchFieldDesktop>{searchField}</SearchFieldDesktop>\n\n <SelectFieldWrapper>\n <SelectFieldItem>{sort}</SelectFieldItem>\n <SelectFieldItem>{limit}</SelectFieldItem>\n </SelectFieldWrapper>\n </ResultDataKeyword>\n )}\n {isLoading ? (\n <>{productGridSkeleton}</>\n ) : (\n <>\n <SummaryTextVertical className=\"sledge-instant-search__result-summary-text-with-column-grid-selector-wrapper\">\n {summaryText}\n <ColumnGridSelectorWrapper>{columnGridSelector}</ColumnGridSelectorWrapper>\n </SummaryTextVertical>\n\n {searchResult?.length ? (\n <>\n {productGrid}\n {pagination}\n </>\n ) : (\n resultEmpty\n )}\n </>\n )}\n </ResultData>\n </>\n </ResultWrapper>\n );\n};\n\nconst FilterHorizontalLayout = (props: IDesktopLayoutProps) => {\n const { displaySettings, allowedFilter, isFirstLoading, isLoading, isLoadingProduct, isLoadingSetting, searchResult = [], propsData, hideFilterWhenOneValue, components, skeleton } = props;\n\n const {\n filterHorizontal = null,\n summaryText = null,\n searchField = null,\n sort = null,\n limit = null,\n productGrid = null,\n pagination = null,\n resultEmpty = null,\n columnGridSelector = null\n } = components || {};\n\n const {\n filterVertical: filterVerticalSkeleton,\n summaryText: summaryTextSkeleton,\n searchField: searchFieldSkeletonComponent,\n selectOption: selectOptionSkeletonComponent,\n searchAndSelectOption: searchAndSelectOptionSkeleton,\n productGrid: productGridSkeleton\n } = skeleton || {};\n\n const isShowFilter = displaySettings?.filter?.enable_on_search && !hideFilterWhenOneValue;\n\n return (\n <>\n {isShowFilter\n ? filterHorizontal?.({\n deviceType: 'desktop',\n isSkeleton: Boolean((isFirstLoading && !propsData) || (isLoadingSetting && !propsData))\n })\n : null}\n\n <ResultWrapper displaySettings={displaySettings}>\n <ResultData>\n {isFirstLoading ? (\n searchAndSelectOptionSkeleton\n ) : (\n <ResultDataKeyword>\n <SummaryTextHorizontal>{summaryText}</SummaryTextHorizontal>\n\n <SearchFieldDesktop>{searchField}</SearchFieldDesktop>\n\n <SelectFieldWrapper>\n <SelectFieldItem>{sort}</SelectFieldItem>\n <SelectFieldItem>{limit}</SelectFieldItem>\n <ColumnGridSelectorWrapper>{columnGridSelector}</ColumnGridSelectorWrapper>\n </SelectFieldWrapper>\n </ResultDataKeyword>\n )}\n {isLoading ? (\n <>{productGridSkeleton}</>\n ) : (\n <>\n {searchResult?.length ? (\n <>\n {productGrid}\n {pagination}\n </>\n ) : (\n resultEmpty\n )}\n </>\n )}\n </ResultData>\n </ResultWrapper>\n </>\n );\n};\n\nconst FilterFlyoutLayout = (props: IDesktopLayoutProps) => {\n const {\n displaySettings,\n languageSettings,\n allowedFilter,\n isFirstLoading,\n isLoading,\n isLoadingProduct,\n isLoadingSetting,\n searchResult = [],\n hideFilterWhenOneValue,\n openFilterFlyout = false,\n setOpenFilterFlyout = () => {},\n components,\n skeleton\n } = props;\n\n const { filter: language_filter } = languageSettings || {};\n\n const {\n filterVertical = null,\n summaryText = null,\n searchField = null,\n sort = null,\n limit = null,\n productGrid = null,\n pagination = null,\n resultEmpty = null,\n columnGridSelector = null\n } = components || {};\n\n const {\n filterVertical: filterVerticalSkeleton,\n summaryText: summaryTextSkeleton,\n searchField: searchFieldSkeletonComponent,\n selectOption: selectOptionSkeletonComponent,\n searchAndSelectOption: searchAndSelectOptionSkeleton,\n productGrid: productGridSkeleton\n } = skeleton || {};\n\n const isAllowedFilterTree = allowedFilter?.find(({ display }: any) => display?.toLowerCase() === 'tree');\n const isShowFilter = displaySettings?.filter?.enable_on_search && !hideFilterWhenOneValue;\n\n return (\n <>\n <FlyoutSidebar\n title={language_filter || 'Filter'}\n content={\n <>\n {filterVertical?.({\n filterLayoutType: 'flyout'\n })}\n </>\n }\n open={openFilterFlyout}\n setOpen={setOpenFilterFlyout}\n position=\"left\"\n />\n\n <ResultWrapper displaySettings={displaySettings}>\n <>\n <ResultData>\n {isFirstLoading ? (\n searchAndSelectOptionSkeleton\n ) : (\n <ResultDataKeyword>\n <ResultSearchFieldFlex>\n <Button type=\"button\" className=\"sledge-instant-search__trigger-filter-flyout\" onClick={() => setOpenFilterFlyout?.(true)}>\n <span>{language_filter || 'Filter'}</span>\n <FilterIcon width={18} height={18} color=\"#393d4e\" />\n </Button>\n <SearchFieldDesktop>{searchField}</SearchFieldDesktop>\n </ResultSearchFieldFlex>\n\n <SelectFieldWrapper>\n <SelectFieldItem>{sort}</SelectFieldItem>\n <SelectFieldItem>{limit}</SelectFieldItem>\n </SelectFieldWrapper>\n </ResultDataKeyword>\n )}\n {isLoading ? (\n <>{productGridSkeleton}</>\n ) : (\n <>\n <SummaryTextVertical className=\"sledge-instant-search__result-summary-text-with-column-grid-selector-wrapper\">\n {summaryText}\n <ColumnGridSelectorWrapper>{columnGridSelector}</ColumnGridSelectorWrapper>\n </SummaryTextVertical>\n\n {searchResult?.length ? (\n <>\n {productGrid}\n {pagination}\n </>\n ) : (\n resultEmpty\n )}\n </>\n )}\n </ResultData>\n </>\n </ResultWrapper>\n </>\n );\n};\n\nconst EnterpriseLayout = (props: IDesktopLayoutProps) => {\n const {\n displaySettings,\n allowedFilter,\n isFirstLoading,\n isLoading,\n isLoadingProduct,\n isLoadingSetting,\n searchResult = [],\n hideFilterWhenOneValue,\n components,\n skeleton,\n languageSettings,\n openFilterToggle = false,\n setOpenFilterToggle = () => {}\n } = props;\n\n const { filter: language_filter } = languageSettings || {};\n\n const {\n filterVertical = null,\n summaryText = null,\n searchField = null,\n sort = null,\n limit = null,\n productGrid = null,\n pagination = null,\n resultEmpty = null,\n columnGridSelector = null\n } = components || {};\n\n const {\n filterVertical: filterVerticalSkeleton,\n summaryText: summaryTextSkeleton,\n searchField: searchFieldSkeletonComponent,\n selectOption: selectOptionSkeletonComponent,\n searchAndSelectOption: searchAndSelectOptionSkeleton,\n productGrid: productGridSkeleton\n } = skeleton || {};\n\n const isAllowedFilterTree = allowedFilter?.find(({ display }: any) => display?.toLowerCase() === 'tree');\n const isShowFilter = displaySettings?.filter?.enable_on_search && displaySettings?.filter?.layout === 'vertical' && !hideFilterWhenOneValue;\n //TODO: maybe we need settings from backend ?\n const isAnimated = true;\n\n return (\n <ResultWrapper displaySettings={displaySettings}>\n <>\n {isFirstLoading ? (\n searchAndSelectOptionSkeleton\n ) : (\n <ResultDataKeyword>\n <Button type=\"button\" className=\"sledge-instant-search__trigger-filter-toggle\" onClick={() => setOpenFilterToggle?.(!openFilterToggle)}>\n <span>{language_filter || 'Filter'}</span>\n <FilterIcon width={18} height={18} color=\"#393d4e\" />\n </Button>\n\n <SelectFieldItem>{sort}</SelectFieldItem>\n\n <SelectFieldWrapper>\n <ColumnGridSelectorWrapper>{columnGridSelector}</ColumnGridSelectorWrapper>\n </SelectFieldWrapper>\n </ResultDataKeyword>\n )}\n\n <ResultData>\n <div className={`sledge-instant-search__result-filter-toggle-panel ${isAnimated ? 'animated' : ''}`} data-filter-toggle={openFilterToggle ? 'open' : 'closed'}>\n {filterVertical?.({\n filterLayoutType: 'standard',\n isSkeleton: Boolean((!isAllowedFilterTree && isFirstLoading) || (isAllowedFilterTree && isLoadingProduct) || isLoadingSetting)\n })}\n </div>\n <div className=\"sledge-instant-search__result-data-flex\">\n {isLoading ? (\n <>{productGridSkeleton}</>\n ) : (\n <>\n <ProductGridPaginationWrapper>\n {searchResult?.length ? (\n <>\n {productGrid}\n {pagination}\n </>\n ) : (\n resultEmpty\n )}\n </ProductGridPaginationWrapper>\n </>\n )}\n </div>\n </ResultData>\n </>\n </ResultWrapper>\n );\n};\n\nconst YuvaLayout = (props: IDesktopLayoutProps) => {\n const {\n displaySettings,\n allowedFilter,\n isFirstLoading,\n isLoading,\n isLoadingProduct,\n isLoadingSetting,\n searchResult = [],\n hideFilterWhenOneValue,\n components,\n skeleton,\n languageSettings,\n openFilterToggle = false,\n setOpenFilterToggle = () => {}\n } = props;\n\n const { filter: language_filter } = languageSettings || {};\n\n const {\n filterVertical = null,\n summaryText = null,\n searchField = null,\n sort = null,\n limit = null,\n productGrid = null,\n pagination = null,\n resultEmpty = null,\n columnGridSelector = null\n } = components || {};\n\n const {\n filterVertical: filterVerticalSkeleton,\n summaryText: summaryTextSkeleton,\n searchField: searchFieldSkeletonComponent,\n selectOption: selectOptionSkeletonComponent,\n searchAndSelectOption: searchAndSelectOptionSkeleton,\n productGrid: productGridSkeleton\n } = skeleton || {};\n\n const isAllowedFilterTree = allowedFilter?.find(({ display }: any) => display?.toLowerCase() === 'tree');\n const isShowFilter = displaySettings?.filter?.enable_on_search && displaySettings?.filter?.layout === 'vertical' && !hideFilterWhenOneValue;\n //TODO: maybe we need settings from backend ?\n const isAnimated = false;\n\n return (\n <ResultWrapper displaySettings={displaySettings}>\n <>\n {isFirstLoading ? (\n searchAndSelectOptionSkeleton\n ) : (\n <ResultDataKeyword>\n <Button type=\"button\" className=\"sledge-instant-search__trigger-filter-toggle\" onClick={() => setOpenFilterToggle?.(!openFilterToggle)}>\n <span>{language_filter || 'Filter'}</span>\n <FilterIcon width={18} height={18} color=\"#393d4e\" />\n </Button>\n\n <SelectFieldWrapper>\n {summaryText}\n <ColumnGridSelectorWrapper>{columnGridSelector}</ColumnGridSelectorWrapper>\n <SelectFieldItem>{sort}</SelectFieldItem>\n </SelectFieldWrapper>\n </ResultDataKeyword>\n )}\n\n <ResultData>\n {isLoading ? (\n <>{productGridSkeleton}</>\n ) : (\n <>\n <div className={`sledge-instant-search__result-filter-toggle-panel ${isAnimated ? 'animated' : ''}`} data-filter-toggle={openFilterToggle ? 'open' : 'closed'}>\n {filterVertical?.({\n filterLayoutType: 'standard',\n isSkeleton: Boolean((!isAllowedFilterTree && isFirstLoading) || (isAllowedFilterTree && isLoadingProduct) || isLoadingSetting)\n })}\n </div>\n <ProductGridPaginationWrapper>\n {searchResult?.length ? (\n <>\n {productGrid}\n {pagination}\n </>\n ) : (\n resultEmpty\n )}\n </ProductGridPaginationWrapper>\n </>\n )}\n </ResultData>\n </>\n </ResultWrapper>\n );\n};\n\nconst ToyoLayout = (props: IDesktopLayoutProps) => {\n const { displaySettings, allowedFilter, isFirstLoading, isLoading, isLoadingProduct, isLoadingSetting, searchResult = [], propsData, hideFilterWhenOneValue, components, skeleton } = props;\n\n const {\n filterHorizontal = null,\n filterActive = null,\n summaryText = null,\n searchField = null,\n sort = null,\n limit = null,\n productGrid = null,\n pagination = null,\n resultEmpty = null,\n columnGridSelector = null\n } = components || {};\n\n const {\n filterVertical: filterVerticalSkeleton,\n summaryText: summaryTextSkeleton,\n searchField: searchFieldSkeletonComponent,\n selectOption: selectOptionSkeletonComponent,\n searchAndSelectOption: searchAndSelectOptionSkeleton,\n productGrid: productGridSkeleton\n } = skeleton || {};\n\n const isShowFilter = displaySettings?.filter?.enable_on_search && displaySettings?.filter?.layout === 'toyo' && !hideFilterWhenOneValue;\n\n return (\n <>\n <ResultWrapper displaySettings={displaySettings}>\n <ResultData>\n {isFirstLoading ? (\n searchAndSelectOptionSkeleton\n ) : (\n <ResultDataKeyword>\n <SummaryTextHorizontal>{summaryText}</SummaryTextHorizontal>\n\n {isShowFilter\n ? filterHorizontal?.({\n deviceType: 'desktop',\n isSkeleton: Boolean((isFirstLoading && !propsData) || (isLoadingSetting && !propsData)),\n isHorizontalGroup: true,\n showOnlyItems: true,\n components: {\n sort\n }\n })\n : null}\n\n <SelectFieldWrapper>\n <ColumnGridSelectorWrapper>{columnGridSelector}</ColumnGridSelectorWrapper>\n </SelectFieldWrapper>\n </ResultDataKeyword>\n )}\n {isLoading ? (\n <>{productGridSkeleton}</>\n ) : (\n <>\n {searchResult?.length ? (\n <>\n {filterActive?.()}\n {productGrid}\n {pagination}\n </>\n ) : (\n resultEmpty\n )}\n </>\n )}\n </ResultData>\n </ResultWrapper>\n </>\n );\n};\n\nconst FilterHorizontalGroupLayout = (props: IDesktopLayoutProps) => {\n const { displaySettings, allowedFilter, isFirstLoading, isLoading, isLoadingProduct, isLoadingSetting, searchResult = [], propsData, hideFilterWhenOneValue, components, skeleton } = props;\n\n const {\n filterHorizontal = null,\n summaryText = null,\n searchField = null,\n sort = null,\n limit = null,\n productGrid = null,\n pagination = null,\n resultEmpty = null,\n columnGridSelector = null\n } = components || {};\n\n const {\n filterVertical: filterVerticalSkeleton,\n summaryText: summaryTextSkeleton,\n searchField: searchFieldSkeletonComponent,\n selectOption: selectOptionSkeletonComponent,\n searchAndSelectOption: searchAndSelectOptionSkeleton,\n productGrid: productGridSkeleton\n } = skeleton || {};\n\n const isShowFilter = displaySettings?.filter?.enable_on_search && !hideFilterWhenOneValue;\n\n return (\n <>\n {isShowFilter\n ? filterHorizontal?.({\n deviceType: 'desktop',\n isSkeleton: Boolean((isFirstLoading && !propsData) || (isLoadingSetting && !propsData)),\n isHorizontalGroup: true\n })\n : null}\n\n <ResultWrapper displaySettings={displaySettings}>\n <ResultData>\n {isFirstLoading ? (\n searchAndSelectOptionSkeleton\n ) : (\n <ResultDataKeyword>\n <SummaryTextHorizontal>{summaryText}</SummaryTextHorizontal>\n\n <SearchFieldDesktop>{searchField}</SearchFieldDesktop>\n\n <SelectFieldWrapper>\n <SelectFieldItem>{sort}</SelectFieldItem>\n <SelectFieldItem>{limit}</SelectFieldItem>\n <ColumnGridSelectorWrapper>{columnGridSelector}</ColumnGridSelectorWrapper>\n </SelectFieldWrapper>\n </ResultDataKeyword>\n )}\n {isLoading ? (\n <>{productGridSkeleton}</>\n ) : (\n <>\n {searchResult?.length ? (\n <>\n {productGrid}\n {pagination}\n </>\n ) : (\n resultEmpty\n )}\n </>\n )}\n </ResultData>\n </ResultWrapper>\n </>\n );\n};\n\nexport const DesktopLayout = (props: IDesktopLayoutProps) => {\n const { displaySettings } = props;\n\n const renderLayout = () => {\n switch (displaySettings?.filter?.layout) {\n case 'vertical':\n return <FilterVerticalLayout {...props} />;\n break;\n case 'horizontal':\n return <FilterHorizontalLayout {...props} />;\n break;\n case 'flyout':\n return <FilterFlyoutLayout {...props} />;\n break;\n case 'horizontal_group':\n return <FilterHorizontalGroupLayout {...props} />;\n break;\n case 'enterprise':\n return <EnterpriseLayout {...props} />;\n break;\n case 'yuva':\n return <YuvaLayout {...props} />;\n break;\n case 'toyo':\n return <ToyoLayout {...props} />;\n break;\n\n default:\n return null;\n break;\n }\n };\n\n return (\n <RenderLayout device=\"desktop\" layout={displaySettings?.filter?.layout}>\n {renderLayout()}\n </RenderLayout>\n );\n};\n","import { Button, FilterIcon, FlyoutSidebar } from '@core/components';\nimport { IFilterHorizontalProps, IFilterVerticalProps } from '@react-instant-search/components/SearchResultWidget/components';\nimport {\n FilterHorizontalBlockMobile,\n RenderLayout,\n ResultData,\n ResultDataKeyword,\n ResultSearchFieldFlex,\n ResultWrapper,\n SearchFieldDesktop,\n SelectFieldItem,\n SelectFieldWrapper,\n SummaryTextHorizontal,\n SummaryTextVertical,\n ColumnGridSelectorWrapper\n} from './Elements';\n\nexport interface IMobileLayoutProps {\n displaySettings?: any;\n languageSettings?: any;\n allowedFilter?: any[];\n isFirstLoading?: boolean;\n isLoading?: boolean;\n isLoadingProduct?: boolean;\n isLoadingSetting?: boolean;\n searchResult?: any[];\n propsData?: any;\n openFilterFlyout?: boolean;\n setOpenFilterFlyout?(value: React.SetStateAction<boolean>): void;\n components?: {\n filterVertical?(props?: IFilterVerticalProps): any;\n filterHorizontal?(props?: IFilterHorizontalProps): any;\n summaryText?: any;\n searchField?: any;\n sort?: any;\n limit?: any;\n productGrid?: any;\n pagination?: any;\n resultEmpty?: any;\n columnGridSelector?: any;\n };\n skeleton?: {\n filterVertical?: any;\n filterHorizontal?: any;\n summaryText?: any;\n searchField?: any;\n selectOption?: any;\n searchAndSelectOption?: any;\n productGrid?: any;\n };\n}\n\nconst FilterFlyoutLayout = (props: IMobileLayoutProps) => {\n const {\n displaySettings,\n languageSettings,\n allowedFilter,\n isFirstLoading,\n isLoading,\n isLoadingProduct,\n isLoadingSetting,\n searchResult = [],\n openFilterFlyout = false,\n setOpenFilterFlyout = () => {},\n components,\n skeleton\n } = props;\n\n const { filter: language_filter } = languageSettings || {};\n\n const {\n filterVertical = null,\n summaryText = null,\n searchField = null,\n sort = null,\n limit = null,\n productGrid = null,\n pagination = null,\n resultEmpty = null,\n columnGridSelector = null\n } = components || {};\n\n const {\n filterVertical: filterVerticalSkeleton,\n filterHorizontal: filterHorizontalSkeleton,\n summaryText: summaryTextSkeleton,\n searchField: searchFieldSkeletonComponent,\n selectOption: selectOptionSkeletonComponent,\n searchAndSelectOption: searchAndSelectOptionSkeleton,\n productGrid: productGridSkeleton\n } = skeleton || {};\n\n return (\n <>\n <FlyoutSidebar\n title={language_filter || 'Filter'}\n content={\n <>\n {filterVertical?.({\n filterLayoutType: 'flyout'\n })}\n </>\n }\n open={openFilterFlyout}\n setOpen={setOpenFilterFlyout}\n position=\"left\"\n />\n\n <ResultWrapper displaySettings={displaySettings}>\n <ResultData>\n <ResultDataKeyword>\n {isFirstLoading ? (\n <>\n {displaySettings?.filter?.show_total_products ? summaryTextSkeleton : null}\n {searchFieldSkeletonComponent}\n {filterHorizontalSkeleton}\n {selectOptionSkeletonComponent}\n </>\n ) : (\n <>\n <SummaryTextHorizontal>{summaryText}</SummaryTextHorizontal>\n\n <ColumnGridSelectorWrapper>{columnGridSelector}</ColumnGridSelectorWrapper>\n\n <FilterHorizontalBlockMobile>\n <ResultSearchFieldFlex>\n <Button type=\"button\" className=\"sledge-instant-search__trigger-filter-flyout\" onClick={() => setOpenFilterFlyout?.(true)}>\n <span>{language_filter || 'Filter'}</span>\n <FilterIcon width={18} height={18} color=\"#393d4e\" />\n </Button>\n {searchField}\n </ResultSearchFieldFlex>\n </FilterHorizontalBlockMobile>\n\n <SelectFieldWrapper>\n <SelectFieldItem>{sort}</SelectFieldItem>\n <SelectFieldItem>{limit}</SelectFieldItem>\n </SelectFieldWrapper>\n </>\n )}\n </ResultDataKeyword>\n\n {isLoading ? (\n <>{productGridSkeleton}</>\n ) : (\n <>\n {searchResult?.length ? (\n <>\n {productGrid}\n {pagination}\n </>\n ) : (\n resultEmpty\n )}\n </>\n )}\n </ResultData>\n </ResultWrapper>\n </>\n );\n};\n\nconst FilterStandardLayout = (props: IMobileLayoutProps) => {\n const { displaySettings, languageSettings, allowedFilter, isFirstLoading, isLoading, isLoadingProduct, isLoadingSetting, searchResult = [], components, skeleton } = props;\n\n const { filter: language_filter } = languageSettings || {};\n\n const {\n filterHorizontal = null,\n summaryText = null,\n searchField = null,\n sort = null,\n limit = null,\n productGrid = null,\n pagination = null,\n resultEmpty = null,\n columnGridSelector = null\n } = components || {};\n\n const {\n filterVertical: filterVerticalSkeleton,\n filterHorizontal: filterHorizontalSkeleton,\n summaryText: summaryTextSkeleton,\n searchField: searchFieldSkeletonComponent,\n selectOption: selectOptionSkeletonComponent,\n searchAndSelectOption: searchAndSelectOptionSkeleton,\n productGrid: productGridSkeleton\n } = skeleton || {};\n\n return (\n <>\n <ResultWrapper displaySettings={displaySettings}>\n <ResultData>\n <ResultDataKeyword>\n {isFirstLoading ? (\n <>\n {displaySettings?.filter?.show_total_products ? summaryTextSkeleton : null}\n {searchFieldSkeletonComponent}\n {filterHorizontalSkeleton}\n {selectOptionSkeletonComponent}\n </>\n ) : (\n <>\n <SummaryTextHorizontal>{summaryText}</SummaryTextHorizontal>\n\n <ColumnGridSelectorWrapper>{columnGridSelector}</ColumnGridSelectorWrapper>\n\n <FilterHorizontalBlockMobile>\n {searchField}\n {filterHorizontal?.({ deviceType: 'mobile' })}\n </FilterHorizontalBlockMobile>\n\n <SelectFieldWrapper>\n <SelectFieldItem>{sort}</SelectFieldItem>\n <SelectFieldItem>{limit}</SelectFieldItem>\n </SelectFieldWrapper>\n </>\n )}\n </ResultDataKeyword>\n\n {isLoading ? (\n <>{productGridSkeleton}</>\n ) : (\n <>\n {searchResult?.length ? (\n <>\n {productGrid}\n {pagination}\n </>\n ) : (\n resultEmpty\n )}\n </>\n )}\n </ResultData>\n </ResultWrapper>\n </>\n );\n};\n\nconst StickyFilterButtonLayout = (props: IMobileLayoutProps) => {\n const {\n displaySettings,\n languageSettings,\n allowedFilter,\n isFirstLoading,\n isLoading,\n isLoadingProduct,\n isLoadingSetting,\n searchResult = [],\n openFilterFlyout = false,\n setOpenFilterFlyout = () => {},\n components,\n skeleton\n } = props;\n\n const { filter: language_filter } = languageSettings || {};\n\n const {\n filterVertical = null,\n summaryText = null,\n searchField = null,\n sort = null,\n limit = null,\n productGrid = null,\n pagination = null,\n resultEmpty = null,\n columnGridSelector = null\n } = components || {};\n\n const {\n filterVertical: filterVerticalSkeleton,\n filterHorizontal: filterHorizontalSkeleton,\n summaryText: summaryTextSkeleton,\n searchField: searchFieldSkeletonComponent,\n selectOption: selectOptionSkeletonComponent,\n searchAndSelectOption: searchAndSelectOptionSkeleton,\n productGrid: productGridSkeleton\n } = skeleton || {};\n\n return (\n <>\n <FlyoutSidebar\n title={language_filter || 'Filter'}\n content={\n <>\n {filterVertical?.({\n filterLayoutType: 'flyout'\n })}\n </>\n }\n open={openFilterFlyout}\n setOpen={setOpenFilterFlyout}\n position=\"bottom\"\n />\n\n <Button type=\"button\" className=\"sledge-instant-search__trigger-filter-flyout sledge-instant-search__trigger-filter-flyout-sticky\" onClick={() => setOpenFilterFlyout?.(true)}>\n <span>{language_filter || 'Filter'}</span>\n <FilterIcon width={18} height={18} color=\"#393d4e\" />\n </Button>\n\n <ResultWrapper displaySettings={displaySettings}>\n <ResultData>\n <ResultDataKeyword>\n {isFirstLoading ? (\n <>\n {displaySettings?.filter?.show_total_products ? summaryTextSkeleton : null}\n {searchFieldSkeletonComponent}\n {filterHorizontalSkeleton}\n {selectOptionSkeletonComponent}\n </>\n ) : (\n <>\n <SummaryTextHorizontal>{summaryText}</SummaryTextHorizontal>\n\n <ColumnGridSelectorWrapper>{columnGridSelector}</ColumnGridSelectorWrapper>\n\n <FilterHorizontalBlockMobile>{searchField}</FilterHorizontalBlockMobile>\n\n <SelectFieldWrapper>\n <SelectFieldItem>{sort}</SelectFieldItem>\n <SelectFieldItem>{limit}</SelectFieldItem>\n </SelectFieldWrapper>\n </>\n )}\n </ResultDataKeyword>\n\n {isLoading ? (\n <>{productGridSkeleton}</>\n ) : (\n <>\n {searchResult?.length ? (\n <>\n {productGrid}\n {pagination}\n </>\n ) : (\n resultEmpty\n )}\n </>\n )}\n </ResultData>\n </ResultWrapper>\n </>\n );\n};\n\nexport const MobileLayout = (props: IMobileLayoutProps) => {\n const { displaySettings } = props;\n\n const renderLayout = () => {\n switch (displaySettings?.filter?.mobile_layout) {\n case 'flyout':\n return <FilterFlyoutLayout {...props} />;\n break;\n case 'standard':\n return <FilterStandardLayout {...props} />;\n break;\n case 'sticky_filter_button_flyout':\n return <StickyFilterButtonLayout {...props} />;\n break;\n\n default:\n return null;\n break;\n }\n };\n\n return (\n <RenderLayout device=\"mobile\" layout={displaySettings?.filter?.mobile_layout}>\n {renderLayout()}\n </RenderLayout>\n );\n};\n","import React from 'react';\n\nimport '@core/lib/polyfills';\n\nimport {\n Pagination,\n ProductGrid,\n Button,\n CollectionGrid,\n PageGrid,\n BlogGrid,\n SearchInputField,\n SelectField,\n SearchIcon,\n SkeletonLoading,\n ArticleGrid,\n Progress,\n FlyoutSidebar,\n FilterIcon,\n Alert,\n InfoCircleIcon\n} from '@core/components';\nimport { multiSearch, search, searchTrigger } from '@core/api/instant-search';\nimport { useDebounce, useEffectOnChange, useIntersectionObserver, useIsFirstRender, usePreviewSettings, usePrevious } from '@core/hooks';\nimport {\n DEFAULT_LIMIT_VALUE,\n DEFAULT_MAX_WIDTH_COMPONENT,\n DEFAULT_QUERY_PARAM,\n DEFAULT_QUERY_PRODUCT_MEILISEARCH,\n DEFAULT_QUERY_PUBLISHED_FILTER,\n HIERARCHICAL_FACET_OBJECT_ALIASES,\n LOCAL_STORAGE_KEY,\n MAX_LIMIT_HIERARCHICAL,\n OBJECT_DATA_STRING_KEY\n} from '@core/lib/const';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\nimport { currentMediaQuery, isFunction, objectPresent, scrollToElement, shopifyFormatMoney } from '@core/lib/helper';\nimport { createHierarchicalFacet, createQueryFilter, handleFacetValues, handleSearchResponse, keyOpenFilters, parseFacetObject } from './utils';\nimport useEffectCallback from '@core/hooks/useEffectCallback';\nimport { FacetComponent, FilterHorizontalComponent, FilterVerticalComponent } from './Atoms';\nimport {\n ColumnGridSelector,\n Facet,\n FacetBlockSelected,\n FilterActive,\n FilterHorizontal,\n FilterVertical,\n IColumnGridSelector,\n IFilterActiveProps,\n IFilterHorizontalProps,\n IFilterVerticalProps,\n Limit,\n PaginationOrLoadMore,\n Search,\n Sort,\n Tab\n} from './components';\nimport { DesktopLayout, MobileLayout } from './layouts';\n\ntype handleSetInitStatesType = { results?: any; data?: any; callback?(props: { valueAllowedFilter?: any }): void; isUpdateFilter?: boolean };\n\nexport interface ISearchResultWidgetProps {\n layoutType?: 'product-filter' | 'default';\n width?: string;\n query?: {\n keyword?: string;\n sortBy?: string;\n page?: string;\n limit?: string;\n };\n params?:\n | {\n collectionId?: string | number | '';\n collectionName?: string | '';\n }\n | undefined;\n children?: any;\n onAfterAddToCart?(state: 'success' | 'failed'): void;\n onAfterAddWishlist?(state: 'success' | 'failed'): void;\n onAfterRemoveWishlist?(state: 'success' | 'failed'): void;\n onAfterRenderProduct?(state: 'success' | 'failed'): void;\n onAfterRenderCollection?(state: 'success' | 'failed'): void;\n onAfterRenderPage?(state: 'success' | 'failed'): void;\n onAfterRenderBlog?(state: 'success' | 'failed'): void;\n onAfterRenderArticle?(state: 'success' | 'failed'): void;\n data?: any;\n sledgeSettings?: any;\n previewSettings?: any;\n currentTags?: string[] | number[];\n}\n\ninterface IResultProps {\n layoutType?: 'product-filter' | 'default';\n isFirstLoading?: boolean;\n keyword?: string;\n debouncedKeyword?: string;\n clickedTabIndexId?: string | number | null;\n clickedTabIndexName?: string | null;\n clickedTabIndexType?: string | null;\n isLoadingSetting?: boolean;\n allowedSorts?: any[];\n allowedFilter?: any[];\n facets?: any[];\n defaultFacetStats?: any;\n hideFilterWhenOneValue?: boolean;\n hiddenTags?: [];\n displaySettings?: any;\n colorSwatches?: any[];\n defaultSort?: string;\n defaultLimit?: any;\n languageSettings?: any;\n hierarchicalProductTypeSettings?: any;\n hierarchicalCollectionsSettings?: any;\n query?: {\n keyword?: string;\n sortBy?: string;\n page?: string;\n limit?: string;\n };\n params?:\n | {\n collectionId?: string | number | '';\n collectionName?: string | '';\n }\n | undefined;\n isJsVersion?: any;\n productCardsComponent?: any;\n collectionCardsComponent?: any;\n pageCardsComponent?: any;\n blogCardsComponent?: any;\n articleCardsComponent?: any;\n onAfterAddToCart?(state: 'success' | 'failed'): void;\n onAfterAddWishlist?(state: 'success' | 'failed'): void;\n onAfterRemoveWishlist?(state: 'success' | 'failed'): void;\n onAfterRenderProduct?(state: 'success' | 'failed'): void;\n onAfterRenderCollection?(state: 'success' | 'failed'): void;\n onAfterRenderPage?(state: 'success' | 'failed'): void;\n onAfterRenderBlog?(state: 'success' | 'failed'): void;\n onAfterRenderArticle?(state: 'success' | 'failed'): void;\n setIsLoading?(value: React.SetStateAction<boolean>): void;\n setKeyword?(value: React.SetStateAction<string>): void;\n filterHorizontalSkeleton?: React.ReactNode;\n filterHorizontalSkeletonComponent?: React.ReactNode;\n filterVerticalSkeleton?: React.ReactNode;\n productGridSkeleton?: React.ReactNode;\n searchAndSelectOptionSkeleton?: React.ReactNode;\n summaryTextSkeleton?: React.ReactNode;\n searchFieldSkeletonComponent?: React.ReactNode;\n selectOptionSkeletonComponent?: React.ReactNode;\n searchResultContainerRef?: any;\n data?: any;\n settings?: any;\n isReplaceWidgetList?: boolean;\n setIsReplaceWidgetList?(value: React.SetStateAction<boolean>): void;\n searchResultFacets?: any;\n handleChangeKeyword?(value: string): void;\n generalDataSettings?: any;\n searchParams?: any;\n setSeparatedFilterItem?(value: React.SetStateAction<any>): void;\n separatedFilterItem?: any;\n clickedFacets?: any;\n setClickedFacets?(value: React.SetStateAction<any>): void;\n parentPreviousState?: any;\n clickedOpenFilterHorizontalId?: string | number | null | '';\n setClickedOpenFilterHorizontalId?(value: React.SetStateAction<string | number | null | ''>): void;\n clickedOpenFilterHorizontalMobileId?: string | number | null | '';\n setClickedOpenFilterHorizontalMobileId?(value: React.SetStateAction<string | number | null | ''>): void;\n defaultFilterItems?: any[];\n mobileShowSelectedSort?: boolean;\n soldProductAtEnd?: boolean;\n attributesToRetrieve?: any;\n allowedFilterSlider?: any[];\n hierarchicalFacetAliases?: any[];\n usePublishedFilter?: boolean;\n showOutOfStock?: boolean;\n handleSetInitStates?(props: handleSetInitStatesType): void;\n querySortBy?: string;\n queryPage?: string;\n queryLimit?: string;\n valueFilterPriceChange?: number[];\n setValueFilterPriceChange?(value: React.SetStateAction<number[]>): void;\n valueFilterOnSaleChange?: number[];\n setValueFilterOnSaleChange?(value: React.SetStateAction<number[]>): void;\n valueFilterSliderOthers?: any;\n setValueFilterSliderOthers?(value: React.SetStateAction<any>): void;\n tabs?: any[];\n initStatesFirstTime?: boolean;\n setInitStatesFirstTime?(value: React.SetStateAction<boolean>): void;\n allowedTabs?: any[];\n setAllowedTabs?(value: React.SetStateAction<any[]>): void;\n isDesktopLayout?: boolean;\n previewSettings?: any;\n currentColumnGrid?: IColumnGridSelector | null;\n setCurrentColumnGrid?(value: React.SetStateAction<IColumnGridSelector | null>): void;\n}\n\nexport const SearchResultWidget = (props: ISearchResultWidgetProps) => {\n const {\n layoutType = 'default',\n width = DEFAULT_MAX_WIDTH_COMPONENT,\n query,\n params,\n children,\n onAfterAddToCart,\n onAfterAddWishlist,\n onAfterRemoveWishlist,\n onAfterRenderProduct,\n onAfterRenderCollection,\n onAfterRenderPage,\n onAfterRenderBlog,\n onAfterRenderArticle,\n data: propsData,\n sledgeSettings,\n previewSettings: previewSettingsProp,\n currentTags = []\n } = props;\n\n const queryKeyword = query?.keyword ? query.keyword : DEFAULT_QUERY_PARAM.KEYWORD;\n const querySortBy = query?.sortBy ? query.sortBy : DEFAULT_QUERY_PARAM.SORT_BY;\n const queryPage = query?.page ? query.page : DEFAULT_QUERY_PARAM.PAGE;\n const queryLimit = query?.limit ? query.limit : DEFAULT_QUERY_PARAM.LIMIT;\n\n const { collectionId } = params || {};\n\n const searchParams = typeof document !== 'undefined' ? new URLSearchParams(document?.location?.search) : null;\n\n const { generalPreviewSettings, instantSearchPreviewSettings, previewSettings } = usePreviewSettings({\n defaultSettings: previewSettingsProp,\n nestedProperty: layoutType === 'product-filter' ? 'sledge.instantSearch.productFilter.preview' : 'sledge.instantSearch.searchResult.preview'\n });\n\n const [settings] = React.useState(instantSearchPreviewSettings || typeof localStorage !== 'undefined' ? JSON.parse(localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || '{}') : {});\n const [isFirstLoading, setIsFirstLoading] = React.useState(!propsData);\n const [isLoading, setIsLoading] = React.useState(!propsData);\n const [keyword, setKeyword] = React.useState(searchParams?.get(queryKeyword));\n const [clickedTabIndexId, setClickedTabIndexId] = React.useState<string | number | null>(null);\n const [clickedTabIndexName, setClickedTabIndexName] = React.useState<string | null>(null);\n const [clickedTabIndexType, setClickedTabIndexType] = React.useState<string | null>(null);\n const [resultComponent, setResultComponent] = React.useState(<ResultProduct />);\n const [isLoadingSetting, setIsLoadingSetting] = React.useState(!propsData);\n const [allowedSorts, setAllowedSorts] = React.useState(sledgeSettings?.instantsearch?.allowed_sorts || []);\n const [allowedFilter, setAllowedFilter] = React.useState([]);\n const [allowedTabs, setAllowedTabs] = React.useState<any[]>([]);\n const [tabs, setTabs] = React.useState<any[]>([]);\n const [activeTabs, setActiveTabs] = React.useState<any>({});\n const [facets, setFacets] = React.useState<any[]>([]);\n const [indexProduct, setIndexProduct] = React.useState(sledgeSettings?.instantsearch?.index_product || '');\n const [hiddenTags, setHiddenTags] = React.useState(sledgeSettings?.instantsearch?.hidden_tags || []);\n const [displaySettings, setDisplaySettings] = React.useState<any>(sledgeSettings?.instantsearch?.display || {});\n const [colorSwatches, setColorSwatches] = React.useState<any[]>(sledgeSettings?.instantsearch?.colors || []);\n const [defaultSort, setDefaultSort] = React.useState(searchParams?.get(querySortBy) ? searchParams?.get(querySortBy) : sledgeSettings?.instantsearch?.default_sort || '');\n const [defaultLimit, setDefaultLimit] = React.useState<any>(DEFAULT_LIMIT_VALUE[0]);\n const [languageSettings, setLanguageSettings] = React.useState(sledgeSettings?.instantsearch?.languages || {});\n const [hierarchicalProductTypeSettings, setHierarchicalProductTypeSettings] = React.useState(sledgeSettings?.instantsearch?.hierarchical_product_type || {});\n const [hierarchicalCollectionsSettings, setHierarchicalCollectionsSettings] = React.useState(sledgeSettings?.instantsearch?.hierarchical_collections || {});\n const [initStatesFirstTime, setInitStatesFirstTime] = React.useState(true);\n const [defaultFacetStats, setDefaultFacetStats] = React.useState({});\n const [hideFilterWhenOneValue, setHideFilterWhenOneValue] = React.useState(false);\n const [isReplaceWidgetList, setIsReplaceWidgetList] = React.useState(false);\n const [searchResultFacets, setSearchResultFacets] = React.useState<any>({});\n const [generalDataSettings, setGeneralDataSettings] = React.useState<any>(sledgeSettings?.general || {});\n const [instantSearchSettings, setInstantSearchSettings] = React.useState<any>(sledgeSettings?.instantsearch || {});\n const [clickedFacets, setClickedFacets] = React.useState<any>(\n currentTags?.length\n ? {\n tags: currentTags\n }\n : {}\n );\n const [clickedOpenFilterHorizontalId, setClickedOpenFilterHorizontalId] = React.useState<string | number | null | ''>(null);\n const [clickedOpenFilterHorizontalMobileId, setClickedOpenFilterHorizontalMobileId] = React.useState<string | number | null | ''>(null);\n const [separatedFilterItem, setSeparatedFilterItem]: any = React.useState({});\n const [defaultFilterItems, setDefaultFilterItems] = React.useState<any[]>([]);\n const [mobileShowSelectedSort, setMobileShowSelectedSort] = React.useState(true);\n const [soldProductAtEnd, setSoldProductAtEnd] = React.useState(false);\n const [attributesToRetrieve, setAttributesToRetrieve] = React.useState(sledgeSettings?.instantsearch?.attributes_to_retrieve || []);\n const [totalHitsProduct, setTotalHitsProduct] = React.useState(0);\n const [allowedFilterSlider, setAllowedFilterSlider] = React.useState<any[]>([]);\n const [hierarchicalFacetAliases, setHierarchicalFacetAliases] = React.useState<any[]>([]);\n const [usePublishedFilter, setUsePublishedFilter] = React.useState(false);\n const [showOutOfStock, setShowOutOfStock] = React.useState(false);\n const [valueFilterPriceChange, setValueFilterPriceChange] = React.useState<number[]>([]);\n const [valueFilterOnSaleChange, setValueFilterOnSaleChange] = React.useState<number[]>([]);\n const [valueFilterSliderOthers, setValueFilterSliderOthers] = React.useState<any>({});\n const [currentColumnGrid, setCurrentColumnGrid] = React.useState<IColumnGridSelector | null>(null);\n\n // Debounced states\n const debouncedKeyword = useDebounce(keyword, 500);\n\n // Separate Components\n let productCardsComponent: any = null;\n let collectionCardsComponent: any = null;\n let pageCardsComponent: any = null;\n let blogCardsComponent: any = null;\n let articleCardsComponent: any = null;\n React.Children.map(children, (child) => {\n if (React.isValidElement(child) && isFunction(child.type)) {\n const { productCard, collectionCard, pageCard, blogCard, articleCard }: any = child?.props || {};\n\n if (productCard && isFunction(productCard)) productCardsComponent = productCard;\n if (collectionCard && isFunction(collectionCard)) collectionCardsComponent = collectionCard;\n if (pageCard && isFunction(pageCard)) pageCardsComponent = pageCard;\n if (blogCard && isFunction(blogCard)) blogCardsComponent = blogCard;\n if (articleCard && isFunction(articleCard)) articleCardsComponent = articleCard;\n }\n });\n\n const { isRenderApp, isJsVersion, triggerRenderMultipleComponent } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { instantSearch: isRenderAppInstantSearch } = isRenderApp || {};\n const { value: valueRenderInstantSearchResult, trigger: triggerRenderInstantSearchResult } = triggerRenderMultipleComponent?.instantSearch?.searchResult || {};\n\n const searchResultContainerRef = React.useRef(null);\n\n const previousState: any = usePrevious({ keyword });\n\n const isDesktopLayout = ['lg', 'xl'].includes(currentMediaQuery());\n\n const handleChangeTabIndex = React.useCallback(\n (params: { id: string; name: string; type: string }) => {\n const { id, name, type } = params;\n\n setClickedTabIndexId(id);\n setClickedTabIndexName(name);\n setClickedTabIndexType(type);\n setResultComponent(id.includes(indexProduct) ? <ResultProduct /> : <ResultCategory />);\n },\n [indexProduct]\n );\n\n const handleFilterStates = ({ data = {}, valueSearchResultFacets = {} }: { data?: any; valueSearchResultFacets?: any }) => {\n const { filters } = data;\n\n let allowedFilters = sledgeSettings?.instantsearch?.filters?.length ? sledgeSettings?.instantsearch?.filters : filters?.length ? filters : [];\n let isSetFilter = false;\n let valueAllowedFilter: any = [];\n let valueDefaultFilterItems: any[] = [];\n let valueAllowedFilterSlider: any[] = [];\n let valueHierarchicalFacetAliases: any[] = [];\n\n if (!isSetFilter) {\n allowedFilters?.map((filter: any) => {\n const { active, collections, items } = filter;\n\n if (!active) return;\n\n const newItems = items?.map(({ value, ...otherItem }: any) => {\n return {\n ...otherItem,\n value: otherItem?.display === 'tree' ? HIERARCHICAL_FACET_OBJECT_ALIASES[value] || value : value\n };\n });\n\n if (collectionId && collections?.includes(String(collectionId))) {\n isSetFilter = true;\n valueAllowedFilter = newItems;\n } else {\n if (collections?.includes('all')) {\n isSetFilter = true;\n valueAllowedFilter = newItems;\n }\n }\n });\n }\n\n if (valueAllowedFilter?.length) {\n valueDefaultFilterItems = valueAllowedFilter\n .map((filter: any) => {\n const { value, label, display, settings } = filter;\n const { prefix, filter_list, selected_filter } = settings || {};\n\n const isDisplaySlider = ['slider', 'input_range', 'slider_with_input_range'].includes(display.toLowerCase());\n\n if (isDisplaySlider) return;\n\n let items: any[] = [];\n if (display.toLowerCase() === 'tree') {\n for (let level = 0; level < MAX_LIMIT_HIERARCHICAL; level++) {\n items = [...items, ...(valueSearchResultFacets?.[`${value}.lvl${level}`] || [])];\n }\n } else {\n items = valueSearchResultFacets?.[value];\n }\n\n return {\n value,\n label,\n settings,\n items: items\n ?.map((item: any) => {\n const isManualFilter = item && filter_list === 'manual' && !selected_filter?.includes(item?.value);\n const isPrefixFilter = item && filter_list === 'prefix' && !prefix?.find((prefixItem: any) => item?.value?.startsWith(prefixItem));\n\n if (!item || isManualFilter || isPrefixFilter) return;\n\n return item.value;\n })\n ?.filter((item: any) => item)\n };\n })\n .filter((item: any) => item);\n\n valueAllowedFilterSlider = valueAllowedFilter\n .map((filter: any) => {\n const { value, display } = filter;\n\n const isDisplaySlider = ['slider', 'input_range', 'slider_with_input_range'].includes(display.toLowerCase());\n\n if (!isDisplaySlider) return;\n\n return value;\n })\n .filter((item: any) => item);\n\n valueHierarchicalFacetAliases = valueAllowedFilter\n .map((filter: any) => {\n const { value, display } = filter;\n\n const isDisplayTree = display.toLowerCase() === 'tree';\n\n if (!isDisplayTree) return;\n\n return value;\n })\n .filter((item: any) => item);\n }\n\n return {\n isSetFilter,\n valueAllowedFilter,\n valueDefaultFilterItems,\n valueAllowedFilterSlider,\n valueHierarchicalFacetAliases\n };\n };\n\n const handleSetInitStates = ({ results = {}, data = {}, callback, isUpdateFilter = false }: handleSetInitStatesType) => {\n const { filters, index_product, tabs, hidden_tags, show_out_of_stock, display, use_published_filter } = data;\n const {\n facetStats,\n totalHits: totalHitsResult,\n facetDistribution\n } = isUpdateFilter ? results || {} : layoutType === 'default' ? results?.find?.(({ indexUid }: any) => indexUid.includes(index_product)) || {} : results || {};\n\n let totalHits = totalHitsResult || 0;\n\n // For save value init total hits product\n if (typeof localStorage !== 'undefined') {\n const INIT_TOTAL_HITS = Number(localStorage.getItem(layoutType === 'default' ? LOCAL_STORAGE_KEY.SEARCH_RESULT_INIT_TOTAL_HITS : LOCAL_STORAGE_KEY.PRODUCT_FILTER_INIT_TOTAL_HITS) || 0);\n\n if (!(INIT_TOTAL_HITS > 1)) {\n localStorage.setItem(layoutType === 'default' ? LOCAL_STORAGE_KEY.SEARCH_RESULT_INIT_TOTAL_HITS : LOCAL_STORAGE_KEY.PRODUCT_FILTER_INIT_TOTAL_HITS, totalHits);\n }\n\n totalHits = totalHits <= 1 ? INIT_TOTAL_HITS : totalHits;\n }\n\n setTotalHitsProduct(totalHits || 0);\n\n let valueHideFilterWhenOneValue = display?.filter?.hide_when_one_value && totalHits <= 1;\n let valueSearchResultFacets = facetDistribution\n ? Object.fromEntries(\n Object.entries(facetDistribution).map((facet) => {\n let value = facet[0];\n let items: any = [];\n\n if (value === 'variants.inventory_quantity') {\n items = [\n {\n name: 'In Stock',\n value: '> 0'\n }\n ];\n } else {\n items = Object.keys(facetDistribution[value]).map((item) => {\n return {\n name: item,\n value: item,\n total: facetDistribution[value][item] || 0\n };\n });\n }\n\n return [value, items];\n })\n )\n : {};\n\n setSearchResultFacets(valueSearchResultFacets);\n setDefaultFacetStats(facetStats);\n setHideFilterWhenOneValue(valueHideFilterWhenOneValue);\n\n const { isSetFilter, valueAllowedFilter, valueDefaultFilterItems, valueAllowedFilterSlider, valueHierarchicalFacetAliases } = handleFilterStates({\n data,\n valueSearchResultFacets\n });\n\n if (!(!display?.filter?.enable_on_search || valueHideFilterWhenOneValue)) {\n if (isSetFilter) setAllowedFilter(valueAllowedFilter);\n if (valueAllowedFilter?.length) {\n setDefaultFilterItems(valueDefaultFilterItems);\n setAllowedFilterSlider(valueAllowedFilterSlider);\n setHierarchicalFacetAliases(valueHierarchicalFacetAliases);\n }\n }\n\n if (layoutType === 'default') {\n setAllowedTabs(\n tabs?.map((tab: any) => {\n const { index } = tab;\n const { totalHits }: any = results?.find?.(({ indexUid }: any) => indexUid === index) || {};\n\n return {\n ...tab,\n ...{\n total: totalHits\n }\n };\n })\n );\n }\n\n callback?.({\n valueAllowedFilter\n });\n };\n\n const handleInitStates = async (data: any) => {\n const { filters, index_product, tabs, hidden_tags, show_out_of_stock, display, use_published_filter } = data;\n\n let getTabs = layoutType === 'product-filter' ? tabs.filter(({ index }: any) => index?.includes(index_product)) : tabs;\n getTabs.map((tab: any) => {\n const { index } = tab;\n\n let isSetFilter = false;\n let getFacets: any = [];\n\n if (!isSetFilter)\n filters?.map((filter: any) => {\n const { active, collections, items } = filter;\n\n if (!active) return;\n\n const newItems = items?.map(({ value, ...otherItem }: any) => (otherItem?.display === 'tree' ? HIERARCHICAL_FACET_OBJECT_ALIASES[value] || value : value));\n\n if (collectionId && collections?.includes(String(collectionId))) {\n isSetFilter = true;\n getFacets = newItems;\n } else {\n if (collections?.includes('all')) {\n isSetFilter = true;\n getFacets = newItems;\n }\n }\n });\n\n let isProductIndex = index.includes(index_product);\n let isHasProductFacets = isProductIndex && getFacets.length;\n\n if (isHasProductFacets) setFacets(getFacets);\n });\n\n const { isSetFilter, valueAllowedFilter, valueDefaultFilterItems, valueAllowedFilterSlider, valueHierarchicalFacetAliases } = handleFilterStates({\n data,\n valueSearchResultFacets: searchResultFacets\n });\n\n if (isSetFilter) setAllowedFilter(valueAllowedFilter);\n if (valueAllowedFilter?.length) {\n setDefaultFilterItems(valueDefaultFilterItems);\n setAllowedFilterSlider(valueAllowedFilterSlider);\n setHierarchicalFacetAliases(valueHierarchicalFacetAliases);\n }\n\n setIsFirstLoading(false);\n setIsLoading(false);\n\n return;\n };\n\n const handleSettings = ({ LOCAL_STORAGE_INSTANT_SEARCH_SETTING, isPreviewSettings = false }: { LOCAL_STORAGE_INSTANT_SEARCH_SETTING: any; isPreviewSettings?: boolean }) => {\n setIsLoadingSetting(true);\n\n let response: any;\n let responseGeneral: any;\n let getFirstIndex: any;\n\n response = instantSearchPreviewSettings || JSON.parse(LOCAL_STORAGE_INSTANT_SEARCH_SETTING as string);\n responseGeneral = generalPreviewSettings || JSON.parse((localStorage.getItem(LOCAL_STORAGE_KEY.GENERAL_SETTING) || null) as string);\n\n if (!response) return;\n\n setInstantSearchSettings(response);\n\n if (responseGeneral) setGeneralDataSettings(responseGeneral);\n\n const {\n active_tabs,\n allowed_sorts,\n default_sort,\n index_product,\n tabs,\n hidden_tags,\n display,\n colors,\n show_out_of_stock,\n languages,\n hierarchical_product_type,\n hierarchical_collections,\n mobile_show_selected_sort,\n sold_product_at_end,\n attributes_to_retrieve,\n collections_all_id,\n use_published_filter\n } = response;\n\n setActiveTabs(active_tabs);\n\n const { limit } = display?.search || {};\n\n let valueAllowedSorts = allowed_sorts?.length\n ? collectionId || collections_all_id\n ? allowed_sorts.map((allowed_sort: any) => {\n const { value, ...other_allowed_sort } = allowed_sort;\n\n const valueReplaced = collectionId ? String(collectionId) : String(collections_all_id);\n\n return {\n ...other_allowed_sort,\n value: String(value).replaceAll(OBJECT_DATA_STRING_KEY.COLLECTION_ID, valueReplaced)\n };\n })\n : allowed_sorts.filter((allowed_sort: any) => {\n const { value } = allowed_sort;\n\n if (!String(value).includes(OBJECT_DATA_STRING_KEY.COLLECTION_ID)) return allowed_sort;\n })\n : [];\n\n setAllowedSorts(valueAllowedSorts);\n setIndexProduct(index_product);\n setHiddenTags(hidden_tags);\n setDisplaySettings(display);\n setColorSwatches(colors);\n setDefaultSort(\n searchParams?.get(querySortBy)\n ? searchParams?.get(querySortBy)\n : collectionId\n ? String(default_sort).replaceAll(OBJECT_DATA_STRING_KEY.COLLECTION_ID, String(collectionId))\n : collections_all_id\n ? String(default_sort).replaceAll(OBJECT_DATA_STRING_KEY.COLLECTION_ID, String(collections_all_id))\n : String(default_sort).includes(OBJECT_DATA_STRING_KEY.COLLECTION_ID)\n ? valueAllowedSorts[0]?.value\n : default_sort\n );\n setDefaultLimit(instantSearchPreviewSettings ? limit : localStorage?.getItem(LOCAL_STORAGE_KEY.LIMIT_PRODUCT) || limit);\n setLanguageSettings(languages);\n setHierarchicalProductTypeSettings(hierarchical_product_type);\n setHierarchicalCollectionsSettings(hierarchical_collections);\n setMobileShowSelectedSort(mobile_show_selected_sort);\n setSoldProductAtEnd(sold_product_at_end);\n setAttributesToRetrieve(attributes_to_retrieve);\n setUsePublishedFilter(use_published_filter);\n setShowOutOfStock(show_out_of_stock);\n setTabs(tabs);\n\n if (!clickedTabIndexId) {\n getFirstIndex = tabs?.find?.(({ index }: any) => index.includes(index_product));\n\n if (Object.keys(getFirstIndex).length) {\n setClickedTabIndexId(getFirstIndex.index);\n setClickedTabIndexName(getFirstIndex.name);\n setClickedTabIndexType(getFirstIndex.type);\n }\n }\n\n setIsLoadingSetting(false);\n\n if (isPreviewSettings) {\n let valueHideFilterWhenOneValue = display?.filter?.hide_when_one_value && totalHitsProduct <= 1;\n\n const { isSetFilter, valueAllowedFilter, valueDefaultFilterItems, valueAllowedFilterSlider, valueHierarchicalFacetAliases } = handleFilterStates({\n data: response,\n valueSearchResultFacets: searchResultFacets\n });\n\n if (!(!display?.filter?.enable_on_search || valueHideFilterWhenOneValue)) {\n if (isSetFilter) setAllowedFilter(valueAllowedFilter);\n if (valueAllowedFilter?.length) {\n setDefaultFilterItems(valueDefaultFilterItems);\n setAllowedFilterSlider(valueAllowedFilterSlider);\n setHierarchicalFacetAliases(valueHierarchicalFacetAliases);\n }\n }\n\n setAllowedTabs(\n tabs\n ?.map?.((allowedTab: any) => {\n const { type } = allowedTab;\n\n const total = allowedTabs?.find?.((tab: any) => tab?.type === type)?.total || 0;\n\n return {\n ...allowedTab,\n ...{\n total\n }\n };\n })\n ?.filter?.((item: any) => item)\n );\n }\n };\n\n const handleChangeKeyword = React.useCallback((value: string) => {\n const searchParams = new URLSearchParams(document.location.search);\n\n searchParams.set(queryKeyword, value);\n\n setKeyword(value);\n\n if (!objectPresent(previewSettings)) window.history.pushState(null, '', `${document.location.pathname}?${searchParams.toString()}`);\n }, []);\n\n const initStates = () => {\n const INSTANT_SEARCH_SETTING = instantSearchPreviewSettings || JSON.parse((localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || null) as string);\n if (INSTANT_SEARCH_SETTING) handleInitStates(INSTANT_SEARCH_SETTING);\n };\n\n useEffectOnChange(() => {\n handleSettings({\n LOCAL_STORAGE_INSTANT_SEARCH_SETTING: localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || null,\n isPreviewSettings: true\n });\n }, [previewSettings]);\n\n useEffectCallback(() => {\n if (!isRenderAppInstantSearch) return;\n\n initStates();\n handleSettings({\n LOCAL_STORAGE_INSTANT_SEARCH_SETTING: localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || null\n });\n\n if (typeof window !== 'undefined') {\n if (layoutType === 'default') {\n if (window?.sledge?.instantSearch?.searchResult)\n window.sledge.instantSearch.searchResult.search = (keyword = '') => {\n handleChangeKeyword?.(keyword);\n };\n } else {\n if (window?.sledge?.instantSearch?.productFilter)\n window.sledge.instantSearch.productFilter.search = (keyword = '') => {\n handleChangeKeyword?.(keyword);\n };\n }\n }\n }, [isRenderAppInstantSearch]);\n\n useEffectCallback(() => {\n if (!valueRenderInstantSearchResult) return;\n\n if (triggerRenderInstantSearchResult) triggerRenderInstantSearchResult('');\n\n setKeyword(valueRenderInstantSearchResult);\n }, [valueRenderInstantSearchResult]);\n\n useEffectOnChange(() => {\n initStates();\n }, [debouncedKeyword]);\n\n // Skeleton Components\n const filterHorizontalSkeletonComponent = (\n <div className=\"sledge-instant-search__result-filter-horizontal-skeleton\">\n {[1, 2, 3, 4, 5, 6, 7].map((index: number) => (\n <SkeletonLoading.Item width=\"106px\" height=\"42px\" rounded=\"md\" color=\"lighten\" key={index} />\n ))}\n </div>\n );\n\n const tabSkeleton =\n layoutType === 'default' ? (\n <div className=\"sledge-instant-search__result-tab-list sledge-instant-search__result-tab-list-skeleton\">\n {[1, 2, 3, 4, 5].map((index: number) => (\n <SkeletonLoading.Item width=\"122px\" height=\"28px\" rounded=\"md\" color=\"lighten\" key={index} />\n ))}\n </div>\n ) : null;\n\n const filterHorizontalSkeleton =\n displaySettings?.filter?.enable_on_search && displaySettings?.filter?.layout === 'horizontal' && !hideFilterWhenOneValue ? filterHorizontalSkeletonComponent : null;\n\n const filterVerticalSkeleton =\n displaySettings?.filter?.enable_on_search && displaySettings?.filter?.layout === 'vertical' && !hideFilterWhenOneValue ? (\n <>\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: '8px',\n justifyContent: 'space-between',\n marginBottom: '23px'\n }}\n >\n <SkeletonLoading.Item width=\"117px\" height=\"28px\" color=\"lighten\" rounded=\"md\" />\n <SkeletonLoading.Item width=\"80px\" height=\"28px\" color=\"lighten\" rounded=\"md\" />\n </div>\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '18px'\n }}\n />\n {[1, 2, 3].map((index: number) => (\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n key={index}\n style={{\n maxWidth: '163px',\n marginBottom: '9px'\n }}\n />\n ))}\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '163px',\n marginBottom: '18px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '14px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '163px',\n marginBottom: '9px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '163px',\n marginBottom: '17px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '38px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '35px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '12px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '163px',\n marginBottom: '9px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '163px',\n marginBottom: '20px'\n }}\n />\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '12px'\n }}\n />\n {[1, 2, 3].map((index: number) => (\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n key={index}\n style={{\n maxWidth: '163px',\n marginBottom: '9px'\n }}\n />\n ))}\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n maxWidth: '270px',\n marginBottom: '11px'\n }}\n />\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: '12px'\n }}\n >\n {[1, 2, 3, 4, 5, 6, 7, 8, 9].map((index: number) => (\n <SkeletonLoading.Item width=\"34px\" height=\"34px\" color=\"lighten\" rounded=\"full\" key={index} />\n ))}\n </div>\n </>\n ) : null;\n\n const productGridSkeleton = (\n <>\n {displaySettings?.filter?.show_total_products && displaySettings?.filter?.layout === 'vertical' ? (\n <div className=\"sledge__hide-element-lg-on-mobile\">\n <SkeletonLoading.Item\n width=\"117px\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n style={{\n marginBottom: '21px'\n }}\n />\n </div>\n ) : null}\n <SkeletonLoading.ProductGrid count={12} type=\"large\" currentColumnGrid={currentColumnGrid} />\n </>\n );\n\n const summaryTextSkeleton = (\n <div className=\"sledge-instant-search__result-data-summary sledge-instant-search__result-data-summary-filter-horizontal\">\n <SkeletonLoading.Item width=\"117px\" height=\"28px\" color=\"lighten\" rounded=\"md\" />\n </div>\n );\n\n const searchFieldSkeletonComponent = <SkeletonLoading.Item width=\"100%\" height=\"42px\" color=\"lighten\" rounded=\"lg\" className=\"sledge-instant-search__result-data-keyword-form\" />;\n\n const selectOptionSkeletonComponent = (\n <div className=\"sledge-instant-search__result-data-summary-item sledge-instant-search__result-data-summary-select-field\">\n <div className=\"sledge-instant-search__result-data-summary-select-field-item\">\n <SkeletonLoading.Item width=\"150px\" height=\"42px\" color=\"lighten\" rounded=\"lg\" />\n </div>\n <div className=\"sledge-instant-search__result-data-summary-select-field-item\">\n <SkeletonLoading.Item width=\"150px\" height=\"42px\" color=\"lighten\" rounded=\"lg\" />\n </div>\n </div>\n );\n\n const searchAndSelectOptionSkeleton = (\n <div className=\"sledge-instant-search__result-data-keyword\">\n {displaySettings?.filter?.show_total_products && displaySettings?.filter?.layout === 'horizontal' ? summaryTextSkeleton : null}\n {searchFieldSkeletonComponent}\n {selectOptionSkeletonComponent}\n </div>\n );\n\n const mobileFilterWithSearchAndSelectOptionSkeleton = (\n <div className=\"sledge__hide-element-mobile-on-lg sledge-instant-search__mobile-filter-search-skeleton\">\n <div className=\"sledge-instant-search__result-data-keyword\">\n {displaySettings?.filter?.show_total_products && displaySettings?.filter?.layout === 'horizontal' ? summaryTextSkeleton : null}\n {searchFieldSkeletonComponent}\n {filterHorizontalSkeletonComponent}\n {selectOptionSkeletonComponent}\n </div>\n </div>\n );\n\n const containerStyle = {\n maxWidth: width\n };\n\n const alertFirstSyncComponent =\n !isFirstLoading && !totalHitsProduct && instantSearchSettings?.first_sync ? (\n <Alert className=\"sledge-instant-search__alert-first-sync-product\" type=\"info\" icon={<InfoCircleIcon width={24} height={24} color=\"#003a5a\" />}>\n <div>Products and Collections indexing is in progress. Product Filter and Instant Search widgets may appear empty during this process.</div>\n <p></p>\n <div>The products and collections will become visible in the widgets once indexing is complete.</div>\n </Alert>\n ) : null;\n\n const tabItems = instantSearchPreviewSettings\n ? tabs\n ?.map?.((allowedTab: any) => {\n const { type } = allowedTab;\n\n const total = allowedTabs?.find?.((tab: any) => tab?.type === type)?.total || 0;\n\n if (!activeTabs?.[type]) return;\n\n return {\n ...allowedTab,\n ...{\n total\n }\n };\n })\n ?.filter?.((item: any) => item)\n : allowedTabs;\n\n return (\n <div className=\"sledge-instant-search__result-container\" ref={searchResultContainerRef} style={containerStyle}>\n {alertFirstSyncComponent}\n\n {isFirstLoading ? (\n tabSkeleton\n ) : layoutType === 'default' && allowedTabs?.length ? (\n <Tab items={tabItems} layoutType={layoutType} clickedTabIndexId={clickedTabIndexId} handleChangeTab={handleChangeTabIndex} />\n ) : (\n tabSkeleton\n )}\n\n {isFirstLoading && layoutType?.length && !propsData ? (\n <>\n {mobileFilterWithSearchAndSelectOptionSkeleton}\n <div className=\"sledge__hide-element-lg-on-mobile\">{filterHorizontalSkeleton}</div>\n <div className=\"sledge-instant-search__result-wrapper sledge-instant-search__result-wrapper-skeleton\">\n {displaySettings?.filter?.enable_on_search && displaySettings?.filter?.layout === 'vertical' && !hideFilterWhenOneValue ? (\n <div className=\"sledge-instant-search__result-filter sledge__hide-element-lg-on-mobile\">{filterVerticalSkeleton}</div>\n ) : null}\n <div className=\"sledge-instant-search__result-data\">\n <div className=\"sledge__hide-element-lg-on-mobile\">{searchAndSelectOptionSkeleton}</div>\n\n {productGridSkeleton}\n </div>\n </div>\n </>\n ) : (\n React.cloneElement(resultComponent, {\n layoutType,\n isFirstLoading,\n keyword,\n debouncedKeyword,\n clickedTabIndexId,\n clickedTabIndexName,\n clickedTabIndexType,\n isLoadingSetting,\n allowedSorts,\n allowedFilter,\n facets,\n defaultFacetStats,\n hideFilterWhenOneValue,\n hiddenTags,\n displaySettings,\n colorSwatches,\n defaultSort,\n defaultLimit,\n languageSettings,\n hierarchicalProductTypeSettings,\n hierarchicalCollectionsSettings,\n query,\n params,\n isJsVersion,\n productCardsComponent,\n collectionCardsComponent,\n pageCardsComponent,\n blogCardsComponent,\n articleCardsComponent,\n onAfterAddToCart,\n onAfterAddWishlist,\n onAfterRemoveWishlist,\n onAfterRenderProduct,\n onAfterRenderCollection,\n onAfterRenderPage,\n onAfterRenderBlog,\n onAfterRenderArticle,\n setIsLoading,\n setKeyword,\n filterHorizontalSkeleton,\n filterHorizontalSkeletonComponent,\n filterVerticalSkeleton,\n productGridSkeleton,\n searchAndSelectOptionSkeleton,\n summaryTextSkeleton,\n searchFieldSkeletonComponent,\n selectOptionSkeletonComponent,\n searchResultContainerRef,\n data: propsData,\n settings,\n isReplaceWidgetList,\n setIsReplaceWidgetList,\n searchResultFacets,\n handleChangeKeyword,\n generalDataSettings,\n searchParams,\n setSeparatedFilterItem,\n separatedFilterItem,\n clickedFacets,\n setClickedFacets,\n parentPreviousState: previousState,\n clickedOpenFilterHorizontalId,\n setClickedOpenFilterHorizontalId,\n clickedOpenFilterHorizontalMobileId,\n setClickedOpenFilterHorizontalMobileId,\n defaultFilterItems,\n mobileShowSelectedSort,\n soldProductAtEnd,\n attributesToRetrieve,\n allowedFilterSlider,\n hierarchicalFacetAliases,\n usePublishedFilter,\n showOutOfStock,\n handleSetInitStates,\n querySortBy,\n queryPage,\n queryLimit,\n valueFilterPriceChange,\n setValueFilterPriceChange,\n valueFilterOnSaleChange,\n setValueFilterOnSaleChange,\n valueFilterSliderOthers,\n setValueFilterSliderOthers,\n tabs,\n initStatesFirstTime,\n setInitStatesFirstTime,\n allowedTabs,\n setAllowedTabs,\n isDesktopLayout,\n previewSettings,\n currentColumnGrid,\n setCurrentColumnGrid\n })\n )}\n </div>\n );\n};\n\nconst ResultProduct = React.memo((props: IResultProps) => {\n const {\n layoutType,\n keyword,\n clickedTabIndexId,\n clickedTabIndexType,\n isLoadingSetting,\n allowedSorts,\n allowedFilter,\n facets,\n defaultFacetStats,\n hideFilterWhenOneValue,\n hiddenTags,\n displaySettings,\n colorSwatches,\n defaultSort,\n defaultLimit,\n languageSettings,\n hierarchicalProductTypeSettings,\n hierarchicalCollectionsSettings,\n query,\n params,\n isJsVersion,\n productCardsComponent,\n filterHorizontalSkeleton,\n filterHorizontalSkeletonComponent,\n filterVerticalSkeleton,\n productGridSkeleton,\n searchAndSelectOptionSkeleton,\n summaryTextSkeleton,\n searchFieldSkeletonComponent,\n selectOptionSkeletonComponent,\n onAfterAddToCart,\n onAfterAddWishlist,\n onAfterRemoveWishlist,\n onAfterRenderProduct,\n searchResultContainerRef,\n data: propsData,\n settings,\n isReplaceWidgetList,\n setIsReplaceWidgetList,\n searchResultFacets,\n handleChangeKeyword,\n generalDataSettings,\n searchParams,\n setSeparatedFilterItem,\n separatedFilterItem,\n clickedFacets,\n setClickedFacets,\n parentPreviousState,\n clickedOpenFilterHorizontalId,\n setClickedOpenFilterHorizontalId,\n clickedOpenFilterHorizontalMobileId,\n setClickedOpenFilterHorizontalMobileId,\n isFirstLoading,\n defaultFilterItems,\n mobileShowSelectedSort,\n soldProductAtEnd,\n attributesToRetrieve,\n allowedFilterSlider,\n hierarchicalFacetAliases,\n showOutOfStock,\n handleSetInitStates,\n querySortBy = '',\n queryPage = '',\n queryLimit = '',\n valueFilterPriceChange,\n setValueFilterPriceChange,\n valueFilterOnSaleChange,\n setValueFilterOnSaleChange,\n valueFilterSliderOthers,\n setValueFilterSliderOthers,\n usePublishedFilter,\n tabs,\n initStatesFirstTime,\n setInitStatesFirstTime,\n allowedTabs,\n setAllowedTabs,\n isDesktopLayout,\n previewSettings,\n currentColumnGrid,\n setCurrentColumnGrid\n } = props || {};\n\n const { collectionId, collectionName } = params || {};\n\n const isLoadMore = ['load_more', 'infinite_scroll'].includes(displaySettings?.search?.pagination_type);\n\n const [isLoadingProduct, setIsLoadingProduct] = React.useState(!propsData);\n const [isLoading, setIsLoading] = React.useState(!propsData);\n const [clickedSortId, setClickedSortId] = React.useState<string>(defaultSort || '');\n const [clickedLimitId, setClickedLimitId] = React.useState(Number(searchParams?.get(queryLimit) || defaultLimit || DEFAULT_LIMIT_VALUE[0]));\n const [clickedOpenFilters, setClickedOpenFilters] = React.useState<any>(\n keyOpenFilters({\n items: allowedFilter\n })\n );\n const [triggerClickedFacets, setTriggerClickedFacets] = React.useState(false);\n const [searchResult, setSearchResult] = React.useState<any[]>(propsData?.result?.results?.[0]?.hits || []);\n const [searchProcessingTimeMs, setSearchProcessingTimeMs] = React.useState<string | number>(0);\n const [currentPage, setCurrentPage] = React.useState(Number(searchParams?.get(queryPage)) && !isLoadMore ? Number(searchParams?.get(queryPage)) : 1);\n const [totalPage, setTotalPage] = React.useState(0);\n const [totalSearchResult, setTotalSearchResult] = React.useState(propsData?.result?.results?.[0]?.totalHits || 0);\n const [handleSearchResultFirstTime, setHandleSearchResultFirstTime] = React.useState(true);\n const [searchFacetDistribution, setSearchFacetDistribution] = React.useState<any>({});\n const [isLoadingButtonLoadMore, setIsLoadingButtonLoadMore] = React.useState(false);\n const [openFilterFlyoutMobile, setOpenFilterFlyoutMobile] = React.useState(false);\n const [openFilterFlyout, setOpenFilterFlyout] = React.useState(false);\n const [openFilterToggle, setOpenFilterToggle] = React.useState(false);\n\n const {\n sort_by: language_sort_by,\n result: language_result,\n search_form_placeholder: language_search_form_placeholder,\n limit: language_limit,\n add_to_cart: language_add_to_cart,\n filter: language_filter,\n clear_filter: language_clear_filter,\n pagination_info: language_pagination_info,\n total_result_text: language_total_result_text\n } = languageSettings || {};\n\n const { separator: hierarchical_separator, hiddens: hierarchical_hiddens } = hierarchicalProductTypeSettings || {};\n const {\n separator: hierarchical_collections_separator,\n hiddens: hierarchical_collections_hiddens,\n hidden_ids: hierarchical_collections_hidden_ids,\n structure: hierarchical_collections_structure\n } = hierarchicalCollectionsSettings || {};\n const { money_format } = generalDataSettings || {};\n const { button_load_more, button_loading, mobile_sort_placeholder } = generalDataSettings?.languages || {};\n\n const summaryTextGenerator = (totalResult: number) => {\n const defaultSummaryText: any = (\n <>\n {totalResult} {language_result || 'result'}{' '}\n {keyword?.length ? (\n <>\n for <span className=\"sledge-instant-search__result-data-summary-text-keyword\">\"{keyword}\"</span>\n </>\n ) : null}\n </>\n );\n\n let getSummaryText = language_total_result_text[layoutType === 'product-filter' && !keyword?.length ? 'product_filter' : 'product'];\n let isSummaryTextFromLanguage = language_total_result_text && getSummaryText;\n\n if (isSummaryTextFromLanguage) {\n getSummaryText = getSummaryText.replaceAll(OBJECT_DATA_STRING_KEY.TOTAL_RESULT, totalResult);\n\n if (layoutType === 'product-filter') getSummaryText = getSummaryText.replaceAll(OBJECT_DATA_STRING_KEY.COLLECTION_NAME, collectionName || 'Products');\n }\n\n return (\n <>\n {isSummaryTextFromLanguage ? (\n <span className=\"sledge-instant-search__result-data-summary-text\" dangerouslySetInnerHTML={{ __html: getSummaryText }}></span>\n ) : (\n <span className=\"sledge-instant-search__result-data-summary-text\">{defaultSummaryText}</span>\n )}\n </>\n );\n };\n\n const [summaryText, setSummaryText] = React.useState<React.ReactNode>(propsData ? summaryTextGenerator(totalSearchResult) : null);\n\n const previousState: any = usePrevious({ clickedLimitId, clickedSortId, clickedFacets, clickedTabIndexId });\n\n const { color: filter_title_color, font_size: filter_title_font_size, font_weight: filter_title_font_weight, text_transform: filter_title_text_transform } = displaySettings?.filter?.title || {};\n const {\n color: filter_option_color,\n font_size: filter_option_font_size,\n font_weight: filter_option_font_weight,\n text_transform: filter_option_text_transform\n } = displaySettings?.filter?.option || {};\n const {\n text_color: filter_button_text_color,\n border_color: filter_button_border_color,\n border_radius: filter_button_border_radius,\n padding_top: filter_button_padding_top,\n padding_bottom: filter_button_padding_bottom,\n padding_left: filter_button_padding_left,\n padding_right: filter_button_padding_right,\n background_color: filter_button_background_color,\n font_size: filter_button_font_size,\n font_weight: filter_button_font_weight,\n text_transform: filter_button_text_transform\n } = displaySettings?.filter?.button || {};\n\n const filter_title_style = {\n ...(filter_title_color && { color: filter_title_color }),\n ...(filter_title_font_size && { fontSize: filter_title_font_size }),\n ...(filter_title_font_weight && { fontWeight: filter_title_font_weight }),\n ...(filter_title_text_transform && { textTransform: filter_title_text_transform })\n };\n\n const filter_option_style = {\n ...(filter_option_color && { color: filter_option_color }),\n ...(filter_option_font_size && { fontSize: filter_option_font_size }),\n ...(filter_option_font_weight && { fontWeight: filter_option_font_weight }),\n ...(filter_option_text_transform && { textTransform: filter_option_text_transform })\n };\n\n const filter_button_style = {\n ...(filter_button_text_color && { color: filter_button_text_color }),\n ...(filter_button_border_color && { borderColor: filter_button_border_color }),\n ...(filter_button_border_radius && { borderRadius: filter_button_border_radius }),\n ...(filter_button_padding_top && { paddingTop: filter_button_padding_top }),\n ...(filter_button_padding_bottom && { paddingBottom: filter_button_padding_bottom }),\n ...(filter_button_padding_left && { paddingLeft: filter_button_padding_left }),\n ...(filter_button_padding_right && { paddingRight: filter_button_padding_right }),\n ...(filter_button_background_color && { backgroundColor: filter_button_background_color }),\n ...(filter_button_font_size && { fontSize: filter_button_font_size }),\n ...(filter_button_font_weight && { fontWeight: filter_button_font_weight }),\n ...(filter_button_text_transform && { textTransform: filter_button_text_transform })\n };\n\n const isVisibleLoadMore = totalPage === currentPage && !isLoadingButtonLoadMore ? false : totalPage >= currentPage;\n\n const handleQueryStringFilter = (valueClickedFacets: any) => {\n const searchParams = new URLSearchParams(document.location.search);\n const searchParamsObject = Object.fromEntries(searchParams);\n\n let otherQueryStringObject: any = {};\n for (const searchParamsKey in searchParamsObject) {\n let ifOtherQueryStringObject = facets?.length && !facets.includes(searchParamsKey);\n\n if (ifOtherQueryStringObject) otherQueryStringObject[searchParamsKey] = searchParamsObject[searchParamsKey];\n }\n\n let facetQueryStringObject: any = {};\n for (const valueClickedFacetsKey in valueClickedFacets) {\n if (valueClickedFacets[valueClickedFacetsKey]?.length) otherQueryStringObject[valueClickedFacetsKey] = valueClickedFacets[valueClickedFacetsKey];\n }\n\n const newQueryString = new URLSearchParams({\n ...otherQueryStringObject,\n ...facetQueryStringObject\n }).toString();\n\n if (!objectPresent(previewSettings)) window.history.pushState(null, '', `${document.location.pathname}${newQueryString?.length ? `?${newQueryString}` : ''}`);\n };\n\n const handleChangeSort = React.useCallback((value: string) => {\n const searchParams = new URLSearchParams(document.location.search);\n\n searchParams.set(querySortBy, value);\n\n setClickedSortId(value);\n\n if (!objectPresent(previewSettings)) window.history.pushState(null, '', `${document.location.pathname}?${searchParams.toString()}`);\n }, []);\n\n const handleChangeLimit = React.useCallback((value: string) => {\n const searchParams = new URLSearchParams(document.location.search);\n\n searchParams.set(queryLimit, String(value));\n\n setClickedLimitId(Number(value));\n\n localStorage?.setItem(LOCAL_STORAGE_KEY.LIMIT_PRODUCT, value);\n\n if (!objectPresent(previewSettings)) window.history.pushState(null, '', `${document.location.pathname}?${searchParams.toString()}`);\n }, []);\n\n const handleOpenFilterVertical = React.useCallback(\n (id: string | number) => {\n let valueClickedOpenFilters: any[] = clickedOpenFilters;\n if (valueClickedOpenFilters.includes(id)) {\n const findIndex = valueClickedOpenFilters.indexOf(id);\n if (findIndex > -1) valueClickedOpenFilters.splice(findIndex, 1);\n } else {\n valueClickedOpenFilters.push(id);\n }\n\n setClickedOpenFilters(valueClickedOpenFilters);\n setTimeout(() => {\n setSeparatedFilterItem?.((old: any) => {\n const fixState = {\n ...old,\n [id]: null\n };\n\n return fixState;\n });\n }, 100);\n },\n [clickedOpenFilters]\n );\n\n const handleFilterReset = React.useCallback(() => {\n setClickedFacets?.({});\n setTriggerClickedFacets(!triggerClickedFacets);\n handleQueryStringFilter({});\n setValueFilterPriceChange?.([]);\n setValueFilterOnSaleChange?.([]);\n setValueFilterSliderOthers?.({});\n }, [triggerClickedFacets]);\n\n const handleFilterChange = React.useCallback(\n ({ parentId, value, force = false }: { parentId: string; value: any; force?: boolean }) => {\n let facets: any = [value];\n let isRange = allowedFilterSlider?.includes(parentId);\n let isHierarchical = hierarchicalFacetAliases?.includes(parentId);\n\n if (clickedFacets) {\n if (force) {\n facets = [value];\n } else {\n if (clickedFacets[parentId]?.includes(value)) {\n facets = clickedFacets[parentId].filter((facet: any) => facet !== value);\n\n // Uncheck facet children from parent\n if (isHierarchical) facets = facets.filter((facet: any) => !facet.startsWith(value));\n } else {\n if (isRange) {\n if ((clickedFacets[parentId], clickedFacets[parentId] === value)) {\n facets = [];\n\n if (parentId === 'variants.price') {\n setValueFilterPriceChange?.([]);\n } else if (parentId === 'variants.sale_percent') {\n setValueFilterOnSaleChange?.([]);\n } else {\n setValueFilterSliderOthers?.((prevState: any) => ({ ...prevState, [parentId]: [] }));\n }\n } else {\n facets = value?.length === 1 ? [...value, ...value] : value;\n }\n } else {\n facets = clickedFacets[parentId] ? [...clickedFacets[parentId], value] : [value];\n }\n }\n }\n }\n\n let valueClickedFacets = {\n ...clickedFacets,\n ...{\n [parentId]: facets\n }\n };\n\n let handleQueryStringFilterProp = valueClickedFacets;\n\n // Hide the additional filter in query param\n if (Object.hasOwn(handleQueryStringFilterProp, 'variants.inventory_quantity')) delete handleQueryStringFilterProp?.['variants.inventory_quantity'];\n\n handleQueryStringFilter(handleQueryStringFilterProp);\n\n setClickedFacets?.(valueClickedFacets);\n setTriggerClickedFacets(!triggerClickedFacets);\n },\n [allowedFilterSlider, hierarchicalFacetAliases, clickedFacets, triggerClickedFacets]\n );\n\n const handleDataClickedFacets = () => {\n let dataClickedFacets: any[] = [];\n Object.entries(clickedFacets).map((facet: any) => {\n if (facet?.length && facet[1].length) {\n let getName = facet[0];\n let isAdditionalFilter = ['variants.inventory_quantity'].includes(getName);\n\n if (isAdditionalFilter) return;\n\n let isRange = allowedFilterSlider?.includes(getName);\n let getAllowedFilterOne: any = allowedFilter?.filter(({ value }: any) => value?.includes(getName));\n let getLabel = getAllowedFilterOne?.length ? getAllowedFilterOne[0].label : getName;\n\n let items =\n Array.isArray(facet[1]) && facet[1]?.length > 1\n ? isRange\n ? dataClickedFacets.push({\n label: getLabel,\n name: getName,\n value: facet[1]\n })\n : facet[1]?.map((item: any) => {\n dataClickedFacets.push({\n label: getLabel,\n name: getName,\n value: item\n });\n })\n : dataClickedFacets.push({\n label: getLabel,\n name: getName,\n value: facet[1][0]\n });\n\n return items;\n }\n });\n\n return dataClickedFacets;\n };\n\n const handleSearchResultData = (props: { isLoadMore?: boolean; isReplaceData?: boolean; result?: any; onSearch?: boolean }) => {\n const { isLoadMore = false, result: resultProp, onSearch } = props;\n\n const INSTANT_SEARCH_SETTING = JSON.parse((localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || null) as string);\n const { index_product } = INSTANT_SEARCH_SETTING || {};\n\n const isNoneFacetSelected = Boolean(!handleDataClickedFacets()?.length);\n const isFirstTimeOrOnSearch = (handleSearchResultFirstTime && initStatesFirstTime) || onSearch;\n const resultData = layoutType === 'default' && isFirstTimeOrOnSearch ? resultProp?.results : resultProp;\n const result = layoutType === 'default' && isFirstTimeOrOnSearch ? resultData?.find?.(({ indexUid }: any) => indexUid.includes(index_product)) : resultData;\n\n if (!result) return;\n\n const { hits, processingTimeMs, totalHits, totalPages, facetDistribution } = result;\n\n const updateTabs = () => {\n const valueAllowedTabs = objectPresent(previewSettings) ? tabs : allowedTabs;\n\n if (valueAllowedTabs?.length) {\n setAllowedTabs?.(\n valueAllowedTabs.map((tab: any) => {\n const { index, total } = tab;\n\n let isCurrentIndex = index.includes(clickedTabIndexId);\n let tabTotal = isCurrentIndex ? totalHits : total;\n if (layoutType === 'default' && resultProp?.results?.length) {\n const { totalHits } = resultProp?.results?.find?.(({ indexUid }: any) => indexUid.includes(index));\n tabTotal = totalHits || tabTotal;\n }\n\n return {\n ...tab,\n ...{\n total: tabTotal\n }\n };\n })\n );\n }\n };\n\n if (objectPresent(previewSettings)) updateTabs();\n\n if (isFirstTimeOrOnSearch || isNoneFacetSelected) {\n handleSetInitStates?.({\n results: resultData,\n data: INSTANT_SEARCH_SETTING,\n callback: ({ valueAllowedFilter }) => {\n if (handleSearchResultFirstTime || (onSearch && !clickedOpenFilters?.length)) {\n setClickedOpenFilters(\n keyOpenFilters({\n items: valueAllowedFilter\n })\n );\n }\n },\n isUpdateFilter: Boolean(!isFirstTimeOrOnSearch && isNoneFacetSelected)\n });\n\n if (isNoneFacetSelected) updateTabs();\n } else {\n updateTabs();\n }\n\n if (onSearch && keyword?.length) {\n searchTrigger({\n keyword: keyword,\n resultCount: totalHits || 0\n });\n }\n\n setIsLoading(false);\n setIsLoadingProduct(false);\n setIsLoadingButtonLoadMore(false);\n setIsReplaceWidgetList?.(false);\n setSearchResult(!hits?.length ? [] : (prevState: any) => (searchResult?.length && isLoadMore ? [...prevState, ...hits] : hits));\n setSearchProcessingTimeMs(processingTimeMs || 0);\n setTotalPage(totalPages);\n setTotalSearchResult(totalHits || 0);\n setSummaryText(summaryTextGenerator(totalHits));\n setSearchFacetDistribution(facetDistribution);\n };\n\n const handleSearchResult = async (props: { isLoadMore?: boolean; isReplaceData?: boolean; onSearch?: boolean }) => {\n if (!clickedTabIndexId) return;\n\n const { isLoadMore = false, isReplaceData = false, onSearch } = props;\n\n if (isReplaceData) {\n setCurrentPage(1);\n setSearchResult([]);\n\n const searchParams = new URLSearchParams(document.location.search);\n\n searchParams.set(queryPage, String(1));\n searchParams.set(queryLimit, String(clickedLimitId));\n\n if (!objectPresent(previewSettings)) window.history.pushState(null, '', `${document.location.pathname}?${searchParams.toString()}`);\n }\n\n setIsLoading(isReplaceData ? true : !isLoadMore);\n\n let response: any;\n let sort = soldProductAtEnd ? ['availability:asc'] : [];\n if (clickedSortId) sort.push(clickedSortId);\n\n if (propsData && handleSearchResultFirstTime) {\n response = propsData?.result?.results?.[0];\n } else {\n response = await handleSearchResponse({\n layoutType,\n clickedTabIndexId,\n clickedTabIndexType,\n keyword,\n sort,\n page: isReplaceData ? 1 : currentPage,\n limit: clickedLimitId,\n isUseMultiSearch: (handleSearchResultFirstTime && initStatesFirstTime) || onSearch,\n facets,\n attributesToRetrieve,\n clickedFacets,\n setClickedFacets,\n allowedFilterSlider,\n hierarchicalFacetAliases,\n defaultFilterItems,\n setValueFilterPriceChange,\n setValueFilterOnSaleChange,\n setValueFilterSliderOthers,\n collectionId,\n hiddenTags,\n showOutOfStock,\n hierarchicalProductTypeSettings,\n hierarchicalCollectionsSettings,\n usePublishedFilter,\n tabs\n });\n }\n\n setHandleSearchResultFirstTime(false);\n setInitStatesFirstTime?.(false);\n\n handleSearchResultData({\n result: response,\n ...props\n });\n };\n\n const handlePageChange = (page: number) => {\n const searchParams = new URLSearchParams(document.location.search);\n\n searchParams.set(queryPage, String(page));\n searchParams.set(queryLimit, String(clickedLimitId));\n\n setCurrentPage(page);\n setIsReplaceWidgetList?.(true);\n\n setTimeout(() => {\n scrollToElement({\n element: searchResultContainerRef.current,\n headerOffset: 50\n });\n }, 200);\n\n if (!objectPresent(previewSettings)) window.history.pushState(null, '', `${document.location.pathname}?${searchParams.toString()}`);\n };\n\n React.useEffect(() => {\n if (typeof window !== 'undefined') {\n if (layoutType === 'default') {\n if (window?.sledge?.instantSearch?.searchResult)\n window.sledge.instantSearch.searchResult.filter = () => {\n setTriggerClickedFacets(!triggerClickedFacets);\n\n // Reset to first page\n setCurrentPage(1);\n };\n } else {\n if (window?.sledge?.instantSearch?.productFilter)\n window.sledge.instantSearch.productFilter.filter = () => {\n setTriggerClickedFacets(!triggerClickedFacets);\n\n // Reset to first page\n setCurrentPage(1);\n };\n }\n }\n\n let isKeywordChanged = Boolean(parentPreviousState && parentPreviousState.keyword !== keyword);\n let isReplaceData = Boolean(\n (previousState && (previousState?.clickedLimitId !== clickedLimitId || previousState?.clickedSortId !== clickedSortId || previousState?.clickedFacets !== clickedFacets)) ||\n isKeywordChanged\n );\n\n if (isKeywordChanged) {\n const delayDebounceFn = setTimeout(() => {\n handleSearchResult({\n isReplaceData: true,\n onSearch: true\n });\n }, 500);\n return () => clearTimeout(delayDebounceFn);\n } else {\n handleSearchResult({\n isReplaceData\n });\n }\n }, [clickedSortId, clickedLimitId, triggerClickedFacets, keyword, collectionId]);\n\n React.useEffect(() => {\n let isReplaceData = Boolean(previousState && previousState?.clickedTabIndexId !== clickedTabIndexId);\n\n if (isReplaceWidgetList || isReplaceData) {\n handleSearchResult({\n isReplaceData: isLoadMore ? false : isReplaceData,\n isLoadMore\n });\n }\n }, [isReplaceWidgetList, clickedTabIndexId]);\n\n let dataClickedFacets: any[] = handleDataClickedFacets();\n\n let keepCounterFacets: any[] = [];\n allowedFilter?.map((filter) => {\n if (filter?.settings?.keep_counter) keepCounterFacets.push(filter?.value);\n });\n\n const filterSettings = ({\n filter,\n scrollElementSelector\n }: {\n filter: {\n value: any;\n label: string;\n display: string;\n indexFilter: number;\n };\n scrollElementSelector?: string;\n }): { isRender: boolean; classesUlElement: string[]; getFacetComponent: any; isLastIndex: boolean } => {\n const { value, display, indexFilter } = filter;\n\n const isDisplaySlider = ['slider', 'input_range', 'slider_with_input_range'].includes(display.toLowerCase());\n\n let items =\n display.toLowerCase() === 'tree'\n ? createHierarchicalFacet({\n indexValue: value,\n filter,\n searchResultFacets,\n separator: hierarchical_separator,\n separatorCollection: hierarchical_collections_separator,\n clickedFacetsObject: clickedFacets,\n hiddens: hierarchical_hiddens,\n hiddensCollection: hierarchical_collections_hiddens,\n displaySettings,\n searchFacetDistribution,\n hierarchicalFacetAliases,\n hierarchicalCollectionsSettings\n })\n : searchResultFacets[value];\n\n let isRender = Boolean(\n isDisplaySlider\n ? items\n : Number(\n handleFacetValues({\n filter,\n languageSettings,\n clickedFacets,\n searchFacetDistribution,\n displaySettings,\n settings,\n items,\n allowedFilterSlider\n })?.length\n )\n );\n if (isDisplaySlider) {\n let defaultItemSlider = defaultFacetStats?.[value] && Object.keys(defaultFacetStats[value]).length ? defaultFacetStats[value] : {};\n\n let valueFilterSliderChange: any = [];\n if (value === 'variants.price') {\n valueFilterSliderChange = valueFilterPriceChange;\n } else if (value === 'variants.sale_percent') {\n valueFilterSliderChange = valueFilterOnSaleChange;\n } else {\n valueFilterSliderChange = valueFilterSliderOthers?.[value];\n }\n\n let defaultValueMin = valueFilterSliderChange?.[0] || defaultItemSlider?.min;\n let defaultValueMax = valueFilterSliderChange?.[1] || defaultItemSlider?.max;\n\n isRender = !defaultValueMin && !defaultValueMax ? false : true;\n }\n\n let classesUlElement = ['sledge-instant-search__result-filter-item-list'];\n\n const getFacetComponent = (props?: { ulClasses?: string }) => {\n const { ulClasses = '' } = props || {};\n\n return (\n <Facet\n filter={{\n ...filter,\n items\n }}\n isFirstLoading={isFirstLoading}\n displaySettings={displaySettings}\n generalDataSettings={generalDataSettings}\n settings={settings}\n searchFacetDistribution={searchFacetDistribution}\n clickedFacets={clickedFacets}\n setClickedFacets={setClickedFacets}\n handleFilterChange={handleFilterChange}\n defaultFacetStats={defaultFacetStats}\n valueFilterPriceChange={valueFilterPriceChange}\n setValueFilterPriceChange={setValueFilterPriceChange}\n valueFilterOnSaleChange={valueFilterOnSaleChange}\n setValueFilterOnSaleChange={setValueFilterOnSaleChange}\n valueFilterSliderOthers={valueFilterSliderOthers}\n setValueFilterSliderOthers={setValueFilterSliderOthers}\n separatedFilterItem={separatedFilterItem}\n setSeparatedFilterItem={setSeparatedFilterItem}\n scrollElementSelector={scrollElementSelector}\n layoutType={layoutType}\n collectionId={collectionId}\n colorSwatches={colorSwatches}\n ulClasses={ulClasses}\n languageSettings={languageSettings}\n triggerClickedFacets={triggerClickedFacets}\n setTriggerClickedFacets={setTriggerClickedFacets}\n handleQueryStringFilter={handleQueryStringFilter}\n previousStateFromOutside={previousState}\n keepCounterFacets={keepCounterFacets}\n allowedFilterSlider={allowedFilterSlider}\n />\n );\n };\n\n if (display.toLowerCase() === 'swatch' && items?.length) classesUlElement.push('sledge-instant-search__result-filter-item-color-swatches');\n if (display.toLowerCase() === 'tree') classesUlElement.push('sledge-instant-search__result-filter-item-tree');\n if (displaySettings?.filter?.layout === 'vertical' && allowedFilter?.length === 1) classesUlElement?.push('sledge-instant-search__result-filter-item-list-just-one');\n\n let isLastIndex = allowedFilter ? allowedFilter?.length - 1 === indexFilter : false;\n\n return { isRender, classesUlElement, getFacetComponent, isLastIndex };\n };\n\n const filterVerticalComponent = (overrideProps?: IFilterVerticalProps) => {\n const defaultProps: IFilterVerticalProps = {\n items: allowedFilter,\n filterSettings: filterSettings,\n filterTitleStyle: filter_title_style,\n handleOpenFilterVertical: handleOpenFilterVertical,\n clickedOpenFilters: clickedOpenFilters,\n layoutType: layoutType,\n collectionId: collectionId,\n dataClickedFacets: dataClickedFacets,\n handleFilterReset: handleFilterReset,\n defaultFilterItems: defaultFilterItems,\n generalDataSettings: generalDataSettings,\n languageSettings: languageSettings,\n hierarchicalCollectionsSettings: hierarchicalCollectionsSettings,\n hierarchicalProductTypeSettings: hierarchicalProductTypeSettings,\n displaySettings: displaySettings,\n settings: settings,\n handleFilterChange: handleFilterChange,\n allowedFilterSlider: allowedFilterSlider\n };\n\n const mergedProps = { ...defaultProps, ...overrideProps };\n\n return <FilterVertical {...mergedProps} />;\n };\n\n const filterHorizontalComponent = (overrideProps?: IFilterHorizontalProps) => {\n const defaultProps: IFilterHorizontalProps = {\n items: allowedFilter,\n filterSettings: filterSettings,\n clickedOpenFilterHorizontalId: clickedOpenFilterHorizontalId,\n setClickedOpenFilterHorizontalId: setClickedOpenFilterHorizontalId,\n clickedOpenFilterHorizontalMobileId: clickedOpenFilterHorizontalMobileId,\n setClickedOpenFilterHorizontalMobileId: setClickedOpenFilterHorizontalMobileId,\n layoutType: layoutType,\n collectionId: collectionId,\n dataClickedFacets: dataClickedFacets,\n handleFilterReset: handleFilterReset,\n defaultFilterItems: defaultFilterItems,\n generalDataSettings: generalDataSettings,\n languageSettings: languageSettings,\n hierarchicalCollectionsSettings: hierarchicalCollectionsSettings,\n hierarchicalProductTypeSettings: hierarchicalProductTypeSettings,\n displaySettings: displaySettings,\n settings: settings,\n handleFilterChange: handleFilterChange,\n allowedFilterSlider: allowedFilterSlider\n };\n\n const mergedProps = { ...defaultProps, ...overrideProps };\n\n return <FilterHorizontal {...mergedProps} />;\n };\n\n const filterActiveComponent = (overrideProps?: IFilterActiveProps) => {\n const defaultProps: IFilterHorizontalProps = {\n items: allowedFilter,\n filterSettings: filterSettings,\n clickedOpenFilterHorizontalId: clickedOpenFilterHorizontalId,\n setClickedOpenFilterHorizontalId: setClickedOpenFilterHorizontalId,\n clickedOpenFilterHorizontalMobileId: clickedOpenFilterHorizontalMobileId,\n setClickedOpenFilterHorizontalMobileId: setClickedOpenFilterHorizontalMobileId,\n layoutType: layoutType,\n collectionId: collectionId,\n dataClickedFacets: dataClickedFacets,\n handleFilterReset: handleFilterReset,\n defaultFilterItems: defaultFilterItems,\n generalDataSettings: generalDataSettings,\n languageSettings: languageSettings,\n hierarchicalCollectionsSettings: hierarchicalCollectionsSettings,\n hierarchicalProductTypeSettings: hierarchicalProductTypeSettings,\n displaySettings: displaySettings,\n settings: settings,\n handleFilterChange: handleFilterChange,\n allowedFilterSlider: allowedFilterSlider\n };\n\n const mergedProps = { ...defaultProps, ...overrideProps };\n\n return <FilterActive {...mergedProps} />;\n };\n\n const paginationComponent = (\n <PaginationOrLoadMore\n type={displaySettings?.search?.pagination_type}\n isLoadMore={isLoadMore}\n isLoadingButtonLoadMore={isLoadingButtonLoadMore}\n handleLoadMore={() => {\n setCurrentPage(currentPage + 1);\n setIsLoadingButtonLoadMore(true);\n setIsReplaceWidgetList?.(true);\n }}\n buttonLoadMoreText={isLoadingButtonLoadMore ? button_loading || 'Loading...' : button_load_more || 'Load More'}\n isInfiniteScroll={displaySettings?.search?.pagination_type === 'infinite_scroll'}\n currentPage={currentPage}\n totalPage={totalPage}\n totalResult={totalSearchResult}\n pageInfo={language_pagination_info}\n isVisibleLoadMore={isVisibleLoadMore}\n handlePageChange={handlePageChange}\n />\n );\n\n const summaryTextComponent = <div className=\"sledge-instant-search__result-data-summary-item\">{displaySettings?.filter?.show_total_products ? summaryText : null}</div>;\n\n const searchFieldComponent = <Search placeholder={language_search_form_placeholder?.product} value={keyword} handleChangeSearch={handleChangeKeyword} />;\n\n const searchInputFieldComponent = <Search placeholder={language_search_form_placeholder?.product} value={keyword} handleChangeSearch={handleChangeKeyword} />;\n\n const sortComponent = (\n <Sort\n label={language_sort_by}\n options={allowedSorts}\n clickedOption={clickedSortId}\n handleChangeOption={handleChangeSort}\n overridePlaceholderOnMobile={!mobileShowSelectedSort ? mobile_sort_placeholder || 'Sort' : null}\n />\n );\n\n const limitComponent = <Limit label={language_limit} options={displaySettings?.search?.allowed_limit} clickedOption={clickedLimitId} handleChangeOption={handleChangeLimit} />;\n\n const productGridComponent = (\n <ProductGrid\n sourceApp=\"instant-search\"\n type=\"large\"\n data={searchResult.map((item: any) => {\n const { variants, ...product } = item || {};\n\n return {\n product,\n variants\n };\n })}\n setting={{\n show_vendor: displaySettings?.search?.show_vendor,\n show_sku: displaySettings?.search?.show_sku,\n show_price: displaySettings?.search?.show_price,\n language_button_add_to_cart: language_add_to_cart,\n language_button_out_of_stock: languageSettings && languageSettings['out of stock'] ? languageSettings['out of stock'] : ''\n }}\n isComponentJsVersion={isJsVersion}\n cards={productCardsComponent}\n showOptionOutOfStock={true}\n onAfterAddToCart={onAfterAddToCart}\n onAfterAddWishlist={onAfterAddWishlist}\n onAfterRemoveWishlist={onAfterRemoveWishlist}\n onAfterRenderProduct={onAfterRenderProduct}\n dataWishlists={propsData?.wishlists}\n dataReviews={propsData?.reviews}\n currentColumnGrid={currentColumnGrid}\n previewSettings={previewSettings}\n />\n );\n\n const resultEmptyComponent = <ResultEmpty {...props} />;\n\n const columnGridSelectorComponent = <ColumnGridSelector currentColumnGrid={currentColumnGrid} setCurrentColumnGrid={setCurrentColumnGrid} isDesktopLayout={isDesktopLayout} showText={false} />;\n\n const components = {\n filterVertical: filterVerticalComponent,\n filterHorizontal: filterHorizontalComponent,\n filterActive: filterActiveComponent,\n summaryText: summaryTextComponent,\n searchField: searchFieldComponent,\n sort: sortComponent,\n limit: limitComponent,\n productGrid: productGridComponent,\n pagination: paginationComponent,\n resultEmpty: resultEmptyComponent,\n columnGridSelector: columnGridSelectorComponent\n };\n\n const skeleton = {\n filterVertical: filterVerticalSkeleton,\n filterHorizontal: filterHorizontalSkeletonComponent,\n summaryText: summaryTextSkeleton,\n searchField: searchFieldSkeletonComponent,\n selectOption: selectOptionSkeletonComponent,\n searchAndSelectOption: searchAndSelectOptionSkeleton,\n productGrid: productGridSkeleton\n };\n\n return (\n <>\n {isDesktopLayout ? (\n <DesktopLayout\n displaySettings={displaySettings}\n languageSettings={languageSettings}\n allowedFilter={allowedFilter}\n isFirstLoading={isFirstLoading}\n isLoading={isLoading}\n isLoadingProduct={isLoadingProduct}\n isLoadingSetting={isLoadingSetting}\n searchResult={searchResult}\n hideFilterWhenOneValue={hideFilterWhenOneValue}\n openFilterFlyout={openFilterFlyout}\n setOpenFilterFlyout={setOpenFilterFlyout}\n openFilterToggle={openFilterToggle}\n setOpenFilterToggle={setOpenFilterToggle}\n components={{\n filterVertical: components.filterVertical,\n filterHorizontal: components.filterHorizontal,\n filterActive: components.filterActive,\n summaryText: components.summaryText,\n searchField: components.searchField,\n sort: components.sort,\n limit: components.limit,\n productGrid: components.productGrid,\n pagination: components.pagination,\n resultEmpty: components.resultEmpty,\n columnGridSelector: components.columnGridSelector\n }}\n skeleton={{\n filterVertical: skeleton.filterVertical,\n summaryText: skeleton.summaryText,\n searchField: skeleton.searchField,\n selectOption: skeleton.selectOption,\n searchAndSelectOption: skeleton.searchAndSelectOption,\n productGrid: skeleton.productGrid\n }}\n handleSearchResultFirstTime={handleSearchResultFirstTime}\n />\n ) : (\n <MobileLayout\n displaySettings={displaySettings}\n languageSettings={languageSettings}\n allowedFilter={allowedFilter}\n isFirstLoading={isFirstLoading}\n isLoading={isLoading}\n isLoadingProduct={isLoadingProduct}\n isLoadingSetting={isLoadingSetting}\n searchResult={searchResult}\n propsData={propsData}\n openFilterFlyout={openFilterFlyoutMobile}\n setOpenFilterFlyout={setOpenFilterFlyoutMobile}\n components={{\n filterVertical: components.filterVertical,\n filterHorizontal: components.filterHorizontal,\n summaryText: components.summaryText,\n searchField: components.searchField,\n sort: components.sort,\n limit: components.limit,\n productGrid: components.productGrid,\n pagination: components.pagination,\n resultEmpty: components.resultEmpty,\n columnGridSelector: components.columnGridSelector\n }}\n skeleton={{\n filterVertical: skeleton.filterVertical,\n summaryText: skeleton.summaryText,\n searchField: skeleton.searchField,\n selectOption: skeleton.selectOption,\n searchAndSelectOption: skeleton.searchAndSelectOption,\n productGrid: skeleton.productGrid\n }}\n />\n )}\n </>\n );\n});\n\nconst ResultCategory = React.memo((props: IResultProps) => {\n const {\n layoutType,\n keyword,\n debouncedKeyword,\n clickedTabIndexId,\n clickedTabIndexName,\n clickedTabIndexType,\n displaySettings,\n isJsVersion,\n collectionCardsComponent,\n pageCardsComponent,\n blogCardsComponent,\n articleCardsComponent,\n searchResultContainerRef,\n onAfterRenderCollection,\n onAfterRenderPage,\n onAfterRenderBlog,\n onAfterRenderArticle,\n languageSettings,\n isReplaceWidgetList,\n setIsReplaceWidgetList,\n handleChangeKeyword,\n usePublishedFilter,\n handleSetInitStates,\n facets,\n params,\n clickedFacets,\n setClickedFacets,\n allowedFilterSlider,\n hierarchicalProductTypeSettings,\n hierarchicalCollectionsSettings,\n hiddenTags,\n showOutOfStock,\n hierarchicalFacetAliases,\n defaultFilterItems,\n setValueFilterPriceChange,\n setValueFilterOnSaleChange,\n setValueFilterSliderOthers,\n tabs,\n initStatesFirstTime,\n setInitStatesFirstTime,\n parentPreviousState\n } = props || {};\n\n const { collectionId, collectionName } = params || {};\n\n const [isFirstLoading, setIsFirstLoading] = React.useState(true);\n const [isLoading, setIsLoading] = React.useState(true);\n const [searchResult, setSearchResult] = React.useState([]);\n const [searchProcessingTimeMs, setSearchProcessingTimeMs] = React.useState<string | number>(0);\n const [currentPage, setCurrentPage] = React.useState(1);\n const [totalPage, setTotalPage] = React.useState(0);\n const [totalSearchResult, setTotalSearchResult] = React.useState(0);\n const [summaryText, setSummaryText] = React.useState<React.ReactNode>(null);\n\n const previousState: any = usePrevious({ clickedTabIndexId });\n\n const { separator: hierarchical_separator, hiddens: hierarchical_hiddens } = hierarchicalProductTypeSettings || {};\n const {\n separator: hierarchical_collections_separator,\n hiddens: hierarchical_collections_hiddens,\n hidden_ids: hierarchical_collections_hidden_ids,\n structure: hierarchical_collections_structure\n } = hierarchicalCollectionsSettings || {};\n\n const {\n pagination_info: language_pagination_info,\n search_form_placeholder: language_search_form_placeholder,\n result: language_result,\n total_result_text: language_total_result_text\n } = languageSettings || {};\n\n const summaryTextGenerator = (totalResult: number) => {\n const defaultSummaryText: any = (\n <>\n {totalResult} {language_result || 'result'}{' '}\n {keyword?.length ? (\n <>\n for <span className=\"sledge-instant-search__result-data-summary-text-keyword\">\"{keyword}\"</span>\n </>\n ) : null}\n </>\n );\n\n let getSummaryText = clickedTabIndexType ? language_total_result_text[clickedTabIndexType] : null;\n let isSummaryTextFromLanguage = language_total_result_text && getSummaryText;\n\n if (isSummaryTextFromLanguage) getSummaryText = getSummaryText.replaceAll(OBJECT_DATA_STRING_KEY.TOTAL_RESULT, totalResult);\n\n return (\n <div className=\"sledge-instant-search__result-data-summary-item\">\n {displaySettings?.filter?.show_total_products ? (\n <span className=\"sledge-instant-search__result-data-summary-text\">{isSummaryTextFromLanguage ? getSummaryText : defaultSummaryText}</span>\n ) : null}\n </div>\n );\n };\n\n const handleSearchResultData = (props: { isReplaceData?: boolean; result?: any; onSearch?: boolean }) => {\n const { isReplaceData = false, result: resultProp, onSearch } = props;\n\n const INSTANT_SEARCH_SETTING = JSON.parse((localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || null) as string);\n const handleSearchResultFirstTime = isFirstLoading;\n\n const isFirstTimeOrOnSearch = (handleSearchResultFirstTime && initStatesFirstTime) || onSearch;\n const resultData = isFirstTimeOrOnSearch ? resultProp?.results : resultProp;\n const result = isFirstTimeOrOnSearch ? resultData?.find?.(({ indexUid }: any) => indexUid.includes(clickedTabIndexId)) : resultData;\n\n if (!result) return;\n\n if (isFirstTimeOrOnSearch) {\n handleSetInitStates?.({\n results: resultData,\n data: INSTANT_SEARCH_SETTING\n });\n }\n\n const { hits, processingTimeMs, totalHits, totalPages } = result;\n\n setIsFirstLoading(false);\n setIsLoading(false);\n setIsReplaceWidgetList?.(false);\n setSearchResult(hits);\n setSearchProcessingTimeMs(processingTimeMs || 0);\n setTotalPage(totalPages);\n setTotalSearchResult(totalHits || 0);\n setSummaryText(summaryTextGenerator(totalHits));\n };\n\n const handleSearchResult = async (props: { isReplaceData?: boolean; onSearch?: boolean }) => {\n const { isReplaceData = false, onSearch } = props;\n const handleSearchResultFirstTime = isFirstLoading;\n\n if (!clickedTabIndexId) return;\n\n if (isReplaceData) setCurrentPage(1);\n\n setIsLoading(true);\n\n let response: any = await handleSearchResponse({\n layoutType,\n clickedTabIndexId,\n clickedTabIndexType,\n keyword,\n page: isReplaceData ? 1 : currentPage,\n limit: 12,\n isUseMultiSearch: (handleSearchResultFirstTime && initStatesFirstTime) || onSearch,\n facets,\n clickedFacets,\n setClickedFacets,\n allowedFilterSlider,\n hierarchicalFacetAliases,\n defaultFilterItems,\n setValueFilterPriceChange,\n setValueFilterOnSaleChange,\n setValueFilterSliderOthers,\n collectionId,\n hiddenTags,\n showOutOfStock,\n hierarchicalProductTypeSettings,\n hierarchicalCollectionsSettings,\n usePublishedFilter,\n tabs\n });\n\n setInitStatesFirstTime?.(false);\n\n handleSearchResultData({\n result: response,\n ...props\n });\n };\n\n const handlePageChange = (page: number) => {\n setCurrentPage(page);\n setIsReplaceWidgetList?.(true);\n\n setTimeout(() => {\n scrollToElement({\n element: searchResultContainerRef.current,\n headerOffset: 50\n });\n }, 200);\n };\n\n React.useEffect(() => {\n let isKeywordChanged = Boolean(parentPreviousState && parentPreviousState.keyword !== keyword);\n\n if (isKeywordChanged) {\n const delayDebounceFn = setTimeout(() => {\n handleSearchResult({\n onSearch: true\n });\n }, 500);\n return () => clearTimeout(delayDebounceFn);\n } else {\n handleSearchResult({\n onSearch: false\n });\n }\n }, [keyword]);\n\n React.useEffect(() => {\n let isRefreshSearchResult = Boolean(previousState && previousState?.clickedTabIndexId !== clickedTabIndexId);\n\n if (isReplaceWidgetList || isRefreshSearchResult) {\n handleSearchResult({\n isReplaceData: isRefreshSearchResult\n });\n }\n }, [isReplaceWidgetList, clickedTabIndexId]);\n\n const searchKeywordComponent = (\n <div className=\"sledge-instant-search__result-data-keyword sledge-instant-search__result-data-keyword-category\">\n <Search\n placeholder={\n clickedTabIndexType && language_search_form_placeholder[clickedTabIndexType]\n ? language_search_form_placeholder[clickedTabIndexType]\n : `Search ${clickedTabIndexName ? clickedTabIndexName.toLowerCase() : ''}...`\n }\n value={keyword}\n handleChangeSearch={handleChangeKeyword}\n />\n </div>\n );\n\n const summaryTextSkeleton = (\n <div className=\"sledge-instant-search__result-data-summary\">\n <SkeletonLoading.Item width=\"117px\" height=\"28px\" color=\"lighten\" rounded=\"md\" />\n </div>\n );\n\n const skeletonLoadingComponent =\n clickedTabIndexType === 'collection' ? (\n <SkeletonLoading.CollectionGrid count={6} />\n ) : clickedTabIndexType === 'page' ? (\n <SkeletonLoading.PageGrid count={6} />\n ) : clickedTabIndexType === 'blog' ? (\n <SkeletonLoading.BlogGrid count={12} />\n ) : clickedTabIndexType === 'article' ? (\n <SkeletonLoading.ArticleGrid count={12} />\n ) : null;\n\n const ProvideElementFirstLoading = () => (\n <div className=\"sledge-instant-search__result-data-category-wrapper\">\n {searchKeywordComponent}\n {summaryTextSkeleton}\n {skeletonLoadingComponent}\n </div>\n );\n\n const ProvideElementLoading = () => (\n <>\n {summaryTextSkeleton}\n {skeletonLoadingComponent}\n </>\n );\n\n const ProvideElement = (elementProps: any) =>\n clickedTabIndexType === 'collection' ? (\n <CollectionGrid cards={collectionCardsComponent} onAfterRenderCollection={onAfterRenderCollection} {...elementProps} />\n ) : clickedTabIndexType === 'page' ? (\n <PageGrid cards={pageCardsComponent} onAfterRenderPage={onAfterRenderPage} {...elementProps} />\n ) : clickedTabIndexType === 'blog' ? (\n <BlogGrid cards={blogCardsComponent} onAfterRenderBlog={onAfterRenderBlog} {...elementProps} />\n ) : clickedTabIndexType === 'article' ? (\n <ArticleGrid cards={articleCardsComponent} onAfterRenderArticle={onAfterRenderArticle} {...elementProps} />\n ) : null;\n\n return (\n <div className=\"sledge-instant-search__result-wrapper\">\n {isFirstLoading ? (\n <ProvideElementFirstLoading />\n ) : (\n <div className=\"sledge-instant-search__result-data-category-wrapper\">\n {searchKeywordComponent}\n {isLoading ? (\n <ProvideElementLoading />\n ) : (\n <>\n <div className=\"sledge-instant-search__result-data-summary\">{summaryText}</div>\n {searchResult?.length ? (\n <>\n <ProvideElement data={searchResult} isComponentJsVersion={isJsVersion} />\n\n <Pagination\n currentPage={currentPage}\n totalPage={totalPage}\n totalResult={totalSearchResult}\n onChange={(page: number) => handlePageChange(page)}\n pageInfo={language_pagination_info}\n />\n </>\n ) : (\n <ResultEmpty {...props} />\n )}\n </>\n )}\n </div>\n )}\n </div>\n );\n});\n\nconst ResultEmpty = React.memo((props: IResultProps) => {\n const { languageSettings } = props || {};\n\n const { title_no_result: language_title_no_result, text_no_result: language_text_no_result } = languageSettings || {};\n\n return (\n <div className=\"sledge-instant-search__result-empty\">\n <div className=\"sledge-instant-search__result-empty-title\" dangerouslySetInnerHTML={{ __html: language_title_no_result || 'No results found' }}></div>\n <div\n className=\"sledge-instant-search__result-empty-description\"\n dangerouslySetInnerHTML={{ __html: language_text_no_result || 'Your search did not match any results. Please try again' }}\n ></div>\n </div>\n );\n});\n","import React from 'react';\nimport { motion } from 'framer-motion';\nimport { VISIBLE_ANIMATION } from '@core/lib/animation';\nimport { multiSearch, searchTrigger } from '@core/api/instant-search';\nimport { useDebounce, useEffectOnChange, usePreviewSettings, usePrevious } from '@core/hooks';\nimport { DEFAULT_QUERY_PARAM, DEFAULT_QUERY_PRODUCT_MEILISEARCH, DEFAULT_SEARCH_RESULT_URL, LOCAL_STORAGE_KEY, OBJECT_DATA_STRING_KEY } from '@core/lib/const';\nimport { ProductGrid, ScrollArea, SearchIcon, SearchInputField, SkeletonLoading } from '@core/components';\nimport { ISledgeContext, SledgeContext } from '@sledge-app/core';\nimport { isFunction } from '@core/lib/helper';\nimport { Global } from '@react-instant-search/components/Global';\n\nexport interface ISearchWidgetProps {\n query?: {\n keyword: string;\n };\n width?: string;\n children?: any;\n onAfterAddToCart?(state: 'success' | 'failed'): void;\n onAfterAddWishlist?(state: 'success' | 'failed'): void;\n onAfterRemoveWishlist?(state: 'success' | 'failed'): void;\n onAfterRenderProduct?(state: 'success' | 'failed'): void;\n urlSearchResult?: string;\n previewSettings?: any;\n}\n\nexport const SearchWidget = (props: ISearchWidgetProps) => {\n const { isRenderApp, isJsVersion } = React.useContext<ISledgeContext>(SledgeContext);\n\n const { instantSearch: isRenderAppInstantSearch } = isRenderApp || {};\n\n const { width = '400px', children, onAfterAddToCart, onAfterAddWishlist, onAfterRemoveWishlist, onAfterRenderProduct, urlSearchResult, query, previewSettings: previewSettingsProp } = props;\n\n const queryKeyword = query?.keyword ? query.keyword : DEFAULT_QUERY_PARAM.KEYWORD;\n\n const searchParams = typeof document !== 'undefined' ? new URLSearchParams(document?.location?.search) : null;\n\n // Separate Components\n let productCardsComponent: any = null;\n let suggestionKeywordListsComponent: any = null;\n let otherIndexListsComponent: any = null;\n let searchViewMoreResultComponent: any = null;\n React.Children.map(children, (child) => {\n if (React.isValidElement(child) && isFunction(child.type)) {\n const { productCard, suggestionKeywordList, otherIndexList, searchViewMoreResult }: any = child?.props || {};\n\n if (productCard && isFunction(productCard)) productCardsComponent = productCard;\n if (suggestionKeywordList && isFunction(suggestionKeywordList)) suggestionKeywordListsComponent = suggestionKeywordList;\n if (otherIndexList && isFunction(otherIndexList)) otherIndexListsComponent = otherIndexList;\n if (searchViewMoreResult && isFunction(searchViewMoreResult)) searchViewMoreResultComponent = searchViewMoreResult;\n }\n });\n\n const { instantSearchPreviewSettings, previewSettings } = usePreviewSettings({\n defaultSettings: previewSettingsProp,\n nestedProperty: 'sledge.instantSearch.searchWidget.preview'\n });\n\n const [isLoading, setIsLoading] = React.useState(true);\n const [keyword, setKeyword] = React.useState(searchParams?.get(queryKeyword) || '');\n const [searchResultProduct, setSearchResultProduct] = React.useState([]);\n const [searchResultOther, setSearchResultOther] = React.useState([]);\n const [displaySettings, setDisplaySettings] = React.useState<any>({});\n const [suggestionSettings, setSuggestionSettings] = React.useState<any>({});\n const [suggestionIndex, setSuggestionIndex] = React.useState('');\n const [showSearchResult, setShowSearchResult] = React.useState(false);\n const [languageSettings, setLanguageSettings] = React.useState<any>({});\n const [redirectsSettings, setRedirectsSettings] = React.useState([]);\n const [redirectObject, setRedirectObject] = React.useState<any>({});\n const [isRedirect, setIsRedirect] = React.useState(false);\n\n // Debounced states\n const debouncedKeyword = useDebounce(keyword, 250);\n\n const searchFieldRef = React.useRef(null);\n\n const { direction: redirectObjectDirection } = redirectObject || {};\n\n const handleMultiSearch = async (data: any, onSearch = false) => {\n if (!keyword.length) return;\n\n const valueRedirectObject: any = redirectsSettings.find(({ keyword: redirectKeyword }) => String(redirectKeyword)?.toLowerCase() === keyword);\n const valueIsRedirect = Boolean(valueRedirectObject?.direction?.length);\n\n setRedirectObject(valueRedirectObject);\n setIsRedirect(valueIsRedirect);\n\n setIsLoading(true);\n\n const { index_product, tabs, hidden_tags, display, show_out_of_stock, attributes_to_retrieve, default_sort, search_use_default_sort, collections_all_id } = data;\n const suggestion = display?.search?.suggestion || {};\n const instantSearchLimit = Number(display?.search?.instantsearch_limit || 6);\n\n let response: any;\n let body = {\n queries: tabs.map((tab: any) => {\n const { index } = tab;\n\n let isProductIndex = index.includes(index_product);\n let additionalFilter = DEFAULT_QUERY_PRODUCT_MEILISEARCH;\n\n if (hidden_tags?.length) additionalFilter.push(`tags NOT IN [${hidden_tags}]`);\n if (!show_out_of_stock) additionalFilter.push(`'availability' IN ${JSON.stringify(['in stock'])}`);\n\n let sort: string[] = [];\n if (isProductIndex && search_use_default_sort && default_sort) {\n if (String(default_sort).includes(OBJECT_DATA_STRING_KEY.COLLECTION_ID)) {\n sort = collections_all_id ? [String(default_sort).replaceAll(OBJECT_DATA_STRING_KEY.COLLECTION_ID, String(collections_all_id))] : [];\n } else {\n sort = [default_sort];\n }\n } else {\n sort = [];\n }\n\n return {\n indexUid: index,\n q: keyword,\n sort,\n hitsPerPage: isProductIndex ? instantSearchLimit : 4,\n filter: isProductIndex ? [...new Set(additionalFilter)].join(' AND ') : '',\n attributesToRetrieve: attributes_to_retrieve\n };\n })\n };\n\n response = await multiSearch(body);\n\n if (!response) return;\n\n const { results } = response;\n\n let valueSearchResultProduct = results?.filter(({ indexUid }: any) => indexUid?.includes(index_product));\n\n if (onSearch && keyword?.length) {\n searchTrigger({\n keyword: keyword,\n resultCount: valueSearchResultProduct[0]?.totalHits || 0\n });\n }\n\n let valueSearchResultOther =\n results\n ?.filter(({ indexUid }: any) => !indexUid?.includes(index_product))\n ?.map((result: any) => {\n const { indexUid } = result;\n\n const { name, type } = tabs?.find(({ index }: any) => index.includes(indexUid));\n\n return {\n ...result,\n ...{\n name: name || '',\n type: type || ''\n }\n };\n }) || [];\n\n let getValueSearchResultProduct = valueSearchResultProduct?.length ? valueSearchResultProduct[0]?.hits : [];\n let valueSuggestionIndex = !keyword.length ? 'zero_character' : !getValueSearchResultProduct?.length ? 'no_result' : '';\n\n let isPriorityZeroCharacter = Boolean(\n !keyword.length && Object.keys(suggestion).length && suggestion[valueSuggestionIndex]?.products?.active && suggestion[valueSuggestionIndex]?.products?.list?.length\n );\n\n setSearchResultProduct(isPriorityZeroCharacter ? suggestion[valueSuggestionIndex]?.products?.list : getValueSearchResultProduct);\n setSearchResultOther(valueSearchResultOther);\n setSuggestionIndex(valueSuggestionIndex);\n setIsLoading(false);\n };\n\n const handleSettings = async (LOCAL_STORAGE_INSTANT_SEARCH_SETTING: any) => {\n let response: any;\n\n response = instantSearchPreviewSettings || JSON.parse(LOCAL_STORAGE_INSTANT_SEARCH_SETTING as string);\n\n if (!response) return;\n\n const { display, languages, redirects } = response;\n\n setDisplaySettings(display);\n setSuggestionSettings(display?.search?.suggestion);\n setLanguageSettings(languages);\n setRedirectsSettings(redirects);\n\n if (keyword.length) await handleMultiSearch(response);\n };\n\n useEffectOnChange(() => {\n handleSettings(localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || null);\n }, [previewSettings]);\n\n React.useEffect(() => {\n if (!isRenderAppInstantSearch) return;\n\n handleSettings(localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || null);\n }, [isRenderAppInstantSearch]);\n\n useEffectOnChange(() => {\n const INSTANT_SEARCH_SETTING = instantSearchPreviewSettings || JSON.parse((localStorage.getItem(LOCAL_STORAGE_KEY.INSTANT_SEARCH_SETTING) || null) as string);\n\n setShowSearchResult(keyword ? true : false);\n\n if (INSTANT_SEARCH_SETTING) handleMultiSearch(INSTANT_SEARCH_SETTING, true);\n }, [debouncedKeyword]);\n\n React.useEffect(() => {\n showSearchResult ? document.body.classList.add('sledge__open-element-inset') : document.body.classList.remove('sledge__open-element-inset');\n }, [showSearchResult]);\n\n const wrapperStyle = {\n maxWidth: width\n };\n\n return (\n <div className=\"sledge-instant-search__widget-search-form-wrapper\" style={wrapperStyle}>\n {showSearchResult ? <div className=\"sledge__inset-full\" onClick={() => setShowSearchResult(false)}></div> : null}\n\n <SearchInputField\n type=\"text\"\n fieldRef={searchFieldRef}\n icon={<SearchIcon width={18} height={18} color=\"#868686\" />}\n placeholder={languageSettings?.search_form_placeholder?.widget || 'Search anything...'}\n value={keyword}\n onChange={({ value }: any) => setKeyword(value)}\n onKeyDown={(event: KeyboardEvent) => {\n // TODO: This method just for js version, find a way to add additional function after enter key on headless (maybe we can expose onEnterKey)\n if (event.key === 'Enter') {\n const urlToSearchResult = isRedirect ? redirectObjectDirection : `${urlSearchResult || DEFAULT_SEARCH_RESULT_URL}?${queryKeyword}=${keyword}`;\n\n window.location.href = urlToSearchResult;\n }\n }}\n onResetField={() => setKeyword('')}\n onFocus={() => {\n if (keyword) setShowSearchResult(true);\n }}\n withClearField\n />\n\n {showSearchResult ? (\n <div className=\"sledge-instant-search__widget-search-form-result\">\n {isLoading ? (\n <ScrollArea>\n <div className=\"sledge-instant-search__widget-search-form-result-flex\">\n <div className=\"sledge-instant-search__widget-search-form-result-flex-item-other sledge-instant-search__widget-search-form-result-flex-item-other-skeleton\">\n {[0, 1, 2].map((index: number) => (\n <React.Fragment key={index}>\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"42px\"\n color=\"lighten\"\n rounded=\"md\"\n {...(Boolean(index) && {\n style: { marginTop: '12px' }\n })}\n />\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n gap: '12px',\n marginTop: '12px'\n }}\n >\n {[1, 2, 3].map((index: number) => (\n <SkeletonLoading.Item\n width=\"100%\"\n height=\"28px\"\n color=\"lighten\"\n rounded=\"md\"\n key={index}\n style={{\n maxWidth: '140px'\n }}\n />\n ))}\n </div>\n </React.Fragment>\n ))}\n </div>\n <div className=\"sledge-instant-search__widget-search-form-result-flex-item-product\">\n <SkeletonLoading.ProductGrid count={6} type=\"small\" />\n </div>\n </div>\n </ScrollArea>\n ) : (\n <ScrollArea isLoading={isLoading}>\n <>\n <div className=\"sledge-instant-search__widget-search-form-result-flex\">\n <div className=\"sledge-instant-search__widget-search-form-result-flex-item-other\">\n {Object.keys(suggestionSettings).length &&\n suggestionSettings[suggestionIndex]?.keywords?.active &&\n suggestionSettings[suggestionIndex]?.keywords?.list?.length ? (\n <Global.SuggestionKeywordLists\n listsComponent={suggestionKeywordListsComponent}\n keywords={suggestionSettings[suggestionIndex].keywords.list}\n isComponentJsVersion={isJsVersion}\n urlSearchResult={urlSearchResult}\n query={query}\n />\n ) : null}\n\n {searchResultOther.map((item: any, index: number) => {\n const { hits, name, type } = item;\n\n return (\n <React.Fragment key={index}>\n <Global.OtherIndexLists\n listsComponent={otherIndexListsComponent}\n name={name}\n type={type}\n items={hits}\n isComponentJsVersion={isJsVersion}\n languageSettings={languageSettings}\n />\n </React.Fragment>\n );\n })}\n </div>\n <div className=\"sledge-instant-search__widget-search-form-result-flex-item-product\">\n <div className=\"sledge-instant-search__widget-search-form-result-title-product\">{languageSettings?.product || 'Products'}</div>\n {searchResultProduct?.length ? (\n <div className=\"sledge-instant-search__widget-search-form-result-product\">\n <ProductGrid\n sourceApp=\"instant-search\"\n type=\"small\"\n data={searchResultProduct.map((item: any) => {\n const { variants, ...product } = item || {};\n\n return {\n product,\n variants\n };\n })}\n setting={{\n show_vendor: displaySettings?.search?.show_vendor,\n show_sku: displaySettings?.search?.show_sku,\n show_price: displaySettings?.search?.show_price,\n language_button_add_to_cart: languageSettings?.add_to_cart,\n language_button_out_of_stock: languageSettings && languageSettings['out of stock'] ? languageSettings['out of stock'] : ''\n }}\n showOptionOutOfStock={true}\n isComponentJsVersion={isJsVersion}\n cards={productCardsComponent}\n onAfterAddToCart={onAfterAddToCart}\n onAfterAddWishlist={onAfterAddWishlist}\n onAfterRemoveWishlist={onAfterRemoveWishlist}\n onAfterRenderProduct={onAfterRenderProduct}\n />\n </div>\n ) : Object.keys(suggestionSettings).length &&\n suggestionSettings[suggestionIndex]?.products?.active &&\n suggestionSettings[suggestionIndex]?.products?.list?.length ? (\n <>\n <div className=\"sledge-instant-search__widget-search-form-result-product-suggestion-no-result-text\">\n <span>Sorry, nothing found for</span> <strong>{keyword}</strong>. <span>Did you mean:</span>\n </div>\n <ProductGrid\n sourceApp=\"instant-search\"\n type=\"small\"\n data={suggestionSettings[suggestionIndex].products.list.map((item: any) => {\n const { variants, ...product } = item || {};\n\n return {\n product,\n variants\n };\n })}\n setting={{\n show_vendor: displaySettings?.search?.show_vendor,\n show_sku: displaySettings?.search?.show_sku,\n show_price: displaySettings?.search?.show_price,\n language_button_add_to_cart: languageSettings?.add_to_cart,\n language_button_out_of_stock: languageSettings && languageSettings['out of stock'] ? languageSettings['out of stock'] : ''\n }}\n showOptionOutOfStock={true}\n isComponentJsVersion={isJsVersion}\n cards={productCardsComponent}\n onAfterAddToCart={onAfterAddToCart}\n onAfterAddWishlist={onAfterAddWishlist}\n onAfterRemoveWishlist={onAfterRemoveWishlist}\n onAfterRenderProduct={onAfterRenderProduct}\n />\n </>\n ) : (\n <div className=\"sledge-instant-search__widget-search-form-result-product-disabled\">{languageSettings?.text_no_result || 'No product were found'}</div>\n )}\n </div>\n </div>\n {searchResultProduct?.length ||\n (Object.keys(suggestionSettings).length && suggestionSettings[suggestionIndex]?.products?.active && suggestionSettings[suggestionIndex]?.products?.list?.length) ? (\n <div className=\"sledge-instant-search__widget-button-more-wrapper\">\n <Global.SearchViewMoreResult\n component={searchViewMoreResultComponent}\n keyword={keyword}\n isComponentJsVersion={isJsVersion}\n urlSearchResult={urlSearchResult}\n redirectObjectDirection={redirectObjectDirection}\n query={query}\n languageSettings={languageSettings}\n />\n </div>\n ) : null}\n </>\n </ScrollArea>\n )}\n </div>\n ) : null}\n </div>\n );\n};\n"],"names":["jsx","React","query","root","entry","cents","jsxs","PopoverElement.Root","open","PopoverElement.Trigger","PopoverElement.Portal","PopoverElement.Content","PopoverElement.Close","PopoverElement.Arrow","ProgressElement.Root","ProgressElement.Indicator","CheckboxElement.Root","CheckboxElement.Indicator","Form.Root","type","_a","Fragment","SliderElement.Root","SliderElement.Track","SliderElement.Range","SliderElement.Thumb","RadioGroupElement.Item","RadioGroupElement.Indicator","RadioGroupElement.Root","SelectElement.Root","SelectElement.Trigger","SelectElement.Value","SelectElement.Icon","SelectElement.Portal","SelectElement.Content","SelectElement.ScrollUpButton","SelectElement.Viewport","SelectElement.ScrollDownButton","SelectElement.Item","SelectElement.ItemText","SelectElement.ItemIndicator","value","addToCartTrigger","shareLink","WidgetHeaderSort","WidgetHeader","_b","_c","props","ReactDOM","is_required_login","productClickTrigger","id","instantSearchProductClickTrigger","productRecommendationProductClickTrigger","image","data","shopifyAddToCart","wishlistAddToCartTrigger","instantSearchAddToCartTrigger","productRecommendationAddToCartTrigger","Form.Field","Form.Control","Form.Message","TooltipElement.Provider","TooltipElement.Root","TooltipElement.Trigger","TooltipElement.Portal","TooltipElement.Content","TooltipElement.Arrow","ScrollAreaElement.Root","ScrollAreaElement.Viewport","ScrollAreaElement.Scrollbar","ScrollAreaElement.Thumb","ResponsiveMasonry","carouselApi","rowRenderer","_d","_e","_f","_g","_i","_h","_l","_k","_j","_n","_m","_o","urlSearchResult","Dialog.Root","Dialog.Portal","Dialog.Overlay","Dialog.Content","index","usePublishedFilter","label","FilterItem","FilterSelected","haveNextPage","currentItems","getValue","FilterFlyoutLayout","params","settings","tabs","totalHits","isSetFilter","searchParams","keyword","facets","dataClickedFacets","isLoadMore"],"mappings":"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"}