{"version":3,"file":"157.7304c9ec0fff2c41fcf6.min.js","mappings":"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","sources":["webpack://Vollrath.Kentico.Web/./js/shared/react/components/genus-products-grid.jsx"],"sourcesContent":["import React, { Component } from \"react\";\r\nimport ReactPaginate from 'react-paginate';\r\nimport Product from './product-item.jsx';\r\nimport LoaderSection from './loader-section.jsx';\r\nimport { getProductFilterOptions, getFilteredProductsByClassification } from '../../apis/filters';\r\nimport { getUrlParams, generatePaginationHref, toClassName, isMetricGuess } from '../../utils/';\r\nimport debounce from 'lodash/debounce';\r\nimport Filters from './filters.jsx';\r\nimport toast from '../../components/toast';\r\nimport FilteringBase from './filtering-base';\r\n\r\nclass GenusProductsContainer extends FilteringBase {\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        this.state = Object.assign({}, this.baseState, {\r\n            filters: [],\r\n            isLoadingFilters: false,\r\n            firstSearch: true\r\n        });\r\n\r\n        this.onSearchInput = this.onSearchInput.bind(this);\r\n        this.handleChange = this.handleChange.bind(this);\r\n        this.handlePageClick = this.handlePageClick.bind(this);\r\n        this.loadDebounce = debounce(this.load.bind(this), 1000);\r\n    }\r\n\r\n    componentDidMount() {\r\n        // get filters\r\n        this.loadFilters()\r\n            .then(data => {\r\n                console.log(data);\r\n                let params = getUrlParams();\r\n                this.updateFilters(params);\r\n                // reload filters if any are set\r\n                if (Object.keys(params).length) {\r\n                    this.loadFilters()\r\n                        .then(filters => {\r\n                            console.log(filters);\r\n                            this.loadFiltersAndProductsOnMount(params);\r\n                        })\r\n                        .catch(error => {\r\n                            console.log(error);\r\n                            this.setState({\r\n                                isLoading: false\r\n                            });\r\n                            toast.error('There was an error getting product filters');\r\n                        });\r\n                }\r\n                else {\r\n                    this.loadFiltersAndProductsOnMount(params);\r\n                }\r\n            })\r\n            .catch(error => {\r\n                console.log(error);\r\n                this.setState({\r\n                    isLoading: false\r\n                });\r\n                toast.error('There was an error getting product filters');\r\n            });\r\n    }\r\n\r\n    loadFiltersAndProductsOnMount(params) {\r\n        this.checkParams(Object.keys(params).length, true, params);\r\n\r\n        window.addEventListener('popstate', e => {\r\n            let params = getUrlParams();\r\n            this.updateFilters(params);\r\n            console.log(location.pathname + location.search);\r\n\r\n            this.checkParams(Object.keys(params).length, false, params);\r\n        });\r\n    }\r\n\r\n    checkParams(length, popstate = true, params) {\r\n        if (length) {\r\n            this.setState({ page: this.getPageNum(params) }, () => {\r\n                this.load(popstate);\r\n            });\r\n        } else {\r\n            if (popstate) {\r\n                this.load(popstate);\r\n            } else {\r\n                this.setState({ page: 1 }, () => { this.load(popstate) });\r\n            }\r\n        }\r\n    }\r\n\r\n    getPageNum(params) {\r\n        return params.page && params.page !== '1' ? params.page : 1;\r\n    }\r\n\r\n    // load products from the api\r\n    load(pushState = true) {\r\n        if (this.ajaxPromise) this.ajaxPromise.controller.abort();\r\n\r\n        this.setState({\r\n            isLoading: true,\r\n            items: []\r\n        });\r\n\r\n        if (pushState && !this.state.firstSearch) {\r\n            history.pushState(null, document.title, this.getUrl());\r\n        }\r\n\r\n        // put together api parameters\r\n        const params = {\r\n            q: this.state.q,\r\n            page: this.state.page,\r\n            pageSize: this.state.pageSize,\r\n            selected: this.getSelectedApiParams()\r\n        };\r\n\r\n        // remove empty or undefined params\r\n        Object.keys(params).forEach(key => {\r\n            if (!params[key]) delete params[key];\r\n        });\r\n\r\n        this.setState({\r\n            firstSearch: false\r\n        });\r\n\r\n        this.ajaxPromise = getFilteredProductsByClassification(this.props.id, params);\r\n        return this.ajaxPromise\r\n            .then(data => {\r\n                console.log(data);\r\n                this.setState({\r\n                    items: data.records,\r\n                    totalRecords: data.totalRecords\r\n                });\r\n                return data;\r\n            })\r\n            .catch(error => {\r\n                console.log(error);\r\n                if (error.name === 'AbortError') return error;\r\n                toast.error('There was an error getting products');\r\n            })\r\n            .finally(() => {\r\n                this.setState({\r\n                    isLoading: false\r\n                });\r\n            });\r\n    }\r\n\r\n    loadFilters() {\r\n        if (this.filterPromise) this.filterPromise.controller.abort();\r\n\r\n        const params = {\r\n            selected: this.getSelectedApiParams()\r\n        };\r\n        if (!params.selected) delete params['selected'];\r\n        this.setState({\r\n            isLoadingFilters: true\r\n        });\r\n\r\n        this.filterPromise = getProductFilterOptions(this.props.id, params);\r\n        return this.filterPromise\r\n            .then(data => {\r\n                console.log(data);\r\n                this.resetFilterData(data);\r\n                // map currently selected filters to new filters\r\n                const selected = [];\r\n                for (const [key, value] of Object.entries(this.state.filters)) {\r\n                    value.forEach(v => {\r\n                        if (v.selected) selected.push(v.filterGuid);\r\n                    });\r\n                }\r\n                for (const [key, value] of Object.entries(data)) {\r\n                    value.forEach(v => {\r\n                        if (selected.indexOf(v.filterGuid) >= 0) v.selected = true;\r\n                    });\r\n                }\r\n                this.setState({\r\n                    filters: data\r\n                });\r\n                return data;\r\n            })\r\n            .catch(error => {\r\n                console.log(error);\r\n                if (error.name === 'AbortError') return;\r\n            })\r\n            .finally(() => {\r\n                this.setState({\r\n                    isLoadingFilters: false\r\n                });\r\n            });\r\n    }\r\n\r\n    getSelectedApiParams() {\r\n        const selected = [];\r\n        for (const [key, value] of Object.entries(this.state.filters)) {\r\n            value.forEach(v => {\r\n                if (v.selected) selected.push(v.filterGuid);\r\n            });\r\n        }\r\n\r\n        return selected.join(',');\r\n    }\r\n\r\n    // set the selected state of the filters to false\r\n    resetFilterData(data) {\r\n        for (const [key, value] of Object.entries(data)) {\r\n            value.forEach(v => v.selected = false);\r\n        }\r\n    }\r\n\r\n    // update filters on page using the url parameters\r\n    updateFilters(params) {\r\n\r\n        const filters = Object.assign({}, this.state.filters);\r\n\r\n        // reset filters to be unselected\r\n        this.resetFilterData(filters);\r\n        // go through params and update selected filters\r\n        for (const paramKey in params) {\r\n            const values = params[paramKey].split('|').join(',').split(',');\r\n            const filterSection = Object.entries(filters).find(([key]) => toClassName(key) === toClassName(paramKey));\r\n            console.log(filterSection, values);\r\n\r\n            if (filterSection) {\r\n                values.forEach(value => {\r\n                    const filter = filterSection[1].find(f => toClassName(f.value) === toClassName(value));\r\n                    if (filter) filter.selected = true;\r\n                });\r\n            }\r\n        }\r\n\r\n        // update search query\r\n        if (params.q) this.setState({ q: params.q });\r\n\r\n        this.setState({\r\n            filters: filters,\r\n            page: params['page'] ? +params['page'] : 1\r\n        });\r\n    }\r\n\r\n    // get all the selected filters at this time\r\n    getAllFilters() {\r\n        const params = {\r\n            q: this.state.q,\r\n            page: this.state.page\r\n        };\r\n\r\n        for (const [key, value] of Object.entries(this.state.filters)) {\r\n            value.forEach(v => {\r\n                if (v.selected) {\r\n                    const paramKey = toClassName(key),\r\n                        encodedValue = toClassName(v.Value);\r\n                    if (params[paramKey]) params[paramKey].push(encodedValue);\r\n                    else params[paramKey] = [encodedValue];\r\n                }\r\n            });\r\n        }\r\n\r\n        // pipe delimit array values\r\n        Object.keys(params).forEach(key => {\r\n            if (Array.isArray(params[key])) params[key] = params[key].join('|');\r\n        });\r\n\r\n        return params;\r\n    }\r\n\r\n    // get the url for the current window location\r\n    getUrl() {\r\n        const baseUrl = `${window.location.pathname}`,\r\n            filters = this.getAllFilters(),\r\n            params = [];\r\n        for (const key in filters) {\r\n            let val = filters[key];\r\n            if (((key === 'page' && val > 1) || key !== 'page')) {\r\n                if (typeof val === 'string')\r\n                    if (val.indexOf('|') > 0 || val.indexOf(',') > 0)\r\n                        val = val.split('|').join(',').split(',').map(value => toClassName(value)).join('|');\r\n                    else\r\n                        val = toClassName(val);\r\n                if (val) params.push(`${key}=${encodeURIComponent(val)}`);\r\n            }\r\n        }\r\n\r\n        return `${baseUrl}${params.length ? '?' : ''}${params.join('&')}`;\r\n    }\r\n\r\n    handleChange(e) {\r\n        const target = event.target,\r\n            isChecked = target.checked,\r\n            value = target.value,\r\n            filters = Object.assign({}, this.state.filters);\r\n\r\n        Object.keys(filters).forEach(key => {\r\n            const match = filters[key].find(f => f.filterGuid === value);\r\n            if (match) match.selected = isChecked;\r\n        });\r\n\r\n        this.setState({\r\n            filters: filters,\r\n            page: 1\r\n        }, () => {\r\n            this.loadFilters();\r\n            this.load();\r\n        });\r\n    }\r\n\r\n    onSearchInput(value) {\r\n        this.setState({\r\n            q: value\r\n        }, () => {\r\n            this.loadDebounce();\r\n        });\r\n    }\r\n\r\n    shouldShowFilters() {\r\n        return Object.entries(this.state.filters).length > 0;\r\n    }\r\n\r\n    render() {\r\n        let pagination,\r\n            loader,\r\n            results;\r\n        if (this.showPagination()) {\r\n            pagination = <ReactPaginate\r\n                previousLabel={'<'}\r\n                nextLabel={'>'}\r\n                breakLabel={'...'}\r\n                breakClassName={'break-me'}\r\n                pageCount={this.pages()}\r\n                marginPagesDisplayed={2}\r\n                pageRangeDisplayed={5}\r\n                onPageChange={this.handlePageClick}\r\n                containerClassName={'pagination'}\r\n                subContainerClassName={'pages pagination'}\r\n                activeClassName={'active'}\r\n                forcePage={this.state.page - 1}\r\n                hrefBuilder={generatePaginationHref}\r\n            />;\r\n        }\r\n\r\n        if (this.state.items.length > 0) {\r\n            results = <div className=\"row\">\r\n                {this.state.items.map((product, index) => (\r\n                    <Product key={index} showAddToProject={this.props.isSales} {...product} />\r\n                ))}\r\n            </div>;\r\n        }\r\n        else if (!this.state.isLoading) {\r\n            results = <div><p className=\"no-results\">No results found</p></div>;\r\n        }\r\n\r\n        if (this.state.isLoading) loader = <LoaderSection show={true} />;\r\n\r\n        let filterComponent;\r\n        if (this.shouldShowFilters()) {\r\n            filterComponent = <div className=\"col-lg-3\">\r\n                <Filters q={this.state.q} handleSearchChange={this.onSearchInput}>\r\n                    {Object.entries(this.state.filters).map(([key, value], index) => (\r\n                        <details className=\"filter-accordion\" open={!isMetricGuess(key)} key={key} role=\"group\" aria-labelledby={'filter-' + toClassName(key)}>\r\n                            <summary className=\"filter-accordion-header\" id={'filter-' + toClassName(key)}><span>{key}</span></summary>\r\n                            <div className=\"filter-accordion-content\">\r\n                                {value.map((filter, index) => (\r\n                                    <div key={index}>\r\n                                        <input className=\"custom-checkbox square\" id={filter.filterGuid} type=\"checkbox\" name={key} value={filter.filterGuid} onChange={this.handleChange} checked={filter.selected} disabled={this.state.isLoadingFilters} />\r\n                                        <label htmlFor={filter.filterGuid}>\r\n                                            <span>{filter.value} <span className=\"dull\">({filter.numberOfProducts})</span></span>\r\n                                        </label>\r\n                                    </div>\r\n                                ))}\r\n                            </div>\r\n                        </details>\r\n                    ))}\r\n                </Filters>\r\n            </div>;\r\n        }\r\n\r\n        return (\r\n            <div className={this.shouldShowFilters() ? 'row' : 'row justify-content-center'}>\r\n                {filterComponent}\r\n                <div id=\"results\" className={this.shouldShowFilters() ? 'col-lg-9' : 'col-lg-10'}>\r\n                    {loader}\r\n                    {results}\r\n                    {pagination}\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default GenusProductsContainer;"],"names":["GenusProductsContainer","props","state","Object","assign","baseState","filters","isLoadingFilters","firstSearch","onSearchInput","bind","handleChange","handlePageClick","loadDebounce","debounce","load","this","loadFilters","then","data","console","log","params","getUrlParams","updateFilters","keys","length","loadFiltersAndProductsOnMount","error","setState","isLoading","toast","checkParams","window","addEventListener","e","location","pathname","search","popstate","page","getPageNum","pushState","ajaxPromise","controller","abort","items","history","document","title","getUrl","q","pageSize","selected","getSelectedApiParams","forEach","key","getFilteredProductsByClassification","id","records","totalRecords","name","filterPromise","getProductFilterOptions","resetFilterData","entries","v","push","filterGuid","indexOf","join","paramKey","values","split","filterSection","find","toClassName","value","filter","f","encodedValue","Value","Array","isArray","baseUrl","getAllFilters","val","map","encodeURIComponent","target","event","isChecked","checked","match","pagination","loader","results","filterComponent","showPagination","previousLabel","nextLabel","breakLabel","breakClassName","pageCount","pages","marginPagesDisplayed","pageRangeDisplayed","onPageChange","containerClassName","subContainerClassName","activeClassName","forcePage","hrefBuilder","generatePaginationHref","className","product","index","showAddToProject","isSales","show","shouldShowFilters","handleSearchChange","open","isMetricGuess","role","type","onChange","disabled","htmlFor","numberOfProducts","FilteringBase"],"sourceRoot":""}