(urlPrefix ? goToDetails() : undefined)}\r\n >\r\n {title}\r\n
\r\n >\r\n )\r\n\r\n if (subtitle)\r\n bottomCell = (\r\n (urlPrefix ? goToDetails() : undefined)}\r\n >\r\n {subtitle}\r\n
\r\n )\r\n\r\n if (topTags)\r\n topCell = (\r\n \r\n
\r\n {cellTypes?.[computedCellType](\r\n headerItem,\r\n row,\r\n `${row.id}_${colIndex}`,\r\n isSmallScreen\r\n )}\r\n
\r\n )\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n {!noHeader && !isSmallScreen && (\r\n \r\n {header?.map?.((headerItem, index) => (\r\n \r\n ))}\r\n
\r\n )}\r\n {rows?.map?.((row, rowIndex) => (\r\n \r\n {header?.map?.((headerItem, colIndex) =>\r\n createCellInRow(row, headerItem, colIndex, rowIndex)\r\n )}\r\n
\r\n ))}\r\n {(!rows || rows?.length === 0) && emptyComponent}\r\n \r\n {miltiSelectLength > 0 &&
}\r\n
\r\n {lastItemHint && !noLoadMore && (\r\n
}\r\n onClick={() => dispatch(loadViewData())}\r\n />\r\n )}\r\n >\r\n )\r\n}\r\n\r\nexport const HeaderCell = ({ type, selected, label, sort }) => {\r\n const dispatch = useDispatch()\r\n const sortState = useSelector((state) => state?.dataView?.sort)\r\n // const moreActionsCell =
{label}
\r\n const sortCell = (\r\n <>\r\n
{label}
\r\n
\r\n
dispatch(toggleSort([sort, true]))}\r\n >\r\n \r\n
\r\n
dispatch(toggleSort([sort, false]))}\r\n >\r\n \r\n
\r\n
\r\n >\r\n )\r\n return (\r\n
\r\n {type === \"select\" ? (\r\n \r\n ) : sort ? (\r\n sortCell\r\n ) : (\r\n label\r\n )}\r\n
\r\n )\r\n}\r\n\r\nexport const SquareColorButton = ({ label, className }) => {\r\n return (\r\n
\r\n {label} \r\n
\r\n )\r\n}\r\nexport const CurrencyUnitMeasureBox = ({\r\n right,\r\n value,\r\n narrow,\r\n isEdit,\r\n onItemChange\r\n}) => {\r\n return (\r\n
\r\n }\r\n />\r\n
\r\n )\r\n}\r\nconst RightBox = (props) => {\r\n const { label } = props\r\n return
{label}
\r\n}\r\nconst CheckBoxSwitch = (props) => {\r\n const { row, header, selected } = props\r\n const dispatch = useDispatch()\r\n const iconCondition = header ? selected : row.selected\r\n const iconName =\r\n iconCondition === false\r\n ? \"Checkbox_inactive\"\r\n : iconCondition === null\r\n ? \"CheckboxMultiDeselect\"\r\n : \"Checkbox_active\"\r\n return (\r\n
\r\n dispatch(header ? toggleSelectAllItems() : toggleSelectedItem(row.id))\r\n }\r\n >\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default MagicTable\r\n","export default __webpack_public_path__ + \"static/media/add.975a5aac.svg\";","export default __webpack_public_path__ + \"static/media/minus.ed550c28.svg\";","export default __webpack_public_path__ + \"static/media/MinusSmall.8dc501ee.svg\";","export default __webpack_public_path__ + \"static/media/down.6b5207a0.svg\";","import React, { useState } from \"react\"\r\nimport add from \"components/ExpandableSection/add.svg\"\r\nimport minus from \"components/ExpandableSection/minus.svg\"\r\nimport MinusSmall from \"components/ExpandableSection/MinusSmall.svg\"\r\nimport downIcon from \"components/ExpandableSection/down.svg\"\r\nimport \"./index.scss\"\r\n\r\nexport default function ExpandableSection(props) {\r\n const {\r\n title,\r\n titleClass,\r\n down,\r\n startClosed,\r\n unconditionalBody, //displayed under title in any case\r\n shouldLimitAndScroll = false, \r\n } = props\r\n const [open, setOpen] = useState(startClosed)\r\n const icon = open ? (down ? MinusSmall : minus) : down ? downIcon : add\r\n return (\r\n
\r\n
setOpen((p) => !p)}>\r\n
{title}
\r\n
e?.preventDefault?.()} src={icon} alt=\"sign\" />\r\n
\r\n {unconditionalBody}\r\n
\r\n {props.children}\r\n
\r\n
\r\n )\r\n}\r\n","\r\nconst attachSizeQueryParams = ({ urlString, width = 514, height = 293}) => {\r\n\r\n if(!urlString) return urlString;\r\n\r\n try {\r\n const url = new URL(urlString);\r\n \r\n if(url?.hostname !== 'uniprest.compano.com') return urlString;\r\n \r\n if(url?.searchParams?.get('W')) return urlString;\r\n if(url?.searchParams?.get('H')) return urlString;\r\n\r\n url?.searchParams?.append('W', width);\r\n url?.searchParams?.append('H', height);\r\n\r\n return url?.href\r\n\r\n } catch (error) {\r\n return urlString;\r\n }\r\n\r\n}\r\n\r\n\r\n/**\r\n * Why these numbers? Because we aimed for the product-detail page\r\n * where the images are typically rendered no larger than 541x304, but that was too \r\n * blurry. For extra sharpness we added an additional 20% to the requested resolution.\r\n */\r\nexport const attachSizeQueryParamsSmall = (urlString) => \r\n attachSizeQueryParams({ urlString, width: 649, height: 365})\r\n\r\n\r\n/**\r\n * Why these numbers? Because we aimed for the shop (product-list) page in list view\r\n * where the images are typically rendered no larger than 96x96, but that was too \r\n * blurry. For extra sharpness we added an additional 25% to the requested resolution.\r\n */\r\nexport const attachSizeQueryParamsXS = (urlString) => \r\n attachSizeQueryParams({ urlString, width: 120, height: 120})\r\n\r\n\r\n/**\r\n * Why these numbers? Because we aimed for the shop product-detail page \"Produse asociate\"\r\n * where the images are typically rendered no larger than 32x32, but that was too \r\n * blurry. For extra sharpness we added an additional 25% to the requested resolution.\r\n */\r\nexport const attachSizeQueryParamsXXS = (urlString) => \r\n attachSizeQueryParams({ urlString, width: 40, height: 40})\r\n\r\n","\r\nexport const isClientInvoiceFinal = status => \r\n status === 'ClientInvoiceStatus.FINAL' ||\r\n status === 'FINAL'\r\n \r\nexport const isClientInvoiceCancelled = status => \r\n status === 'ClientInvoiceStatus.CANCELLED' ||\r\n status === 'CANCELLED'\r\n","// const ADD_TO_CART = \"shop/ADD_TO_CART\"\r\n// const SET_SEARCH_STRING = \"shop/SET_SEARCH_STRING\"\r\nimport { Lang, lang, Translate, withLocalize } from \"components/Lang/Lang\"\r\nimport { sanitizeAnythingForRedux } from \"utils/preventReactInRedux\"\r\n\r\nconst invoiceCard = {\r\n created: \"EMISĂ PE\",\r\n title: \"Factura Fiscală\",\r\n payByCard: \"Plateste cu cardul\",\r\n toPay: \"De achitat pana pe\",\r\n forOrder: \"Aferentă comenzii\",\r\n download: \"Download\",\r\n paidMessage: \"Achitata. Multumim\",\r\n notPaidMessage: \"Factura este restanta\"\r\n}\r\nconst orderCard = {\r\n placedOn: \"PLASATA PE\",\r\n order: \"Comanda\",\r\n productsOne: \"# Produs\",\r\n productsMulti: \"# Produse\",\r\n total: \"Total\",\r\n report: \"RAPORTEAZA O PROBLEMA\",\r\n delivery: [\"livrare\", \"livrari\"]\r\n}\r\n\r\nconst offertCard = {\r\n generated: \"GENERATA PE\",\r\n offert: \"Oferta\",\r\n productsOne: \"# Produs\",\r\n productsMulti: \"# Produse\",\r\n total: \"Total\",\r\n report: \"RAPORTEAZA O PROBLEMA\",\r\n delivery: [\"livrare\", \"livrari\"]\r\n}\r\n\r\nconst listCard = {\r\n yourTitle: \"Lista Ta\",\r\n otherTitle: \"Lista\",\r\n productOne: \" PRODUS\",\r\n productMulti: \" PRODUSE\",\r\n updatedOn: \"ACTUALIZATA PE\"\r\n}\r\n\r\nconst initialState = {\r\n components: {\r\n invoiceCard,\r\n orderCard,\r\n offertCard,\r\n listCard\r\n }\r\n}\r\n\r\n// eslint-disable-next-line import/no-anonymous-default-export\r\nexport default function (state = initialState, unsanitizedAction) {\r\n\r\n const action = sanitizeAnythingForRedux(unsanitizedAction)\r\n\r\n switch (action.type) {\r\n default:\r\n return state\r\n }\r\n}\r\n","export default __webpack_public_path__ + \"static/media/UniLogo.6ce4e4d6.svg\";","import { Lang, lang } from \"components/Lang/Lang\"\r\nimport { legalDocuments } from \"views/guest/terms\"\r\n\r\nconst footerContent = {\r\n //copy: ,//'© Uniprest Instal SRL, ',\r\n FooterLinks: [\r\n {\r\n url: legalDocuments?.terms?.url,\r\n label:
\r\n },\r\n {\r\n url: legalDocuments?.cookies?.url,\r\n label:
\r\n }, //'Politica de stocare şi utilizare cookies' - Politica de utilizare Cooki-uri\r\n {\r\n url: legalDocuments?.contract?.url,\r\n label:
\r\n }, //'Condiţii contractuale generale' new one\r\n {\r\n url: legalDocuments?.marketing?.url,\r\n label: <>\r\n Nota de informare privind prelucrarea datelor \r\n
\r\n cu caracter personal în scopuri de marketing\r\n >,\r\n },\r\n {\r\n url: legalDocuments?.candidates?.url,\r\n label: legalDocuments?.candidates?.title\r\n },\r\n { \r\n url: \"/shop/support\", \r\n label: \"Contact\",\r\n }, \r\n\r\n ],\r\n social:
//Urmareste-ne pe retelele sociale:\r\n}\r\nexport default footerContent\r\n","import { Link } from \"react-router-dom\"\r\nimport UniLogo from \"assets/AboutUniprest/UniLogo.svg\"\r\nimport footerContent from \"../../mockData/footer\"\r\nimport MagicButton from \"components/MagicButton/MagicButtonV3\"\r\nimport { Translate } from \"components/Lang/Lang\"\r\n\r\nimport \"./index.scss\"\r\nimport { tryToScrollToTop } from \"views/productsList\"\r\n\r\nconst Footer = (props) => {\r\n const { className } = props\r\n const { FooterLinks, social } = footerContent\r\n \r\n const filteredFooterLinks = FooterLinks\r\n\r\n return (\r\n
\r\n )\r\n}\r\nexport default Footer\r\n","import PropTypes from \"prop-types\"\r\n\r\nexport default function CellListItems(props) {\r\n const { items, limit } = props\r\n if (!items || items?.length === 0) return <>>\r\n\r\n //small update so the limit dictates the number of lines\r\n let showItems =\r\n limit !== undefined && limit > 0 && limit !== items?.length\r\n ? limit - 1\r\n : items?.length\r\n const moreItemNumber = items?.length === limit ? 0 : items?.length - showItems\r\n\r\n return (\r\n <>\r\n {props.isSmallScreen && (\r\n
{props.label}
\r\n )}\r\n
\r\n {items?.map?.((item, index) => {\r\n if (index + 1 <= showItems) {\r\n return (\r\n
\r\n {item}\r\n
\r\n )\r\n }\r\n return null\r\n })}\r\n {moreItemNumber > 0 && (\r\n
+{moreItemNumber}
\r\n )}\r\n
\r\n >\r\n )\r\n}\r\n\r\nCellListItems.propTypes = {\r\n items: PropTypes.array,\r\n limit: PropTypes.number\r\n}\r\n","import PropTypes from \"prop-types\"\r\nimport SvgIcon from \"components/SvgIcon/SvgIcon\"\r\n\r\nexport default function Pill(props) {\r\n const { type, label, bold, color, fontColor, iconColor, iconName, value } =\r\n props\r\n\r\n const classColor = fontColor\r\n ? `color-${fontColor}`\r\n : type === \"outlined\" && color\r\n ? `color-${color}`\r\n : \"color-light-purewhite\"\r\n const classColorBg =\r\n type === \"filled\" && color ? `bg-${color}` : \"bg-light-purewhite\"\r\n const classBorder = type === \"outlined\" && color ? `border-${color}` : \"\"\r\n const classSize = iconName ? \"large\" : bold ? \"medium\" : \"small\"\r\n const classStroke = iconColor\r\n ? `stroke-${iconColor}`\r\n : type === \"outlined\" && color\r\n ? `stroke-${color}`\r\n : \"stroke-light-purewhite\"\r\n\r\n const computedLabel = value ?? label\r\n return (\r\n
\r\n
\r\n {iconName && (\r\n
\r\n )}\r\n {computedLabel && (\r\n
\r\n {computedLabel}\r\n
\r\n )}\r\n
\r\n
\r\n )\r\n}\r\n\r\nPill.propTypes = {\r\n type: PropTypes.oneOf([\"outlined\", \"filled\"]),\r\n label: PropTypes.string,\r\n value: PropTypes.string,\r\n bold: PropTypes.bool,\r\n color: PropTypes.string,\r\n fontColor: PropTypes.string,\r\n iconName: PropTypes.string\r\n}\r\n","import SvgIcon from \"components/SvgIcon/SvgIcon\"\r\nimport { useEffect, useRef, useState } from \"react\"\r\nimport Select, { components, NonceProvider } from \"react-select\"\r\nimport AsyncSelect from \"react-select/async\"\r\nimport { withTheme } from \"styled-components\"\r\nimport CreatableSelect from \"react-select/creatable\"\r\nimport \"./index.scss\"\r\n// import NewItemForm from 'views/dev/sorin/newItemForm'\r\nimport { useController } from \"react-hook-form\"\r\nimport MagicButton from \"components/MagicButton/MagicButtonV2\"\r\nimport { useDispatch, useSelector } from \"react-redux\"\r\nimport { setLoadingIndicator } from \"store/modules/page\"\r\nimport { deleteCustomerClient } from \"store/justActions/miscApiInteractions\"\r\n\r\nimport { Lang, lang, Translate, withLocalize } from \"components/Lang/Lang\"\r\nexport default function CustomSelect(props) {\r\n const { control } = props\r\n if (control) return
\r\n\r\n return
\r\n}\r\n\r\nexport const CustomCreatableSelect = (props) => {\r\n const { options, control } = props\r\n\r\n const processedOptions = options?.map?.((option) => ({\r\n value: option?.label,\r\n label: option?.label,\r\n originalValue: option?.value\r\n }))\r\n\r\n const propsWithProcessedOptions = {\r\n ...props,\r\n options: processedOptions,\r\n allowCustomOption: true\r\n }\r\n\r\n if (control) return
\r\n return
\r\n}\r\n\r\nfunction CustomSelectIntegrated(props) {\r\n const { control, name } = props\r\n const {\r\n field: { value, onChange, onBlur }\r\n } = useController({\r\n name,\r\n control,\r\n defaultValue: \"\"\r\n })\r\n return
\r\n}\r\n\r\nfunction CustomSelectBase(props) {\r\n const {\r\n inForm,\r\n className,\r\n control,\r\n data,\r\n disabled,\r\n error,\r\n fb,\r\n filter,\r\n icon,\r\n iconName,\r\n isClearable,\r\n isMulti,\r\n label,\r\n name,\r\n onChange,\r\n options,\r\n\r\n placeholder: inputPlaceholder,\r\n selected,\r\n type,\r\n value,\r\n\r\n onBlur,\r\n w,\r\n gridArea,\r\n onInputChange,\r\n inputValue,\r\n isAsync,\r\n getStuffForSelect,\r\n allLocationCase = false,\r\n allowCustomOption = false,\r\n onDeleteOption,\r\n //defaultOptions,\r\n ...rest\r\n } = props\r\n\r\n const defaultPlaceholder =
\r\n\r\n const placeholder =\r\n typeof inputPlaceholder === \"string\" && inputPlaceholder !== \"null\"\r\n ? inputPlaceholder\r\n : defaultPlaceholder\r\n\r\n \r\n const [addedCustomOption, setAddedCustomOption] = useState() \r\n\r\n let actualOptions = (data ?? options) || []\r\n \r\n const optionsWithOneAdded = addedCustomOption\r\n ? [addedCustomOption, ...(actualOptions || [])]\r\n : actualOptions\r\n \r\n\r\n const getInitialAddedCustomOption = () => {\r\n if(!allowCustomOption) return null \r\n if(!value) return null\r\n\r\n const isValueInOptions = actualOptions?.some?.(\r\n someOption => someOption?.value === value\r\n )\r\n if(isValueInOptions) return null\r\n return {value, label: value}\r\n }\r\n\r\n const initialAddedCustomOption = getInitialAddedCustomOption()\r\n\r\n useEffect(() => {\r\n if(initialAddedCustomOption) \r\n setAddedCustomOption(initialAddedCustomOption)\r\n }, [value])\r\n\r\n\r\n const onCreateOption = (newOptionString) => {\r\n if (!newOptionString) setAddedCustomOption(null)\r\n\r\n const newOptionObj = {\r\n value: newOptionString,\r\n label: newOptionString\r\n }\r\n\r\n setAddedCustomOption(newOptionObj)\r\n onChange?.(newOptionString)\r\n }\r\n\r\n actualOptions =\r\n optionsWithOneAdded?.map?.((o) => ({\r\n value: o.id ?? o?.value,\r\n label: o.label\r\n })) || []\r\n\r\n const mainClass = className\r\n ? `${className} custom-select-flex`\r\n : `custom-select-flex`\r\n const ss = useRef(\"\")\r\n const filterStyle = {\r\n container: (provided, state) => ({\r\n ...provided,\r\n width: w ?? (fb ? \"auto\" : 200),\r\n flexBasis: fb ?? 0\r\n }),\r\n control: (provided, state) => {\r\n let result = {\r\n ...provided\r\n // none of react-select's styles are passed to
\r\n }\r\n if (state.hasValue && filter) {\r\n result.backgroundColor = \"#EDF5FF\"\r\n result.borderColor = \"#D0E2FF\"\r\n }\r\n return result\r\n },\r\n menuList: (provided, state) => ({\r\n ...provided,\r\n border: \"1px solid #E0E0E0\",\r\n borderRadius: 0,\r\n padding: 0,\r\n backgroundColor: \"white\"\r\n }),\r\n\r\n menu: (provided, state) => ({\r\n ...provided,\r\n left: filter ? 0 : 32,\r\n width: filter ? \"100%\" : \"calc(100% - 32px)\",\r\n boxShadow: \"none\",\r\n marginTop: filter ? 0 : 4,\r\n padding: filter ? 24 : 0,\r\n backgroundColor: filter ? \"#F4F4F4\" : \"none\"\r\n }),\r\n option: (provided, state) => ({\r\n ...provided,\r\n padding: \"8px 16px\"\r\n\r\n // width: \"calc(100% - 32px)\",\r\n // boxShadow: \"none\",\r\n }),\r\n indicatorSeparator: (provided, state) => {\r\n const opacity = isClearable && state.hasValue ? 1 : 0\r\n const backgroundColor = \"#E0E0E0\"\r\n const margin = \"4px 0\"\r\n return { ...provided, backgroundColor, opacity, margin }\r\n }\r\n }\r\n\r\n const ValueContainer = (props) => {\r\n return (\r\n
\r\n {/* */}\r\n {/* {props.children?.[0]?.key\r\n ? props.children\r\n : <>\r\n {`props.`}
\r\n {props.children?.[1]}\r\n >\r\n } */}\r\n {filter && props.isMulti ? (\r\n props?.children?.[0]?.key ? (\r\n props.children\r\n ) : (\r\n <>\r\n {`${placeholder} (${props.getValue().length})`}
\r\n {props.children?.[1]}\r\n >\r\n )\r\n ) : (\r\n props.children\r\n )}\r\n \r\n )\r\n }\r\n\r\n const Control = (props) => {\r\n return (\r\n
\r\n <>\r\n {(icon || iconName) && (\r\n \r\n )}\r\n {props.children}\r\n >\r\n \r\n )\r\n }\r\n\r\n const DropdownIndicator = (props) => {\r\n return (\r\n
\r\n {/* */}\r\n \r\n \r\n
\r\n \r\n )\r\n }\r\n\r\n const ClearIndicator = (props) => {\r\n return (\r\n
\r\n {isClearable ? (\r\n \r\n \r\n
\r\n ) : (\r\n
\r\n )}\r\n \r\n )\r\n }\r\n\r\n const Menu = (props) => {\r\n const menuRef = useRef(null)\r\n const [scrollPosition, setScrollPosition] = useState(0)\r\n const [selectedVal, setSelectedVal] = useState(\r\n props.getValue()?.map?.((item) => item?.value)\r\n )\r\n\r\n // menuRef && menuRef.current.scrollTo(0, scrollPosition);\r\n const optionClick = (item) => {\r\n setSelectedVal((p) =>\r\n props.isMulti ? toggleInArray(p, item?.value) : [item?.value]\r\n )\r\n setScrollPosition(menuRef.current.scrollTop)\r\n }\r\n\r\n useEffect(() => {\r\n if (menuRef.current) menuRef.current.scrollTop = scrollPosition\r\n }, [scrollPosition])\r\n\r\n return (\r\n <>\r\n {!allLocationCase ? (\r\n
\r\n {/* */}\r\n {!filter && props.children}\r\n {filter && (\r\n <>\r\n \r\n {stringInArray(props.options, \"label\", ss.current)?.map?.(\r\n (item, index) => (\r\n
optionClick(item)}\r\n >\r\n {props.isMulti && (\r\n
\r\n )}\r\n
{item?.label}
\r\n
\r\n )\r\n )}\r\n
\r\n \r\n {\r\n setSelectedVal([])\r\n props.setValue([])\r\n }}\r\n >\r\n Anuleaza\r\n \r\n \r\n props.setValue(\r\n props.options?.filter?.((item) =>\r\n selectedVal?.includes?.(item?.value)\r\n )\r\n )\r\n }\r\n >\r\n Salveaza\r\n \r\n
\r\n >\r\n )}\r\n \r\n ) : ss?.current?.length >= 3 && allLocationCase ? (\r\n
\r\n {/* */}\r\n {!filter && props.children}\r\n {filter && (\r\n <>\r\n \r\n {stringInArray(props.options, \"label\", ss.current)?.map?.(\r\n (item, index) => (\r\n
optionClick(item)}\r\n >\r\n {props.isMulti && (\r\n
\r\n )}\r\n
{item?.label}
\r\n
\r\n )\r\n )}\r\n
\r\n \r\n {\r\n setSelectedVal([])\r\n props.setValue([])\r\n }}\r\n >\r\n Anuleaza\r\n \r\n \r\n props.setValue(\r\n props.options?.filter?.((item) =>\r\n selectedVal?.includes?.(item?.value)\r\n )\r\n )\r\n }\r\n >\r\n Salveaza\r\n \r\n
\r\n >\r\n )}\r\n \r\n ) : (\r\n
\r\n )}\r\n >\r\n )\r\n }\r\n\r\n const customOptionProps = allowCustomOption ? { Option: CustomOption } : {}\r\n\r\n const selectComponentProps = {\r\n onCreateOption,\r\n onDeleteOption,\r\n addedCustomOption,\r\n clearAddedCustomOption: () => setAddedCustomOption(null),\r\n className:\r\n \"select-overwrites-1 \" +\r\n (type === \"small\" ? \"custom-select-small\" : \"\") +\r\n (disabled ? \" disabled\" : \"\"),\r\n classNamePrefix: \"crs\",\r\n styles: type === \"filter\" ? filterStyle : undefined,\r\n components: {\r\n DropdownIndicator,\r\n ValueContainer,\r\n ClearIndicator,\r\n Control,\r\n Menu,\r\n ...customOptionProps\r\n },\r\n formatCreateLabel: (input) => `Salvează \"${input}\"`,\r\n onInputChange: onInputChange\r\n ? (e) => {\r\n onInputChange(e)\r\n ss.current = e\r\n }\r\n : (e) => (ss.current = e),\r\n rest,\r\n isClearable,\r\n isMulti,\r\n placeholder,\r\n onBlur,\r\n value: adaptValue(value ?? selected, actualOptions),\r\n options: actualOptions,\r\n onChange: (e) =>\r\n onChange?.(allowCustomOption ? e?.label : getSelectValues(e)),\r\n isDisabled: disabled\r\n }\r\n\r\n const selectComponent = allowCustomOption ? (\r\n
\r\n ) : (\r\n
\r\n )\r\n\r\n const asyncSelectComponent = (\r\n
getStuffForSelect(e)}\r\n className={\r\n \"select-overwrites-1 \" +\r\n (type === \"small\" ? \"custom-select-small\" : \"\") +\r\n (disabled ? \" disabled\" : \"\")\r\n }\r\n classNamePrefix=\"crs\"\r\n styles={type === \"filter\" ? filterStyle : undefined}\r\n components={{\r\n // IndicatorSeparator: undefined,\r\n // DropdownIndicator: \r\n DropdownIndicator,\r\n ValueContainer,\r\n ClearIndicator,\r\n Control,\r\n Menu\r\n }}\r\n onInputChange={\r\n onInputChange\r\n ? (e) => {\r\n onInputChange(e)\r\n ss.current = e\r\n }\r\n : (e) => (ss.current = e)\r\n }\r\n inputValue={inputValue ? inputValue : undefined}\r\n {...{ rest, isClearable, isMulti, placeholder, onBlur }}\r\n // defaultValue={[{ value: \"ID4\", label: \"Option 4\" }]}\r\n //value={adaptValue(value ?? selected, actualOptions)}\r\n //options={actualOptions}\r\n onChange={(e) =>\r\n onChange\r\n ? onChange(getSelectValues(e))\r\n : console.info(\"On change not defined; \", e)\r\n }\r\n //isDisabled={disabled}\r\n />\r\n )\r\n const title = error ? (\r\n {error}
\r\n ) : (\r\n {label}
\r\n )\r\n\r\n const mainDivStyle = {\r\n gridArea: gridArea ? (gridArea === true ? name : gridArea) : undefined\r\n }\r\n return (\r\n <>\r\n {inForm ? (\r\n \r\n {title}\r\n {isAsync ? asyncSelectComponent : selectComponent}\r\n
\r\n ) : (\r\n selectComponent\r\n )}\r\n >\r\n )\r\n}\r\n\r\nconst getSelectValues = (e) => {\r\n if (!e) return undefined\r\n if (e?.value) return e?.value\r\n else return e?.map?.((item) => item?.value)\r\n}\r\nconst toggleInArray = (array, value) =>\r\n array?.includes?.(value)\r\n ? array?.filter?.((item) => item !== value)\r\n : [...array || [], value]\r\n\r\nconst stringInArray = (array, keyName, string) =>\r\n array?.filter?.((item) => {\r\n if (!string) return true\r\n if (string?.length === 0) return true\r\n if (\r\n item?.[keyName]\r\n ?.toLowerCase?.()\r\n ?.replace?.(\" \", \"\")\r\n ?.includes?.(string?.toLowerCase?.())\r\n )\r\n return true\r\n return false\r\n })\r\nconst SimpleCheckbox = (props) => {\r\n const iconName =\r\n props?.value === true ? \"Checkbox_active\" : \"Checkbox_inactive\"\r\n const style = {\r\n marginRight: 8,\r\n display: \"flex\",\r\n alignItems: \"center\"\r\n }\r\n return (\r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nconst adaptValue = (value, options) => {\r\n // if (typeof value !== \"object\") return options\r\n return options?.filter?.((item) => value == item?.value)\r\n}\r\n\r\nconst CustomOption = (props) => {\r\n const { innerProps, isDisabled, children, value } = props\r\n\r\n const dispatch = useDispatch()\r\n const [wasDeletePressed, setWasDeletePressed] = useState(false)\r\n\r\n const loadingId = `${value}-${innerProps?.id}`\r\n\r\n /**\r\n * Once the delete button is pressed, it enters into a loading\r\n * state (disabled). It never comes back to its' original state.\r\n * Once the delete API finishes and the Select option-list is\r\n * re-fetched and re-populated, this option should not exist anymore.\r\n */\r\n const isDeleteLoading = useSelector(\r\n (state) => state.page?.loadingIndicators?.[loadingId]\r\n )\r\n\r\n const onDeleteClicked = () => {\r\n setWasDeletePressed(true)\r\n\r\n // If the custom-added option is deleted:\r\n if (value && props?.selectProps?.addedCustomOption?.value === value) {\r\n props?.selectProps?.clearAddedCustomOption?.()\r\n } else {\r\n // If any other option is deleted:\r\n dispatch(setLoadingIndicator(loadingId, true))\r\n props?.selectProps?.onDeleteOption?.(value)\r\n }\r\n }\r\n\r\n if (isDisabled) return null\r\n if (wasDeletePressed) return null\r\n\r\n return (\r\n \r\n
\r\n {children}\r\n
\r\n\r\n
\r\n
\r\n )\r\n}\r\n","import React from \"react\"\r\nimport NextIcon from \"../../assets/BreadCrumbs/NextIcon.svg\"\r\nimport { Lang, lang, Translate, withLocalize } from \"components/Lang/Lang\"\r\n\r\n//paths for lists, where is redundant to appear in breadcrumbs-click on it would\r\n// load the page itself\r\nconst redundantUtils0 = [\"/admin/order/list\", \"/admin/admin-lists/list\"]\r\nconst redundantUtils1 = [\r\n \"/admin/user/client/list\",\r\n \"/admin/user/role/list\",\r\n \"/admin/user/uni/list\",\r\n \"/admin/company/client/list\",\r\n \"/admin/company/accountrequests/list\",\r\n \"/admin/company/delivery/list\",\r\n \"/admin/company/towns/list\",\r\n \"/admin/product/b2b/list\",\r\n \"/admin/product/compano/list\",\r\n \"/admin/product/discount/list\",\r\n \"/admin/product/net/list\",\r\n \"/admin/product/b2brelations/list\",\r\n \"/admin/product/volume/list\",\r\n \"/admin/product/pack/list\",\r\n \"/admin/product/matrix/list\",\r\n \"/admin/product/badge/list\",\r\n \"/admin/product/qa/list\",\r\n \"/admin/product/review/list\",\r\n \"/admin/product/document/list\",\r\n \"/admin/product/warehouse/list\",\r\n \"/admin/product/stockrequest/list\",\r\n \"/admin/product/pricerequest/list\",\r\n \"/admin/order/invoice/list\",\r\n \"/admin/guest/news/list\",\r\n \"/admin/guest/tutorials/list\",\r\n \"/admin/guest/job/list\",\r\n \"/admin/guest/candidate/list\",\r\n \"/admin/guest/contact/list\",\r\n \"/admin/guest/location/list\"\r\n]\r\nfunction BreadCrumbs({ className, translate }) {\r\n\r\n const windowPath = window?.location?.pathname\r\n const data = windowPath?.split?.(\"/\")?.splice?.(2)\r\n \r\n \r\n const dictionary = {\r\n product: [\r\n translate?.(\"breadCrumbs.product\"),\r\n translate?.(\"breadCrumbs.products\")\r\n ],\r\n guest: [\"\", translate?.(\"adminmenu.guest\")],\r\n accountRequests: [\"\", translate?.(\"breadCrumbs.applications\")],\r\n discount: [\"\", translate?.(\"adminmenu.discount\")],\r\n uniuser: [\"\", translate?.(\"adminmenu.users\")],\r\n user: [\"\", translate?.(\"adminmenu.users\")], //**********\r\n \"admin-lists\": [\"\", translate?.(\"adminmenu.predefinedListList\")],\r\n order: [\"\", translate?.(\"adminmenu.orders\")],\r\n invoice: [\"\", translate?.(\"dashboard.invoices\")],\r\n location: [\"\", translate?.(\"dashboardselector.locationsUniprest\")],\r\n offer: [\"\", translate?.(\"breadCrumbs.deals\")],\r\n oferte: [\"\", translate?.(\"breadCrumbs.deals\")],\r\n offers: [\"\", translate?.(\"breadCrumbs.offers\")],\r\n project: [\"\", translate?.(\"breadCrumbs.project\")],\r\n news: [\"\", translate?.(\"dashboardselector.news\")],\r\n tutorials: [\"\", translate?.(\"adminmenu.tutorial\")],\r\n company: [\"\", translate?.(\"adminmenu.organization\")],\r\n job: [\"\", translate?.(\"adminmenu.announcesJob\")],\r\n uniUsers: [\"\", translate?.(\"breadCrumbs.employee\")],\r\n // accountRequests : [\"\", \"Conturi\"],\r\n accountrequests: [\"\", translate?.(\"breadCrumbs.demands\")],\r\n addlistpref: [\"\", translate?.(\"breadCrumbs.favorites\")],\r\n pack: [\"\", translate?.(\"adminmenu.packages\")],\r\n qa: [\"\", translate?.(\"adminmenu.questions\")],\r\n review: [\"\", translate?.(\"adminmenu.review\")],\r\n document: [\"\", translate?.(\"adminmenu.productDocument\")],\r\n \"/admin/product/list\": translate?.(\"breadCrumbs.productList\"),\r\n \"/admin/product/b2b/list\": translate?.(\"productList.listaB2B\"),\r\n \"/admin/product/b2b/form\": translate?.(\"productdetails.detailsProduct\"),\r\n \"/admin/product/form\": translate?.(\"breadCrumbs.productDetails\"),\r\n \"/admin/product/discount\": translate?.(\"grilleForm.discountGrila\"),\r\n \"/admin/product/discount/list\": translate?.(\"discountList.discount\"),\r\n \"/admin/product/discount/form\": translate?.(\"grilleForm.discount\"),\r\n \"/admin/product/compano\": translate?.(\"breadCrumbs.companoList\"),\r\n \"/admin/product/pack/list\": translate?.(\"adminmenu.packages\"),\r\n \"/admin/product/pack/form\": translate?.(\"packTable.detailPack\"),\r\n \"/admin/product/qa/list\": translate?.(\"adminmenu.questions\"),\r\n \"/admin/product/qa/form\": translate?.(\"breadCrumbs.detailsQuestion\"),\r\n \"/admin/product/review/list\": translate?.(\"adminmenu.review\"),\r\n \"/admin/product/review/form\": translate?.(\"breadCrumbs.detailsReview\"), //not exist yet\r\n \"/admin/product/pricerequest/list\": translate?.(\"adminmenu.priceless\"),\r\n \"/admin/product/pricerequest/form\": translate?.(\"priceRequestForm.details\"),\r\n \"/admin/uniuser/list\": translate?.(\"breadCrumbs.usersUniprest\"),\r\n \"/admin/accountRequests/list\": translate?.(\"breadCrumbs.cont\"),\r\n \"/admin/user/list\": translate?.(\"breadCrumbs.usersB2B\"),\r\n \"/admin/admin-lists/list\": translate?.(\"adminmenu.predefinedLists\"),\r\n \"/admin/admin-lists/dashboard\": translate?.(\"breadCrumbs.staticList\"), //?\r\n \"/admin/order/list\": translate?.(\"orderList.order\"),\r\n \"/admin/order/view\": translate?.(\"breadCrumbs.detailsOrder\"), //lsta de comenzi + detalii document in design //?order/list/view?\r\n \"/admin/order/invoice/list\": translate?.(\"invoicesList.invoices\"),\r\n \"/admin/order/invoice/form\": translate?.(\"breadCrumbs.detailsInvoices\"), //page doesn't exist yet >> added\r\n \"/admin/offer/list\": translate?.(\"breadCrumbs.offertList\"),\r\n \"/admin/oferte/list\": translate?.(\"oferteTable.list\"),\r\n \"/admin/project\": translate?.(\"breadCrumbs.home\"),\r\n \"/admin/project/list\": translate?.(\"breadCrumbs.projectList\"),\r\n \"/admin/guest/news/list\": translate?.(\"dashboardselector.news\"),\r\n \"/admin/guest/tutorials/list\": translate?.(\"adminmenu.tutorial\"),\r\n \"/admin/company/client/list\": translate?.(\"adminmenu.companyList\"),\r\n \"/admin/company/client/form\": translate?.(\"breadCrumbs.userDetails\"), //?? BreadCrumbs Premium for now\r\n \"/admin/company/delivery/list\": translate?.(\"list.addressDelivery\"),\r\n \"/admin/company/delivery/form\": translate?.(\r\n \"breadCrumbs.detailsDeliveryAddress\"\r\n ),\r\n \"/admin/company/accountrequests/list\": translate?.(\r\n \"accountRequestList.UniprestCont\"\r\n ), //Lista solicitari??\r\n \"/admin/company/accountrequests/form\": translate?.(\r\n \"accountRequestForm.detailsCont\"\r\n ),\r\n \"/admin/guest/job/list\": translate?.(\"avaliableJobs.job\"),\r\n \"/admin/guest/candidate/list\": translate?.(\"candidate.applicants\"),\r\n \"/admin/guest/candidate/form\": translate?.(\"breadCrumbs.profile\"),\r\n \"/admin/guest/candidate/addlistpref\": translate?.(\"breadCrumbs.addFavorites\"), //??? url ends with /form\r\n \"/admin/user/uni/list\": translate?.(\"adminmenu.employeeUniprest\"),\r\n \"/admin/user/uni/form\": translate?.(\"breadCrumbs.employeeDetails\"),\r\n \"/admin/guest/contact/list\": translate?.(\"adminmenu.contactRequest\"), //'Lista Cereri Conturi',\r\n \"/admin/guest/contact/form\": translate?.(\"breadCrumbs.detailsContract\"),\r\n \"/admin/guest/location/form\": translate?.(\"breadCrumbs.detailLocation\"), //Breadcrumbs premium for now\r\n\r\n \"/admin/guest/location/list\": translate?.(\r\n \"dashboardselector.locationsUniprest\"\r\n ),\r\n //'/admin/user/client/form/edit' : 'Detalii Utilizator',\r\n \"/admin/product/document/list\": translate?.(\"adminmenu.productDocument\"),\r\n \"/admin/angajati/list\": translate?.(\"breadCrumbs.employeeList\"),\r\n \"/admin/product/compano/list\": translate?.(\"companoList.compano\"),\r\n \"/admin/product/compano/form\": translate?.(\"productdetails.detailsProduct\"),\r\n \"/admin/product/volumeDiscount\": translate?.(\"breadCrumbs.volumeDiscount\"),\r\n \"/admin/product/price/list\": translate?.(\"breadCrumbs.productB2B\"),\r\n \"/admin/product/badge/list\": translate?.(\"adminmenu.badge\"),\r\n \"/admin/product/document/form\": translate?.(\"documentsForm.details\"),\r\n \"/admin/product/volume/list\": translate?.(\"volumeForm.discounts\"),\r\n \"/admin/product/volume/form\": translate?.(\"breadCrumbs.detailDiscount\"),\r\n \"/admin/product/net/list\": translate?.(\"adminmenu.price\"),\r\n \"/admin/product/b2brelations/list\": translate?.(\"relationList.relationB2B\"),\r\n \"/admin/product/net/form\": translate?.(\"addList.detail\"),\r\n \"/admin/accountRequests/form\": translate?.(\"breadCrumbs.home\"),\r\n \"/admin/user/role/form\": translate?.(\"breadCrumbs.roleDetail\"),\r\n \"/admin/user/role/list\": translate?.(\"adminmenu.rolList\"),\r\n \"/admin/user/client/list\": translate?.(\"adminmenu.userList\"),\r\n \"/admin/user/client/form\": translate?.(\"breadCrumbs.usersDetail\"),\r\n \"/admin/user/client/form/add\": translate?.(\"userForm.addUser\"),\r\n \"/admin/job/applicant/form\": translate?.(\"addList.detail\"), //name dynamically?\r\n \"/admin/guest/job/form\": translate?.(\"addJob.jobDetails\"),\r\n \"/admin/company/form\": translate?.(\"userForm.add\"),\r\n //'/admin/angajati/list': 'Home',\r\n \"/admin/delivery/list\": translate?.(\"breadCrumbs.home\"),\r\n \"/admin/aplicanti/list\": translate?.(\"breadCrumbs.applicantsList\"),\r\n \"/admin/product/matrix/list\": translate?.(\"breadCrumbs.matix\"),\r\n \"/admin/product/badge/form\": translate?.(\"badgeForm.detail\"),\r\n \"/admin/delivery/form\": translate?.(\"breadCrumbs.home\"),\r\n \"/admin/product/warehouse/list\": translate?.(\"adminmenu.listDeposit\"),\r\n \"/admin/product/stockrequest/list\": translate?.(\"adminmenu.outOfStock\"),\r\n \"/admin/product/stockrequest/form\": translate?.(\"stockRequestForm.details\"),\r\n \"/admin/product/warehouse/details\": translate?.(\"breadCrumbs.depozit\"),\r\n \"/admin/user/role/form/add\": translate?.(\"roleForm.addrole\"),\r\n \"/admin/user/uni/form/add\": translate?.(\"breadCrumbs.addUsers\"),\r\n \"/admin/company/client/form/add\": translate?.(\"companyForm.addCompany\"),\r\n \"/admin/admin-lists/form/add\": translate?.(\"offerList.add\"),\r\n \"/admin/guest/news/form\": translate?.(\"articleForm.newsDetails\"),\r\n \"/admin/guest/news/form/add\": translate?.(\"articleForm.addNews\"),\r\n \"/admin/guest/tutorials/form\": translate?.(\"breadCrumbs.detailTutoriale\"),\r\n \"/admin/guest/tutorials/form/add\": translate?.(\"breadCrumbs.addTutoriale\"),\r\n \"/admin/guest/job/form/add\": translate?.(\"avaliableJobs.addJob\"),\r\n \"/admin/guest/candidate/form/add\": translate?.(\"breadCrumbs.addCandidate\"),\r\n \"/admin/guest/location/form/add\": translate?.(\"locationForm.addLocation\"),\r\n\r\n \"/admin/dashboard\": translate?.(\"breadCrumbs.statGlobale\"),\r\n \"/admin/product/dashboard\": translate?.(\"dashboardselector.staticProduct\"),\r\n \"/admin/user/dashboard\": translate?.(\"dashboardselector.staticUsers\"), //**********\r\n \"/admin/company/dashboard\": translate?.(\"dashboardselector.staticCompany\"),\r\n \"/admin/guest/dashboard\": translate?.(\"dashboardselector.staticGuest\"),\r\n \"/admin/order/dashboard\": translate?.(\"breadCrumbs.statOrders\"),\r\n \"/admin/admin-lists/form\": translate?.(\"addList.detail\"),\r\n \"/admin/company/towns/list\": translate?.(\"deliveryLocationList.town\"),\r\n \"/admin/company/towns/form\": translate?.(\"addList.detail\"),\r\n documents: [\"\", translate?.(\"breadCrumbs.documents\")],\r\n compano: [\"\", translate?.(\"adminmenu.companoProducts\")],\r\n b2b: [\"\", translate?.(\"breadCrumbs.listB2B\")],\r\n b2brelations: [\"\", translate?.(\"relationList.relationB2B\")],\r\n price: [\"\", translate?.(\"netForm.price\")],\r\n badge: [\"\", translate?.(\"adminmenu.badge\")],\r\n volume: [\"\", translate?.(\"adminmenu.volumeDiscount\")],\r\n net: [\"\", translate?.(\"adminmenu.price\")],\r\n applicant: [\"\", translate?.(\"breadCrumbs.applicant\")],\r\n candidate: [\"\", translate?.(\"adminmenu.applicantsJob\")],\r\n pricerequest: [\"\", translate?.(\"adminmenu.priceless\")],\r\n stockrequest: [\"\", translate?.(\"adminmenu.outOfStock\")],\r\n warehouse: [\"\", translate?.(\"adminmenu.listDeposit\")],\r\n matrix: [\"\", translate?.(\"adminmenu.matrix\")],\r\n angajati: [\"\", translate?.(\"adminmenu.employeeUniprest\")],\r\n delivery: [\"\", translate?.(\"adminmenu.address\")],\r\n role: [\"\", translate?.(\"breadCrumbs.rols\")],\r\n client: [\"\", translate?.(\"breadCrumbs.customers\")], //**********\r\n uni: [\"\", translate?.(\"adminmenu.employeeUniprest\")],\r\n contact: [\"\", translate?.(\"adminmenu.contactRequest\")],\r\n towns: [\"\", translate?.(\"adminmenu.locations\")],\r\n \"/shop/client/users\": translate?.(\"dashboard.usersNumberMulti\"),\r\n \"/shop/client/mycompany\": translate?.(\"breadCrumbs.company\"),\r\n \"/shop/client/profile\": translate?.(\"breadCrumbs.yourProfile\"),\r\n \"/shop/offers/details\": translate?.(\"breadCrumbs.detailOffert\")\r\n }\r\n return (\r\n \r\n {data?.map?.((item, index) => {\r\n const lastOne = index + 1 === data?.length\r\n const rawPath = `/${windowPath\r\n ?.split?.(\"/\")\r\n ?.splice?.(1, index + 2)\r\n ?.join?.(\"/\")}`\r\n return !lastOne ? ( //item !== 'form' &&\r\n (index === 0 && redundantUtils0?.includes?.(windowPath)) ||\r\n (index === 1 &&\r\n redundantUtils1?.includes?.(windowPath)) ? null : item !==\r\n \"form\" ? (\r\n
\r\n \r\n {dictionary?.[item]?.[1]}\r\n \r\n e?.preventDefault?.()}\r\n className=\"mx2\"\r\n src={NextIcon}\r\n alt=\"next\"\r\n />\r\n \r\n ) : null\r\n ) : (\r\n
\r\n {`${\r\n dictionary?.[\r\n windowPath?.split?.(\"/\")?.splice?.(0, 6)?.join?.(\"/\")\r\n ] ?? item\r\n }`}\r\n
\r\n )\r\n })}\r\n {!data?.length && (\r\n
\r\n {`${dictionary?.[windowPath] ?? translate?.(\"breadCrumbs.statGlobale\")}`}\r\n
\r\n )}\r\n
\r\n )\r\n}\r\n\r\nconst hrefDictionary = {\r\n \"/admin/order\": \"/admin/order/list\",\r\n \"/admin/order/invoice\": \"/admin/order/invoice/list\",\r\n \"/admin/admin-lists\": \"/admin/admin-lists/list\",\r\n \"/admin/product/warehouse\": \"/admin/product/warehouse/list\",\r\n \"/admin/product/stockrequest/list\": \"/admin/product/stockrequest/list\",\r\n \"/admin/oferte\": \"/admin/oferte/list\",\r\n \"/admin/offer\": \"/admin/offer/list\",\r\n \"/admin/project\": \"/admin/project/list\",\r\n \"/admin/company/client\": \"/admin/company/client/list\",\r\n \"/admin/company/delivery\": \"/admin/company/delivery/list\",\r\n \"/admin/company/accountrequests\": \"/admin/company/accountrequests/list\",\r\n \"/admin/guest/news\": \"/admin/guest/news/list\",\r\n \"/admin/guest/job\": \"/admin/guest/job/list\",\r\n \"/admin/guest/tutorials\": \"/admin/guest/tutorials/list\",\r\n \"/admin/guest/candidate\": \"/admin/guest/candidate/list\",\r\n \"/admin/guest/contact\": \"/admin/guest/contact/list\",\r\n \"/admin/guest/location\": \"/admin/guest/location/list\",\r\n \"/admin/product/b2b\": \"/admin/product/b2b/list\",\r\n \"/admin/product/compano\": \"/admin/product/compano/list\",\r\n \"/admin/product/discount\": \"/admin/product/discount/list\",\r\n \"/admin/product/net\": \"/admin/product/net/list\",\r\n \"/admin/product/b2brelations\": \"/admin/product/b2brelations/list\",\r\n \"/admin/product/volume\": \"/admin/product/volume/list\",\r\n \"/admin/product/pack\": \"/admin/product/pack/list\",\r\n \"/admin/product/matrix\": \"/admin/product/matrix/list\",\r\n \"/admin/product/badge\": \"/admin/product/badge/list\",\r\n \"/admin/product/qa\": \"/admin/product/qa/list\",\r\n \"/admin/product/review\": \"/admin/product/review/list\",\r\n \"/admin/product/document\": \"/admin/product/document/list\",\r\n \"/admin/product/pricerequest\": \"/admin/product/pricerequest/list\",\r\n \"/admin/user/client\": \"/admin/user/client/list\",\r\n \"/shop/client\": \"/shop/dashboard\",\r\n \"/admin/user/uni\": \"/admin/user/uni/list\",\r\n \"/admin/user/role\": \"/admin/user/role/list\",\r\n \"/admin/company/towns\": \"/admin/company/towns/list\"\r\n}\r\n\r\nexport default withLocalize(BreadCrumbs)\r\n","import BreadCrumbs from \"components/BreadCrumbs/BreadCrumbsV2\" ///////////\r\nimport MagicButton from \"components/MagicButton/MagicButtonV2\"\r\nimport { useHistory } from \"react-router\"\r\nimport { Lang, lang, Translate, withLocalize } from \"components/Lang/Lang\"\r\nconst FormPormPageHeader = ({\r\n pageTitle,\r\n submitForm,\r\n disableSubmit,\r\n cancelEdit,\r\n setEdit,\r\n isEdit,\r\n addNew,\r\n ro,\r\n specificButtonLabelsInEditMode,\r\n buttonIconsInEditMode,\r\n rejectRequest,\r\n onlyTitle,\r\n userStatusButtonProps,\r\n changeStatus,\r\n deleteAction\r\n}) => {\r\n const history = useHistory()\r\n\r\n return (\r\n <>\r\n \r\n
\r\n
\r\n
{pageTitle}
\r\n
\r\n {onlyTitle ? (\r\n <>>\r\n ) : (\r\n !ro &&\r\n (isEdit ? (\r\n
\r\n \r\n )\r\n }\r\n onClick={() =>\r\n specificButtonLabelsInEditMode?.revert ===\r\n \"Respinge solicitare\"\r\n ? rejectRequest()\r\n : addNew\r\n ? history.goBack()\r\n : cancelEdit()\r\n }\r\n />\r\n \r\n )\r\n }\r\n onClick={submitForm}\r\n disabled={disableSubmit}\r\n />\r\n
\r\n ) : (\r\n
\r\n {userStatusButtonProps && !addNew && (\r\n <>\r\n \r\n changeStatus(userStatusButtonProps.firstAction)\r\n }\r\n />\r\n \r\n changeStatus(userStatusButtonProps.secondAction)\r\n }\r\n />\r\n >\r\n )}\r\n {deleteAction && !addNew &&\r\n \r\n }\r\n }\r\n onClick={setEdit}\r\n />\r\n
\r\n ))\r\n )}\r\n
\r\n >\r\n )\r\n}\r\nexport default FormPormPageHeader\r\n","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgCheckboxActive(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 16,\n viewBox: \"0 0 16 16\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M1.33333 0H14.6667C15.0203 0 15.3594 0.140476 15.6095 0.390524C15.8595 0.640573 16 0.979711 16 1.33333V14.6667C16 15.0203 15.8595 15.3594 15.6095 15.6095C15.3594 15.8595 15.0203 16 14.6667 16H1.33333C0.979711 16 0.640573 15.8595 0.390524 15.6095C0.140476 15.3594 0 15.0203 0 14.6667V1.33333C0 0.979711 0.140476 0.640573 0.390524 0.390524C0.640573 0.140476 0.979711 0 1.33333 0ZM3.33331 8.35996L6.66665 11.6666L12.6666 5.71996L11.6066 4.66663L6.66665 9.56663L4.39331 7.33329L3.33331 8.35996Z\",\n stroke: \"FFFFFF\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgCheckboxActive);\nexport default __webpack_public_path__ + \"static/media/Checkbox_active.ee9333a8.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgCheckboxInactive(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 16,\n viewBox: \"0 0 16 16\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.6667 0H1.33333C0.979711 0 0.640573 0.140476 0.390524 0.390524C0.140476 0.640573 0 0.979711 0 1.33333V14.6667C0 15.0203 0.140476 15.3594 0.390524 15.6095C0.640573 15.8595 0.979711 16 1.33333 16H14.6667C15.0203 16 15.3594 15.8595 15.6095 15.6095C15.8595 15.3594 16 15.0203 16 14.6667V1.33333C16 0.979711 15.8595 0.640573 15.6095 0.390524C15.3594 0.140476 15.0203 0 14.6667 0ZM1.33333 14.6667V1.33333H14.6667V14.6667H1.33333Z\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgCheckboxInactive);\nexport default __webpack_public_path__ + \"static/media/Checkbox_inactive.289cf2c5.svg\";\nexport { ForwardRef as ReactComponent };","import SvgIcon from \"components/SvgIcon/SvgIcon\"\r\nimport { useDispatch } from \"react-redux\"\r\nimport { dataViewActionClicked } from \"store/modules/dataView/dataViewActions.actions\"\r\n\r\nexport const mockAvatars = [\r\n {\r\n id: 1,\r\n label: \"A!\",\r\n url: \"#\",\r\n src: \"\"\r\n },\r\n {\r\n id: 2,\r\n label: \"AA\",\r\n url: \"#\",\r\n src: \"https://avatarfiles.alphacoders.com/186/thumb-186939.jpg\"\r\n },\r\n {\r\n id: 3,\r\n label: \"UL\",\r\n url: \"#\",\r\n src: \"\"\r\n },\r\n {\r\n id: 4,\r\n label: \"GY\",\r\n url: \"#\",\r\n src: \"\"\r\n },\r\n {\r\n id: 5,\r\n label: \"OS\",\r\n url: \"#\",\r\n src: \"\"\r\n },\r\n {\r\n id: 6,\r\n label: \"BL\",\r\n url: \"#\",\r\n src: \"\"\r\n },\r\n {\r\n id: 7,\r\n label: \"KO\",\r\n url: \"#\",\r\n src: \"\"\r\n },\r\n {\r\n id: 8,\r\n label: \"UG\",\r\n url: \"#\",\r\n src: \"\"\r\n },\r\n {\r\n id: 9,\r\n label: \"UC\",\r\n url: \"#\",\r\n src: \"\"\r\n },\r\n {\r\n id: 10,\r\n label: \"UM\",\r\n url: \"#\",\r\n src: \"\"\r\n },\r\n {\r\n id: 11,\r\n label: \"UB\",\r\n url: \"#\",\r\n src: \"\"\r\n },\r\n {\r\n id: 12,\r\n label: \"KO\",\r\n url: \"#\",\r\n src: \"\"\r\n }\r\n]\r\n\r\nconst CircleAvatarsCell = (props) => {\r\n const { addMore, avatars, row, onAdd } = props\r\n const dispatch = useDispatch()\r\n\r\n const addMoreAction = () =>\r\n dispatch(dataViewActionClicked(row.id, \"avatar-addMore\"))\r\n\r\n const addAvatar = (\r\n \r\n \r\n \r\n \r\n )\r\n\r\n const avatar = ({ id, url, src, label }) => (\r\n \r\n )\r\n\r\n return (\r\n \r\n
\r\n {addMore && addAvatar}\r\n {avatars?.map?.((item) => avatar({ ...item }))}\r\n
\r\n
\r\n )\r\n}\r\nexport default CircleAvatarsCell\r\n","import { fromCognitoIdentityPool } from \"@aws-sdk/credential-providers\"\r\n\r\nexport const awsClientConfig = {\r\n region: process.env.REACT_APP_USER_REGION,\r\n credentials: fromCognitoIdentityPool({\r\n clientConfig: { region: process.env.REACT_APP_USER_REGION }, // Configure the underlying CognitoIdentityClient.\r\n identityPoolId: process.env.REACT_APP_IDENTITY_POOL_ID,\r\n logins: {\r\n // Optional tokens, used for authenticated login.\r\n }\r\n })\r\n}\r\n","import { dynamoAction } from \"store/middleware/api\"\r\nimport { loadViewData } from \"store/modules/dataView/dataView-dataLoader\"\r\nimport { printError } from \"utils/printError\"\r\n\r\nexport const deleteDynamoItemByPK = ({ PK, SK, goToList=null }) =>\r\n dynamoAction({\r\n method: \"DELETE\",\r\n parameters: {\r\n TableName: process.env.REACT_APP_TABLE_NAME,\r\n Key: {\r\n PK: { S: PK },\r\n SK: { S: SK }\r\n }\r\n },\r\n onSuccess: (data, dispatch) => {\r\n goToList\r\n ?\r\n dispatch(goToList())\r\n :\r\n dispatch(loadViewData())\r\n return {\r\n type: \"a\"\r\n }\r\n },\r\n onFailure: (err) => {\r\n printError(\"deleteDynamoItemByPK()\", err)\r\n // showMagicToaster({title: err})\r\n\r\n return {\r\n type: \"a\"\r\n }\r\n }\r\n })\r\n","import { forwardRef } from \"react\"\r\nimport SvgIcon from \"components/SvgIcon/SvgIcon\"\r\nimport \"./index.scss\"\r\n\r\nconst MagicInput = forwardRef((props, ref) => {\r\n const {\r\n label,\r\n icon,\r\n error,\r\n grey,\r\n blue,\r\n placeholder,\r\n text,\r\n white,\r\n outline,\r\n disabled,\r\n small,\r\n autoComplete,\r\n type,\r\n ...rest\r\n } = props\r\n const inputLabel = label ? (error && error?.length ? error : label) : undefined\r\n let inputLabelClass = \"label\"\r\n let mainClass = \"magic-input\"\r\n let inputContainer = \"inputContainer\"\r\n\r\n if (grey) {\r\n inputContainer += \" grey\"\r\n }\r\n if (blue) {\r\n inputContainer += \" blue\"\r\n }\r\n if (white) {\r\n inputContainer += \" white\"\r\n }\r\n if (disabled) inputContainer += \" disabled\"\r\n\r\n if (outline) {\r\n inputContainer += \" outline\"\r\n } else {\r\n inputContainer += \" grey\"\r\n }\r\n if (error) {\r\n // inputLabelClass += \" error\"\r\n mainClass += \" error\"\r\n inputContainer += \" error\"\r\n }\r\n\r\n const inputContainerStyle = {\r\n height: \"40px\"\r\n }\r\n\r\n return (\r\n \r\n {inputLabel &&
{inputLabel}
}\r\n
\r\n {icon && }\r\n \r\n
\r\n
\r\n )\r\n})\r\n\r\nexport default MagicInput\r\n","import PropTypes from \"prop-types\"\r\nimport SvgIcon from \"components/SvgIcon/SvgIcon\"\r\n\r\nexport default function Tag(props) {\r\n const {\r\n label,\r\n onIconClick,\r\n backgroundColor,\r\n iconColor,\r\n isTiny,\r\n iconName,\r\n fontColor,\r\n disabled,\r\n className,\r\n labelClass\r\n } = props\r\n\r\n const _isTiny = isTiny || iconName === undefined\r\n const bgColorClass =\r\n !disabled && backgroundColor ? \"tag-bg-\" + backgroundColor : \"\"\r\n const fontColorClass = !_isTiny && fontColor ? \"tag-color-\" + fontColor : \"\"\r\n const iconColorClass = disabled\r\n ? \"tag-disabled\"\r\n : iconColor\r\n ? \"tag-fill-\" + iconColor\r\n : \"\"\r\n const sizeClass = onIconClick ? \"medium\" : \"tiny\"\r\n const tagIconName = iconName ?? \"closek3\"\r\n\r\n function iconClickHandler(data) {\r\n if (onIconClick && !disabled) onIconClick(data)\r\n }\r\n\r\n return (\r\n \r\n {label && (\r\n
{label}
\r\n )}\r\n {!_isTiny && !disabled && (\r\n
iconClickHandler(label)}>\r\n \r\n
\r\n )}\r\n
\r\n )\r\n}\r\n\r\nTag.propTypes = {\r\n label: PropTypes.string,\r\n backgroundColor: PropTypes.string,\r\n fontColor: PropTypes.string,\r\n iconColor: PropTypes.string,\r\n onClose: PropTypes.func,\r\n disabled: PropTypes.bool,\r\n isTiny: PropTypes.bool\r\n}\r\n","import MagicButton from \"components/MagicButton/MagicButton\"\r\nimport MagicInput from \"components/MagicInput/MagicInpuv2\"\r\nimport MB from \"components/MB/MB\"\r\nimport BigModal from \"components/_modals/BigModal\"\r\nimport ModalListCard1 from \"components/_modals/listCards/ModalListCard1\"\r\nimport ListModal from \"components/_modals/ListModalV2\"\r\nimport { useState } from \"react\"\r\nimport { useDispatch, useSelector } from \"react-redux\"\r\nimport { addProductToList, createNewList } from \"store/justActions/lists\"\r\nimport { selectListCardData } from \"store/selectors/dataView/dataView.productsListFinal.selector\"\r\nimport \"./AddToListModal.scss\"\r\nimport { Lang, lang, Translate, withLocalize } from \"components/Lang/Lang\"\r\nfunction AddToListModal(props) {\r\n // const {setCardState, item, closeModal} = props\r\n const translate = props.translate\r\n const [listItem, setListItem] = useState({})\r\n const [listName, setListName] = useState(\"\")\r\n const dispatch = useDispatch()\r\n const modalData = useSelector((state) => state.page?.modalData)\r\n const saveAction = () => {\r\n dispatch(addProductToList({ listItem: listItem?.[0], product: modalData }))\r\n }\r\n // const {lists} = useSelector(state => selectListCardData(state))\r\n // const onKeyDown = e => {\r\n // setListName(e?.target?.value)\r\n // if (e?.key === 'Enter')\r\n // if (e?.target?.value) {\r\n // dispatch(createNewList({name: e?.target?.value, products:[item]}));\r\n // setListName('')\r\n // }\r\n // }\r\n // const addToList = () => {\r\n // const listItem = lists?.find?.(item => item?.id === selectedList)?.item\r\n // dispatch(addProductToList({listItem, product:item}))\r\n // closeModal() ?? setCardState(\"listCard\")\r\n // }\r\n // const alreadyInList = (lists?.find?.(l => l.id === selectedList)?.item?.products ?? [])?.find?.(e => e?.id === item?.id)\r\n\r\n const onAddList = (e) => {\r\n dispatch(createNewList({ name: listName, products: [], crtList: true }))\r\n setListName(\"\")\r\n }\r\n const listsListModalProps = {\r\n title: translate?.(\"addToListModal.add\"),\r\n name: \"addToList\",\r\n single: true,\r\n noSelectionToggle: true,\r\n onChange: setListItem,\r\n // selectionLabel : [\"utilizator selectat\", \"utilizatori selectati\"],\r\n placeholder: translate?.(\"addToListModal.search\"),\r\n // label: \"Alege Agentul\",\r\n itemsType: \"dynamoComapnyLists\"\r\n }\r\n\r\n // const disabledSave = selectedList === '' || alreadyInList\r\n return (\r\n \r\n \r\n
\r\n setListName(e?.target?.value),\r\n placeholder: translate?.(\"addToListModal.write\"),\r\n icon: \"add\"\r\n }}\r\n />\r\n }\r\n onClick={onAddList}\r\n disabled={listName?.length < 3}\r\n />\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n \r\n )\r\n}\r\n\r\nexport default withLocalize(AddToListModal)\r\n\r\nconst mockLists = [\r\n {\r\n id: 1,\r\n name: \"Nume lista 1\",\r\n products: \"23 produse\",\r\n date: \"Creata pe 12 APR 2020 de Ionut Popescu \"\r\n },\r\n {\r\n id: 2,\r\n name: \"Nume lista 2\",\r\n products: \"23 produse\",\r\n date: \"Creata pe 12 APR 2020 de Ionut Popescu \"\r\n },\r\n {\r\n id: 3,\r\n name: \"Nume lista 3\",\r\n products: \"23 produse\",\r\n date: \"Creata pe 12 APR 2020 de Ionut Popescu \"\r\n },\r\n {\r\n id: 4,\r\n name: \"Nume lista 4\",\r\n products: \"23 produse\",\r\n date: \"Creata pe 12 APR 2020 de Ionut Popescu \"\r\n }\r\n]\r\n\r\n// <>\r\n// \r\n// Adauga in lista
\r\n// closeModal ? closeModal() : setCardState( \"listCard\")}\r\n// />\r\n// \r\n// \r\n//
\r\n//
ADAUGA INTR-O LISTA NOUA
\r\n//
setListName(e?.target?.value)}}/>\r\n// ALEGE O LISTA EXISTENTA
\r\n// {lists?.map?.((item,index) => { return (\r\n// setListItem(item?.id)}\r\n// >\r\n//
{`${item?.name}`}
\r\n//
{`${item?.products}`}
\r\n//
{`${item?.date}`}
\r\n//
\r\n// )})}\r\n// \r\n//
\r\n// \r\n// >\r\n","export default __webpack_public_path__ + \"static/media/GlobalConnectionAlert.0f0c56a7.svg\";","import React from \"react\"\r\nimport MagicButton from \"components/MagicButton/MagicButtonV2\"\r\nimport GlobalConnectionError from \"assets/iconsK3/GlobalConnectionAlert.svg\"\r\nimport \"./PriceChangedModal.scss\"\r\nimport { setDictionary } from \"store/modules/backData\"\r\nimport { useDispatch, useSelector } from \"react-redux\"\r\nimport FormatComponent from \"components/FormatComponent/FormatComponent\"\r\nimport { addToBasket, modifyBasket } from \"store/modules/shop\"\r\nimport { searchStuff } from \"store/modules/dataView.search\"\r\nimport Close from \"assets/general/Close.svg\"\r\n\r\nconst PriceChangedModal = ({ location }) => {\r\n const dispatch = useDispatch()\r\n const dictionary = useSelector((state) => state?.backData?.dictionary)\r\n\r\n const firstText = `Pretul la produsul ${dictionary?.data?.name} s-a schimbat! `\r\n\r\n return (\r\n <>\r\n \r\n
\r\n
\r\n
e?.preventDefault?.()}\r\n src={Close}\r\n className=\"close round-clear\"\r\n alt=\"clear\"\r\n onClick={() => dispatch(setDictionary({ priceChanged: false }))}\r\n />\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
e?.preventDefault?.()}\r\n alt=\"logo\"\r\n src={GlobalConnectionError}\r\n />\r\n
\r\n
\r\n \r\n Pretul vechi:{\" \"}\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n Pret nou:{\" \"}\r\n
\r\n \r\n \r\n
\r\n \r\n
{\r\n dispatch(\r\n addToBasket(\r\n dictionary?.data?.id,\r\n dictionary?.oldProductQuantity,\r\n dictionary?.data?.priceNet\r\n )\r\n )\r\n //dispatch(searchStuff({reload:true,type: \"product/goods/shop\", sortField: \"ranking\", sortAsc: false }))\r\n\r\n setTimeout(() => {\r\n dispatch(setDictionary({ priceChanged: false }))\r\n }, 500)\r\n }}\r\n />\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n >\r\n )\r\n}\r\n\r\nexport default PriceChangedModal\r\n","export default __webpack_public_path__ + \"static/media/Left.53e36d06.svg\";","var _g, _defs;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgIlluNoList(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 353,\n height: 108,\n viewBox: \"0 0 353 108\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip0_14869_255817)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M31.9641 44H10.7161C9.95609 44 9.34009 44.6167 9.34009 45.3724V66.6276C9.34009 67.3833 9.95609 68 10.7161 68H31.9641C32.7241 68 33.3401 67.3833 33.3401 66.6276V45.3724C33.3401 44.6167 32.7241 44 31.9641 44Z\",\n fill: \"#B3B3B3\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M119.142 44H97.8941C97.1341 44 96.5181 44.6167 96.5181 45.3724V66.6276C96.5181 67.3833 97.1341 68 97.8941 68H119.142C119.902 68 120.518 67.3833 120.518 66.6276V45.3724C120.518 44.6167 119.902 44 119.142 44Z\",\n fill: \"#B3B3B3\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M75.5534 44H54.3054C53.5454 44 52.9294 44.6167 52.9294 45.3724V66.6276C52.9294 67.3833 53.5454 68 54.3054 68H75.5534C76.3134 68 76.9294 67.3833 76.9294 66.6276V45.3724C76.9294 44.6167 76.3134 44 75.5534 44Z\",\n fill: \"#B3B3B3\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M132 60H0V108H132V60Z\",\n fill: \"#CCCCCC\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M194.624 48H173.376C172.616 48 172 48.6167 172 49.3724V70.6276C172 71.3833 172.616 72 173.376 72H194.624C195.384 72 196 71.3833 196 70.6276V49.3724C196 48.6167 195.384 48 194.624 48Z\",\n fill: \"#B3B3B3\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M238.214 48H216.966C216.206 48 215.59 48.6167 215.59 49.3724V70.6276C215.59 71.3833 216.206 72 216.966 72H238.214C238.974 72 239.59 71.3833 239.59 70.6276V49.3724C239.59 48.6167 238.974 48 238.214 48Z\",\n fill: \"#B3B3B3\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M249 60.168H163V108.168H249V60.168Z\",\n fill: \"#CCCCCC\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M297.624 48H276.376C275.616 48 275 48.6167 275 49.3724V70.6276C275 71.3833 275.616 72 276.376 72H297.624C298.384 72 299 71.3833 299 70.6276V49.3724C299 48.6167 298.384 48 297.624 48Z\",\n fill: \"#FF849A\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M341.214 48H319.966C319.206 48 318.59 48.6167 318.59 49.3724V70.6276C318.59 71.3833 319.206 72 319.966 72H341.214C341.974 72 342.59 71.3833 342.59 70.6276V49.3724C342.59 48.6167 341.974 48 341.214 48Z\",\n fill: \"#FF849A\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M353 60H265V108H353V60Z\",\n fill: \"#FFB7C4\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M78.0356 0H56.7876C56.0276 0 55.4116 0.616721 55.4116 1.37242V22.6276C55.4116 23.3833 56.0276 24 56.7876 24H78.0356C78.7956 24 79.4116 23.3833 79.4116 22.6276V1.37242C79.4116 0.616721 78.7956 0 78.0356 0Z\",\n fill: \"#208FFF\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M121.625 0H100.377C99.617 0 99.001 0.616721 99.001 1.37242V22.6276C99.001 23.3833 99.617 24 100.377 24H121.625C122.385 24 123.001 23.3833 123.001 22.6276V1.37242C123.001 0.616721 122.385 0 121.625 0Z\",\n fill: \"#208FFF\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M132 12.4883H46V60.4883H132V12.4883Z\",\n fill: \"#52A9FF\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M117.624 48H96.376C95.616 48 95 48.6167 95 49.3724V70.6276C95 71.3833 95.616 72 96.376 72H117.624C118.384 72 119 71.3833 119 70.6276V49.3724C119 48.6167 118.384 48 117.624 48Z\",\n fill: \"#208FFF\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M161.213 48H139.965C139.205 48 138.589 48.6167 138.589 49.3724V70.6276C138.589 71.3833 139.205 72 139.965 72H161.213C161.973 72 162.589 71.3833 162.589 70.6276V49.3724C162.589 48.6167 161.973 48 161.213 48Z\",\n fill: \"#208FFF\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M172 60H86V108H172V60Z\",\n fill: \"#52A9FF\"\n }))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip0_14869_255817\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n width: 353,\n height: 108,\n fill: \"white\"\n })))));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgIlluNoList);\nexport default __webpack_public_path__ + \"static/media/illu_no_list.1b3c301a.svg\";\nexport { ForwardRef as ReactComponent };","import M from \"components/MagicButton/MagicButton\"\r\n\r\nexport function getMonthDays(yearin, inMonth, startSunday = false) {\r\n const daysInMonth = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\r\n const year = Number.parseInt(yearin)\r\n const inputMonth = Number.parseInt(inMonth)\r\n // If the year is leap then February has 29 days\r\n if ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) {\r\n daysInMonth[2] = 29\r\n } else {\r\n daysInMonth[2] = 28\r\n }\r\n //0 sunday - 6 saturday\r\n const firstDay = new Date(yearin, inMonth - 1, 1).getDay()\r\n //const lastDay = new Date(yearin, inMonth - 1, daysInMonth?.[inMonth]).getDay();\r\n let prev = [25, 26, 27, 28, 29, 30, 31],\r\n cur = [],\r\n next = [1, 2, 3, 4, 5, 6, 7],\r\n missFront = 0,\r\n missBack = 0\r\n\r\n for (let day = 1; day <= daysInMonth?.[inMonth]; day++) {\r\n cur?.push?.(day)\r\n }\r\n\r\n missFront = firstDay === 0 ? 6 : firstDay - 1\r\n //calculate the inputMounth last row missings\r\n missBack = 35 - (cur?.length + missFront)\r\n\r\n cur = [\r\n ...prev?.slice?.(prev?.length - missFront),\r\n ...cur,\r\n ...next?.slice?.(0, missBack)\r\n ]\r\n return cur\r\n}\r\n","import PropTypes from \"prop-types\"\r\nimport { useState } from \"react\"\r\nimport SvgIcon from \"components/SvgIcon/SvgIcon\"\r\n\r\nexport default function Checkbox(props) {\r\n const { selected, header, onClick, disabled, color, children } = props\r\n const [iconState, setIconState] = useState(selected)\r\n\r\n //TODO: clarify header functionality\r\n const iconName = iconState\r\n ? header\r\n ? \"CheckboxMultiDeselectK3\"\r\n : \"CheckboxActiveK3\"\r\n : \"CheckboxInactiveK3\"\r\n\r\n function _onClick() {\r\n if (!disabled) {\r\n setIconState(!iconState)\r\n if (onClick) onClick(iconState)\r\n }\r\n }\r\n\r\n return (\r\n _onClick()}\r\n className={`checkbox-k3 ${disabled ? \"checkbox-disabled\" : \"\"}`}\r\n >\r\n \r\n {children}\r\n
\r\n )\r\n}\r\n\r\nCheckbox.propTypes = {\r\n label: PropTypes.string,\r\n color: PropTypes.string,\r\n onClick: PropTypes.func,\r\n disabled: PropTypes.bool,\r\n selected: PropTypes.bool\r\n}\r\n","import { createSelector } from \"reselect\"\r\n\r\nconst cart = (state) => state.shop.cart\r\nconst paymentData = (state) => state.company.paymentData\r\nconst deliveryData = (state) => state.company.deliveryData\r\nconst invoicingData = (state) => state.company.invoicingData\r\n\r\nconst allProducts = (state) => state.shop.products\r\nconst cartData = (state) => state.shop.cartData\r\n\r\nexport const selectShopPage = createSelector(\r\n cart,\r\n paymentData,\r\n invoicingData,\r\n deliveryData,\r\n cartData,\r\n allProducts,\r\n (cart, paymentData, invoicingData, deliveryData, cartData, allProducts) => {\r\n return {\r\n paymentData,\r\n deliveryData,\r\n invoicingData,\r\n cartContent: cart,\r\n cartData\r\n }\r\n }\r\n)\r\n\r\nexport const selectTotalItems = createSelector(cartData, (cartData) => {\r\n let totalCartItems = 0\r\n let totalCartProducts = 0\r\n\r\n cartData?.lineList?.forEach?.((i) => {\r\n if (i.errorCode !== \"NOT_ENOUGH_STOCK\") {\r\n totalCartItems += i.quantity\r\n totalCartProducts++\r\n } //not sure if should we handle otehr cases\r\n })\r\n\r\n if (!totalCartItems) totalCartItems = null\r\n if (!totalCartProducts) totalCartProducts = null\r\n\r\n return {\r\n totalCartItems,\r\n totalCartProducts\r\n }\r\n})\r\n","import React, { useState } from \"react\"\r\n\r\nimport { Range } from \"rc-slider\"\r\nimport \"rc-slider/assets/index.css\"\r\nimport \"./DualRangeSlider.scss\"\r\nimport { useDispatch } from \"react-redux\"\r\nimport { setFilterSelection } from \"store/modules/dataView\"\r\n\r\nconst DualRangeSlider = (props) => {\r\n const dispatch = useDispatch()\r\n const { min, max, title, defaultValue, id } = props\r\n let normalizedValues = [min, max]\r\n if (defaultValue?.length) {\r\n if (defaultValue[0]) normalizedValues[0] = defaultValue?.[0]\r\n if (defaultValue[1]) normalizedValues[1] = defaultValue?.[1]\r\n }\r\n // const [values, setValues] = useState(normalizedValues)\r\n const checker = (value) => {\r\n let FinalValue = value\r\n if (value > max) FinalValue = max\r\n if (value < min) FinalValue = min\r\n return FinalValue\r\n }\r\n\r\n return (\r\n <>\r\n \r\n {title &&
{title}
}\r\n
dispatch(setFilterSelection(id, e))}\r\n />\r\n \r\n \r\n >\r\n )\r\n}\r\nexport default DualRangeSlider\r\n","import React, { useState } from \"react\"\r\nimport \"./index.scss\"\r\nimport SvgIcon from \"components/SvgIcon/SvgIcon\"\r\nimport { useDispatch } from \"react-redux\"\r\nimport useQueryStringFilters from \"utils/useQueryStringFilters\"\r\nimport MyLink from \"components/MyLink\"\r\nimport { noBrandFilter } from \"utils/filterUtils\"\r\n\r\nconst noCaseStringSearch = (inputString, searchTerm) =>\r\n typeof inputString === \"string\"\r\n ? inputString?.toLowerCase?.()?.includes?.(searchTerm?.toLowerCase?.())\r\n : undefined\r\n\r\nexport default function MultiSelectFilter(props) {\r\n const {\r\n id,\r\n search,\r\n loadMore,\r\n stars,\r\n data,\r\n selection: propsSelection,\r\n withQs\r\n } = props\r\n const dispatch = useDispatch()\r\n const { filters, setFilter, getUrlWithNewBrand, getUrlWithNewJobFilter } = useQueryStringFilters()\r\n const [searchValue, setSearchValue] = useState(\"\")\r\n const loadMoreAction = () => {\r\n console.log(\"load more\")\r\n }\r\n\r\n const selection = withQs ? filters?.[id] : propsSelection\r\n\r\n const getNewSelection = optionId => {\r\n if(selection) return selection?.includes?.(optionId)\r\n ? selection?.filter?.((e) => e !== optionId)\r\n : [...selection || [], optionId]\r\n\r\n return [optionId]\r\n }\r\n\r\n /**\r\n * Fara brand can can not be selected with other brands. If Fara brand is selected, all other brands are deselected.\r\n **/\r\n const getNewBrandSelection = optionId => {\r\n const isBecomingSelected = !selection?.includes?.(optionId)\r\n\r\n if(optionId === noBrandFilter) return isBecomingSelected ? [optionId] : []\r\n if(!selection?.includes?.(noBrandFilter)) return getNewSelection(optionId)\r\n \r\n return isBecomingSelected\r\n ? getNewSelection(optionId)?.filter?.(someBrand => someBrand !== noBrandFilter)\r\n : []\r\n }\r\n\r\n const getOptionHref = optionId => {\r\n \r\n if(id === \"FLT-SMaaaa00\") {\r\n const newBrandSelection = getNewBrandSelection(optionId)\r\n return getUrlWithNewBrand(newBrandSelection, selection?.includes?.(optionId))\r\n }\r\n \r\n const newSelection = getNewSelection(optionId)\r\n if(id === \"FLT-M0ctyjob\") return getUrlWithNewJobFilter(newSelection)\r\n }\r\n\r\n\r\n const isSelected = (optionId) => selection?.includes?.(optionId)\r\n\r\n return (\r\n <>\r\n {search ? (\r\n setSearchValue(e?.target?.value)}\r\n />\r\n ) : (\r\n
\r\n )}\r\n {data\r\n ?.filter?.(\r\n (item) => !searchValue || noCaseStringSearch(item?.label, searchValue)\r\n )\r\n ?.map?.((item) => {\r\n return (\r\n \r\n \r\n {stars ? (\r\n [1, 2, 3, 4, 5]?.map?.((star) => (\r\n = star ? \"Review_star_full\" : \"reviewstarempty\"\r\n }\r\n />\r\n ))\r\n ) : (\r\n {item?.label}
\r\n )}\r\n {item?.info && (\r\n {`(${item?.info})`}
\r\n )}\r\n \r\n )\r\n })}\r\n {loadMore && (\r\n loadMoreAction()}\r\n >\r\n {loadMore}\r\n
\r\n )}\r\n >\r\n )\r\n}\r\n","export default __webpack_public_path__ + \"static/media/close-grey.f6ed551d.svg\";","export default __webpack_public_path__ + \"static/media/lightbulb.c734bd54.svg\";","export default __webpack_public_path__ + \"static/media/blueHeart.ed2e8dc2.svg\";","import React from \"react\"\r\nimport Close from \"assets/general/Close.svg\"\r\nimport closeGrey from \"assets/general/close-grey.svg\"\r\nimport blueHeart from \"assets/general/blueHeart.svg\"\r\nimport lightbulb from \"assets/general/lightbulb.svg\"\r\nimport \"./index.scss\"\r\nimport { useDispatch, useSelector } from \"react-redux\"\r\nimport { setFilterSelection } from \"store/modules/dataView\"\r\nimport { addSavedFilter } from \"store/modules/dataView/dataViewActions.actions\"\r\nimport useQueryStringFilters from \"utils/useQueryStringFilters\"\r\nimport { withLocalize } from \"components/Lang/Lang\"\r\nimport MyLink from \"components/MyLink\"\r\n\r\nconst SelectedFilters = (props) => {\r\n const { disableSave, filters, translate } = props\r\n // const {appliedFilters, disableSave} = props\r\n const { query, getUrlWithoutThisFilter } = useQueryStringFilters()\r\n const appliedFilters =\r\n Object?.entries?.(query.filters)?.map?.(([key, value]) => ({\r\n id: key,\r\n name: filters?.find?.((item) => item?.id === key)?.label\r\n // value\r\n })) ?? []\r\n\r\n // const dispatch = useDispatch() //logic moved to useQueryStringFilters\r\n //console.log(\"SELECTED FILTERS APPLIED \", appliedFilters);\r\n\r\n\r\n const getTitle = () => {\r\n\r\n\r\n if(!appliedFilters?.length) return translate?.(\"filters.noFilter\")\r\n if(appliedFilters?.length === 1) return translate?.(\"filters.filter\")\r\n return translate?.(\"filters.filters\", {Variable40: appliedFilters?.length || '0'})\r\n // return translate?.(\"filters.filters\", {Variable40: appliedFilters?.length || '0'})\r\n }\r\n\r\n \r\n // code moved to useQueryStringFilters\r\n // const deleteFilter = (id) => {\r\n // setQuery({filters:{[id]: undefined}})\r\n\r\n // // dispatch(setFilterSelection(id, null))\r\n // }\r\n // const deleteAllFilters = () => {\r\n // setQuery({filters:undefined})\r\n // // dispatch({type:\"TEMP_CLEAR_SHOP_FILTERS\"})\r\n // }\r\n return (\r\n \r\n
\r\n
e?.preventDefault?.()}\r\n src={lightbulb}\r\n alt=\"light\"\r\n />\r\n
{getTitle()}
\r\n
\r\n
\r\n {appliedFilters?.map?.((filter) => (\r\n
\r\n
{filter?.name}
\r\n
\r\n e?.preventDefault?.()}\r\n src={closeGrey}\r\n alt=\"delete\"\r\n />\r\n \r\n\r\n \r\n
\r\n ))}\r\n {appliedFilters?.length ? (\r\n
\r\n \r\n \r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n {/**{(appliedFilters?.length && !disableSave) ?
dispatch(addSavedFilter(\"New one\"))}/> : \"\"} */}\r\n
\r\n )\r\n}\r\n\r\nexport default withLocalize(SelectedFilters)\r\n","import React, { useState } from \"react\"\r\n// import ExpandableSection from \"components/VerticalFilters/ExpandableSection/ExpandableSection\";\r\nimport Close from \"assets/general/Close.svg\"\r\nimport \"./index.scss\"\r\nimport { useDispatch, useSelector } from \"react-redux\"\r\nimport { activateSavedFilter, deleteSavedFilter } from \"store/modules/dataView\"\r\n\r\n// let initialFilters = [\r\n// { id: \"dsdsd\", name: \"Filtrul A\" },\r\n// { id: \"dsdsdff\", name: \"Filtrul B\" },\r\n// { id: \"dsdsdsd\", name: \"Filtrul C\" }\r\n// ];\r\n\r\nlet loadMore = \"Incarca mai multe\"\r\nexport default function SavedFilters() {\r\n const savedFilters = useSelector((state) => state?.dataView.savedFilters)\r\n const dispatch = useDispatch()\r\n const [search, setSearch] = useState(\"\")\r\n const onLoadMore = () => {\r\n console.log(\"load more\")\r\n }\r\n\r\n const onDelete = (e, filterId) => {\r\n dispatch(deleteSavedFilter(filterId))\r\n e?.stopPropagation?.()\r\n }\r\n return (\r\n <>\r\n setSearch(e?.target?.value)}\r\n />\r\n {savedFilters\r\n ?.filter?.((item) => !search || item?.name?.includes?.(search))\r\n ?.map?.((filter, index) => (\r\n dispatch(activateSavedFilter(filter.id))}\r\n >\r\n
{filter?.name}
\r\n
e?.preventDefault?.()}\r\n src={Close}\r\n className=\"filter-delete\"\r\n alt=\"del\"\r\n onClick={(e) => onDelete(e, filter.id)}\r\n />\r\n
\r\n ))}\r\n {loadMore && (\r\n onLoadMore()}>\r\n {loadMore}\r\n
\r\n )}\r\n >\r\n )\r\n}\r\n","import DualRangeSlider from \"components/VerticalFilters/DualRangeSlider/DualRangeSlider\"\r\nimport ExpandableSection from \"components/ExpandableSection/ExpandableSection\"\r\nimport { useSelector } from \"react-redux\"\r\nimport \"./index.scss\"\r\n// import FilterSection from \"views/invoices/InvoiceComponents/FilterSection/FilterSection\"\r\nimport { selectComputedFilters } from \"store/selectors/dataView/finalFilters.selector\"\r\nimport MultiSelectFilter from \"components/VerticalFilters/MultiSelectFilter/MultiSelectFilter\"\r\nimport SelectedFilters from \"components/VerticalFilters/SelectedFilters/SelectedFilters\"\r\nimport SavedFilters from \"components/VerticalFilters/SavedFilters/SavedFilters\"\r\nimport { searchStuff } from \"store/modules/dataView.search\"\r\nimport { useDispatch } from \"store\"\r\nimport { useEffect } from \"react\"\r\nimport { loadViewData } from \"store/modules/dataView/dataView-dataLoader\"\r\nimport CategoryFilter from \"components/CategoryFilter\"\r\nimport useQueryStringFilters from \"utils/useQueryStringFilters\"\r\nexport default function VerticalFilters(props) {\r\n const {\r\n filterIds,\r\n showSelectedFilters,\r\n showSavedFilters,\r\n disableSave,\r\n pageScroll\r\n } = props\r\n\r\n const { filters, appliedFilters, savedFilters } = useSelector((state) =>\r\n selectComputedFilters(state)\r\n )\r\n // const searchString = useSelector(state => state.page?.crtList?.searchString)\r\n // const dispatch = useDispatch()\r\n // const [sortKey, sortDirection] = sort\r\n // useEffect(() => {\r\n // dispatch(loadViewData({reload:true}))\r\n // }, [appliedFilters, dispatch, searchString, appliedFilters?.[\"FLT-CATEG001\"]])\r\n const displayFilters = filterIds\r\n ? filters?.filter?.((item) => filterIds?.includes?.(item?.id))\r\n : filters\r\n return (\r\n \r\n {showSelectedFilters && (\r\n \r\n )}\r\n\r\n {showSavedFilters && (\r\n \r\n \r\n \r\n )}\r\n {displayFilters?.map?.((filter, index) => (\r\n \r\n {filter.type === \"range\" && (\r\n \r\n )}\r\n {filter.type === \"category\" && }\r\n {filter.type === \"multiSelect\" && (\r\n \r\n )}\r\n {filter.type === \"5stars\" && (\r\n \r\n )}\r\n {filter.type === \"jobCityFilter\" && (\r\n \r\n )}\r\n \r\n ))}\r\n {/* dispatch(searchStuff({type:'product', reload:true}))}>Load */}\r\n
\r\n )\r\n}\r\n","export default __webpack_public_path__ + \"static/media/handler.925dbf39.svg\";","export default __webpack_public_path__ + \"static/media/MutaAici.f281740a.svg\";","import { useState } from \"react\"\r\nimport { DragDropContext, Droppable, Draggable } from \"react-beautiful-dnd\"\r\nimport Handler from \"views/dev/select/ReorderColumnsDragDrop/handler.svg\"\r\nimport MutaBG from \"views/dev/select/ReorderColumnsDragDrop/MutaAici.svg\"\r\nimport { SmallSwitch } from \"componentsK3\"\r\nimport { useDispatch } from \"store\"\r\nimport { setColumns } from \"store/modules/dataView\"\r\nimport { useSelector } from \"react-redux\"\r\n\r\nconst ColumnsReorderDragAndDrop = (props) => {\r\n const { data, selection, datas, value, setValue } = props\r\n const stateDataList =\r\n useSelector((state) => state?.dataView?.columns) ??\r\n data?.map?.((item, i) => ({ id: i, visible: true }))\r\n const dataList = value ?? stateDataList\r\n const displayData = dataList?.map?.((item) => data?.[item?.id])\r\n const dispatch = useDispatch()\r\n const onDragEnd = (result) => {\r\n if (!result.destination) return\r\n const items = Array.from(dataList)\r\n const [reorderedItem] = items?.splice?.(result.source.index, 1)\r\n items?.splice?.(result.destination.index, 0, reorderedItem)\r\n setValue(items)\r\n // dispatch(setColumns(items))\r\n }\r\n\r\n const flipColumnVisibility = (id) => {\r\n const newDataList = dataList?.map?.((item) =>\r\n item?.id === id ? { ...item, visible: !item?.visible } : item\r\n )\r\n setValue(newDataList)\r\n\r\n // dispatch(setColumns(newDataList))\r\n }\r\n\r\n const dragItem = ({ list, snapshot, index }) => {\r\n return (\r\n \r\n
\r\n
\r\n
{list.label}
\r\n
\r\n
i.id === list?.id)?.visible}\r\n disabled={list?.disabled}\r\n onClick={() => flipColumnVisibility(list?.id)}\r\n />\r\n \r\n )\r\n }\r\n // let actualIndex = 0\r\n\r\n return (\r\n \r\n \r\n
\r\n {(provided) => (\r\n \r\n {displayData?.map?.((list, index) => {\r\n if (list?.label) {\r\n return (\r\n
\r\n {(provided, snapshot) => (\r\n \r\n {dragItem({ list, snapshot, index })}\r\n
\r\n )}\r\n \r\n )\r\n }\r\n })}\r\n\r\n {provided.placeholder}\r\n
\r\n )}\r\n \r\n
\r\n \r\n )\r\n}\r\nexport default ColumnsReorderDragAndDrop\r\n","export default __webpack_public_path__ + \"static/media/Delete.166c33fd.svg\";","import { sanitizeAnythingForRedux } from \"utils/preventReactInRedux\"\r\n\r\nconst GET_INVOICES = \"table/GET_INVOICES\"\r\nconst SET_EDITMODE = \"table/SET_EDITMODE\"\r\nconst TOGGLE_PAGE_EDIT = \"table/TOGGLE_PAGE_EDIT\"\r\n\r\nconst invoiceList = [\r\n {\r\n title: \"Facturi\",\r\n type: \"achitat\",\r\n price: \"15.200\",\r\n date: \"Vineri, 28 Aprilie\",\r\n articole: null\r\n },\r\n\r\n {\r\n title: \"Facturi\",\r\n type: \"recent\",\r\n price: \"24.871,22\",\r\n date: \"Marti, 02 Mai\",\r\n articole: null\r\n },\r\n {\r\n title: \"Comenzi\",\r\n type: \"next\",\r\n date: \"Martie 2021\",\r\n articole: 1250\r\n },\r\n {\r\n title: \"Comenzi\",\r\n type: \"active\",\r\n price: \"24.871,22\",\r\n date: \"Martie 2021\"\r\n },\r\n\r\n {\r\n title: \"Facturi\",\r\n type: \"restante\",\r\n price: \"24.871,22\",\r\n date: \"Marti, 02 Mai\",\r\n articole: null\r\n },\r\n {\r\n title: \"Facturi\",\r\n type: \"total\",\r\n price: \"24.871,22\",\r\n date: \"Marti, 02 Mai\",\r\n articole: null\r\n }\r\n]\r\n\r\nconst initialState = {\r\n invoices: [...invoiceList || []],\r\n isEdit: false\r\n}\r\n\r\n// eslint-disable-next-line import/no-anonymous-default-export\r\nexport default function (state = initialState, unsanitizedAction) {\r\n\r\n const action = sanitizeAnythingForRedux(unsanitizedAction)\r\n\r\n switch (action.type) {\r\n case GET_INVOICES:\r\n return {\r\n ...state,\r\n invoices: action.payload\r\n }\r\n case SET_EDITMODE:\r\n return {\r\n ...state,\r\n isEdit: action.payload\r\n }\r\n case TOGGLE_PAGE_EDIT:\r\n return {\r\n ...state,\r\n isEdit: !state?.isEdit\r\n }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const setInvoices = (data) => {\r\n return {\r\n payload: data,\r\n type: GET_INVOICES\r\n }\r\n}\r\n\r\nexport const setEditmode = (data) => {\r\n return {\r\n payload: data,\r\n type: SET_EDITMODE\r\n }\r\n}\r\n\r\nexport const toggleCmpPageEdit = () => {\r\n return {\r\n type: TOGGLE_PAGE_EDIT\r\n }\r\n}\r\n","// import orderTableData from \"mockData/orderTableData\";\r\nimport { apiAction, reDispatch } from \"store/middleware/api\"\r\nimport { printError } from \"utils/printError\"\r\nimport store from \"store/index\"\r\nimport { setApiResponse } from \"store/modules/auth\"\r\nimport { loadDynamoItemsBySK, searchStuff } from \"store/modules/dataView.search\"\r\nimport { sanitizeAnythingForRedux } from \"utils/preventReactInRedux\"\r\n\r\nexport const SET_STATISTICS = \"dataView/SET_STATISTICS\"\r\nexport const CLEAR_STATISTICS = \"dataView/CLEAR_STATISTICS\"\r\nexport const SET_AUXILIARY_INVOICE = \"dataView/SET_AUXILIARY_INVOICE\"\r\n\r\nconst initialState = {\r\n statistics: {},\r\n auxiliaryInvoiceData: []\r\n}\r\n\r\n// eslint-disable-next-line import/no-anonymous-default-export\r\nexport default function (state = initialState, unsanitizedAction) {\r\n\r\n const action = sanitizeAnythingForRedux(unsanitizedAction)\r\n\r\n switch (action.type) {\r\n case SET_STATISTICS:\r\n return {\r\n ...state,\r\n statistics: { ...state.statistics, ...action.payload }\r\n }\r\n case SET_AUXILIARY_INVOICE:\r\n return { ...state, auxiliaryInvoiceData: [...action.payload] }\r\n case CLEAR_STATISTICS:\r\n return { ...initialState }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const clearStatistics = () => {\r\n return { type: CLEAR_STATISTICS }\r\n}\r\n\r\nexport const loadStatistics = (type) =>\r\n apiAction({\r\n endPoint: `/uniprest/${type}/statistics`,\r\n onSuccess: (data, dispatch) => {\r\n let payload = {}\r\n payload[type] = data\r\n\r\n dispatch(setApiResponse(data))\r\n return {\r\n type: SET_STATISTICS,\r\n payload\r\n }\r\n },\r\n onFailure: (error) => {\r\n printError(\"loadStatistics()\", error)\r\n return {\r\n type: \"a\"\r\n }\r\n }\r\n })\r\n\r\nexport const loadCompanyStatistics = () =>\r\n apiAction({\r\n endPoint: `/organization/webshop-client/statistics`,\r\n onSuccess: (data, dispatch) => {\r\n dispatch(setApiResponse(data))\r\n let payload = {}\r\n payload[\"companies\"] = data\r\n return {\r\n type: SET_STATISTICS,\r\n payload\r\n }\r\n },\r\n onFailure: (error) => {\r\n printError(\"loadCompanyStatistics()\", error)\r\n return {\r\n type: \"a\"\r\n }\r\n }\r\n })\r\n\r\nexport const loadProductStatistics = () =>\r\n apiAction({\r\n endPoint: `/product/goods/statistics`,\r\n onSuccess: (data, dispatch) => {\r\n dispatch(setApiResponse(data))\r\n let payload = {}\r\n payload[\"products\"] = data\r\n return {\r\n type: SET_STATISTICS,\r\n payload\r\n }\r\n },\r\n onFailure: (error) => {\r\n printError(\"loadProductStatistics()\", error)\r\n return {\r\n type: \"a\"\r\n }\r\n }\r\n })\r\n\r\nexport const loadOrderStatistics = () =>\r\n apiAction({\r\n endPoint: `/basket/statistics`,\r\n onSuccess: (data, dispatch) => {\r\n dispatch(setApiResponse(data))\r\n let payload = {}\r\n payload[\"orders\"] = data\r\n return {\r\n type: SET_STATISTICS,\r\n payload\r\n }\r\n },\r\n onFailure: (error) => {\r\n printError(\"loadOrderStatistics()\", error)\r\n return {\r\n type: \"a\"\r\n }\r\n }\r\n })\r\n\r\nexport const loadInvoiceStatistics = () =>\r\n apiAction({\r\n endPoint: `/client-invoice/statistics`, //not available yet, or I'm missing something\r\n onSuccess: (data, dispatch) => {\r\n dispatch(setApiResponse(data))\r\n return {\r\n type: SET_AUXILIARY_INVOICE,\r\n payload: data\r\n }\r\n },\r\n onFailure: (error) => {\r\n printError(\"loadInvoiceStatistics()\", error)\r\n return {\r\n type: \"a\"\r\n }\r\n }\r\n })\r\n\r\n//testing if switchcase adds correctly data in state\r\n// export const loadInvoiceStatistics = () => {\r\n// return {\r\n// type: COMBINE_STATISTICS,\r\n// payload: [{1: \"test1\"}, {2: \"test2\"}],\r\n// }\r\n// }\r\nexport const loadGuestStatistics = () =>\r\n reDispatch((dispatch) => {\r\n dispatch(\r\n loadDynamoItemsBySK({\r\n SK: \"APLICANT_RESPONSE\",\r\n dictionary: \"APLICANT_STATS\"\r\n })\r\n )\r\n dispatch(\r\n loadDynamoItemsBySK({ SK: \"JOB_RESPONSE\", dictionary: \"JOBS_STATS\" })\r\n )\r\n dispatch(\r\n loadDynamoItemsBySK({ SK: \"GUEST_ARTICLE_V2\", dictionary: \"NEWS_STATS\" })\r\n )\r\n dispatch(\r\n loadDynamoItemsBySK({\r\n SK: \"CONTACT_RESPONSE\",\r\n dictionary: \"CONTACT_STATS\"\r\n })\r\n )\r\n dispatch(\r\n searchStuff({\r\n type: \"public/organization/workplace\",\r\n sortField: null,\r\n dictionary: \"LOCATION_RESPONSE\",\r\n reload: true\r\n })\r\n )\r\n return { type: \"a\" }\r\n })\r\n","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _path12, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _path20, _path21, _path22, _path23, _path24, _path25, _path26, _path27, _path28, _path29, _path30;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgEmptyListIllu(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 168,\n height: 203,\n viewBox: \"0 0 168 203\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M135.466 9.96484H124.999V4.93267C124.999 3.92624 124.194 3.12109 123.187 3.12109C122.181 3.12109 121.376 3.92624 121.376 4.93267V9.96484H112.62V4.93267C112.62 3.92624 111.815 3.12109 110.808 3.12109C109.802 3.12109 108.997 3.92624 108.997 4.93267V9.96484H100.241V4.93267C100.241 3.92624 99.4356 3.12109 98.4292 3.12109C97.4228 3.12109 96.6176 3.92624 96.6176 4.93267V9.96484H87.8616V4.93267C87.8616 3.92624 87.0565 3.12109 86.0501 3.12109C85.0436 3.12109 84.2385 3.92624 84.2385 4.93267V9.96484H75.4825V4.93267C75.4825 3.92624 74.6774 3.12109 73.6709 3.12109C72.6645 3.12109 71.8593 3.92624 71.8593 4.93267V9.96484H63.1034V4.93267C63.1034 3.92624 62.2982 3.12109 61.2918 3.12109C60.2854 3.12109 59.4802 3.92624 59.4802 4.93267V9.96484H50.7242V4.93267C50.7242 3.92624 49.9191 3.12109 48.9127 3.12109C47.9062 3.12109 47.1011 3.92624 47.1011 4.93267V9.96484H38.3451V4.93267C38.3451 3.92624 37.54 3.12109 36.5335 3.12109C35.5271 3.12109 34.722 3.92624 34.722 4.93267V9.96484H25.966V4.93267C25.966 3.92624 25.1608 3.12109 24.1544 3.12109C23.148 3.12109 22.3428 3.92624 22.3428 4.93267V9.96484H13.5869V4.93267C13.5869 3.92624 12.7817 3.12109 11.7753 3.12109C10.7689 3.12109 9.96369 3.92624 9.96369 4.93267V9.96484H0V30.9993V192.431V202.999H135.466V192.431V9.96484ZM121.376 16.9092V18.2176C121.376 19.224 122.181 20.0292 123.187 20.0292C124.194 20.0292 124.999 19.224 124.999 18.2176V16.9092C126.005 17.5131 126.811 18.6202 126.811 19.9285C126.811 21.9414 125.2 23.451 123.288 23.451C121.376 23.451 119.766 21.8408 119.766 19.9285C119.665 18.7208 120.369 17.5131 121.376 16.9092ZM109.097 16.9092V18.2176C109.097 19.224 109.903 20.0292 110.909 20.0292C111.915 20.0292 112.721 19.224 112.721 18.2176V16.9092C113.727 17.5131 114.532 18.6202 114.532 19.9285C114.532 21.9414 112.922 23.451 111.01 23.451C109.097 23.451 107.487 21.8408 107.487 19.9285C107.286 18.7208 107.99 17.5131 109.097 16.9092ZM96.7183 16.9092V18.2176C96.7183 19.224 97.5234 20.0292 98.5298 20.0292C99.5363 20.0292 100.341 19.224 100.341 18.2176V16.9092C101.348 17.5131 102.153 18.6202 102.153 19.9285C102.153 21.9414 100.543 23.451 98.6305 23.451C96.6176 23.451 95.108 21.8408 95.108 19.9285C95.0073 18.7208 95.7118 17.5131 96.7183 16.9092ZM84.4398 16.9092V18.2176C84.4398 19.224 85.2449 20.0292 86.2514 20.0292C87.2578 20.0292 88.0629 19.224 88.0629 18.2176V16.9092C89.0694 17.5131 89.8745 18.6202 89.8745 19.9285C89.8745 21.9414 88.2642 23.451 86.352 23.451C84.4398 23.451 82.8295 21.8408 82.8295 19.9285C82.6282 18.7208 83.3327 17.5131 84.4398 16.9092ZM72.0606 16.9092V18.2176C72.0606 19.224 72.8658 20.0292 73.8722 20.0292C74.8786 20.0292 75.6838 19.224 75.6838 18.2176V16.9092C76.6902 17.5131 77.4954 18.6202 77.4954 19.9285C77.4954 21.9414 75.8851 23.451 73.9729 23.451C72.0606 23.451 70.4503 21.8408 70.4503 19.9285C70.3497 18.7208 71.0542 17.5131 72.0606 16.9092ZM59.7821 16.9092V18.2176C59.7821 19.224 60.5873 20.0292 61.5937 20.0292C62.6002 20.0292 63.4053 19.224 63.4053 18.2176V16.9092C64.4117 17.5131 65.2169 18.6202 65.2169 19.9285C65.2169 21.9414 63.6066 23.451 61.6944 23.451C59.7821 23.451 58.1718 21.8408 58.1718 19.9285C57.9706 18.7208 58.6751 17.5131 59.7821 16.9092ZM47.403 16.9092V18.2176C47.403 19.224 48.2082 20.0292 49.2146 20.0292C50.221 20.0292 51.0262 19.224 51.0262 18.2176V16.9092C52.0326 17.5131 52.8378 18.6202 52.8378 19.9285C52.8378 21.9414 51.2275 23.451 49.3152 23.451C47.3024 23.451 45.7927 21.8408 45.7927 19.9285C45.6921 18.7208 46.3966 17.5131 47.403 16.9092ZM35.1245 16.9092V18.2176C35.1245 19.224 35.9297 20.0292 36.9361 20.0292C37.9426 20.0292 38.7477 19.224 38.7477 18.2176V16.9092C39.7541 17.5131 40.5593 18.6202 40.5593 19.9285C40.5593 21.9414 38.949 23.451 37.0367 23.451C35.1245 23.451 33.5142 21.8408 33.5142 19.9285C33.3129 18.7208 34.0174 17.5131 35.1245 16.9092ZM22.7454 16.9092V18.2176C22.7454 19.224 23.5505 20.0292 24.557 20.0292C25.5634 20.0292 26.3686 19.224 26.3686 18.2176V16.9092C27.375 17.5131 28.1801 18.6202 28.1801 19.9285C28.1801 21.9414 26.5698 23.451 24.6576 23.451C22.7454 23.451 21.1351 21.8408 21.1351 19.9285C21.0345 18.7208 21.739 17.5131 22.7454 16.9092ZM10.4669 16.9092V18.2176C10.4669 19.224 11.2721 20.0292 12.2785 20.0292C13.2849 20.0292 14.0901 19.224 14.0901 18.2176V16.9092C15.0965 17.5131 15.9016 18.6202 15.9016 19.9285C15.9016 21.9414 14.2913 23.451 12.3791 23.451C10.3663 23.451 8.8566 21.8408 8.8566 19.9285C8.65532 18.7208 9.35983 17.5131 10.4669 16.9092Z\",\n fill: \"#CCCCCC\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M164.248 202.997H150.158V97.4223L157.203 74.375L164.248 97.4223V202.997Z\",\n fill: \"#CCCCCC\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M138.487 27.9805H3.02148V199.98H138.487V27.9805Z\",\n fill: \"#D6E7F9\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.02148 6.94531V189.512H138.487V6.94531H3.02148ZM15.1993 20.5322C13.1865 20.5322 11.6768 18.9219 11.6768 17.0096C11.6768 15.0974 13.2871 13.4871 15.1993 13.4871C17.2122 13.4871 18.7219 15.0974 18.7219 17.0096C18.7219 18.9219 17.2122 20.5322 15.1993 20.5322ZM27.5785 20.5322C25.5656 20.5322 24.0559 18.9219 24.0559 17.0096C24.0559 15.0974 25.6662 13.4871 27.5785 13.4871C29.4907 13.4871 31.101 15.0974 31.101 17.0096C31.101 18.9219 29.4907 20.5322 27.5785 20.5322ZM39.857 20.5322C37.8441 20.5322 36.3344 18.9219 36.3344 17.0096C36.3344 15.0974 37.9447 13.4871 39.857 13.4871C41.7692 13.4871 43.3795 15.0974 43.3795 17.0096C43.3795 18.9219 41.8698 20.5322 39.857 20.5322ZM52.2361 20.5322C50.2232 20.5322 48.7136 18.9219 48.7136 17.0096C48.7136 15.0974 50.3239 13.4871 52.2361 13.4871C54.2489 13.4871 55.7586 15.0974 55.7586 17.0096C55.7586 18.9219 54.1483 20.5322 52.2361 20.5322ZM64.5146 20.5322C62.5017 20.5322 60.9921 18.9219 60.9921 17.0096C60.9921 15.0974 62.6024 13.4871 64.5146 13.4871C66.4268 13.4871 68.0371 15.0974 68.0371 17.0096C68.0371 18.9219 66.5274 20.5322 64.5146 20.5322ZM76.8937 20.5322C74.8808 20.5322 73.3712 18.9219 73.3712 17.0096C73.3712 15.0974 74.9815 13.4871 76.8937 13.4871C78.8059 13.4871 80.4162 15.0974 80.4162 17.0096C80.4162 18.9219 78.8059 20.5322 76.8937 20.5322ZM89.1722 20.5322C87.1593 20.5322 85.6497 18.9219 85.6497 17.0096C85.6497 15.0974 87.26 13.4871 89.1722 13.4871C91.0844 13.4871 92.6947 15.0974 92.6947 17.0096C92.6947 18.9219 91.1851 20.5322 89.1722 20.5322ZM101.551 20.5322C99.5385 20.5322 98.0288 18.9219 98.0288 17.0096C98.0288 15.0974 99.6391 13.4871 101.551 13.4871C103.564 13.4871 105.074 15.0974 105.074 17.0096C105.074 18.9219 103.464 20.5322 101.551 20.5322ZM113.83 20.5322C111.817 20.5322 110.307 18.9219 110.307 17.0096C110.307 15.0974 111.918 13.4871 113.83 13.4871C115.742 13.4871 117.352 15.0974 117.352 17.0096C117.352 18.9219 115.843 20.5322 113.83 20.5322ZM126.209 20.5322C124.196 20.5322 122.686 18.9219 122.686 17.0096C122.686 15.0974 124.297 13.4871 126.209 13.4871C128.121 13.4871 129.731 15.0974 129.731 17.0096C129.731 18.9219 128.121 20.5322 126.209 20.5322Z\",\n fill: \"white\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.1983 17.0087C14.1919 17.0087 13.3867 16.2036 13.3867 15.1971V1.81158C13.3867 0.805146 14.1919 0 15.1983 0C16.2048 0 17.0099 0.805146 17.0099 1.81158V15.0965C17.0099 16.2036 16.2048 17.0087 15.1983 17.0087Z\",\n fill: \"#52A9FF\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M27.5801 17.0087C26.5737 17.0087 25.7686 16.2036 25.7686 15.1971V1.81158C25.7686 0.805146 26.5737 0 27.5801 0C28.5866 0 29.3917 0.805146 29.3917 1.81158V15.0965C29.3917 16.2036 28.5866 17.0087 27.5801 17.0087Z\",\n fill: \"#52A9FF\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M39.8614 17.0087C38.855 17.0087 38.0498 16.2036 38.0498 15.1971V1.81158C38.0498 0.805146 38.855 0 39.8614 0C40.8678 0 41.673 0.805146 41.673 1.81158V15.0965C41.673 16.2036 40.8678 17.0087 39.8614 17.0087Z\",\n fill: \"#52A9FF\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M52.2364 17.0087C51.2299 17.0087 50.4248 16.2036 50.4248 15.1971V1.81158C50.4248 0.805146 51.2299 0 52.2364 0C53.2428 0 54.048 0.805146 54.048 1.81158V15.0965C54.048 16.2036 53.2428 17.0087 52.2364 17.0087Z\",\n fill: \"#52A9FF\"\n })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M64.5108 17.0087C63.5044 17.0087 62.6992 16.2036 62.6992 15.1971V1.81158C62.6992 0.805146 63.5044 0 64.5108 0C65.5173 0 66.3224 0.805146 66.3224 1.81158V15.0965C66.3224 16.2036 65.5173 17.0087 64.5108 17.0087Z\",\n fill: \"#52A9FF\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M76.8985 17.0087C75.892 17.0087 75.0869 16.2036 75.0869 15.1971V1.81158C75.0869 0.805146 75.892 0 76.8985 0C77.9049 0 78.7101 0.805146 78.7101 1.81158V15.0965C78.7101 16.2036 77.9049 17.0087 76.8985 17.0087Z\",\n fill: \"#52A9FF\"\n })), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M89.1739 17.0087C88.1675 17.0087 87.3623 16.2036 87.3623 15.1971V1.81158C87.3623 0.805146 88.1675 0 89.1739 0C90.1803 0 90.9855 0.805146 90.9855 1.81158V15.0965C90.9855 16.2036 90.1803 17.0087 89.1739 17.0087Z\",\n fill: \"#52A9FF\"\n })), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M101.549 17.0087C100.542 17.0087 99.7373 16.2036 99.7373 15.1971V1.81158C99.7373 0.805146 100.542 0 101.549 0C102.555 0 103.36 0.805146 103.36 1.81158V15.0965C103.36 16.2036 102.555 17.0087 101.549 17.0087Z\",\n fill: \"#52A9FF\"\n })), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M113.83 17.0087C112.824 17.0087 112.019 16.2036 112.019 15.1971V1.81158C112.019 0.805146 112.824 0 113.83 0C114.837 0 115.642 0.805146 115.642 1.81158V15.0965C115.642 16.2036 114.837 17.0087 113.83 17.0087Z\",\n fill: \"#52A9FF\"\n })), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M126.212 17.0087C125.206 17.0087 124.4 16.2036 124.4 15.1971V1.81158C124.4 0.805146 125.206 0 126.212 0C127.218 0 128.024 0.805146 128.024 1.81158V15.0965C128.024 16.2036 127.218 17.0087 126.212 17.0087Z\",\n fill: \"#52A9FF\"\n })), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M167.269 94.4062H153.179V200.082H167.269V94.4062Z\",\n fill: \"#FF849A\"\n })), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M163.242 94.4062H157.203V200.082H163.242V94.4062Z\",\n fill: \"#FFB7C4\"\n })), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M160.224 71.3594L153.179 94.4067H167.269L160.224 71.3594Z\",\n fill: \"white\"\n })), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M160.225 71.3594L158.011 78.3038H162.338L160.225 71.3594Z\",\n fill: \"#7A7D87\"\n })), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M98.5298 86.2539L39.4521 96.6202\",\n stroke: \"#7A7D87\",\n strokeWidth: 2,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\"\n })), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M101.953 105.883L42.9756 116.35\",\n stroke: \"#7A7D87\",\n strokeWidth: 2,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\"\n })), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M55.6572 73.4648L66.1242 132.542\",\n stroke: \"#7A7D87\",\n strokeWidth: 2,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\"\n })), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M75.3877 70.0469L85.754 129.024\",\n stroke: \"#7A7D87\",\n strokeWidth: 2,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\"\n })), _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M40.8613 80.3125L54.3475 89.773\",\n stroke: \"#7A7D87\",\n strokeWidth: 2,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\"\n })), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M52.3335 78.3008L42.873 91.787\",\n stroke: \"#7A7D87\",\n strokeWidth: 2,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\"\n })), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M60.4844 76.8906L73.9706 86.3511\",\n stroke: \"#7A7D87\",\n strokeWidth: 2,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\"\n })), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M71.9566 74.8789L62.4961 88.3651\",\n stroke: \"#7A7D87\",\n strokeWidth: 2,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\"\n })), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M87.1533 112.723L100.539 122.183\",\n stroke: \"#7A7D87\",\n strokeWidth: 2,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\"\n })), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M98.5249 110.711L89.165 124.197\",\n stroke: \"#7A7D87\",\n strokeWidth: 2,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\"\n })), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M71.7856 107.201C74.9605 106.641 77.0649 103.525 76.4859 100.24C75.907 96.9561 72.8639 94.7473 69.689 95.307C66.5141 95.8666 64.4098 98.9828 64.9887 102.267C65.5677 105.551 68.6108 107.76 71.7856 107.201Z\",\n stroke: \"#7A7D87\",\n strokeWidth: 2,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\"\n })), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M75.2202 126.935C78.3951 126.375 80.4994 123.259 79.9205 119.975C79.3415 116.69 76.2985 114.482 73.1236 115.041C69.9487 115.601 67.8443 118.717 68.4233 122.002C69.0023 125.286 72.0454 127.495 75.2202 126.935Z\",\n stroke: \"#7A7D87\",\n strokeWidth: 2,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgEmptyListIllu);\nexport default __webpack_public_path__ + \"static/media/emptyListIllu.5982b0a5.svg\";\nexport { ForwardRef as ReactComponent };","import SvgIcon from \"components/SvgIcon/SvgIcon\"\r\nimport { useSelector } from \"react-redux\"\r\nimport MagicButton from \"components/MagicButton/MagicButtonV2\"\r\nimport { useDispatch } from \"react-redux\"\r\nimport \"./DeliveryNotificationCard.scss\"\r\nimport BigModal from \"components/_modals/BigModal\"\r\nimport { shoppingCartSelector } from \"store/selectors/dataView/dataView.productsListFinal.selector\"\r\nimport { useState } from \"react\"\r\nimport { changeDeliveryAddressInShop } from \"store/modules/shop\"\r\nimport { getCartDeliveryAddress } from \"store/justActions/miscApiInteractions\"\r\nimport \"views/shoppingCart/index.scss\"\r\nimport { useEffect } from \"react\"\r\nimport { Lang, lang, Translate, withLocalize } from \"components/Lang/Lang\"\r\nfunction DeliveryNotificationCard(props) {\r\n const [selectedDeliveryAddress, setSelectedDeliveryAddress] = useState()\r\n const [selectedDeliveryAddressName, setSelectedDeliveryAddressName] =\r\n useState()\r\n let final\r\n\r\n const crtFormItem = useSelector((state) => state?.page?.crtFormItem)\r\n const { cartData, addressList } = useSelector((state) =>\r\n shoppingCartSelector(state)\r\n )\r\n const pageModal = useSelector((state) => state.page?.modal)\r\n const productCount = useSelector(\r\n (state) => state.shop?.cartData?.productCount\r\n )\r\n const finalDeliveryAddress = useSelector(\r\n (state) => state.backData?.dictionary?.selectedDeliveryAddressName\r\n )\r\n const userPermissions = useSelector(\r\n (state) => state.auth?.userData?.role?.permissions\r\n )\r\n const items = useSelector((state) => state?.dataView?.items)\r\n const lof = props.watch(\"allClientList\")\r\n const isDisabled = userPermissions?.includes?.(\"CLIENT_CHANGE_WRITE\")\r\n ? lof === \"\"\r\n : false\r\n useEffect(() => {\r\n if (\r\n pageModal === \"choose-address\" &&\r\n !userPermissions?.includes?.(\"CLIENT_CHANGE_WRITE\")\r\n )\r\n dispatch(getCartDeliveryAddress())\r\n }, [pageModal])\r\n\r\n const dispatch = useDispatch()\r\n\r\n let activeAddress = crtFormItem?.addressList?.filter?.(\r\n (element) => element?.id === crtFormItem?.defaultAddressId\r\n )\r\n\r\n if (!activeAddress) return null\r\n\r\n if (finalDeliveryAddress) {\r\n final = finalDeliveryAddress\r\n } else {\r\n final = activeAddress?.[0]?.displayAddress\r\n }\r\n\r\n const helper = (id, displayAddress) => {\r\n setSelectedDeliveryAddress(id)\r\n setSelectedDeliveryAddressName(displayAddress)\r\n }\r\n\r\n const deliveryModalAddressCard = (item, index) => (\r\n \r\n index !== undefined ? helper(item?.id, item?.displayAddress) : undefined\r\n }\r\n >\r\n
\r\n {item?.name ? item?.name : \"-\"}\r\n
\r\n\r\n
\r\n {item?.displayAddress ? item?.displayAddress : \"-\"}\r\n
\r\n
\r\n )\r\n\r\n const addressSaveAction = () => {\r\n dispatch(\r\n changeDeliveryAddressInShop(\r\n selectedDeliveryAddress || cartData?.deliveryAddressId,\r\n selectedDeliveryAddressName\r\n )\r\n )\r\n }\r\n\r\n const chooseDeliveryModal = (\r\n }\r\n saveAction={addressSaveAction}\r\n >\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n {addressList?.length\r\n ? addressList?.map?.((item, i) => deliveryModalAddressCard(item, i))\r\n : []?.map?.((item, i) => deliveryModalAddressCard(item, i))}\r\n \r\n )\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n {props?.showLongText ? (\r\n <>\r\n {userPermissions?.includes?.(\"CLIENT_CHANGE_WRITE\") &&\r\n items?.length === 0 ? (\r\n \r\n \r\n \r\n ) : (\r\n <>\r\n \r\n {\" \"}\r\n \r\n {final ?? \"\"}. \r\n \r\n {\" \"}\r\n \r\n \r\n {\" \"}\r\n \r\n >\r\n )}\r\n >\r\n ) : (\r\n \r\n {\" \"}\r\n \r\n )}\r\n
\r\n
\r\n
= 1 ? (\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n showModal=\"choose-address\"\r\n disabled={\r\n productCount >= 1 ||\r\n addressList?.length <= 1 ||\r\n isDisabled ||\r\n items?.length === 0\r\n }\r\n />\r\n {chooseDeliveryModal}\r\n \r\n )\r\n}\r\n\r\nexport default DeliveryNotificationCard\r\n","import React, { useEffect } from 'react'\r\nimport { useRef } from \"react\"\r\nimport \"./Pagination.scss\"\r\nimport useQueryStringFilters from \"utils/useQueryStringFilters\"\r\nimport { Link, useHistory } from \"react-router-dom\"\r\nimport useWindowSize from \"utils/useWindowsSize\"\r\nimport { useSelector } from \"react-redux\"\r\n\r\nconst setPageInUrl = (page) => {\r\n let href = window.location.href\r\n let url = new URL(href)\r\n url.searchParams.set(\"page\", page)\r\n return url.href?.replace?.(url.origin, \"\")\r\n}\r\n\r\n\r\nconst buttonSizeInPixels = 48 //expressed in pixels. EX: 48px\r\n\r\nfunction Pagination({parentRef}) {\r\n\r\n const { page: activePage } = useQueryStringFilters()\r\n // const history = useHistory()\r\n const { width } = useWindowSize(parentRef)\r\n\r\n const totalNrResults = useSelector(state => state?.dataView?.count || 0)\r\n const nrProductsPerPage = useSelector(state => state?.dataView?.items?.pageSize || 25)\r\n const noOfPages = Math.ceil(totalNrResults / nrProductsPerPage)\r\n const maxButtons = Math.floor(width / buttonSizeInPixels) - 4\r\n\r\n\r\n // useEffect(() => {\r\n // // When the page changes, scroll to top\r\n // const unlisten = history.listen(tryToScrollToTop)\r\n // return unlisten\r\n // }, [activePage])\r\n\r\n\r\n const pageItemProps = (page) => ({\r\n style: {\r\n width: buttonSizeInPixels,\r\n height: buttonSizeInPixels\r\n },\r\n className: `page-item ${page === activePage ? \"active\" : \"\"}`,\r\n to: setPageInUrl(page)\r\n })\r\n\r\n\r\n const fistButtons = [\r\n \r\n 1\r\n ,\r\n\r\n // UNCOMMENT THIS IF BUTTON FOR PAGE 2 IS ALSO NEEDED:\r\n // \r\n // 2\r\n // ,\r\n\r\n {dotsSvg}
\r\n ]\r\n\r\n const lastButtons = [\r\n {dotsSvg}
,\r\n \r\n // UNCOMMENT THIS IF BUTTON FOR PAGE (n-1) IS ALSO NEEDED:\r\n // \r\n // {noOfPages - 1}\r\n // ,\r\n\r\n \r\n {noOfPages}\r\n \r\n ]\r\n\r\n let buttons\r\n\r\n const buttonsArrayGenerator = (startIndex, length) => {\r\n\r\n const validStartIndex = startIndex > 1 ? startIndex : 1\r\n\r\n return (\r\n Array.from({ length }, (_, k) => k + validStartIndex)?.map?.((page) => (\r\n \r\n {page}\r\n \r\n ))\r\n )\r\n }\r\n \r\n \r\n \r\n \r\n\r\n const doTheyAllFit = noOfPages <= maxButtons\r\n\r\n if (doTheyAllFit) {\r\n\r\n // they all fit case:\r\n // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20\r\n const startIndex = 1\r\n const length = noOfPages\r\n buttons = buttonsArrayGenerator(startIndex, length)\r\n\r\n } else if (activePage <= maxButtons - 4) {\r\n \r\n // trim the end case:\r\n // 1 2 3 4 5 6 7 8 9 10 ... 20\r\n // render [0, maxButtons-2] 1 static\r\n const startIndex = 1\r\n const length = maxButtons - 2\r\n\r\n buttons = buttonsArrayGenerator(startIndex, length)\r\n buttons?.push?.(...lastButtons)\r\n\r\n } else if (activePage >= noOfPages - maxButtons + 4) {\r\n \r\n // trim the beginning case:\r\n // 1 2 ... 11 12 13 14 15 16 17 18 19 20\r\n // render 1 static [maxButtons-2, total]\r\n buttons = [...fistButtons || []]\r\n const startIndex = noOfPages - maxButtons + 3\r\n const length = maxButtons - 2\r\n buttons?.push?.(...buttonsArrayGenerator(startIndex, length))\r\n\r\n } else {\r\n \r\n // trim both sides case:\r\n // 1 2 ... 6 7 8 9 10 11 12 13 14 15 ... 19 20\r\n // render 1 static middleButtons 1 static\r\n buttons = [...fistButtons || []]\r\n const length = maxButtons - 2\r\n const startIndex = activePage - Math.floor((maxButtons - 2) / 2)\r\n buttons?.push?.(...buttonsArrayGenerator(startIndex, length))\r\n buttons?.push?.(...lastButtons)\r\n\r\n }\r\n\r\n\r\n const isCurrentPageFirst = activePage === 1\r\n const isCurrentPageLast = activePage === noOfPages\r\n const leftClass = `page-item ${isCurrentPageFirst ? \"disabled\" : \"\"}`\r\n const rightClass = `page-item ${isCurrentPageLast ? \"disabled\" : \"\"}`\r\n\r\n if(!totalNrResults) return null\r\n\r\n const wrapperClassName = `pagination-wrapper ${doTheyAllFit ? 'doTheyAllFit' : ''}`\r\n\r\n\r\n\r\n return (\r\n \r\n
\r\n \r\n {doubleLeftSvg}\r\n \r\n \r\n {leftSvg}\r\n \r\n\r\n {\r\n buttons?.map?.((button, index) => (\r\n \r\n {button}\r\n \r\n )\r\n )\r\n }\r\n\r\n \r\n {leftSvg}\r\n \r\n \r\n {doubleLeftSvg}\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default Pagination\r\n\r\n\r\n// const tryToScrollToTop = () => {\r\n// const wrapperElement = document.querySelector('.pageContent')\r\n \r\n// if(!wrapperElement){\r\n// console.warn('Could not scroll to top because .pageContent is not found.')\r\n// return \r\n// }\r\n\r\n// wrapperElement?.scrollTo?.({\r\n// top: 0,\r\n// behavior: 'smooth'\r\n// })\r\n// }\r\n\r\n\r\n\r\nconst doubleLeftSvg = (\r\n \r\n \r\n \r\n \r\n)\r\n\r\nconst leftSvg = (\r\n \r\n \r\n \r\n)\r\n\r\nconst dotsSvg = (\r\n \r\n \r\n \r\n)\r\n","import MagicButton from \"components/MagicButton/MagicButtonV2\"\r\nimport SvgIcon from \"components/SvgIcon/SvgIcon\"\r\nimport { useDispatch, useSelector } from \"react-redux\"\r\nimport { setPageModal } from \"store/modules/page\"\r\nimport BigModal from \"components/_modals/BigModal\"\r\nimport { isCampaignActive } from \"utils/dateUtils\"\r\n\r\nconst defaultMessage = \"Esti sigur ca vrei sa finalizezi aceasta actiune?\"\r\nfunction ConfirmActionModal(props) {\r\n const dispatch = useDispatch()\r\n const actionToConfirm = useSelector((state) => state.page?.actionToConfirm)\r\n const modalData = useSelector((state) => state.page?.modalData)\r\n const {\r\n message,\r\n campaignMessage,\r\n svg,\r\n svgName,\r\n closeAction,\r\n primaryLabel,\r\n primaryAction,\r\n secondaryLabel,\r\n secondaryAction,\r\n campaignCta,\r\n campaignButtonLabel\r\n } = modalData ?? {}\r\n const isCampaignPeriod = isCampaignActive()\r\n const onClose = () => {\r\n dispatch(setPageModal())\r\n if (closeAction) closeAction()\r\n if (secondaryAction) secondaryAction()\r\n }\r\n const onConfirm = () => {\r\n if (actionToConfirm) {\r\n actionToConfirm()\r\n }\r\n if (primaryAction) {\r\n primaryAction()\r\n }\r\n dispatch(setPageModal())\r\n }\r\n return (\r\n setPageModal()}\r\n >\r\n {isCampaignPeriod &&\r\n \r\n }\r\n {svg ?? (svgName ? : defaultIllustration)}\r\n {message ?? defaultMessage} \r\n \r\n \r\n {campaignCta && isCampaignPeriod &&\r\n {campaignCta(); dispatch(setPageModal())}}\r\n />\r\n }\r\n \r\n \r\n
\r\n \r\n )\r\n}\r\n\r\nexport default ConfirmActionModal\r\n\r\n/* const defaultIllustration = \r\n\r\n\r\n */\r\n\r\nconst defaultIllustration = (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n)\r\n","export default __webpack_public_path__ + \"static/media/SearchNoResults.6c5a861c.svg\";","import searchnoresults from \"assets/iconsK3/SearchNoResults.svg\"\r\nimport \"./NoSearchResults.scss\"\r\nimport { Lang, lang, Translate, withLocalize } from \"components/Lang/Lang\"\r\nconst NoSearchResults = (props) => {\r\n const { isOnBehalf, hasAlreadySelectedOnBehalfCompany } = props\r\n const translate = props.translate\r\n //const text = \"We searched everywhere... However, we could not find anything based on your search criteria. \"\r\n const text = translate?.(\"productlist.Search\")\r\n const onBehalfText = translate?.(\"productlist.Search2\")\r\n return (\r\n \r\n
\r\n
\r\n
e?.preventDefault?.()}\r\n alt=\"logo\"\r\n src={searchnoresults}\r\n />\r\n
\r\n {\" \"}\r\n {(isOnBehalf && !hasAlreadySelectedOnBehalfCompany) ? onBehalfText : text}{\" \"}\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default withLocalize(NoSearchResults)\r\n","import { createSelector } from \"reselect\"\r\n\r\nconst categoryFilter = (state) =>\r\n state?.dataView?.selectedFilters?.[\"FLT-CATEG001\"]\r\nconst megaFilter = (state) => state?.dataView?.selectedFilters?.[\"FLT-CATMEGA1\"]\r\nconst categoryValues = (state) => state?.backData?.productCategory\r\n\r\nexport const shopBreadcrumbsSelector = createSelector(\r\n megaFilter,\r\n categoryFilter,\r\n categoryValues,\r\n (megaFilter, categoryFilter, categoryValues) => {\r\n let selectedFilterID\r\n const categoryNames = []\r\n let categoryTreeCode\r\n let treeCodeValues = []\r\n\r\n let searchInTree = categoryValues\r\n let counter = 1\r\n // the order of filters is as it is, because in the java search stuff method\r\n // before calling api check if there is mega and only after uses small cat filter\r\n // QUESTION: should we unify these two filters in one category filter ?\r\n if (megaFilter) {\r\n selectedFilterID = \"FLT-CATMEGA1\"\r\n categoryTreeCode = megaFilter?.[0]\r\n treeCodeValues = megaFilter?.[0]\r\n ?.split?.(\"#\")\r\n ?.slice?.(1)\r\n ?.map?.((v) => (v = `#${v}`))\r\n populateCategoryNames(\r\n treeCodeValues,\r\n counter,\r\n searchInTree,\r\n categoryNames\r\n )\r\n } else if (categoryFilter) {\r\n selectedFilterID = \"FLT-CATEG001\"\r\n categoryTreeCode = categoryFilter?.[0]\r\n treeCodeValues = categoryFilter?.[0]\r\n ?.split?.(\"#\")\r\n ?.slice?.(1)\r\n ?.map?.((v) => (v = `#${v}`))\r\n populateCategoryNames(\r\n treeCodeValues,\r\n counter,\r\n searchInTree,\r\n categoryNames\r\n )\r\n }\r\n\r\n return {\r\n selectedFilterID,\r\n categoryNames: [\"Toate produsele\", ...categoryNames || []],\r\n //categoryTreeCode,\r\n treeCodeValues\r\n }\r\n }\r\n)\r\n\r\nconst populateCategoryNames = (\r\n treeCodeValues,\r\n counter,\r\n searchInTree,\r\n categoryNames\r\n) => {\r\n while (treeCodeValues?.[counter - 1]) {\r\n let newSearchInTree = searchInTree?.filter?.(\r\n (tree) =>\r\n tree.treeCode === treeCodeValues?.slice?.(0, counter)?.join?.(\"\")\r\n )\r\n categoryNames?.push?.(\r\n `${newSearchInTree?.[0]?.name?.[0]?.toUpperCase?.()}${newSearchInTree?.[0]?.name\r\n ?.slice?.(1)\r\n ?.toLowerCase?.()}`\r\n )\r\n counter += 1\r\n searchInTree = newSearchInTree?.[0]?.childList?.filter?.(\r\n (ch) => ch.treeCode === treeCodeValues?.slice?.(0, counter)?.join?.(\"\")\r\n )\r\n }\r\n}\r\n","import React, { useEffect } from \"react\"\r\nimport NextIcon from \"../../assets/BreadCrumbs/NextIcon.svg\"\r\nimport MB from \"../MB/MB\"\r\nimport { useSelector, useDispatch } from \"react-redux\"\r\nimport { shopBreadcrumbsSelector } from \"./shopBreadCrumbsSelector\"\r\nimport { setFilterSelection } from \"store/modules/dataView\"\r\nimport useQueryStringFilters from \"utils/useQueryStringFilters\"\r\nimport { defaultPageTitle } from \"components/HelmetMetaData\"\r\nimport { clearPageSeo, setPageSeo } from \"store/modules/page\"\r\nimport { toTitleCase } from \"utils/stringUtils\"\r\n//import { loadViewData } from \"store/modules/dataView/dataView-dataLoader\";\r\n\r\nconst categFilterId = \"FLT-CATEG001\"\r\nconst brandFilterKey = 'FLT-SMaaaa00'\r\n\r\n//const mockData = [\"Toate Produsele\", \"Categoria A\", \"Sub Categoria B\"];\r\n//const data = mockData;\r\nexport default function ShopBreadCrumbs() {\r\n const cateogries = useSelector((state) => state.backData?.productCategory)\r\n\r\n // const {selectedFilterID,\r\n // categoryNames,\r\n // //categoryTreeCode,\r\n // treeCodeValues} = useSelector(state => shopBreadcrumbsSelector(state))\r\n //console.log(\"BreadCRBS ids names tree values\", selectedFilterID, categoryNames, categoryTreeCode, treeCodeValues )\r\n const dispatch = useDispatch()\r\n const { filters, setFilter, clearFiler, searchString } = useQueryStringFilters()\r\n \r\n\r\n const activeBrandNames = filters?.[brandFilterKey]\r\n const qsSelection = filters?.[categFilterId]?.[0]\r\n const searchStringTitleCase = toTitleCase(searchString)\r\n\r\n\r\n\r\n //map the selected tree code to an array of selected category / sub category/ etc for display purpose\r\n // better to keep th original data structure then using 2 corelated arrays.\r\n const categoriesFinder = (treeCode) => {\r\n const result = []\r\n const numberOfCategories = treeCode?.split?.(\"#\")?.length - 1\r\n let children = cateogries\r\n let category = children?.find?.((c) => treeCode?.includes?.(c.treeCode))\r\n // debugger\r\n if (category) {\r\n result?.push?.(category)\r\n children = category?.childList\r\n if (children?.length > 0 && numberOfCategories > 1) {\r\n category = children?.find?.((c) => treeCode?.includes?.(c.treeCode))\r\n if (category) result?.push?.(category)\r\n children = category?.childList\r\n if (children?.length > 0 && numberOfCategories > 2) {\r\n category = children?.find?.((c) => treeCode?.includes?.(c.treeCode))\r\n if (category) result?.push?.(category)\r\n children = category?.childList\r\n if (children?.length > 0 && numberOfCategories > 3) {\r\n category = children?.find?.((c) => treeCode?.includes?.(c.treeCode))\r\n if (category) result?.push?.(category)\r\n }\r\n }\r\n }\r\n }\r\n return result\r\n }\r\n\r\n\r\n const foundCategories = categoriesFinder(qsSelection)\r\n\r\n const categoriesData = [\r\n { name: \"Toate produsele\" },\r\n ...(foundCategories || []), \r\n ]\r\n\r\n\r\n useEffect(() => {\r\n /** Set page title and meta tags according to active filters \r\n * (categories and brands) and the (text-based) search-term . */\r\n const activeCategoryNames = foundCategories?.map?.(category => category?.name)\r\n\r\n const titleParts = [\r\n ...(activeCategoryNames || []),\r\n ...(activeBrandNames || []),\r\n ...(searchStringTitleCase ? [searchStringTitleCase] : [])\r\n ]\r\n\r\n const jointTitle = titleParts?.join?.(' | ') || 'Toate produsele'\r\n\r\n const pageTitle = `${defaultPageTitle} - ${jointTitle}`\r\n\r\n dispatch(setPageSeo({ \r\n pageTitle, \r\n metaTags: {\r\n 'og:title': pageTitle,\r\n },\r\n }))\r\n \r\n // Clear title and meta tags when leaving the page:\r\n return () => dispatch(clearPageSeo())\r\n\r\n }, [categoriesData])\r\n \r\n // if(!treeCodeValues?.length) return null\r\n if (!qsSelection) return null\r\n\r\n return (\r\n \r\n {categoriesData?.map?.((item, index) => {\r\n const lastOne = index + 1 === categoriesData?.length\r\n return !lastOne ? (\r\n
\r\n {\r\n if (index === 0) {\r\n // dispatch(setFilterSelection())\r\n clearFiler(categFilterId)\r\n dispatch(setFilterSelection(\"FLT-sort00p1\", [\"ranking|true\"]))\r\n //loadViewData()\r\n } else {\r\n // const dispatchTreeCode = treeCodeValues?.slice?.(0,index)?.join?.(\"\")\r\n // dispatch(setFilterSelection(selectedFilterID, [dispatchTreeCode]))\r\n setFilter(categFilterId, [item?.treeCode])\r\n }\r\n }}\r\n >\r\n {item?.name}\r\n
\r\n e?.preventDefault?.()}\r\n className=\"mx2\"\r\n src={NextIcon}\r\n alt=\"next\"\r\n />\r\n \r\n ) : (\r\n
\r\n {item?.name}\r\n
\r\n )\r\n })}\r\n
\r\n )\r\n}\r\n","import { useSelector } from \"react-redux\"\r\nimport MagicButton from \"components/MagicButton/MagicButtonV2\"\r\nimport { useDispatch } from \"react-redux\"\r\nimport \"views/shoppingCart/index.scss\"\r\nimport { useEffect } from \"react\"\r\nimport CustomSelect from \"components/CustomSelect\"\r\nimport \"./OnBehalf.scss\"\r\n//import useMagicForm from 'utils/useMagicForm';\r\nimport { loadItem } from \"store/justActions/loadApiIems\"\r\nimport { apiAction } from \"store/middleware/api\"\r\nimport { loadViewData } from \"store/modules/dataView/dataView-dataLoader\"\r\nimport { getCartDeliveryAddress } from \"store/justActions/miscApiInteractions\"\r\nimport { changeDeliveryAddressInShop } from \"store/modules/shop\"\r\nimport { showMagicToaster } from \"utils/MagicToasterCall\"\r\nimport { setDictionary } from \"store/modules/backData\"\r\nimport { printError } from \"utils/printError\"\r\nimport { setOnBehalfIdInState } from \"store/modules/page\"\r\n\r\nconst changeClient = (clientId) => {\r\n return apiAction({\r\n endPoint: `/organization/webshop-client/client-change/${clientId}`,\r\n method: \"POST\",\r\n data: {},\r\n onSuccess: (data, dispatch) => {\r\n let activeAddress = data?.addressList?.filter?.(\r\n (element) => element?.id === data?.defaultAddressId\r\n )\r\n dispatch(setOnBehalfIdInState(clientId))\r\n dispatch(\r\n changeDeliveryAddressInShop(\r\n data?.defaultAddressId,\r\n activeAddress?.[0]?.displayAddress\r\n )\r\n )\r\n //dispatch(setDictionary({selectedCompany:data?.name}))\r\n showMagicToaster({\r\n title: `Compania ${data?.name} a fost selectată cu succes.`\r\n })\r\n return {\r\n type: \"a\"\r\n }\r\n },\r\n onFailure: (error, dispatch) => {\r\n printError(\"changeClient()\", error)\r\n showMagicToaster({\r\n title: \"A aparut o eroare la salvarea datelor\",\r\n subtitle: \"E201\",\r\n type: \"error\"\r\n })\r\n return {\r\n type: \"a\"\r\n }\r\n }\r\n })\r\n}\r\n\r\nconst OnBehalf = (props) => {\r\n //const { submitForm, disableSubmit, getProps, setEdit, errors, watch, reset, cancelEdit, isEdit } = useMagicForm({ formName: \"OnBehalf\" });\r\n const dispatch = useDispatch()\r\n\r\n const crtFormItem = useSelector((state) => state?.page?.crtFormItem)\r\n const productCount = useSelector(\r\n (state) => state.shop?.cartData?.productCount\r\n )\r\n //const selectedCompany = useSelector(state => state.backData?.dictionary?.selectedCompany)\r\n //const lof = watch('allClientList')\r\n const lof = props.watch(\"allClientList\")\r\n\r\n useEffect(() => {\r\n dispatch(loadItem(\"organization/webshop-client/my-options\", \"\", true, true))\r\n // if(selectedCompany) {\r\n // document.getElementsByClassName('crs__placeholder css-1wa3eu0-placeholder')[0].innerText = 'dadas'\r\n // }\r\n }, [])\r\n\r\n useEffect(() => {\r\n dispatch(getCartDeliveryAddress(lof))\r\n }, [lof])\r\n\r\n const helper = () => {\r\n dispatch(changeClient(lof))\r\n setTimeout(() => dispatch(loadViewData({ reload: true })), 500)\r\n }\r\n\r\n return (\r\n \r\n 0}\r\n options={crtFormItem?.allClientList}\r\n />\r\n 0}\r\n />\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default OnBehalf\r\n","import { useEffect } from \"react\"\r\n// import { setFilterSelection, setMultipleFilterSelection } from \"store/modules/dataView\"\r\nimport useQueryStringFilters from \"utils/useQueryStringFilters\"\r\n\r\nconst { useSelector } = require(\"react-redux\")\r\n\r\nconst useCategoryUrl = (props) => {\r\n let { customUrl } = props ?? {}\r\n // const dispatch = useDispatch()\r\n const { setFilter } = useQueryStringFilters()\r\n customUrl = processName(customUrl)\r\n const selectedFilter = []\r\n const cateogries = useSelector((state) => state.backData?.productCategory)\r\n\r\n useEffect(() => {\r\n if (customUrl && cateogries?.length > 0) {\r\n // const topLevelCategories = cateogries?.map?.(item => processName(item?.name))\r\n //for item in topLevelCategories\r\n const [topCategory, newUrl] = findCategory(cateogries, customUrl) ?? []\r\n customUrl = newUrl\r\n if (topCategory) {\r\n selectedFilter?.push?.(topCategory)\r\n const [secondCategory, newUrl] =\r\n findCategory(topCategory.childList, customUrl) ?? []\r\n customUrl = newUrl\r\n if (secondCategory) {\r\n selectedFilter?.push?.(secondCategory)\r\n const [thirdCategory] =\r\n findCategory(secondCategory.childList, customUrl) ?? []\r\n if (thirdCategory) selectedFilter?.push?.(thirdCategory)\r\n }\r\n }\r\n\r\n if (selectedFilter?.length > 0) {\r\n const filterValue = selectedFilter?.slice?.(-1)?.[0]?.treeCode\r\n // debugger\r\n // dispatch(setFilterSelection(\"FLT-CATEG001\", filterValue ))\r\n setFilter(\"FLT-CATEG001\", [filterValue])\r\n }\r\n }\r\n }, [cateogries])\r\n}\r\n\r\nconst findCategory = (categories, customUrl) => {\r\n for (const item of categories) {\r\n const normalizedName = processName(item?.name)\r\n if (customUrl?.includes?.(normalizedName)) {\r\n customUrl = customUrl?.replace?.(`${normalizedName}-`, \"\")\r\n return [item, customUrl]\r\n }\r\n }\r\n}\r\n\r\nconst processName = (input) =>\r\n input\r\n ?.toLowerCase?.()\r\n ?.replace?.(/,/g, \" \")\r\n ?.replace?.(/ {2}/g, \" \")\r\n ?.replace?.(/ /g, \"-\")\r\n\r\nexport default useCategoryUrl\r\n\r\n// Local\r\n// this: undefined\r\n// cateogries: Array(6)\r\n// 0:\r\n// childList: (3) [{…}, {…}, {…}]\r\n// id: \"ZyqY8Z\"\r\n// name: \"AC, VENTILATIE\"\r\n// treeCode: \"#27398\"\r\n","import React, { useEffect, useState, useRef } from \"react\"\r\n// import LongProductCard from \"components/LongProductCard\"\r\n// import MagicButton from \"components/MagicButton/MagicButtonV2\"\r\nimport ProductCard from \"components/ProductCard\"\r\nimport \"./index.scss\"\r\nimport { useDispatch, useSelector } from \"react-redux\"\r\nimport {\r\n clearDataViewItems,\r\n deleteSavedFilter,\r\n // setDataItems,\r\n setDataViewId,\r\n // setDVsearchString,\r\n setFilterSelection\r\n} from \"store/modules/dataView\"\r\nimport VerticalFilters from \"components/VerticalFilters/VerticalFilters\"\r\nimport { selectProductListDataV2 } from \"store/selectors/dataView/dataView.productsListFinal.selector\"\r\nimport { loadProductCategories } from \"store/modules/backData\"\r\n// import { loadViewData } from \"store/modules/dataView/dataView-dataLoader\"\r\nimport HorizontalFilterUniprest from \"views/dev/select/HorizontalFilterUniprest\"\r\nimport { setScrollPostion, setPageYScrollPosition, setPageModal, clearAllLoadingIndicators } from \"store/modules/page\"\r\nimport { getCart } from \"store/modules/shop\"\r\nimport DeliveryNotificationCard from \"views/productsList/DeliveryNotificationCard\"\r\nimport { loadOrganizationLists } from \"store/justActions/lists\"\r\nimport { useUserInfo } from \"utils/useUserInfo\"\r\nimport AddToListModal from \"components/ProductCard/AddToListModal\"\r\nimport NoSearchResults from \"views/productsList/NoSearchResults\"\r\nimport ShopBreadCrumbs from \"components/BreadCrumbs/ShopBreadCrumbs\"\r\nimport { loadItem } from \"store/justActions/loadApiIems\"\r\nimport LoadingScreen from \"components/LoadingScreen/LoadingScreen\"\r\nimport useScrollPosition from \"utils/useScrollPosition\"\r\nimport PriceChangedModal from \"components/PriceChangedModal/PriceChangedModal\"\r\nimport { round } from \"utils/serviceFunctions\"\r\n// import { numberFormatter } from \"utils/stringUtils\"\r\nimport { deleteCrtListItem } from \"store/modules/page\"\r\n// import {\r\n// deleteProductFromList,\r\n// updateListQuantityAction\r\n// } from \"store/justActions/lists\"\r\n// import FormatComponent from \"components/FormatComponent/FormatComponent\"\r\n// import { saveStockRequest, savePriceRequest } from \"store/modules/guest.actions\"\r\n// import { setLastAddedToCart } from \"store/modules/dataView\"\r\nimport BigModal from \"components/_modals/BigModal\"\r\nimport CartProductCard from \"views/shoppingCart/cartProductCard\"\r\n// import { loadAccessories } from \"store/justActions/loadApiIems\"\r\nimport { addArrayToBasket } from \"store/modules/shop\"\r\nimport SvgIcon from \"components/SvgIcon/SvgIcon\"\r\nimport useWindowSize from \"utils/useWindowsSize\"\r\nimport OnBehalf from \"views/productsList/OnBehalf\"\r\n//import EmptyState from \"views/guest/news/GuestCardsList\"\r\nimport useMagicForm from \"utils/useMagicForm\"\r\nimport { Lang, lang, Translate, withLocalize } from \"components/Lang/Lang\"\r\nimport useCategoryUrl from \"./useCategoryUrl\"\r\nimport BasketErrorModal from \"components/_modals/BasketErrorModal\"\r\nimport Pagination from \"components/Pagination/Pagination\"\r\nimport useIsLogged from \"utils/useIsLogged\"\r\nimport { getCartDeliveryAddress } from \"store/justActions/miscApiInteractions\"\r\nimport useQueryStringFilters, { urlFriendlyToSortBy } from \"utils/useQueryStringFilters\"\r\n\r\n// const clientTypes = [\"guest\", \"small\", \"reseller\", \"large\"]\r\n// const badgeTitles = [\r\n// \"PROMO\",\r\n// \"Deal of the day\",\r\n// \"Cel mai bun pret!\",\r\n// \"Recomandarea Expertului\"\r\n// ];\r\n\r\nconst filterIdsAuth = [\"FLT-CATMEGA1\", \"FLT-SEARCH01\", \"FLT-sort00p1\"]\r\n// const filterIdsAuth = [\"FLT-SEARCH01\", \"FLT-sort00p1\",\"FLT-sort0prc\", \"FLT-tipClient\" ]\r\nconst filterIdsGuest = [\"FLT-CATMEGA1\", \"FLT-SEARCH01\"]\r\nconst verticalFilterIds = [\"FLT-CATEG001\", \"FLT-SMaaaa00\"]\r\n// const verticalFilterIds= [ \"FLT-CATEG001\",\"FLT-RGaaaa00\", \"FLT-SMaaaa11\", 'FLT-SMaaaa00','FLT-5Saaaa00' ]\r\n\r\n\r\nconst ProductsList = (props) => {\r\n const customUrl = props?.match?.params?.customUrl\r\n const dispatch = useDispatch()\r\n const isLogged = useIsLogged()\r\n // const [listType, setListType] = useState(\"cards\");\r\n const priceChanged = useSelector(\r\n (state) => state?.backData?.dictionary?.priceChanged\r\n )\r\n const selectedFilters = useSelector(\r\n (state) => state?.dataView?.selectedFilters\r\n )\r\n const listType = useSelector((state) => state?.shop?.viewType)\r\n // const lastItemHint = useSelector((state) => state?.dataView?.lastItemHint)\r\n // const inputSearchString = window.location.search\r\n // ?.split?.(\"?\")[1]\r\n // ?.split?.(\"&\")\r\n // ?.find?.((item) => item?.includes?.(\"searchString=\"))\r\n // ?.split?.(\"=\")[1]\r\n // const filterId = window.location.search\r\n // ?.split?.(\"?\")[1]\r\n // ?.split?.(\"&\")\r\n // ?.find?.((item) => item?.includes?.(\"filterId=\"))\r\n // ?.split?.(\"=\")[1]\r\n // const filterSelection =\r\n // \"#\" +\r\n // window.location.search\r\n // ?.split?.(\"?\")[1]\r\n // ?.split?.(\"&\")\r\n // ?.find?.((item) => item?.includes?.(\"filterSelection=\"))\r\n // ?.split?.(\"=\")[1]\r\n // ?.split?.(\"-\")\r\n // ?.join?.(\"#\")\r\n // const brandId = window.location.search\r\n // ?.split?.(\"?\")[1]\r\n // ?.split?.(\"&\")\r\n // ?.find?.((item) => item?.includes?.(\"brandId=\"))\r\n // ?.split?.(\"=\")[1]\r\n // const brandSelection = window.location.search\r\n // ?.split?.(\"?\")[1]\r\n // ?.split?.(\"&\")\r\n // ?.find?.((item) => item?.includes?.(\"brandSelection=\"))\r\n // ?.split?.(\"=\")[1]\r\n // ?.split?.(\"%20\")\r\n // ?.join?.(\" \")\r\n\r\n // const [clientType, setClientType] = useState(0);\r\n\r\n const { products, count, isLoadable } = useSelector((state) =>//searchString\r\n selectProductListDataV2(state, props?.translate)\r\n )\r\n // const clientType = selectedFilters?.[\"FLT-tipClient\"]\r\n const { companyType } = useUserInfo()\r\n useCategoryUrl({ customUrl })\r\n\r\n const showSavedFilters = false && companyType !== \"GUEST\" //disable untill ready\r\n const horizontalFilter =\r\n companyType !== \"GUEST\" ? filterIdsAuth : filterIdsGuest\r\n\r\n const windowSize = useWindowSize()\r\n const pageContainerRef = useRef()\r\n const scrollContainerRef = useRef()\r\n const ref = useRef(null)\r\n // const storedScrollPosition = useSelector(\r\n // (state) => state?.page?.setScrollPosition\r\n // )\r\n const { page: activePage, filters, searchString, sortBy } = useQueryStringFilters()\r\n\r\n const userPermissions = useSelector(\r\n (state) => state.auth?.userData?.role?.permissions\r\n )\r\n const companyId = useSelector((state) => state?.user?.organizationId)\r\n const currentSearchString = useSelector(\r\n (state) => state?.dataView?.searchString\r\n )\r\n const accesoriesModalData = useSelector((state) => state?.page?.modalData)\r\n const crtList = useSelector((state) => state?.page?.crtList)\r\n // const [pageScroll, setPageScroll] = useState()\r\n // const [pageYPosition, setPageYPosition] = useState()\r\n const disableSave = companyType === \"GUEST\"\r\n\r\n\r\n useEffect(() => {\r\n const expectedDataViewId = isLogged ? \"java-product-client\" : \"notLogged-java-product-client\"\r\n dispatch(setDataViewId(expectedDataViewId))\r\n }, [isLogged])\r\n\r\n useEffect(() => {\r\n if(isLogged && companyId) {\r\n dispatch(loadItem( \"organization/webshop-client-productdetails\", companyId, true, true))\r\n }\r\n }, [isLogged, companyId])\r\n\r\n useEffect(() => {\r\n if(isLogged) {\r\n dispatch(getCart())\r\n dispatch(getCartDeliveryAddress())\r\n dispatch(loadOrganizationLists())\r\n dispatch(loadItem(\"organization/my-organization\", \"\", true, true))\r\n \r\n }\r\n // dispatch(getCart())\r\n // dispatch(getCartDeliveryAddress())\r\n dispatch(deleteSavedFilter())\r\n // dispatch(setDataItems(mockGoods));\r\n //dispatch(loadProductCategories())\r\n \r\n // if (inputSearchString)\r\n // dispatch(setDVsearchString(decodeURI(inputSearchString)))\r\n\r\n\r\n\r\n // Set the initial sortBy based on the url\r\n dispatch(setFilterSelection(\"FLT-sort00p1\", [urlFriendlyToSortBy(sortBy || \"ranking\")]))\r\n \r\n \r\n \r\n \r\n // // if (filterId && filterSelection) {\r\n // // dispatch(setFilterSelection(filterId, [filterSelection]))\r\n // // setTimeout(() => {\r\n // // dispatch(loadViewData({reload:true}))\r\n // // }, 200);\r\n // }\r\n // if (brandId && brandSelection) {\r\n // dispatch(setFilterSelection(brandId, [brandSelection]))\r\n // // setTimeout(() => {\r\n // // dispatch(loadViewData({reload:true}))\r\n // // }, 200);\r\n // }\r\n // // dispatch(searchStuff({ type: \"product/goods\"}))\r\n // setTimeout(() => {\r\n // dispatch(loadViewData({reload:true}))\r\n // }, 200);\r\n }, [isLogged])\r\n\r\n // useEffect(() => {\r\n // // setTimeout needed because loading the products takes a little while, so we want to scroll to the stored redux position only after the products are loaded\r\n // setTimeout(() => {\r\n // pageContainerRef.current?.parentElement?.parentElement?.scroll({\r\n // top: storedScrollPosition,\r\n // behavior: \"smooth\"\r\n // })\r\n // }, 20)\r\n // }, [storedScrollPosition, selectedFilters, searchString])\r\n // useEffect(() => {\r\n // dispatch(setPageYScrollPosition(pageYPosition))\r\n // }, [pageYPosition])\r\n useEffect(() => {\r\n return () => {\r\n dispatch(clearDataViewItems())\r\n dispatch(clearAllLoadingIndicators())\r\n }\r\n },[])\r\n const previousPage = useRef(1)\r\n useEffect(() => {\r\n // When the page changes, scroll to top\r\n if(windowSize.width > 800) {\r\n tryToScrollToTop()\r\n if(previousPage) previousPage.current = activePage\r\n } else {\r\n if(previousPage) {\r\n if(activePage !== previousPage.current) {\r\n tryToScrollToTop()\r\n previousPage.current = activePage\r\n }\r\n }\r\n }\r\n }, [activePage, filters, searchString, windowSize])\r\n const resultStringFormatter = (count) =>\r\n `${count} ${count === 1 ? \"produs gasit\" : \"produse gasite\"}`\r\n\r\n // useScrollPosition(\r\n // ({ prevPos, currPos }) => {\r\n // const classForVerticalFilter = prevPos?.y > currPos?.y ? \"down\" : \"up\"\r\n // setPageScroll(classForVerticalFilter)\r\n // setPageYPosition(\r\n // pageContainerRef.current?.parentElement?.parentElement?.scrollTop\r\n // )\r\n // },\r\n // [pageContainerRef.current],\r\n // pageContainerRef?.current?.parentElement?.parentElement,\r\n // scrollContainerRef?.current,\r\n // false,\r\n // 300\r\n // )\r\n const addAllProductsToCart = () => {\r\n const mainProduct = [\r\n {\r\n goodsId: accesoriesModalData?.id,\r\n quantity: accesoriesModalData?.quantity\r\n }\r\n ]\r\n const accessoriesToAdd = crtList?.items?.map?.((p) => ({\r\n goodsId: p.id,\r\n quantity: p.quantity\r\n }))\r\n const itemsToAdd = [...mainProduct || [], ...accessoriesToAdd || []]\r\n if (itemsToAdd?.length > 0)\r\n dispatch(addArrayToBasket(itemsToAdd, \"Accessories\"))\r\n }\r\n // const thereIsConnectionErrorWithGlobal = false\r\n const onBehalfId = useSelector((state) => state?.page?.onBehalfId)\r\n\r\n const {\r\n // submitForm,\r\n // disableSubmit,\r\n getProps,\r\n // setEdit,\r\n // errors,\r\n watch,\r\n // reset,\r\n // cancelEdit,\r\n // isEdit\r\n } = useMagicForm({ formName: \"OnBehalf\", defaultValues: {allClientList: onBehalfId } })\r\n\r\n return (\r\n <>\r\n {!priceChanged ? (\r\n \r\n {/* */}\r\n {userPermissions?.includes?.(\"CLIENT_CHANGE_WRITE\") && (\r\n
1185}\r\n watch={watch}\r\n getProps={getProps}\r\n />\r\n )}\r\n {companyType !== \"GUEST\" && (\r\n 1185}\r\n watch={watch}\r\n />\r\n )}\r\n {companyType !== \"GUEST\" && false && (\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n )}\r\n \r\n
\r\n {count > 0 && (\r\n
{`${resultStringFormatter(count)}`}
\r\n )}\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n {(products?.length > 0 && isLoadable) ? (\r\n products?.map?.((product) =>\r\n listType === \"list\" ? (\r\n
\r\n dispatch(\r\n setScrollPostion(\r\n pageContainerRef.current.parentElement\r\n .parentElement.scrollTop\r\n )\r\n )\r\n }\r\n />\r\n ) : (\r\n \r\n dispatch(\r\n setScrollPostion(\r\n pageContainerRef.current.parentElement\r\n .parentElement.scrollTop\r\n )\r\n )\r\n }\r\n />\r\n )\r\n )\r\n ) : products?.length === 0 &&\r\n currentSearchString === \"\" &&\r\n selectedFilters?.[\"FLT-SMaaaa00\"]?.length === undefined &&\r\n selectedFilters?.[\"FLT-CATEG001\"]?.length === undefined ? (\r\n // \r\n \r\n ) : (\r\n \r\n )}\r\n \r\n\r\n
\r\n\r\n \r\n
\r\n
\r\n
}\r\n name=\"add-related-products-to-basket\"\r\n saveAction={addAllProductsToCart}\r\n >\r\n
\r\n
\r\n accesoriesModalData?.localStockQuantity +\r\n accesoriesModalData?.centralStockQuantity\r\n ? \"low\"\r\n : \"available\",\r\n key: `${accesoriesModalData?.id}-main`,\r\n products: undefined, // needed to not display main product as pack\r\n setPageModal\r\n }}\r\n />\r\n \r\n \r\n \r\n
\r\n {crtList?.items?.map?.((i) => (\r\n i.type === \"IMAGE\"\r\n )?.reference,\r\n primaryPrice: mainPriceCompute(i),\r\n secondaryPrice: secondaryPriceCompute(i),\r\n quantity: accesoriesModalData?.quantity,\r\n unit: i?.unitOfMeasure,\r\n stockState:\r\n i?.quantity >\r\n i?.localStockQuantity + i?.centralStockQuantity\r\n ? \"low\"\r\n : \"available\",\r\n deleteCrtListItem: () => dispatch(deleteCrtListItem(i?.id)),\r\n key: `${i?.id}-accessories`,\r\n setPageModal\r\n }}\r\n />\r\n ))}\r\n \r\n \r\n \r\n ) : (\r\n \r\n )}\r\n >\r\n )\r\n}\r\nconst computedCurrency = (i) =>\r\n ` ${\r\n i?.currency?.toUpperCase?.() === \"RON\" ||\r\n i?.currency?.toUpperCase?.() === \"LEI\"\r\n ? \"LEI\"\r\n : i?.currency\r\n }`\r\nconst mainPriceCompute = (i) =>\r\n `${round(i?.priceNet * i?.quantity)}${computedCurrency(i)}`\r\nconst secondaryPriceCompute = (i) =>\r\n `${round(i?.priceGross * i?.quantity)} ${computedCurrency(i)} (cu TVA)`\r\nexport const EmptyState = (props) => {\r\n const { isOnBehalf, hasAlreadySelectedOnBehalfCompany } = props\r\n const [emptyComponent, setEmptyComponent] = useState( )\r\n useEffect(() => {\r\n const timeout = setTimeout(\r\n () => setEmptyComponent( ),\r\n 3000\r\n )\r\n return () => clearTimeout(timeout)\r\n }, [])\r\n return emptyComponent\r\n}\r\n\r\nexport const tryToScrollToTop = () => {\r\n const wrapperElement = document.querySelector('.pageContent')\r\n \r\n if(!wrapperElement){\r\n console.warn('Could not scroll to top because .pageContent is not found.')\r\n return \r\n }\r\n\r\n wrapperElement?.scrollTo?.({\r\n top: 0,\r\n behavior: 'smooth'\r\n })\r\n}\r\n\r\n\r\n\r\nexport default withLocalize(ProductsList)\r\n","import React from \"react\"\r\nimport \"./index.scss\"\r\nimport { useSelector, useDispatch } from \"react-redux\"\r\nimport { useState } from \"react\"\r\nimport { getCart } from \"store/modules/shop\"\r\nimport BreadCrumbs from \"components/BreadCrumbs/BreadCrumbsPremium\"\r\nimport HorizontalFilterUniprest from \"views/dev/select/HorizontalFilterUniprest\"\r\nimport MagicButton from \"components/MagicButton/MagicButtonV2\"\r\nimport Close from \"assets/general/Close.svg\"\r\nimport { useEffect } from \"react\"\r\nimport { setPageModal } from \"store/modules/page\"\r\nimport useMagicForm from \"utils/useMagicForm\"\r\nimport * as yup from \"yup\"\r\nimport MagicTable from \"components/MagicTable/MagicTable\"\r\nimport listDetailsTableSelector from \"views/ImportFromExcel/tableSelector\"\r\nimport { addDataItems, clearDataViewItems, resetCheckSearchString, setDataViewId, setImportedDataFromExcel } from \"store/modules/dataView\"\r\nimport { ReactComponent as IlluEmptyList } from \"assets/_illustrations/emptyListIllu.svg\"\r\nimport BigModal from \"components/_modals/BigModal\"\r\nimport ModalListCard1 from \"components/_modals/listCards/ModalListCard1\"\r\nimport ListModalV2 from \"components/_modals/ListModalV2\"\r\nimport { addMultiProductsToList } from \"store/justActions/lists\"\r\nimport { toastr } from \"react-redux-toastr\"\r\nimport { showMagicToaster } from \"utils/MagicToasterCall\"\r\nimport { saveApiItem } from \"store/justActions/saveApiIems\"\r\nimport store from \"store\"\r\nimport { loadItem } from \"store/justActions/loadApiIems\"\r\nimport SvgIcon from \"components/SvgIcon/SvgIcon\"\r\nimport { Lang, lang, Translate, withLocalize } from \"components/Lang/Lang\"\r\nimport BasketErrorModal from \"components/_modals/BasketErrorModal\"\r\nimport { printError } from \"utils/printError\"\r\nimport useQueryStringFilters from \"utils/useQueryStringFilters\"\r\nimport { parseFloatOrZero } from \"utils/numberUtils\"\r\n\r\n\r\nconst filterIds = [\"FLT-SEARCH01\"]\r\n// const filterIds = [\"FLT-SEARCH01\", \"FLT-sortart\", \"FLT-sort0cmp\", \"FLT-SEARCH01\", \"FLT-sort00p1\", \"FLT-sort0prc\", \"FLT-sort0ord\", \"FLT-tipClient\"]\r\nexport const filterConditions = (i) => {\r\n if(i?.id?.includes?.(\"incorrect\")) return false \r\n if(i?.stockState === \"low\") return false \r\n if (\r\n (i?.quantity > (i?.centralStockQuantity ?? 0) + (i?.localStockQuantity ?? 0)) ||\r\n (i?.localStockQuantity ?? 0) + (i?.centralStockQuantity ?? 0) === 0\r\n ) return false\r\n if(!i?.priceNet > 0) return false\r\n if(!i?.quantity > 0) return false\r\n return true\r\n}\r\nconst escapeSlashesInProductCode = (code) => {\r\n if(!code?.includes?.(\"/\")) return code\r\n return code?.replaceAll(\"/\", \"%2F\")\r\n}\r\nconst RegisteredListDetails = (props) => {\r\n \r\n const dispatch = useDispatch()\r\n const {\r\n setSearchString, \r\n } = useQueryStringFilters()\r\n function checkDuplicates(products) {\r\n const duplicatedCodes = {}\r\n const markedDuplicated = products?.map?.(product => {\r\n if(!duplicatedCodes?.[product?.productCode]) {\r\n duplicatedCodes[product?.productCode] = product?.quantity\r\n return product\r\n } else {\r\n return {...product, duplicated: true}\r\n }\r\n })\r\n return markedDuplicated\r\n }\r\n const translate = props?.translate\r\n const pasteFunction = (event) => {\r\n const paste = (event?.clipboardData || window?.clipboardData)\r\n ?.getData(\"text\")\r\n ?.split?.(\"\\n\")\r\n ?.slice?.(0, -1) //\"\\n\" adds an additional empty line\r\n //console.log(\"RAW PASTE \", (event?.clipboardData || window?.clipboardData)?.getData(\"text\"));\r\n //console.log(\"EXCEL PASTE \", paste);\r\n\r\n let allGood = true\r\n //if no data provided\r\n if(paste?.length === 0) allGood = false\r\n paste?.forEach?.(rowFromExcel => {\r\n if (\r\n !rowFromExcel?.includes?.(\"\\t\")\r\n || rowFromExcel?.split?.(\"\\t\")?.length > 2\r\n ) {\r\n allGood = false\r\n return\r\n }\r\n })\r\n const products = []\r\n if (allGood) {\r\n const filteredLines = paste?.filter?.(line =>\r\n line !== \"\" && line !== \"\\t\" && line !== \"\\r\")\r\n filteredLines?.forEach?.((product, i) => {\r\n const helper = product?.split?.(\"\\t\")\r\n const productCode = helper?.[0]\r\n const quantity = helper?.[1]//?.replaceAll?.(/[^0-9.,0-9]/g, \"\")\r\n // if (!productCode || !quantity) {//NOT NECESSARY BUT LEFT HERE FOR NOW\r\n // toastr.error(\"Aţi introdus produse fără nume sau cantitate\")\r\n // return\r\n // }\r\n if (productCode) {// & quantity\r\n products?.push?.({\r\n productCode,\r\n quantity\r\n })\r\n }\r\n })\r\n const productsDuplicatedMarked = checkDuplicates(products)\r\n // console.log(\"PRODUCT \", product);\r\n // console.log(\"DUPLICATED1 \", productsDuplicatedMarked);\r\n productsDuplicatedMarked?.forEach?.(i => {\r\n if (i?.duplicated)\r\n store.dispatch(\r\n setImportedDataFromExcel({\r\n name: ` Produsul ${i?.productCode} există deja pe lista importată.`,\r\n id:\r\n \"incorrect\" +\r\n Math.floor((1 + Math.random()) * 0x10000)\r\n ?.toString?.(16)\r\n ?.substring?.(1)\r\n })\r\n )\r\n else if (parseFloatOrZero(i?.quantity?.replaceAll(\",\",\".\")) === 0 &&\r\n i?.quantity && parseFloat(i?.quantity) !== 0) {\r\n store.dispatch(\r\n setImportedDataFromExcel({\r\n name: ` Cantitatea la produsul ${i?.productCode} e incorectă.`,\r\n id:\r\n \"incorrect\" +\r\n Math.floor((1 + Math.random()) * 0x10000)\r\n ?.toString?.(16)\r\n ?.substring?.(1)\r\n })\r\n )\r\n }\r\n else if (!(parseFloatOrZero(i?.quantity?.replaceAll(\",\",\".\")) === 0)) //{\r\n // store.dispatch(\r\n // setImportedDataFromExcel({\r\n // // name: ` Cantitatea la produsul ${i?.productCode} este incorectă sau 0.`,\r\n // name: ` CANTITATEA ESTE INCORECTĂ LA PRODUSUL: ${i?.productCode}: ai introdus \"${i?.quantity}\"`,\r\n // id:\r\n // \"incorrect\" +\r\n // Math.floor((1 + Math.random()) * 0x10000)\r\n // ?.toString?.(16)\r\n // ?.substring?.(1)\r\n // })\r\n // )\r\n // }\r\n // else\r\n store.dispatch(\r\n loadItem(\r\n \"product/goods/shop/code\",\r\n escapeSlashesInProductCode(i?.productCode),\r\n true,\r\n true,\r\n false,\r\n i?.quantity?.replaceAll?.(/[^0-9.,0-9]/g, \"\"),\r\n i?.quantity?.replaceAll?.(\"\\n\", \"\")?.replaceAll?.(\"\\r\", \"\"),\r\n )\r\n )\r\n })\r\n } else {\r\n //toastr.error(\"Structura datelor importate este incorectă!\")\r\n toastr.error(translate?.(\"importexceldetails.dataStructure\"))\r\n }\r\n }\r\n useEffect(() => {\r\n document?.getElementById?.(\"pasteHere\")?.addEventListener?.(\"paste\", pasteFunction)\r\n return () => {\r\n document?.getElementById?.(\"pasteHere\")?.removeEventListener?.(\"paste\", pasteFunction)\r\n }\r\n }, [])\r\n useEffect(() => {\r\n dispatch(setDataViewId())\r\n dispatch(clearDataViewItems())\r\n setSearchString(\"\")\r\n dispatch(resetCheckSearchString(\"\"))\r\n }, [])\r\n const [selectedProductsToAdd, setSelectedProductsToAdd] = useState([])\r\n const pageModal = useSelector((state) => state.page?.modal)\r\n const { tableData, hasErrorLines,hasFrontLowStock, hasFrontZeroPrice } = useSelector((state) => listDetailsTableSelector(state))\r\n //console.log(\"TABLE DATA \", tableData)\r\n const productsToExcelModalProps = {\r\n title: ,\r\n placeholder: translate?.(\"importexceldetails.searchProduct\"),\r\n itemsType: \"product/goods/shop\",\r\n selectionLabel: [\"produs selectat\", \"produse selectate\"],\r\n //formatAdapter,\r\n label: ,\r\n //value:\r\n onChange: (e) => setSelectedProductsToAdd(e)\r\n }\r\n //console.log(selectedProductsToAdd)\r\n const addProductsToExcel = () => {\r\n dispatch(addDataItems( selectedProductsToAdd ))\r\n }\r\n const addAllToCart = () => {\r\n // let error = false\r\n\r\n // tableData?.rows?.forEach?.((item) => {\r\n // if (\r\n // item?.quantity === 0\r\n // || item?.quantity >\r\n // (item?.centralStockQuantity || 0) + (item?.localStockQuantity || 0)\r\n // || !item?.priceGross\r\n // )\r\n // error = true\r\n // })\r\n\r\n if (tableData?.rows?.length) {// && !error\r\n if(hasFrontLowStock || hasFrontZeroPrice) \r\n showMagicToaster({\r\n type: \"warning\",\r\n title: translate?.(\"importexceldetails.frontNoPriceOrStock\"),\r\n timeOut: 5000,\r\n })\r\n if(hasErrorLines && !hasFrontLowStock && !hasFrontZeroPrice)\r\n showMagicToaster({\r\n type: \"warning\",\r\n title: translate?.(\"importexceldetails.frontHasErrorLines\"),\r\n timeOut: 5000,\r\n })\r\n dispatch(\r\n saveApiItem({\r\n type: \"basket/add-item-list\",\r\n data: tableData?.rows\r\n ?.filter?.(i => filterConditions(i))\r\n ?.map?.(i => ({goodsId: i?.id, quantity: i?.quantity})),\r\n onSuccess: () => {\r\n dispatch(getCart())\r\n showMagicToaster({\r\n title: `${\r\n tableData?.rows?.length === 1 ? (\r\n translate?.(\"importexceldetails.addedProduct\")\r\n ) : (\r\n translate?.(\"importexceldetails.addedProducts\")\r\n )\r\n } in cos!`,\r\n timeOut: 5000,\r\n })\r\n },\r\n onFailure: (error) => {\r\n printError(\"addAllToCart()\", error)\r\n if (\r\n error?.response?.data?.localizationCode === \"error.offerInBasket\"\r\n )\r\n dispatch(\r\n setPageModal({\r\n name: \"basketErrorOfferShopConflictModal\",\r\n data: \"În coș se găsesc deja produs(e) adăugate dintr-o ofertă. Finalizează comanda, sau golește coșul ca să poți adăuga produse din magazin.\"\r\n })\r\n )\r\n else if(error?.response?.data?.localizationCode === \"error.notEnoughStock\")\r\n showMagicToaster({\r\n type: \"error\",\r\n title: translate?.(\"importexceldetails.haveNoStock\"),\r\n timeOut: 5000,\r\n })\r\n else if(error?.response?.data?.localizationCode === \"error.productNoPrice\")\r\n showMagicToaster({\r\n type: \"error\",\r\n title: translate?.(\"importexceldetails.haveNoPrice\"),\r\n timeOut: 5000,\r\n })\r\n else\r\n showMagicToaster({\r\n type: \"error\",\r\n title: translate?.(\"importexceldetails.generalBEError\"),\r\n timeOut: 5000,\r\n })\r\n return {\r\n type: \"a\"\r\n }\r\n }\r\n })\r\n )\r\n } \r\n else {\r\n toastr.error(translate?.(\"importexceldetails.noValidProducts\"))\r\n }\r\n }\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n {\" \"}\r\n \r\n \r\n \r\n \r\n\r\n \r\n {\" \"}\r\n \r\n \r\n \r\n {\" \"}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n { tableData?.rows?.length > 0 &&\r\n <>\r\n \r\n \r\n {\" \"}\r\n {\r\n tableData?.rows?.filter?.(\r\n (product) => !product?.id?.includes?.(\"incorrect\")\r\n )?.length\r\n }\r\n \r\n \r\n }\r\n onClick={addAllToCart}\r\n />\r\n }\r\n showModal=\"addProductForExcelModal\"\r\n />\r\n }\r\n onClick={() => {\r\n dispatch(clearDataViewItems())\r\n setSearchString(\"\")\r\n dispatch(resetCheckSearchString(\"\"))\r\n }}\r\n className=\"excel-import-delete-button\"\r\n />\r\n >}\r\n
\r\n
\r\n {tableData?.rows?.length ? (\r\n <>\r\n \r\n
\r\n \r\n
\r\n >\r\n ) : (\r\n
\r\n
\r\n
\r\n \r\n
\r\n
}\r\n showModal=\"addProductForExcelModal\"\r\n mr={2}\r\n />\r\n
\r\n )}\r\n
\r\n \r\n {pageModal === \"addProductForExcelModal\" && (\r\n
}\r\n saveAction={() => {\r\n addProductsToExcel()\r\n }}\r\n >\r\n
\r\n \r\n \r\n \r\n )}\r\n
\r\n
\r\n )\r\n}\r\nexport default withLocalize(RegisteredListDetails)\r\n","import { useRef, useLayoutEffect } from \"react\"\r\n\r\nconst isBrowser = typeof window !== `undefined`\r\n\r\nfunction getScrollPosition({ element, element2, useWindow }) {\r\n if (!isBrowser) return { x: 0, y: 0 }\r\n\r\n const target = element ? element : element2 ? element2 : document.body\r\n\r\n const position = target?.getBoundingClientRect()\r\n\r\n return useWindow\r\n ? { x: window.scrollX, y: window.scrollY }\r\n : { x: position?.left, y: position?.top }\r\n}\r\n\r\nexport function useScrollPosition(\r\n effect,\r\n deps,\r\n element,\r\n element2,\r\n useWindow,\r\n wait\r\n) {\r\n const position = useRef(\r\n getScrollPosition({ element: false, element2, useWindow })\r\n )\r\n\r\n let throttleTimeout = null\r\n\r\n const callBack = () => {\r\n const currPos = getScrollPosition({ element: false, element2, useWindow })\r\n effect({ prevPos: position?.current, currPos })\r\n position.current = currPos\r\n throttleTimeout = null\r\n }\r\n\r\n useLayoutEffect(() => {\r\n const handleScroll = () => {\r\n if (wait) {\r\n if (throttleTimeout === null) {\r\n throttleTimeout = setTimeout(callBack, wait)\r\n }\r\n } else {\r\n callBack()\r\n }\r\n }\r\n element\r\n ? element.addEventListener(\"scroll\", handleScroll)\r\n : window.addEventListener(\"scroll\", handleScroll)\r\n return () =>\r\n element\r\n ? element.removeEventListener(\"scroll\", handleScroll)\r\n : window.removeEventListener(\"scroll\", handleScroll)\r\n }, deps)\r\n}\r\nexport default useScrollPosition\r\n","export default __webpack_public_path__ + \"static/media/UniLogo.7897d45f.svg\";","import { Link } from \"react-router-dom\"\r\nimport NextIcon from \"assets/BreadCrumbs/NextIcon.svg\" //'/static/media/NextIcon.2076b4b0.svg';\r\n\r\nconst BreadCrumbsPremium = () => {\r\n let paths\r\n paths = window.location.pathname?.split?.(\"/\")\r\n paths =\r\n paths?.[paths?.length - 1] === \"\" ? paths?.slice?.(0, paths?.length - 1) : paths\r\n paths = paths?.[1] === \"\" ? paths?.slice?.(1) : paths\r\n\r\n const breadcrumb = paths?.map?.((path, index) => {\r\n const arrow =\r\n index !== paths?.length - 1 ? (\r\n e?.preventDefault?.()}\r\n className={\"mx2\"}\r\n src={NextIcon}\r\n alt=\"\"\r\n />\r\n ) : (\r\n \" \"\r\n )\r\n if (index === 0) {\r\n return (\r\n \r\n \r\n Home\r\n \r\n {arrow}\r\n \r\n )\r\n }\r\n\r\n let url = paths?.slice?.(0, index + 1)?.join?.(\"/\")\r\n if (url === \"/shop\") url = \"/shop/productlist\"\r\n return (\r\n \r\n \r\n {path}\r\n \r\n {arrow}\r\n \r\n )\r\n })\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default BreadCrumbsPremium\r\n","export default __webpack_public_path__ + \"static/media/Apa.a3043a69.svg\";","export default __webpack_public_path__ + \"static/media/Termice.6abcf58a.svg\";","export default __webpack_public_path__ + \"static/media/Gaz.745f2ce9.svg\";","export default __webpack_public_path__ + \"static/media/EnergieVerde.8a3421ec.svg\";","export default __webpack_public_path__ + \"static/media/Sanitare.d6a3a861.svg\";","export default __webpack_public_path__ + \"static/media/Ventilatie.9a10ac3c.svg\";","import Apa from \"assets/AboutUniprest/productcategory/Apa.svg\"\r\nimport Termice from \"assets/AboutUniprest/productcategory/Termice.svg\"\r\nimport Gaz from \"assets/AboutUniprest/productcategory/Gaz.svg\"\r\nimport EnergieVerde from \"assets/AboutUniprest/productcategory/EnergieVerde.svg\"\r\nimport Sanitare from \"assets/AboutUniprest/productcategory/Sanitare.svg\"\r\nimport Ventilatie from \"assets/AboutUniprest/productcategory/Ventilatie.svg\"\r\nimport { Lang, lang, Translate, withLocalize } from \"components/Lang/Lang\"\r\n\r\nexport const category = [\r\n {\r\n Title: ,\r\n alt: ,\r\n icon: Gaz,\r\n url: \"/shop/productlist?filterId=FLT-CATEG001&filterSelection=27465\"\r\n },\r\n {\r\n Title: ,\r\n alt: ,\r\n icon: Termice,\r\n url: \"/shop/productlist?filterId=FLT-CATEG001&filterSelection=27501\"\r\n },\r\n {\r\n Title: ,\r\n alt: ,\r\n icon: Apa,\r\n url: \"/shop/productlist?filterId=FLT-CATEG001&filterSelection=27407\"\r\n },\r\n {\r\n Title: ,\r\n alt: ,\r\n icon: EnergieVerde,\r\n url: \"/shop/productlist?filterId=FLT-CATEG001&filterSelection=27448\"\r\n },\r\n {\r\n Title: ,\r\n alt: ,\r\n icon: Sanitare,\r\n url: \"/shop/productlist?filterId=FLT-CATEG001&filterSelection=27472\"\r\n },\r\n {\r\n Title: ,\r\n alt: ,\r\n icon: Ventilatie,\r\n url: \"/shop/productlist?filterId=FLT-CATEG001&filterSelection=27398\"\r\n }\r\n]\r\n","export default __webpack_public_path__ + \"static/media/AP.e097e832.svg\";","import { createSelector } from \"reselect\"\r\nimport {\r\n baseDataViewSelector,\r\n headerProcessor\r\n} from \"store/selectors/dataView/baseDataView.selector\"\r\nimport { Lang, lang, Translate, withLocalize } from \"components/Lang/Lang\"\r\nimport { formatDateWTime } from \"utils/dateUtils\"\r\nconst templateHeader = [\r\n {\r\n type: \"select\"\r\n },\r\n {\r\n label: ,\r\n type: \"default\",\r\n urlPrefix: \"/admin/company/accountrequests/form?id=\",\r\n keys: {\r\n title: \"name\",\r\n tags: \"roleTags\"\r\n },\r\n staticProps: {\r\n tempSkinnyTitle: true,\r\n avatarBgColor: \"red-1\"\r\n }\r\n },\r\n {\r\n label: ,\r\n type: \"default\",\r\n urlPrefix: \"/admin/company/accountrequests/form?id=\",\r\n keys: {\r\n title: \"companyName\",\r\n tags: \"nameTags\"\r\n }\r\n },\r\n {\r\n label: ,\r\n type: \"default\",\r\n keys: {\r\n title: \"creationDate\"\r\n },\r\n staticProps: {\r\n tempSkinnyTitle: true\r\n }\r\n },\r\n {\r\n label: ,\r\n type: \"default\",\r\n keys: {\r\n title: \"email\"\r\n },\r\n staticProps: {\r\n tempSkinnyTitle: true\r\n }\r\n },\r\n {\r\n label: ,\r\n type: \"default\",\r\n keys: {\r\n title: \"phone\"\r\n },\r\n staticProps: {\r\n tempSkinnyTitle: true\r\n }\r\n },\r\n {\r\n label: ,\r\n type: \"pill\",\r\n keys: {\r\n value: \"statusValue\",\r\n color: \"statusColour\"\r\n },\r\n staticProps: {\r\n type: \"filled\",\r\n\r\n bold: true\r\n }\r\n },\r\n {\r\n type: \"moreActions\",\r\n label: \"Actiuni\",\r\n\r\n actions: {\r\n primary: [\r\n { action: \"edit\", icon: \"edit\" },\r\n { action: \"details\", icon: \"details\" }\r\n ],\r\n secondary: [\r\n {\r\n label: ,\r\n action: \"dynamoDelete\",\r\n icon: \"trash\"\r\n }\r\n ]\r\n }\r\n }\r\n]\r\n\r\nexport const specificTableSelector = createSelector(\r\n baseDataViewSelector,\r\n (prevSelector) => {\r\n const rows = prevSelector.rows?.map?.((item) => {\r\n return {\r\n ...item,\r\n ...item?.values,\r\n nameTags: [\r\n {\r\n fontColor: \"text-light-01\",\r\n backgroundColor: \"primary-5\",\r\n value: `CUI: ${item?.values?.cui ?? \"\"}`\r\n }\r\n ],\r\n roleTags: [\r\n {\r\n fontColor: \"text-light-01\",\r\n backgroundColor: \"base-5\",\r\n value:\r\n item?.values?.role === \"ID1\" ? (\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n ],\r\n creationDate: item?.cDate ? formatDateWTime(item?.cDate) : \"-\",\r\n \r\n statusValue:\r\n item?.values?.status === 3 ? (\r\n \r\n ) : item?.values?.status === 2 ? (\r\n \r\n ) : (\r\n \r\n ),\r\n statusColour:\r\n item?.values?.status === 3\r\n ? \"grey-40\"\r\n : item?.values?.status === 2\r\n ? \"red-1\"\r\n : \"green-40\"\r\n }\r\n })\r\n ?.sort?.((a, b) => {\r\n return (a?.cDate || 0) > (b?.cDate || 0) ? -1 : 1\r\n })\r\n\r\n const header = headerProcessor({ ...prevSelector, templateHeader })\r\n return { ...prevSelector, templateHeader, rows, header }\r\n }\r\n)\r\n\r\nexport default specificTableSelector\r\n","import comenzi from \"views/invoices/comenzi/data\"\r\nimport MagicTable from \"components/MagicTable/MagicTable\"\r\nimport { mockHeader } from \"components/MagicTable/mockHeader\"\r\nimport { useSelector } from \"store\"\r\nimport { useDispatch } from \"store\"\r\nimport { saveUser } from \"store/modules/user\"\r\nimport {\r\n loadDynamoFormItemByPK,\r\n loadDynamoItemsBySK,\r\n searchStuff\r\n} from \"store/modules/dataView.search\"\r\nimport {\r\n getExternalRoles,\r\n getInternalRoles,\r\n loadDictionary,\r\n loadEnums,\r\n loadProductCategories,\r\n setLoginCalls\r\n} from \"store/modules/backData\"\r\nimport SvgIcon from \"components/SvgIcon\"\r\nimport { useEffect } from \"react\"\r\nimport styled from \"styled-components\"\r\nimport { refreshBasket, saveProduct } from \"store/modules/shop\"\r\nimport { loadItem } from \"store/justActions/loadApiIems\"\r\nimport { resetDV, setDataViewId } from \"store/modules/dataView\"\r\nimport { saveApiItem } from \"store/justActions/saveApiIems\"\r\nimport { javaLogin, loadMe, refreshJavaToken } from \"store/justActions/javaAuth\"\r\nimport { useHistory } from \"react-router-dom\"\r\n\r\nexport const frontEndVersion = \"V-0.7.28\"\r\n\r\nconst Container = styled.div`\r\n button + button {\r\n margin-left: 1rem;\r\n }\r\n button {\r\n background-color: lightblue;\r\n border-radius: 4px;\r\n border: 1px solid blue;\r\n padding: 3px;\r\n margin-bottom: 1rem;\r\n }\r\n >div:last-child\r\n /* >div:nth-last-child(2) */ {\r\n background-color: white;\r\n min-height: 500px;\r\n border-radius: 8px;\r\n padding: 1.5rem;\r\n font-size: 12px;\r\n margin-top: 1rem;\r\n }\r\n`\r\nconst SorinsPage2 = () => {\r\n const dispatch = useDispatch()\r\n const apiResponse = useSelector((state) => state.auth.apiResponse)\r\n const loginCalls = useSelector((state) => state.backData?.loginCalls)\r\n const path = window.location.pathname?.split?.(\"/\")?.slice?.(-1)?.[0]\r\n const history = useHistory()\r\n useEffect(() => {\r\n const path = window.location.pathname?.split?.(\"/\")?.slice?.(-1)?.[0]\r\n\r\n // dispatch(clearApiResponse())\r\n dispatch(resetDV())\r\n }, [])\r\n\r\n // useEffect(() => {\r\n // if (loginCalls >= 5) {\r\n // dispatch(setLoginCalls(0))\r\n // setTimeout(() => {\r\n // history?.push?.('/admin/product/list')\r\n // }, 3000);\r\n // }\r\n // return () => {\r\n // // dispatch(setLoginCalls(0))\r\n // }\r\n // }, [loginCalls])\r\n\r\n return (\r\n \r\n {frontEndVersion}\r\n \r\n {/* {\"loginName\": \"uniprest@test.com\", \"password\": \"Password123!!!!\", \"client\": \"front\"} */}\r\n\r\n \r\n dispatch(\r\n javaLogin(\"barna.szabo@magicsolutions.ro\", \"Password123!!!!\")\r\n )\r\n }\r\n >\r\n login with Java\r\n \r\n \r\n dispatch(javaLogin(\"uniprest@test.com\", \"Password123!!!!\"))\r\n }\r\n >\r\n login with uniprest@test.com\r\n \r\n \r\n dispatch(javaLogin(\"corina.ceuca@uniprest.ro\", \"Password123!!!!\"))\r\n }\r\n >\r\n login with corina.ceuca@uniprest.ro\r\n \r\n dispatch(javaLogin(\"admi\", \"Password123!!!!\"))}>\r\n login with admi\r\n \r\n dispatch(javaLogin(\"bsur\", \"Password123!!!!\"))}>\r\n login with bsur\r\n \r\n dispatch(javaLogin(\"mktm\", \"Password123!!!!\"))}>\r\n login with mktm\r\n \r\n dispatch(javaLogin(\"rfpm\", \"Password123!!!!\"))}>\r\n login with rfpm\r\n \r\n dispatch(javaLogin(\"accm\", \"Password123!!!!\"))}>\r\n login with accm\r\n \r\n dispatch(javaLogin(\"bosa\", \"Password123!!!!\"))}>\r\n login with bosa\r\n \r\n dispatch(javaLogin(\"cadm1\", \"Password123!!!!\"))}>\r\n login with cadm1\r\n \r\n dispatch(javaLogin(\"cadm2\", \"Password123!!!!\"))}>\r\n login with cadm2\r\n \r\n dispatch(javaLogin(\"uadm1\", \"Password123!!!!\"))}>\r\n login with uadm1\r\n \r\n dispatch(javaLogin(\"uadm2\", \"Password123!!!!\"))}>\r\n login with uadm2\r\n \r\n dispatch(javaLogin(\"gues\", \"Password123!!!!\"))}>\r\n login with gues\r\n \r\n {/* \r\n dispatch(javaLogin(\"anonymous\", \"Password123!!!!\", true))\r\n }\r\n >\r\n login with anonymous\r\n */}\r\n dispatch(loadMe())}>load me \r\n dispatch(refreshJavaToken())}>\r\n refresh topken\r\n \r\n dispatch(loadEnums(\"product.ProductStockStatus\"))}\r\n >\r\n loadEnums product.ProductStockStatus\r\n \r\n dispatch(loadEnums(\"user.UserStatus\"))}>\r\n loadEnums user.UserStatus NW\r\n \r\n dispatch(loadDictionary(\"PRODUCT_BRAND\"))}>\r\n loadDictionary PRODUCT_BRAND\r\n \r\n dispatch(loadProductCategories())}>\r\n loadProductCategories PRODUCT_BRAND\r\n \r\n dispatch(setDataViewId())}>\r\n reset data view id\r\n \r\n dispatch(refreshBasket())}>\r\n refresh basket\r\n \r\n
\r\n \r\n Audit log \r\n dispatch(getExternalRoles())}>\r\n get external roles\r\n \r\n dispatch(getInternalRoles())}>\r\n get internal roles\r\n \r\n
\r\n \r\n Audit log \r\n dispatch(searchStuff({ type: \"auditlog\" }))}>\r\n AuditLog search\r\n \r\n dispatch(searchStuff({ type: \"invoice/my-invoice\" }))}\r\n >\r\n invoice/my-invoice\r\n \r\n dispatch(searchStuff({ type: \"clientInvoice\" }))}\r\n >\r\n clientInvoice\r\n \r\n
\r\n \r\n Questions \r\n dispatch(loadItem(\"product-question\", \"5l7vZR\"))}\r\n >\r\n Load question 5l7vZR\r\n \r\n dispatch(loadItem(\"product-answer\", \"5l7vZR\"))}>\r\n Load answer 5l7vZR\r\n \r\n dispatch(searchStuff({ type: \"product-question\" }))}\r\n >\r\n search questions\r\n \r\n \r\n dispatch(\r\n saveApiItem({ type: \"product-answer\", data: mockAnswerData })\r\n )\r\n }\r\n >\r\n Save Mock Answer\r\n \r\n \r\n dispatch(\r\n saveApiItem({ type: \"product-question\", data: MockAnswerData })\r\n )\r\n }\r\n >\r\n Save Mock Question\r\n \r\n
\r\n \r\n Badge \r\n dispatch(loadItem(\"goods-badge\", \"5l7vZR\"))}>\r\n Load badge 5l7vZR\r\n \r\n dispatch(searchStuff({ type: \"goods-badge\" }))}>\r\n search badge\r\n \r\n \r\n dispatch(saveApiItem({ type: \"goods-badge\", data: mockBadgeData }))\r\n }\r\n >\r\n Save Mock Badge\r\n \r\n
\r\n \r\n Product rating \r\n dispatch(loadItem(\"product-rating\", \"5l7vZR\"))}>\r\n Load discount-rating 5l7vZR\r\n \r\n \r\n dispatch(\r\n saveApiItem({\r\n type: \"product-rating\",\r\n data: mockDiscountRatingData\r\n })\r\n )\r\n }\r\n >\r\n Save Mock discount-rating\r\n \r\n dispatch(searchStuff({ type: \"product-rating\" }))}\r\n >\r\n Search discount-rating\r\n \r\n
\r\n \r\n Location \r\n dispatch(loadItem(\"organization/workplace\", \"Lmnqln\"))}\r\n >\r\n Load location WmGwm7\r\n \r\n \r\n dispatch(\r\n saveApiItem({\r\n type: \"organization/workplace\",\r\n data: saveUniLocationData\r\n })\r\n )\r\n }\r\n >\r\n Save Mock location\r\n \r\n \r\n dispatch(\r\n searchStuff({\r\n type: \"organization/workplace\",\r\n sortField: null,\r\n reload: true\r\n })\r\n )\r\n }\r\n >\r\n Search Location\r\n \r\n
\r\n \r\n Documents \r\n dispatch(loadItem(\"product-document\", \"WmGwm7\"))}\r\n >\r\n Load document WmGwm7\r\n \r\n \r\n dispatch(\r\n saveApiItem({ type: \"product-document\", data: mockDocumentData })\r\n )\r\n }\r\n >\r\n Save Mock document\r\n \r\n dispatch(searchStuff({ type: \"product-document\" }))}\r\n >\r\n Search documents\r\n \r\n
\r\n \r\n Warehouse info \r\n dispatch(loadItem(\"organization/warehouse\", \"WmGwm7\"))}\r\n >\r\n Load warehouse WmGwm7\r\n \r\n \r\n dispatch(\r\n saveApiItem({\r\n type: \"organization/warehouse\",\r\n data: mockWarehouseData\r\n })\r\n )\r\n }\r\n >\r\n Save Mock warehouse\r\n \r\n \r\n dispatch(searchStuff({ type: \"organization/warehouse\" }))\r\n }\r\n >\r\n Search warehouse\r\n \r\n dispatch(searchStuff({ type: \"stock\" }))}>\r\n Search stock\r\n \r\n
\r\n \r\n Basket info \r\n dispatch(loadItem(\"basket\", \"5l7vZR\"))}>\r\n Load basket 5l7vZR\r\n \r\n \r\n dispatch(saveApiItem({ type: \"basket\", data: mockBasketData }))\r\n }\r\n >\r\n Save Mock basket\r\n \r\n dispatch(searchStuff({ type: \"basket\" }))}>\r\n Search basket\r\n \r\n
\r\n\r\n {/*\r\n AuditLog -> Postman/Uniprest/AuditLog\r\n */}\r\n\r\n \r\n Discount: Grid \r\n \r\n dispatch(loadItem(\"product/goods/discount/grid\", \"5l7vZR\"))\r\n }\r\n >\r\n Load discount-grid 5l7vZR\r\n \r\n \r\n dispatch(\r\n saveApiItem({\r\n type: \"product/goods/discount/grid\",\r\n data: mockDiscountGridData\r\n })\r\n )\r\n }\r\n >\r\n Save Mock discount-grid\r\n \r\n \r\n dispatch(searchStuff({ type: \"product/goods/discount/grid\" }))\r\n }\r\n >\r\n Search discount-grid\r\n \r\n\r\n Volume \r\n \r\n dispatch(loadItem(\"product/goods/discount/volume\", \"5l7vZR\"))\r\n }\r\n >\r\n Load discount-volume 5l7vZR\r\n \r\n \r\n dispatch(\r\n saveApiItem({\r\n type: \"product/goods/discount/volume\",\r\n data: mockDiscountVolumeData\r\n })\r\n )\r\n }\r\n >\r\n Save Mock discount-volume\r\n \r\n \r\n dispatch(searchStuff({ type: \"product/goods/discount/volume\" }))\r\n }\r\n >\r\n Search discount-volume\r\n \r\n\r\n Package \r\n \r\n dispatch(loadItem(\"product/goods/discount/package\", \"5l7vZR\"))\r\n }\r\n >\r\n Load discount-package 5l7vZR\r\n \r\n \r\n dispatch(\r\n saveApiItem({\r\n type: \"product/goods/discount/package\",\r\n data: mockDiscountPackageData\r\n })\r\n )\r\n }\r\n >\r\n Save Mock discount-package\r\n \r\n \r\n dispatch(searchStuff({ type: \"product/goods/discount/package\" }))\r\n }\r\n >\r\n Search discount-package\r\n \r\n\r\n Fix \r\n \r\n dispatch(loadItem(\"product/goods/discount/fix\", \"5l7vZR\"))\r\n }\r\n >\r\n Load discount-fix 5l7vZR\r\n \r\n \r\n dispatch(\r\n saveApiItem({\r\n type: \"product/goods/discount/fix\",\r\n data: mockDiscountFixData\r\n })\r\n )\r\n }\r\n >\r\n Save Mock discount-fix\r\n \r\n \r\n dispatch(searchStuff({ type: \"product/goods/discount/fix\" }))\r\n }\r\n >\r\n Search discount-fix\r\n \r\n
\r\n \r\n User \r\n dispatch(loadItem(\"user\", \"5l7vZR\"))}>\r\n Load User 5l7vZR\r\n \r\n {/* TODO: why is working both search query? */}\r\n dispatch(searchStuff({ type: \"uniprest/user\" }))}\r\n >\r\n search users\r\n \r\n dispatch(searchStuff({ type: \"user\" }))}>\r\n search2 users\r\n \r\n dispatch(saveUser(saveUserData))}>\r\n Save User\r\n \r\n
\r\n \r\n Group \r\n dispatch(loadItem(\"group\", \"5l7vZR\"))}>\r\n Load group 5l7vZR\r\n \r\n \r\n dispatch(\r\n searchStuff({\r\n type: \"uniprest/group\",\r\n uniprest: true,\r\n refresh: true\r\n })\r\n )\r\n }\r\n >\r\n Search group\r\n \r\n
\r\n \r\n \r\n dispatch(loadItem(\"organization/webshop-client\", \"yZR7Nl\"))\r\n }\r\n >\r\n Load webshop-client yZR7Nl\r\n \r\n \r\n dispatch(searchStuff({ type: \"organization/webshop-client\" }))\r\n }\r\n >\r\n search organizations new\r\n \r\n
\r\n\r\n \r\n
Goods
\r\n
dispatch(searchStuff({ type: \"product/goods\" }))}\r\n >\r\n search Goods\r\n \r\n
\r\n dispatch(\r\n searchStuff({ type: \"product/goods\", searchTerm: \"TEAVA\" })\r\n )\r\n }\r\n >\r\n search products by text \"TEAVA\"\r\n \r\n
dispatch(loadItem(\"product/goods\", \"rqxeQm\"))}>\r\n Load Good rqxeQm\r\n \r\n
dispatch(saveProduct(saveProductData))}>\r\n ADD Product\r\n \r\n
\r\n \r\n Load dynamo by sort key\r\n \r\n dispatch(loadDynamoItemsBySK({ SK: \"SIGNUP_RESPONSE\" }))\r\n }\r\n >\r\n loadDynamoType SIGNUP_RESPONSE\r\n \r\n \r\n dispatch(loadDynamoItemsBySK({ SK: \"CONTACT_RESPONSE\" }))\r\n }\r\n >\r\n loadDynamoType CONTACT_RESPONSE\r\n \r\n \r\n dispatch(loadDynamoItemsBySK({ SK: \"CAREER_RESPONSE\" }))\r\n }\r\n >\r\n loadDynamoType CAREER_RESPONSE\r\n \r\n
\r\n \r\n load dynamo by partition key\r\n \r\n dispatch(loadDynamoFormItemByPK({ PK: \"CFR-4pi3b61t\" }))\r\n }\r\n >\r\n LOAD CFR-4pi3b61t\r\n \r\n
\r\n \r\n dispatch(loadItem(\"productDetails\", \"rqxeQm\"))}>\r\n Test Composite Load\r\n \r\n
\r\n {/* {JSON.stringify({apiResponse:\"dsd\"}, null, 2) } */}\r\n \r\n
{JSON.stringify(apiResponse, null, 2)} \r\n
\r\n {/* */}\r\n \r\n )\r\n}\r\n\r\nexport default SorinsPage2\r\n\r\nconst saveUniLocationData = {\r\n id: \"Lmnqln\",\r\n type: \"WORKPLACE\",\r\n name: \"Depozit Central\",\r\n code: \"365\",\r\n alias: null,\r\n status: \"OrganizationStatus.ACTIVE\",\r\n addressList: [\r\n {\r\n id: \"nljdrx\",\r\n type: \"HEADQUARTER\",\r\n country: \"RO\",\r\n county: \"MS\",\r\n locationId: \"rwPW3Z\",\r\n street: \"Str. Baneasa\",\r\n number: \"Nr. 8\",\r\n zipCode: null,\r\n region: null,\r\n displayAddress: \"Str. Baneasa, Nr. 8\",\r\n extern: false,\r\n longitude: null,\r\n latitude: null,\r\n email: null,\r\n mobil: null,\r\n phone: null\r\n }\r\n ],\r\n bankAccountList: [],\r\n contactList: [],\r\n contactInfo: {\r\n email: null,\r\n mobil: null,\r\n phone: null\r\n },\r\n description: null,\r\n presentationList: [],\r\n attachmentList: [],\r\n limitList: [],\r\n operatingHourList: [],\r\n hasAccess: false\r\n}\r\n\r\nconst saveUserData = {\r\n accessKeyList: [],\r\n id: null,\r\n language: \"RO\",\r\n loginName: null,\r\n name: \"Uniprest user\",\r\n newLoginName: \"uniprest@test.com\",\r\n attachmentList: [],\r\n avatar: null,\r\n contactInfo: null,\r\n department: \"TRANSPORT\",\r\n groupIds: [\"XlDbrD\"],\r\n organizationId: \"0lYvRm\",\r\n phone: null,\r\n position: \"08\",\r\n reminderList: [],\r\n status: \"UserStatus.ACTIVE\",\r\n userDirectory: \"INTERN\",\r\n workplace: null\r\n}\r\n\r\nconst saveProductData = {\r\n id: null,\r\n status: \"ACTIVE\",\r\n type: \"PRODUCT\",\r\n code: \"code123\",\r\n name: \"name123\",\r\n brandName: \"brandName123\",\r\n language: \"RO\",\r\n summary: null,\r\n description: null,\r\n unitOfMeasure: null,\r\n categoryId: \"rdxKzr\",\r\n hashtagList: null,\r\n attachmentList: [],\r\n nameAlternative: \"\",\r\n groupCode: \"\",\r\n stockable: false,\r\n sellQuantityMinim: 0,\r\n sellQuantityIncrement: 0,\r\n lastUpdateTime: null\r\n}\r\n\r\nconst mockAnswerData = {\r\n id: \"arBbr0\",\r\n type: \"ANSWER\",\r\n answer: \"My Answer Edit.\",\r\n attachemntList: null,\r\n userName: \"Uniprest user\",\r\n organizationName: \"UNIPREST\",\r\n answerTime: \"2021-06-22T12:13:18.692+0300\",\r\n questionId: \"5l7vZR\"\r\n}\r\n\r\nconst mockDocumentData = {\r\n id: \"WmGwm7\",\r\n status: \"ACTIVE\",\r\n name: \"docTest1\",\r\n description: \"docDescriptionTest1\",\r\n category: \"TECHNICAL\",\r\n attachment: null,\r\n validity: \"2021-06-22T09:20:29.339+0300\"\r\n}\r\n\r\nconst MockAnswerData = {\r\n id: \"5l7vZR\",\r\n status: \"ACTIVE\",\r\n userName: \"Uniprest user\",\r\n organizationName: \"UNIPREST\",\r\n question: \"TesztMentes van kerdes?2\",\r\n productId: \"3r27pZ\",\r\n answerList: [\r\n {\r\n id: \"5l7vZR\",\r\n type: \"ANSWER\",\r\n answer: \"TesztValasz -- Valasz 1 elso kerdesre.\",\r\n attachemntList: null,\r\n userName: \"Uniprest user\",\r\n organizationName: \"UNIPREST\",\r\n answerTime: \"2021-06-21T14:31:30.620+0300\",\r\n questionId: \"5l7vZR\",\r\n ratingId: null\r\n },\r\n {\r\n id: \"WmGwm7\",\r\n type: \"ANSWER\",\r\n answer: \"TesztValasz -- Valasz 1 elso kerdesre.\",\r\n attachemntList: null,\r\n userName: \"Uniprest user\",\r\n organizationName: \"UNIPREST\",\r\n answerTime: \"2021-06-21T14:45:21.688+0300\",\r\n questionId: \"5l7vZR\",\r\n ratingId: null\r\n },\r\n {\r\n id: \"arBbr0\",\r\n type: \"ANSWER\",\r\n answer: \"My Answer Edit.\",\r\n attachemntList: null,\r\n userName: \"Uniprest user\",\r\n organizationName: \"UNIPREST\",\r\n answerTime: \"2021-06-24T11:46:31.030+0300\",\r\n questionId: \"5l7vZR\",\r\n ratingId: null\r\n }\r\n ]\r\n}\r\n\r\nconst mockDiscountGridData = {\r\n id: \"5l7vZR\",\r\n status: \"ACTIVE\",\r\n productGroup: \"01\",\r\n clientList: [\r\n {\r\n id: \"5l7vZR\",\r\n clientId: \"5l7vZR\",\r\n discountGridId: \"5l7vZR\"\r\n }\r\n ],\r\n discount: 12,\r\n global: false\r\n}\r\n\r\nconst mockDiscountPackageData = {\r\n id: \"5l7vZR\",\r\n status: \"ACTIVE\",\r\n name: \"package1\",\r\n quantityStock: 1500.0,\r\n quantitySold: 1200.0,\r\n validityStart: \"2021-06-21T14:36:57.000+0300\",\r\n validityEnd: \"2021-06-28T14:36:57.000+0300\",\r\n global: false,\r\n goodsList: [\r\n {\r\n id: \"5l7vZR\",\r\n goodsId: \"Oro5lN\",\r\n quantity: 1.0,\r\n discount: 12.0\r\n }\r\n ],\r\n clientList: []\r\n}\r\n\r\nconst mockDiscountFixData = {\r\n id: \"5l7vZR\",\r\n status: \"ACTIVE\",\r\n productId: \"krdjql\",\r\n clientId: \"5l7vZR\",\r\n price: 1436,\r\n currencyId: \"5l7vZR\"\r\n}\r\n\r\nconst mockDiscountVolumeData = {\r\n id: \"5l7vZR\",\r\n status: \"ACTIVE\",\r\n productId: \"krdqZB\",\r\n clientList: [],\r\n volume: 12.0,\r\n unitOfMeasure: \"CUTIE\",\r\n discount: 12.0,\r\n global: false\r\n}\r\n\r\nconst mockDiscountRatingData = {\r\n id: \"5l7vZR\",\r\n status: \"ACTIVE\",\r\n userName: \"Uniprest user\",\r\n organizationName: \"UNIPREST\",\r\n review: \"blabla22\",\r\n rating: 5,\r\n reviewTime: \"2021-06-22T09:20:29.339+0300\",\r\n productId: \"ElLDPl\",\r\n answerList: [\r\n {\r\n id: \"krwylx\",\r\n type: \"ANSWER\",\r\n answer: \"Valasz 1222 elso kerdesre.\",\r\n attachemntList: null,\r\n userName: \"Uniprest user\",\r\n organizationName: \"UNIPREST\",\r\n answerTime: \"2021-06-22T09:44:38.506+0300\",\r\n questionId: null,\r\n ratingId: \"5l7vZR\"\r\n }\r\n ]\r\n}\r\n\r\nconst mockWarehouseData = {\r\n id: \"WmGwm7\",\r\n type: \"WAREHOUSE\",\r\n name: \"Warehouse12\",\r\n code: \"wareh\",\r\n alias: null,\r\n status: \"ACTIVE\",\r\n addressList: [],\r\n bankAccountList: [],\r\n contactList: [],\r\n description: null,\r\n presentationList: [],\r\n attachmentList: [],\r\n limitList: [],\r\n operatingHourList: [],\r\n hasAccess: false\r\n}\r\n\r\nconst mockBasketData = {\r\n id: \"5l7vZR\",\r\n status: \"ACTIVE\",\r\n code: \"code123\",\r\n clientId: \"5l7vZR\",\r\n deliveryAddressId: \"5l7vZR\",\r\n paymentMethodType: \"BANK_CARD\",\r\n lineList: [\r\n {\r\n id: \"5l7vZR\",\r\n goodsId: \"5l7vZR\",\r\n quantity: 22.0,\r\n unitOfMeasure: \"TNE\",\r\n vat: 11.0,\r\n unitPriceNet: 21.0,\r\n unitPriceVat: 22.0,\r\n unitPriceBrut: 33.0,\r\n discount: 11.0,\r\n valueNet: 2.0,\r\n valueVat: 3.0,\r\n valueBrut: 4.0,\r\n currencyId: \"5l7vZR\",\r\n info: \"aaaaainfo123444\"\r\n }\r\n ],\r\n totalValueNet: 22.0,\r\n totalValueVat: 33.0,\r\n totalValueBrut: 44.0,\r\n shippingCostBrut: null,\r\n currencyId: \"5l7vZR\",\r\n info: \"info123444\"\r\n}\r\n\r\nconst mockBadgeData = {\r\n id: \"5l7vZR\",\r\n name: \"Deal of the week\",\r\n description: \"details of the badge\",\r\n color: \"#FF00FF\"\r\n}\r\n","export default __webpack_public_path__ + \"static/media/LogOut.83e8d61c.svg\";","import React from \"react\"\r\nimport { rightMenuUnauthenticated, rightOpenMenu } from \"mockData/menus\"\r\nimport LogOut from \"assets/MenuIcon/Atom/Icons/LogOut.svg\"\r\nimport SvgIcon from \"components/SvgIcon/SvgIcon\"\r\n// import MB from \"components/MB\";\r\nimport { history } from \"utils/history\"\r\nimport { useSelector } from \"react-redux\"\r\nimport { logoutUser } from \"store/modules/auth\"\r\nimport { useDispatch } from \"react-redux\"\r\nimport { removeJavaToken } from \"store/justActions/javaAuth\"\r\nimport {\r\n Lang,\r\n lang,\r\n Translate,\r\n withLocalize,\r\n getTranslate\r\n} from \"components/Lang/Lang\"\r\nimport { setOnBehalfIdInState } from \"store/modules/page\"\r\nimport useWindowSize from \"utils/useWindowsSize\"\r\n\r\n\r\nexport default withLocalize(function RightOpenMenu({\r\n visible,\r\n className,\r\n translate\r\n}) {\r\n let containerClass = visible ? \"menuOpen right\" : \"menuOpen right hidden\"\r\n const dispatch = useDispatch()\r\n const windowSize = useWindowSize()\r\n const authenticatedState = useSelector((state) => state.auth?.authenticated)\r\n const companyType = useSelector((state) => state.company?.type)\r\n const userFullName = useSelector((state) => state?.user?.name)\r\n const authenticated = useSelector((state) => state.auth?.authenticated)\r\n const userPermissions = useSelector(\r\n (state) => state.auth?.userData?.role?.permissions\r\n )\r\n const isHrAdmin = userPermissions?.includes?.(\"WEBSHOP_HR_ADMIN\")\r\n const isMarketingManagerAdmin = userPermissions?.includes?.(\"WEBSHOP_MARKETING_ADMIN\")\r\n const restrictedAdminRole = isHrAdmin || isMarketingManagerAdmin\r\n const parsedRightOpenMenu = rightOpenMenu?.top?.filter?.(menuItem => {\r\n if(menuItem?.id === \"leftEntriesExcel\"\r\n && (!authenticated || windowSize?.width < 768))\r\n return false\r\n else if (menuItem?.id === \"leftEntriesOfferts\"\r\n && (!authenticated ||\r\n windowSize.width < 1340 ||\r\n !userPermissions?.includes?.(\"CUSTOMER_OFFER_READ\")))\r\n return false\r\n else if (menuItem?.id === \"others\" \r\n && windowSize?.width < 768)\r\n return false\r\n else return true\r\n })\r\n const loggedInFragment = (text) => (\r\n <>\r\n {text} \r\n \r\n {userFullName}\r\n \r\n >\r\n )\r\n\r\n const menuButtonFragment = (item, index, type = \"\") => {\r\n if (item?.name === \"menus.rightLogout\") {\r\n return (\r\n {\r\n dispatch(logoutUser())\r\n dispatch(setOnBehalfIdInState())\r\n // dispatch(removeJavaToken()) check root reducer for changes\r\n }}\r\n >\r\n {item?.icon && (\r\n
e?.preventDefault?.()}\r\n className=\"\"\r\n alt=\"logo\"\r\n src={item?.icon}\r\n />\r\n )}\r\n {item?.svg &&
}\r\n
{translate?.(item?.name)}
\r\n
\r\n )\r\n } else {\r\n return (\r\n \r\n {item?.icon && (\r\n e?.preventDefault?.()}\r\n className=\"\"\r\n alt=\"logo\"\r\n src={item?.icon}\r\n />\r\n )}\r\n {item?.svg && }\r\n {translate?.(item?.name)}
\r\n \r\n )\r\n }\r\n }\r\n\r\n const authGuestRightMenu = restrictedAdminRole ?\r\n \r\n {loggedInFragment(parsedRightOpenMenu?.find?.(i => i?.id === \"loggedInAs\")?.loggedInAs || \"\")}\r\n
\r\n :\r\n parsedRightOpenMenu?.map?.((item, index) => {\r\n if (\r\n item?.name === \"menus.rightInvoices\" &&\r\n !userPermissions?.includes?.(\"CLIENT_INVOICE_READ\")\r\n ) {\r\n return <>>\r\n } else {\r\n return \"sectionName\" in item ? (\r\n \r\n {item?.sectionName}\r\n
\r\n ) : \"loggedInAs\" in item ? (\r\n \r\n {loggedInFragment(item?.loggedInAs)}\r\n
\r\n ) : (\r\n menuButtonFragment(item, index)\r\n )\r\n }\r\n })\r\n\r\n const unauthGuestRightMenu = rightMenuUnauthenticated?.topItems?.map?.(\r\n (item, index) => menuButtonFragment(item, index)\r\n )\r\n\r\n return (\r\n <>\r\n \r\n \r\n {companyType !== \"GUEST\" ? authGuestRightMenu : unauthGuestRightMenu}\r\n
\r\n\r\n {companyType !== \"GUEST\" && (\r\n \r\n {rightOpenMenu.bottom?.map?.((item, index) => {\r\n if(restrictedAdminRole && item?.id === \"menus.rightGoToCompany\")\r\n return null\r\n return menuButtonFragment(item, index, \"grey\")\r\n })}\r\n
\r\n )}\r\n \r\n >\r\n )\r\n})\r\n","import React, { useEffect, useState } from \"react\"\r\nimport {\r\n adminTopMenu,\r\n leftMenu,\r\n rightMenu,\r\n adminBottomMenu,\r\n rightMenuUnauthenticated\r\n} from \"mockData/menus\"\r\nimport MagicButton from \"components/MagicButton/MagicButtonV3\"\r\nimport MB from \"components/MB/MB\"\r\nimport { useDispatch } from \"react-redux\"\r\nimport { useHistory } from \"react-router\"\r\nimport { setCollapsedMenu, setOnBehalfIdInState } from \"store/modules/page\"\r\nimport { useSelector } from \"store\"\r\nimport { logoutUser } from \"store/modules/auth\"\r\nimport { removeJavaToken } from \"store/justActions/javaAuth\"\r\nimport { createNewImport, loadImports } from \"store/justActions/lists\"\r\n//import ReactDOMServer from 'react-dom/server'\r\nimport {\r\n Lang,\r\n lang,\r\n Translate,\r\n withLocalize,\r\n getTranslate\r\n} from \"components/Lang/Lang\"\r\nimport useWindowSize from \"utils/useWindowsSize\"\r\n\r\nexport default withLocalize(function SideMenuClosed(props) {\r\n const dispatch = useDispatch()\r\n const history = useHistory()\r\n const { left, leftHandler, rightHandler } = props\r\n const closeOpenMenusIfOpen = () => {\r\n left ? rightHandler(true) : leftHandler(true)\r\n }\r\n const translate = props.translate\r\n const windowSize = useWindowSize()\r\n const collapsedMenu = useSelector((state) => state?.page?.collapsedMenu)\r\n const url = window.location.pathname?.split?.(\"/\")\r\n const authenticatedState = useSelector((state) => state.auth?.authenticated)\r\n const userPermissions = useSelector(\r\n (state) => state.auth?.userData?.role?.permissions\r\n )\r\n\r\n const filteredRightMenu = rightMenu?.topItems?.filter?.(menuItem => {\r\n if(menuItem?.id === \"rightInvoices\" && !userPermissions?.includes?.(\"CLIENT_INVOICE_READ\"))\r\n return false\r\n if(menuItem?.id === \"leftEntriesOfferts\"\r\n && !userPermissions?.includes?.(\"CUSTOMER_OFFER_READ\"))\r\n return false\r\n else if(menuItem?.id === \"leftEntriesOfferts\"\r\n && windowSize.width < 1340)\r\n return false\r\n else if(menuItem?.id === \"leftEntriesExcel\"\r\n && windowSize.width < 768)\r\n return false\r\n else return true\r\n })\r\n const filteredLeftMenu = leftMenu?.topItems\r\n // ?.filter?.(menuItem => {\r\n // if(menuItem?.id === \"leftEntriesOfferts\"\r\n // && !userPermissions?.includes?.(\"CUSTOMER_OFFER_READ\"))\r\n // return false\r\n // else if(menuItem?.id === \"leftEntriesOfferts\"\r\n // && windowSize.width < 1340)\r\n // return false\r\n // else if(menuItem?.id === \"leftEntriesExcel\"\r\n // && windowSize.width < 768)\r\n // return false\r\n // else return true\r\n\r\n // })\r\n\r\n\r\n\r\n useEffect(() => {\r\n // dispatch(setCollapsedMenu(false))\r\n }, [])\r\n const menuButton = (itemIn, index) => {\r\n const nameString = translate?.(itemIn?.name) //gettranslate?.(`${itemIn?.name}`)\r\n // {\r\n // ({ translate }) => translate?.(`${itemIn?.name}`)\r\n // } \r\n //`${lang(itemIn?.name)}`\r\n const item = { ...itemIn, name: nameString }\r\n return (\r\n {\r\n dispatch(logoutUser())\r\n dispatch(setOnBehalfIdInState())\r\n // dispatch(removeJavaToken()) check root reducer for changes\r\n closeOpenMenusIfOpen()\r\n }\r\n\r\n : () => closeOpenMenusIfOpen()\r\n }\r\n {...item}\r\n />\r\n )\r\n }\r\n\r\n const openEditMode = () => {\r\n if (url?.[url?.length - 1] !== \"edit\")\r\n history?.push?.(\r\n `${window.location.pathname}/edit${window.location.search ?? \"\"}`\r\n )\r\n }\r\n\r\n const backButton = {\r\n name: \"Back\",\r\n svg: \"back\",\r\n onClick: () => {\r\n dispatch(setCollapsedMenu(false))\r\n }\r\n }\r\n\r\n const formButtons = [\r\n {\r\n name: \"View\",\r\n svg: \"details\",\r\n url: `/${url?.[1]}/${url?.[1]}/form`,\r\n onClick: () =>\r\n history?.push?.(\r\n window.location.search\r\n ? `/${url?.[1]}/${url?.[1]}/form${window.location.search}`\r\n : `/${url?.[1]}/${url?.[1]}/`\r\n )\r\n },\r\n {\r\n name: \"Edit\",\r\n svg: \"edit\",\r\n url: `/${url?.[1]}/${url?.[1]}/form/edit`,\r\n onClick: () => openEditMode()\r\n },\r\n {\r\n name: \"Add\",\r\n svg: \"expand\",\r\n url: `/${url?.[1]}/${url?.[1]}/form/add`\r\n }\r\n ]\r\n\r\n let menuEntries\r\n const section = url?.[1]\r\n const directProductPage = url?.[2] === \"pd\"\r\n const directCategoryPage = url?.[2] === \"ct\"\r\n if (section !== \"admin\" || directProductPage || directCategoryPage) {\r\n if (left)\r\n menuEntries = authenticatedState\r\n ? {\r\n ...leftMenu,\r\n topItems: filteredLeftMenu?.filter?.(\r\n (i) => i.id !== \"leftEntriesCareers\"\r\n ),\r\n bottomItems: undefined\r\n }\r\n : {\r\n ...leftMenu,\r\n topItems: filteredLeftMenu?.filter?.(\r\n (i) =>\r\n ![\r\n \"leftEntriesExcel\",\r\n \"leftEntriesOfferts\"\r\n ]?.includes?.(i?.id)\r\n )\r\n }\r\n else menuEntries = authenticatedState ? {...rightMenu, topItems: filteredRightMenu} : rightMenuUnauthenticated\r\n }\r\n\r\n const getAdminLeftItems = () => {\r\n if (collapsedMenu) {\r\n // let activeSection = leftAdminMenu?.find?.(item => item?.split?.[1] === url?.[1])\r\n let activeSection = adminTopMenu?.find?.(\r\n (item) => item?.url?.split?.(\"/\")[2] === url?.[2]\r\n )\r\n return [{ ...backButton }, { ...activeSection, active: true }]\r\n } else\r\n return adminTopMenu?.map?.((item) => ({\r\n ...item,\r\n url: undefined,\r\n onClick: () => {\r\n history?.push?.(item?.url)\r\n if (item?.subMenu) dispatch(setCollapsedMenu(true))\r\n },\r\n active: window.location.pathname?.includes?.(item?.url)\r\n }))\r\n }\r\n\r\n const getAdminRightItems = () => {\r\n if (url?.[url?.length - 1] !== \"form\")\r\n return adminTopMenu?.find?.(\r\n (item) => item?.url?.split?.(\"/\")[2] === url?.[2]\r\n )?.rightTopButtons\r\n else return formButtons\r\n }\r\n\r\n if (section === \"admin\") {\r\n if (left)\r\n menuEntries = {\r\n topItems: getAdminLeftItems(),\r\n bottomItems: adminBottomMenu\r\n }\r\n if (!left) menuEntries = { topItems: getAdminRightItems() }\r\n }\r\n\r\n return (\r\n \r\n \r\n {menuEntries?.topItems?.map?.((item, index) => menuButton(item, index))}\r\n \r\n {authenticatedState && (\r\n \r\n {menuEntries?.bottomItems?.map?.((item, index) =>\r\n menuButton(item, index)\r\n )}\r\n
\r\n )}\r\n \r\n )\r\n})\r\n\r\n//change\r\n","import SvgIcon from \"components/SvgIcon\"\r\nimport \"./menusearch.scss\"\r\nimport { useDispatch, useSelector } from \"react-redux\"\r\nimport {\r\n clearMenuSearchItems,\r\n setMenuSearchItems,\r\n setMenuSearchString\r\n} from \"store/modules/shop\"\r\nimport MB from \"components/MB\"\r\nimport { useEffect, useState } from \"react\"\r\nimport { searchStuff } from \"store/modules/dataView.search\"\r\nimport searchDATA from \"mockData/searchList\"\r\nimport useShowModalOutsideClick from \"utils/useShowModalOutsideClick\"\r\nimport { goToProductDetails, createUrlPrefix } from \"utils/history\"\r\nimport { category } from \"mockData/imgCategory\"\r\n\r\nconst getEntityUrl = (entity, id) => {\r\n switch (entity) {\r\n case \"GOODS\":\r\n return `/shop/details?id=${id}`\r\n // UNCOMMENT AND EDIT THESE IF custom url tags are needed:\r\n // return `/shop/details/${createUrlPrefix({\r\n // customTags: [\"mocktag1\", \"mocktag2\"],\r\n // customUrl: \"customUrl\"\r\n // })}?id=${id}`\r\n case \"ORDER\":\r\n return `/shop/orders/details?id=${id}&source=EXTERNAL`\r\n case \"CLIENT_INVOICE\":\r\n return `/shop/invoice/details?id=${id}`\r\n case \"BASKET\":\r\n return `/shop/orders/details?id=${id}&source=INTERNAL`\r\n default:\r\n return `/shop/details/${createUrlPrefix({\r\n // UNCOMMENT AND EDIT THESE IF custom url tags are needed:\r\n // customTags: [\"mocktag1\", \"mocktag2\"],\r\n // customUrl: \"customUrl\"\r\n })}?id=${id}`\r\n }\r\n}\r\nconst MenuSearch = (props) => {\r\n const { palceholder } = props\r\n\r\n const dispatch = useDispatch()\r\n const query = useSelector((state) => state.shop.menuSeachString)\r\n const items = useSelector((state) => state.shop.menuSearchItems)\r\n const { categories, all, seeAll, icons } = searchDATA\r\n\r\n const hideStuff = () => {\r\n dispatch(setMenuSearchString(\"\"))\r\n dispatch(clearMenuSearchItems())\r\n }\r\n\r\n const { setShowModal, ref } = useShowModalOutsideClick({\r\n handleOutsideClick: hideStuff\r\n })\r\n\r\n const dbList =\r\n items?.length > 0\r\n ? items?.map?.((item) => ({\r\n ...item,\r\n category: item?.entity, //\"produse\",\r\n icon: icons?.[item?.entity], //\"invoice\",//fuckturi//\"cartempty\"//basket,//\"warehouse\"//conemzi,//\"Onlinestore\",//prod\r\n // image: item?.mainImage?.reference, //not used\r\n /* url: `/shop/details?id=${item?.id}`, */\r\n /* (id, customTags = [\"mocktag1\",\"mocktag2\"], customUrl=\"customUrl\") => */\r\n url: getEntityUrl(item?.entity, item?.id) //`${detailUrls?.[item?.entity]}${item?.id}`\r\n //goToProductDetails } from \"utils/history\";\r\n // {\r\n // \"id\": \"ZvYb5r\",\r\n // \"name\": \"PURMO MAURITIUS 1754/600\",\r\n // \"code\": \"RELE15207965\",\r\n // \"info\": null,\r\n // \"entity\": \"GOODS\"\r\n // },\r\n // {\r\n // \"id\": \"ZzzBnZ\",\r\n // \"name\": null,\r\n // \"code\": \"65079659\",\r\n // \"info\": null,\r\n // \"entity\": \"CLIENT_INVOICE\"\r\n // }\r\n }))\r\n : []\r\n\r\n useEffect(() => {\r\n // if (query?.length > 2) dispatch(searchStuff({searchTerm:query, target: \"menuSearch\", reload:true, pageSize:10}))\r\n // else hideStuff()\r\n }, [query])\r\n useEffect(() => {\r\n return () => {\r\n hideStuff()\r\n }\r\n }, [])\r\n const showDropdown = (e) => {\r\n dispatch(setMenuSearchString(e?.target?.value))\r\n setShowModal(true)\r\n if (e?.target?.value?.length > 2) {\r\n //call api to get results\r\n dispatch(setMenuSearchItems(e?.target?.value))\r\n } else\r\n dispatch(clearMenuSearchItems());\r\n }\r\n const [typingTimer, setTypingTimer] = useState(null)\r\n const delayConfig = 1000\r\n useEffect(() => {\r\n //timer reset, in case it was started before\r\n if (typingTimer) {\r\n clearTimeout(typingTimer)\r\n setTypingTimer(null)\r\n }\r\n //starts the timer, and after a preconfigured delay it will trigger the search dispatch\r\n const timer = setTypingTimer(\r\n setTimeout(() => {\r\n if (query?.length > 2) {\r\n //call api to get results\r\n // dispatch(setMenuSearchItems())\r\n dispatch(\r\n searchStuff({\r\n searchTerm: query,\r\n type: \"global\",\r\n target: \"menuSearch\",\r\n reload: true,\r\n pageSize: 10\r\n })\r\n )\r\n } else dispatch(clearMenuSearchItems())\r\n\r\n }, delayConfig)\r\n )\r\n return () => {\r\n clearTimeout(timer)\r\n }\r\n }, [query])\r\n\r\n /**\r\n * This entire Search component has been deactivated as per the request of the client.\r\n * (The global search and plus product search proved to be confusing for the users.)\r\n */\r\n return null\r\n\r\n return (\r\n \r\n
showDropdown(e)}\r\n value={query}\r\n />\r\n
0 ? \"opened\" : \"\"}`}>\r\n {dbList?.length &&\r\n Object?.keys?.(categories || {})?.map?.((categoryKey) => {\r\n let products = dbList?.filter?.(\r\n (item) => item?.category === categoryKey\r\n )\r\n let productsCount = products?.length\r\n\r\n if (!productsCount) return \"\"\r\n return (\r\n
\r\n
\r\n {categories?.[categoryKey]} \r\n \r\n {all?.label}\r\n \r\n \r\n
\r\n {products?.map?.((item, i) => {\r\n let productName = item?.name ?? item?.code\r\n let index = productName\r\n ?.toLowerCase?.()\r\n ?.indexOf?.(query?.toLowerCase?.())\r\n if (index >= 0) {\r\n productName =\r\n productName?.substring?.(0, index) +\r\n \"\" +\r\n productName?.substring?.(index, index + query?.length) +\r\n \" \" +\r\n productName?.substring?.(index + query?.length)\r\n }\r\n\r\n //const placeholder = '/images/new-placeholder.svg'\r\n //const prodImage = \r\n return (\r\n \r\n \r\n {/*prodImage*/}\r\n {item?.icon && (\r\n \r\n \r\n
\r\n )}\r\n \r\n \r\n \r\n )\r\n })}\r\n \r\n
\r\n )\r\n })}\r\n\r\n {/* { dbList?.length > 0 &&
} */}\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default MenuSearch\r\n","export default __webpack_public_path__ + \"static/media/UniLogo1.57d9d0ad.svg\";","import React from \"react\"\r\nimport UniLogo from \"assets/UniLogo1.svg\"\r\nimport { Link } from \"react-router-dom\"\r\n\r\nfunction HomePageLogoButton(props) {\r\n const { companyType, shouldNotRenderAsLink } = props\r\n const userHomePage = React.useMemo(\r\n () => (companyType === \"GUEST\" ? \"/\" : \"/shop/dashboard\"),\r\n [companyType]\r\n )\r\n\r\n const logoImage = e?.preventDefault?.()}\r\n className={`logo ${shouldNotRenderAsLink && \"noHoverEffect\"}`}\r\n alt=\"logo\"\r\n src={UniLogo}\r\n />\r\n\r\n return (\r\n shouldNotRenderAsLink\r\n ?\r\n logoImage\r\n :\r\n \r\n {logoImage}\r\n \r\n )\r\n}\r\n\r\nexport default HomePageLogoButton\r\n","import MyLink from 'components/MyLink'\r\nimport React from 'react'\r\nimport SvgIcon from \"components/SvgIcon/SvgIcon\"\r\nimport useCampaignInfo, { campaignConfig } from 'views/shoppingCart/useCampaignInfo'\r\n\r\nconst ShopLayoutFloatingButton = () => {\r\n\r\n const { shouldShowFloatingButton } = useCampaignInfo()\r\n\r\n if(!shouldShowFloatingButton) return null\r\n\r\n return \r\n
\r\n \r\n {campaignConfig.name}\r\n \r\n
\r\n \r\n
\r\n}\r\n\r\nexport default ShopLayoutFloatingButton\r\n","import React from \"react\"\r\n\r\n// import Menu from \"assets/MenuIcon/Atom/Icons/Menu.svg\";\r\n// import User from \".assets/MenuIcon/Atom/Icons/User.svg\";\r\n// import CartEmpty from \".assets/MenuIcon/Atom/Icons/CartEmpty.svg\";\r\n// import ALERT from \".assets/MenuIcon/Atom/Icons/ALERT.svg\";\r\n\r\nimport LeftOpenMenu from \"components/LeftOpenMenu\"\r\nimport RightOpenMenu from \"components/RightOpenMenu\"\r\nimport { useState } from \"react\"\r\nimport MagicButton from \"components/MagicButton\"\r\nimport SideMenuClosed from \"components/SideMenuClosed/SideMenuClosedV2\"\r\nimport Footer from \"components/Footer/Footer\"\r\nimport MenuSearch from \"views/dev/gyula/MenuSearch\"\r\nimport { useHistory } from \"react-router\"\r\nimport { useSelector, useDispatch } from \"store\"\r\n// import { useSelector } from '.store';\r\n\r\nimport { isIOS } from \"react-device-detect\"\r\nimport { selectTotalItems } from \"store/selectors/shopPage.selector\"\r\n// import { shoppingCartSelector } from \"store/selectors/dataView/dataView.productsListFinal.selector\";\r\nimport { useUserInfo } from \"utils/useUserInfo\"\r\nimport { getInitialsFromName } from \"utils/stringUtils\"\r\nimport { setScrollPostion } from \"store/modules/page\"\r\nimport HomePageLogoButton from \"components/customButtons/HomePageLogoButton\"\r\nimport { Lang, lang, Translate, withLocalize } from \"components/Lang/Lang\"\r\nimport { Link } from \"react-router-dom\"\r\nimport SvgIcon from \"components/SvgIcon/SvgIcon.jsx\"\r\nimport useIsLogged from \"utils/useIsLogged\"\r\nimport { campaignConfig, isCampaignPartiallyActive } from \"views/shoppingCart/useCampaignInfo\"\r\nimport MyLink from \"components/MyLink\"\r\nimport { isCampaignActive } from \"utils/dateUtils\"\r\nimport ShopLayoutFloatingButton from \"layouts/shop/ShopLayoutFloatingButton.jsx\"\r\n\r\n\r\nfunction ShopLayout({ children, translate }) {\r\n const [showLeftMenu, setShowLeftMenu] = useState(false)\r\n const [showRightMenu, setShowRightMenu] = useState(false)\r\n const [showHamburger, setShowHamburger] = useState(false)\r\n // const shoppingCart = useSelector(state => state.shop.cart)\r\n const { totalCartItems } = useSelector((state) => selectTotalItems(state))\r\n // const authenticatedState = useSelector(state => state.auth?.authenticated)\r\n // const companyType = useSelector(state => state.company?.type)\r\n // const { products } = useSelector((state) => shoppingCartSelector(state))\r\n const { groupId, isPublic, companyType, name } = useUserInfo()\r\n // const productsInCart = useSelector((state) => state.shop?.cartData?.lineList)\r\n const productsInCart = useSelector((state) => state.shop?.cartData?.productCount)\r\n const userFullName = useSelector((state) =>\r\n state?.user?.name?.split?.(\" \")?.slice?.(-1)?.join?.(\" \")\r\n )\r\n // const storedScrollPosition = useSelector(state => state?.page?.setScrollPosition)\r\n const yPageScrollPos = useSelector((state) => state?.page?.yPageScrollPos)\r\n const userPermissions = useSelector(\r\n (state) => state.auth?.userData?.role?.permissions\r\n )\r\n\r\n const history = useHistory()\r\n // const cart = useSelector(state => state.shop.cart)\r\n const dispatch = useDispatch()\r\n const isCampaignPeriod = isCampaignPartiallyActive()\r\n const isLogged = useIsLogged()\r\n\r\n const leftHandler = (hide) => {\r\n setShowLeftMenu((e) => hide ? false : !e)\r\n setShowRightMenu(false)\r\n setShowHamburger((e) => hide ? false : !e)\r\n }\r\n\r\n const rightHandler = (hide) => {\r\n setShowRightMenu((e) => hide ? false : !e)\r\n setShowLeftMenu(false)\r\n setShowHamburger(false)\r\n }\r\n\r\n const cartButtonClick = () => {\r\n dispatch(setScrollPostion(yPageScrollPos))\r\n setTimeout(() => history?.push?.(\"/shop/cart\"), 20)\r\n }\r\n return (\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n\r\n {/* Please do not change the class-name pageContent as \r\n it is needed in by the pagination (in the shop) to \r\n scroll to the top when navigating to another page. */}\r\n\r\n \r\n \r\n \r\n {children} \r\n \r\n {/* {children} \r\n */}\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default withLocalize(ShopLayout)\r\n","import React, { useEffect } from \"react\"\r\nimport { leftMenu, rightMenu } from \"../../mockData/menus\"\r\nimport MagicButton from \"components/MagicButton/MagicButtonV3\"\r\nimport MB from \"components/MB/MB\"\r\nimport { useDispatch } from \"react-redux\"\r\nimport { useHistory } from \"react-router\"\r\nimport {\r\n setCollapsedMenu,\r\n setLeftMenuItems,\r\n setOnBehalfIdInState,\r\n setPageEdit\r\n} from \"store/modules/page\"\r\nimport { useSelector } from \"store\"\r\nimport { adminLeftMenu, adminBottomMenu, adminHRLeftMenu, adminMarketingManagerLeftMenu } from \"mockData/adminMenu\"\r\nimport { logoutUser } from \"store/modules/auth\"\r\nimport {\r\n Lang,\r\n lang,\r\n Translate,\r\n withLocalize,\r\n getTranslate\r\n} from \"components/Lang/Lang\"\r\nimport { removeJavaToken } from \"store/justActions/javaAuth\"\r\n\r\nexport default withLocalize(function SideMenuClosed(props) {\r\n const dispatch = useDispatch()\r\n const history = useHistory()\r\n const { left } = props\r\n const translate = props.translate\r\n const collapsedMenu = useSelector((state) => state?.page?.collapsedMenu)\r\n const leftMenuItems = useSelector((state) => state?.page?.leftMenuItems)\r\n const isEdit = useSelector((state) => state.page?.isEdit)\r\n const groupName = useSelector(\r\n (state) => state.auth?.userData?.role?.groupName\r\n )\r\n const userPermissions = useSelector(\r\n (state) => state.auth?.userData?.role?.permissions)\r\n const isHrAdmin = userPermissions?.includes?.(\"WEBSHOP_HR_ADMIN\")\r\n const isMarketingManagerAdmin = userPermissions?.includes?.(\"WEBSHOP_MARKETING_ADMIN\")\r\n const crtUrl = window.location.pathname\r\n const url = crtUrl?.split?.(\"/\")\r\n useEffect(() => {\r\n // dispatch(setCollapsedMenu(false))\r\n // if (!leftMenuItems?.[0]) dispatch(setLeftMenuItems(adminLeftMenu))\r\n // const children = adminLeftMenu?.find?.(item => crtUrl === item?.url)?.children\r\n // if (children) dispatch(setLeftMenuItems(children))\r\n // else dispatch(setLeftMenuItems(adminLeftMenu))\r\n dispatch(setLeftMenuItems(getInitialMenuBasedOnRole(isHrAdmin, isMarketingManagerAdmin)))\r\n }, [userPermissions])\r\n const menuButton = (itemIn, index) => {\r\n const nameString = itemIn?.name ? translate?.(itemIn?.name) : ''\r\n const item = { ...itemIn, name: nameString }\r\n return (\r\n {\r\n dispatch(setOnBehalfIdInState())\r\n dispatch(logoutUser())\r\n // dispatch(removeJavaToken()) check root reducer for changes\r\n }\r\n : undefined\r\n }\r\n {...item}\r\n />\r\n )\r\n }\r\n\r\n const backButton = {\r\n name: \"Back\",\r\n svg: \"back\",\r\n onClick: () => {\r\n dispatch(setLeftMenuItems(getInitialMenuBasedOnRole(isHrAdmin, isMarketingManagerAdmin)))\r\n }\r\n }\r\n const roForm = leftMenuItems?.find?.((item) =>\r\n item?.url?.includes?.(url?.slice?.(0, url?.length - 1)?.join?.(\"/\"))\r\n )?.roForm\r\n const formButtons = [\r\n {\r\n ...backButton,\r\n onClick: () => history?.push?.(backFromForm())\r\n },\r\n {\r\n name: \"View\",\r\n svg: \"details\",\r\n url: undefined,\r\n selected: !isEdit,\r\n onClick: () => dispatch(setPageEdit(false))\r\n },\r\n !roForm && {\r\n name: \"Edit\",\r\n svg: \"edit\",\r\n url: undefined,\r\n selected: isEdit,\r\n // active: url?.[url?.length-1] === \"edit\",\r\n onClick: () => dispatch(setPageEdit(true))\r\n }\r\n ]\r\n\r\n let menuEntries\r\n const section = url?.[1]\r\n if (section === \"shop\") {\r\n if (left) menuEntries = leftMenu\r\n else menuEntries = rightMenu\r\n }\r\n\r\n const backFromForm = () => {\r\n let lastIndex = 1\r\n if (url[url.length - 2] === \"form\") lastIndex = 2\r\n\r\n return url?.slice?.(0, url?.length - lastIndex)?.join?.(\"/\") + \"/list\"\r\n }\r\n const getAdminLeftItems = (defaultMenus) => {\r\n if (url?.[url?.length - 1] === \"form\" || url?.[url?.length - 2] === \"form\")\r\n return formButtons\r\n\r\n return leftMenuItems?.map?.((item) => ({\r\n ...item,\r\n url: undefined, //- if undefined, it will be simple button, not Link\r\n onClick: () => {\r\n if (item?.svg === \"back\") {\r\n dispatch(setLeftMenuItems(defaultMenus))\r\n setTimeout(() => history?.push?.(\"/admin/dashboard\"), 10)\r\n } else {\r\n const children = item?.children\r\n if (children) dispatch(setLeftMenuItems([backButton, ...children || []]))\r\n setTimeout(() => {\r\n if (item?.isExternal) {\r\n window.location.href = `https://${window.location.host}${item?.url}`;\r\n } else {\r\n history?.push?.(item?.url)\r\n }\r\n }, 10)\r\n }\r\n },\r\n active: window.location.pathname === item?.url\r\n }))\r\n }\r\n\r\n if (section === \"admin\") {\r\n if (left)\r\n menuEntries = {\r\n topItems: getAdminLeftItems(getInitialMenuBasedOnRole(isHrAdmin, isMarketingManagerAdmin)),\r\n bottomItems: adminBottomMenu\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n {menuEntries?.topItems?.map?.(\r\n (item, index) =>\r\n !item?.rejectedGroups?.includes?.(groupName) &&\r\n menuButton(item, index)\r\n )}\r\n \r\n \r\n {menuEntries?.bottomItems?.map?.((item, index) =>\r\n menuButton(item, index)\r\n )}\r\n
\r\n \r\n )\r\n})\r\n\r\nconst getInitialMenuBasedOnRole = (isHrAdmin, isMarketingManagerAdmin) => {\r\n if (isHrAdmin) return adminHRLeftMenu\r\n if (isMarketingManagerAdmin) return adminMarketingManagerLeftMenu\r\n return adminLeftMenu\r\n}","import React from \"react\"\r\n\r\n// import Menu from \"assets/MenuIcon/Atom/Icons/Menu.svg\";\r\n// import User from \".assets/MenuIcon/Atom/Icons/User.svg\";\r\n// import CartEmpty from \".assets/MenuIcon/Atom/Icons/CartEmpty.svg\";\r\n// import ALERT from \".assets/MenuIcon/Atom/Icons/ALERT.svg\";\r\n\r\nimport LeftOpenMenu from \"components/LeftOpenMenu\"\r\nimport RightOpenMenu from \"components/RightOpenMenu\"\r\nimport { useState } from \"react\"\r\nimport MagicButton from \"components/MagicButton\"\r\nimport SideMenuClosed from \"components/SideMenuClosed/SideMenuClosedV3\"\r\n// import Footer from 'components/Footer/Footer';\r\nimport MenuSearch from \"views/dev/gyula/MenuSearch\"\r\nimport { useSelector } from \"store\"\r\n// import { useSelector } from '.store';\r\n\r\nimport { isIOS } from \"react-device-detect\"\r\nimport { useUserInfo } from \"utils/useUserInfo\"\r\nimport { getInitialsFromName } from \"utils/stringUtils\"\r\nimport HomePageLogoButton from \"components/customButtons/HomePageLogoButton\"\r\nimport { Lang, lang, Translate, withLocalize } from \"components/Lang/Lang\"\r\nfunction AdminLayout({ children, translate }) {\r\n const [showLeftMenu, setShowLeftMenu] = useState(false)\r\n const [showRightMenu, setShowRightMenu] = useState(false)\r\n const [showHamburger, setShowHamburger] = useState(false)\r\n const { isPublic, name } = useUserInfo()\r\n\r\n const shoppingCart = useSelector((state) => state.shop.cart)\r\n const userFullName = useSelector((state) =>\r\n state?.user?.name?.split?.(\" \")?.slice?.(-1)?.join?.(\" \")\r\n )\r\n // const cart = useSelector(state => state.shop.cart)\r\n const userPermissions = useSelector(\r\n (state) => state.auth?.userData?.role?.permissions\r\n )\r\n const isHrAdmin = userPermissions?.includes?.(\"WEBSHOP_HR_ADMIN\")\r\n const isMarketingManagerAdmin = userPermissions?.includes?.(\"WEBSHOP_MARKETING_ADMIN\")\r\n const restrictedAdminRole = isHrAdmin || isMarketingManagerAdmin\r\n const leftHandler = (e) => {\r\n setShowLeftMenu((e) => restrictedAdminRole ? e : !e)\r\n setShowRightMenu(false)\r\n setShowHamburger((e) => restrictedAdminRole ? e : !e)\r\n }\r\n\r\n const rightHandler = (e) => {\r\n setShowRightMenu((e) => !e)\r\n setShowLeftMenu(false)\r\n setShowHamburger(false)\r\n }\r\n\r\n return (\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {children} \r\n {/* {children} \r\n */}\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default withLocalize(AdminLayout)\r\n","export default __webpack_public_path__ + \"static/media/Menu.6c109d7c.svg\";","import { Redirect } from \"react-router\"\r\nimport { myLazy } from \"utils/myLazy\"\r\n\r\nexport const adminCompanyRoutes = [\r\n // client companies list\r\n {\r\n exact: true,\r\n path: \"/admin/company/client/list\",\r\n component: myLazy(() => import(\"../views/admin/companies/companyTable\"))\r\n },\r\n\r\n {\r\n exact: false,\r\n path: \"/admin/company/client/form\",\r\n component: myLazy(() => import(\"../views/admin/companies/companyForm\"))\r\n },\r\n //===================================================================\r\n // delivery address\r\n {\r\n exact: true,\r\n path: \"/admin/company/delivery/list\",\r\n component: myLazy(() => import(\"../views/admin/adreseDeLivrari/List\"))\r\n },\r\n\r\n {\r\n exact: false,\r\n path: \"/admin/company/delivery/form\",\r\n component: myLazy(() =>\r\n import(\"../views/admin/deliveryFormPage/deliveryFormPage\")\r\n )\r\n },\r\n //===================================================================\r\n // delivery location\r\n {\r\n exact: true,\r\n path: \"/admin/company/towns/list\",\r\n component: myLazy(() =>\r\n import(\"../views/admin/deliveryLocation/deliveryLocationList\")\r\n )\r\n },\r\n\r\n {\r\n exact: false,\r\n path: \"/admin/company/towns/form\",\r\n component: myLazy(() =>\r\n import(\"../views/admin/deliveryLocation/deliveryLocationForm\")\r\n )\r\n },\r\n //===================================================================\r\n // account requests\r\n {\r\n exact: true,\r\n path: \"/admin/company/accountrequests/list\",\r\n component: myLazy(() => import(\"../views/admin/accountRequests/List\")) // DONE\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/company/accountrequests/form\",\r\n component: myLazy(() =>\r\n import(\"../views/admin/accountRequests/accountRequestForm\")\r\n ) // DONE\r\n },\r\n //===================================================================\r\n {\r\n exact: true,\r\n path: \"/admin/company/dashboard\",\r\n component: myLazy(() => import(\"../views/admin/unifiedDashboard\"))\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/company\",\r\n component: () => \r\n }\r\n]\r\n","import { Redirect } from \"react-router\"\r\nimport { myLazy } from \"utils/myLazy\"\r\n\r\nexport const adminGuestRoutes = [\r\n //===================================================================\r\n //7.1 News\r\n {\r\n exact: true,\r\n path: \"/admin/guest/news/list\",\r\n component: myLazy(() => import(\"views/admin/news/List\"))\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/guest/news/form\",\r\n component: myLazy(() => import(\"views/admin/news/articleForm\"))\r\n },\r\n //===================================================================\r\n //tutorials\r\n {\r\n exact: true,\r\n path: \"/admin/guest/tutorials/list\",\r\n component: myLazy(() => import(\"views/admin/tutorials/tutorialList\"))\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/guest/tutorials/form\",\r\n component: myLazy(() => import(\"views/admin/tutorials/tutorialForm\"))\r\n },\r\n //7.2 Jobs - list and form\r\n {\r\n exact: true,\r\n path: \"/admin/guest/job/list\",\r\n component: myLazy(() => import(\"views/admin/avaliableJobs/avaliableJobs\")) // DONE\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/guest/job/form\",\r\n component: myLazy(() => import(\"views/admin/avaliableJobs/addJob\"))\r\n },\r\n\r\n //===================================================================\r\n //7.3 Aplicanti\r\n {\r\n exact: true,\r\n path: \"/admin/guest/candidate/list\",\r\n component: myLazy(() => import(\"views/admin/aplicanti/List\"))\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/guest/candidate/form\",\r\n component: myLazy(() => import(\"views/admin/aplicanti/applicantFormPage\"))\r\n },\r\n //===================================================================\r\n //7.4 Contact - list and form\r\n {\r\n exact: true,\r\n path: \"/admin/guest/contact/list\",\r\n component: myLazy(() => import(\"views/admin/contactListAndForm/contactList\")) // DONE\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/guest/contact/form\",\r\n component: myLazy(() => import(\"views/admin/contactListAndForm/contactForm\")) // DONE\r\n },\r\n\r\n //===================================================================\r\n //7.5 Locatii uniprest\r\n {\r\n exact: true,\r\n path: \"/admin/guest/location/list\",\r\n component: myLazy(() => import(\"views/admin/location/List\"))\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/guest/location/form\",\r\n component: myLazy(() => import(\"views/admin/location/LocationForm.jsx\"))\r\n },\r\n\r\n //===================================================================\r\n {\r\n exact: true,\r\n path: \"/admin/guest/dashboard\",\r\n component: myLazy(() => import(\"views/admin/unifiedDashboard\"))\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/guest\",\r\n component: () => \r\n }\r\n]\r\n","import { Redirect } from \"react-router\"\r\nimport { myLazy } from \"utils/myLazy\"\r\n\r\nexport const adminProductRoutes = [\r\n {\r\n exact: true,\r\n path: \"/admin/product/b2b/list\",\r\n component: myLazy(() => import(\"views/admin/product/productList\")) // DONE\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/product/b2b/form\",\r\n component: myLazy(() => import(\"views/admin/product/productForm/productForm\")) // DONE\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/product/b2brelations/list\",\r\n component: myLazy(() =>\r\n import(\"views/admin/product/relationList/relationList\")\r\n ) // DONE\r\n },\r\n {\r\n exact: true,\r\n path: \"/admin/product/compano/list\",\r\n component: myLazy(() => import(\"views/admin/product/companoList\")) // DONE\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/product/compano/form\",\r\n component: myLazy(() =>\r\n import(\"views/admin/product/productCompanoForm/productCompanoForm\")\r\n )\r\n },\r\n\r\n //===================================================================\r\n //4.3\r\n {\r\n exact: true,\r\n path: \"/admin/product/discount/list\",\r\n component: myLazy(() => import(\"views/admin/product/grilaDiscounts/List\")) // DONE\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/product/discount/form\",\r\n component: myLazy(() =>\r\n import(\"views/admin/product/grilaDiscounts/GrilaForm\")\r\n )\r\n },\r\n //===================================================================\r\n //4.4 - Preturi nete nete\r\n {\r\n exact: true,\r\n path: \"/admin/product/net/list\",\r\n component: myLazy(() => import(\"views/admin/product/price/List\")) // DONE\r\n },\r\n\r\n {\r\n exact: false,\r\n path: \"/admin/product/net/form\",\r\n component: myLazy(() => import(\"views/admin/product/productNetForm\")) // DONE\r\n },\r\n\r\n // 4.5 Volume\r\n {\r\n exact: true,\r\n path: \"/admin/product/volume/list\",\r\n component: myLazy(() =>\r\n import(\"views/admin/product/volumeDiscount/volumeDiscountList\")\r\n ) // DONE\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/product/volume/form\",\r\n component: myLazy(() =>\r\n import(\"views/admin/product/volumeDiscount/productVolumeForm\")\r\n ) // DONE\r\n },\r\n\r\n //===================================================================\r\n //4.6 Pachete\r\n {\r\n exact: true,\r\n path: \"/admin/product/pack/list\",\r\n component: myLazy(() => import(\"views/admin/product/pack/packTable\"))\r\n },\r\n // {\r\n // exact: true,\r\n // path: \"/admin/product/pack/form/add\",\r\n // component: myLazy(() => import(\"views/dev/norbert/wizzards/AdaugaPachet/wizzardForm.jsx\")),\r\n // },\r\n {\r\n exact: false,\r\n path: \"/admin/product/pack/form\",\r\n component: myLazy(() => import(\"views/admin/product/pack/packForm\"))\r\n },\r\n\r\n // 4.7 Matricea de produse\r\n {\r\n exact: true,\r\n path: \"/admin/product/matrix/list\",\r\n component: myLazy(() => import(\"views/admin/product/productMatrix\"))\r\n },\r\n\r\n //===================================================================\r\n //4.8 Badges\r\n {\r\n exact: true,\r\n path: \"/admin/product/badge/list\",\r\n component: myLazy(() => import(\"views/admin/product/badge/badgeList\")) // DONE\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/product/badge/form\",\r\n component: myLazy(() =>\r\n import(\"views/admin/product/badge/badgeForm/badgeForm\")\r\n )\r\n },\r\n // { //moved to modal\r\n // exact: true,\r\n // path: \"/admin/product/badge/form/add\",\r\n // component: myLazy(() => import(\"views/admin/product/badge/addBadgeWizzard/addBadgeWizzard\")),\r\n // },\r\n\r\n //===================================================================\r\n //4.9 QA\r\n\r\n {\r\n exact: true,\r\n path: \"/admin/product/qa/list\",\r\n component: myLazy(() =>\r\n import(\"views/admin/intrebariSiRaspunsuri/intrebariSiRaspunsuri\")\r\n )\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/product/qa/form\",\r\n component: myLazy(() =>\r\n import(\"views/admin/product/customer/qa/questionsAnswersForm\")\r\n )\r\n },\r\n\r\n //===================================================================\r\n //4.10 Reviews\r\n {\r\n exact: true,\r\n path: \"/admin/product/review/list\",\r\n component: myLazy(() => import(\"views/admin/recenzii/recenzii\"))\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/product/review/form\",\r\n component: myLazy(() => import(\"../views/admin/recenzii/form/RecenziiForm\"))\r\n },\r\n\r\n //===================================================================\r\n //4.11 Doc Techince\r\n {\r\n exact: true,\r\n path: \"/admin/product/document/list\",\r\n component: myLazy(() => import(\"views/admin/documents/documentsList\")) // DONE\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/product/document/form\",\r\n component: myLazy(() => import(\"views/admin/documents/documentsForm\")) // DONE\r\n },\r\n //==============================================================\r\n // Warehouse\r\n {\r\n exact: true,\r\n path: \"/admin/product/warehouse/list\",\r\n component: myLazy(() =>\r\n import(\"../views/admin/depoziteUniprest/depoziteUniprest\")\r\n )\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/product/warehouse/details\",\r\n component: myLazy(() => import(\"../views/admin/product/warehouseDetails\"))\r\n },\r\n //==============================================================================\r\n //4.14 Interes produse fara pret\r\n {\r\n exact: true,\r\n path: \"/admin/product/pricerequest/list\",\r\n component: myLazy(() => import(\"views/admin/product/priceRequest/List\"))\r\n },\r\n {\r\n exact: true,\r\n path: \"/admin/product/pricerequest/form\",\r\n component: myLazy(() =>\r\n import(\"views/admin/product/priceRequest/priceRequestForm\")\r\n )\r\n },\r\n //===================================================================\r\n //4.13 Interes produse fara stoc\r\n {\r\n exact: true,\r\n path: \"/admin/product/stockrequest/list\",\r\n component: myLazy(() => import(\"views/admin/product/stockRequest/List\"))\r\n },\r\n {\r\n exact: true,\r\n path: \"/admin/product/stockrequest/form\",\r\n component: myLazy(() =>\r\n import(\"views/admin/product/stockRequest/stockRequestForm\")\r\n )\r\n },\r\n //===================================================================\r\n {\r\n exact: true,\r\n path: \"/admin/product/dashboard\",\r\n component: myLazy(() => import(\"views/admin/unifiedDashboard\"))\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/product\",\r\n component: () => \r\n }\r\n]\r\n","import { adminCompanyRoutes } from \"routes/admin.company.routes\"\r\nimport { adminGuestRoutes } from \"routes/admin.guest.routes\"\r\nimport { adminProductRoutes } from \"routes/admin.product.routes\"\r\nimport { adminUserRoutes } from \"routes/admin.user.routes\"\r\nimport { Redirect } from \"react-router\"\r\nimport { myLazy } from \"utils/myLazy\"\r\n\r\nexport const adminRoutes = [\r\n /// sub paths\r\n {\r\n path: \"/admin/user\",\r\n routes: adminUserRoutes\r\n },\r\n {\r\n path: \"/admin/company\",\r\n routes: adminCompanyRoutes\r\n },\r\n {\r\n path: \"/admin/guest\",\r\n routes: adminGuestRoutes\r\n },\r\n {\r\n path: \"/admin/product\",\r\n routes: adminProductRoutes\r\n },\r\n\r\n //===================================================================\r\n // 5.0 Orders\r\n {\r\n exact: true,\r\n path: \"/admin/maintenance\",\r\n component: myLazy(() =>\r\n import(\"../views/admin/startAndStopMaintenance/startAndStopMaintenance\")\r\n )\r\n },\r\n {\r\n exact: true,\r\n path: \"/admin/order/list\",\r\n component: myLazy(() => import(\"../views/admin/order/List\"))\r\n },\r\n {\r\n exact: true,\r\n path: \"/admin/order/view\",\r\n component: myLazy(() => import(\"../views/admin/orderDetails/orderDetails\"))\r\n },\r\n {\r\n exact: true,\r\n path: \"/admin/order/invoice/list\",\r\n component: myLazy(() => import(\"../views/admin/invoice/List\"))\r\n },\r\n {\r\n exact: true,\r\n path: \"/admin/order/invoice/form\",\r\n component: myLazy(() => import(\"../views/admin/invoice/form/InvoiceDetails\"))\r\n },\r\n //missing invoice view\r\n {\r\n exact: false,\r\n path: \"/admin/order\",\r\n component: myLazy(() => import(\"../views/admin/unifiedDashboard\"))\r\n },\r\n //===================================================================\r\n //6.0 Liste predefinite\r\n {\r\n exact: true,\r\n path: \"/admin/admin-lists/list\",\r\n component: myLazy(() => import(\"../views/admin/listePredefinite/List\"))\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/admin-lists/form\",\r\n component: myLazy(() => import(\"views/admin/listePredefinite/addList\"))\r\n },\r\n {\r\n exact: true,\r\n path: \"/admin/admin-lists/dashboard\",\r\n component: myLazy(() => import(\"../views/admin/unifiedDashboard\"))\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/admin-lists\",\r\n component: () => \r\n },\r\n //===================================================================\r\n // 8.1 Depozite\r\n // {\r\n // exact: true,\r\n // path: '/admin/warehouse/list',\r\n // component: myLazy(() =>\r\n // import('../views/admin/depoziteUniprest/depoziteUniprest')\r\n // )\r\n // },\r\n // {\r\n // exact: false,\r\n // path: '/admin/warehouse/details',\r\n // component: myLazy(() => import('../views/admin/product/warehouseDetails'))\r\n // },\r\n\r\n //===================================================================\r\n // ########## Next Module ##############\r\n {\r\n exact: true,\r\n path: \"/admin/oferte/list\",\r\n component: myLazy(() => import(\"../views/admin/oferte/oferteTable\")) // DONE\r\n },\r\n {\r\n exact: true,\r\n path: \"/admin/offer/list\",\r\n component: myLazy(() => import(\"../views/admin/offer/List\"))\r\n },\r\n // // //proiecte\r\n {\r\n exact: true,\r\n path: \"/admin/project/\",\r\n component: myLazy(() => import(\"../views/admin/project/Dashboard\"))\r\n },\r\n {\r\n exact: true,\r\n path: \"/admin/project/list\",\r\n component: myLazy(() => import(\"../views/admin/project/List\"))\r\n },\r\n\r\n //===================================================================\r\n {\r\n exact: false,\r\n path: \"/admin\",\r\n component: myLazy(() => import(\"../views/admin/unifiedDashboard\"))\r\n }\r\n]\r\n\r\n// // //joburi\r\n// {\r\n// exact: true,\r\n// path: \"/admin/jobs/\",\r\n// component: myLazy(() => import(\"./views/admin/jobs/jobs\"))\r\n// },\r\n// // //pagini prezentare\r\n// {\r\n// exact: true,\r\n// path: \"/admin/pages/\",\r\n// component: myLazy(() => import(\"./views/admin/pages/pages\"))\r\n// },\r\n// // //promotii\r\n// {\r\n// exact: true,\r\n// path: \"/admin/promo/\",\r\n// component: myLazy(() => import(\"./views/admin/promotions/promotions\"))\r\n// },\r\n// // //parametrizari\r\n// {\r\n// exact: true,\r\n// path: \"/admin/parameters/\",\r\n// component: myLazy(() => import(\"./views/admin/parametrizari/parametrizari\"))\r\n// },\r\n// // //setari\r\n// {\r\n// exact: true,\r\n// path: \"/admin/settings/\",\r\n// component: myLazy(() => import(\"./views/admin/settings/settings\"))\r\n// },\r\n","import { Redirect } from \"react-router\"\r\nimport { myLazy } from \"utils/myLazy\"\r\n\r\nexport const adminUserRoutes = [\r\n // {\r\n // exact: true,\r\n // path: \"/admin/user/list\", // API failure\r\n // component: myLazy(() => import(\"../views/admin/user/userList\")), // next || progress ===============================================\r\n // },\r\n\r\n {\r\n exact: true,\r\n path: \"/admin/user/client/list\",\r\n component: myLazy(() => import(\"../views/admin/user/userList\")) //Localization done Balazs\r\n },\r\n\r\n {\r\n exact: false,\r\n path: \"/admin/user/client/form\",\r\n component: myLazy(() => import(\"../views/admin/user/userForm\")) //Localization done Balazs\r\n },\r\n {\r\n exact: true,\r\n path: \"/admin/user/uni/list\",\r\n component: myLazy(() => import(\"../views/admin/angajati/List\")) // DONE\r\n },\r\n //missing uniprest form\r\n {\r\n exact: false, //added for missing uniuser form => branch feature/istvan/admin/uniuser/form\r\n path: \"/admin/user/uni/form\",\r\n component: myLazy(() => import(\"views/admin/angajati/uniUserForm.jsx\"))\r\n },\r\n {\r\n exact: false,\r\n path: \"/admin/user/role/list\",\r\n component: myLazy(() => import(\"../views/admin/rolesTable/rolesForm\"))\r\n },\r\n\r\n {\r\n exact: false,\r\n path: \"/admin/user/role/form\",\r\n component: myLazy(() => import(\"../views/admin/user/roleForm\"))\r\n },\r\n\r\n {\r\n exact: true,\r\n path: \"/admin/user/dashboard\",\r\n component: myLazy(() => import(\"../views/admin/unifiedDashboard\")) //Localization done Balazs\r\n },\r\n\r\n {\r\n exact: false,\r\n path: \"/admin/user\",\r\n component: () => \r\n }\r\n]\r\n","// import { Redirect } from \"react-router\";\r\n\r\nimport { myLazy } from \"utils/myLazy\";\r\n\r\nexport const shopDevRoutes = [\r\n // =============== GENERAL ===================\r\n\r\n {\r\n exact: true,\r\n path: \"/shop/dev/wizzard\",\r\n component: myLazy(() => import(\"views/dev/wizzardForm/wizzardForm\"))\r\n },\r\n\r\n {\r\n exact: true,\r\n path: \"/shop/dev/pricematrix\",\r\n component: myLazy(() => import(\"views/dev/sorin/index3\"))\r\n },\r\n\r\n {\r\n exact: true,\r\n path: \"/shop/dev/select\",\r\n component: myLazy(() => import(\"views/dev/select\"))\r\n },\r\n\r\n {\r\n exact: true,\r\n path: \"/shop/dev/filepicker\",\r\n component: myLazy(() => import(\"views/dev/FilePicker\"))\r\n },\r\n {\r\n exact: false,\r\n path: \"/shop/dev/grid\",\r\n component: myLazy(() => import(\"views/admin/index\"))\r\n },\r\n\r\n {\r\n exact: true,\r\n path: \"/shop/dev/apicalls\",\r\n component: myLazy(() => import(\"views/dev/ApiCalls\"))\r\n },\r\n\r\n {\r\n exact: true,\r\n path: \"/shop/dev/icons\",\r\n component: myLazy(() => import(\"views/dev/IconsPage\"))\r\n },\r\n\r\n {\r\n exact: true,\r\n path: \"/shop/dev/fields\",\r\n component: myLazy(() => import(\"views/dev/fields\"))\r\n },\r\n\r\n {\r\n exact: false,\r\n path: \"/shop/dev/articleeditor\",\r\n component: myLazy(() => import(\"views/dev/articleEditor.jsx\"))\r\n },\r\n\r\n {\r\n exact: false,\r\n path: \"/shop/dev/form\",\r\n component: myLazy(() => import(\"views/dev/form\"))\r\n },\r\n\r\n {\r\n exact: true,\r\n path: \"/shop/dev/buttons\",\r\n component: myLazy(() => import(\"views/dev/buttons\"))\r\n },\r\n\r\n {\r\n exact: true,\r\n path: \"/shop/dev/stiriTable\",\r\n component: myLazy(() => import(\"views/stiriTable/stiriTable\"))\r\n },\r\n\r\n {\r\n exact: true,\r\n path: \"/shop/dev/scroll-on-back\",\r\n component: myLazy(() => import(\"views/dev/scrollOnBack/scrollOnBack.jsx\"))\r\n },\r\n\r\n // =============== TEAM ===================\r\n {\r\n exact: true,\r\n path: \"/shop/dev/sorin3\",\r\n component: myLazy(() => import(\"views/dev/sorin/index3\"))\r\n },\r\n\r\n {\r\n exact: false,\r\n path: \"/shop/dev/sorin2\",\r\n component: myLazy(() => import(\"views/dev/sorin/index2\"))\r\n },\r\n\r\n {\r\n exact: true,\r\n path: \"/shop/dev/sorin5\",\r\n component: myLazy(() => import(\"views/dev/sorin/index5\"))\r\n },\r\n {\r\n exact: true,\r\n path: \"/shop/dev/sorin6\",\r\n component: myLazy(() => import(\"views/dev/sorin/index6\"))\r\n },\r\n {\r\n exact: false,\r\n path: \"/shop/dev/sorin8\",\r\n component: myLazy(() => import(\"views/dev/sorin/index8\"))\r\n },\r\n\r\n {\r\n exact: true,\r\n path: \"/shop/dev/norbert\",\r\n component: myLazy(() => import(\"views/dev/norbert\"))\r\n },\r\n\r\n // {\r\n // exact: false,\r\n // path: \"/shop/dev/norbert/wizzard\",\r\n // component: myLazy(() => import(\"views/dev/norbert/wizzards/AdaugaPachet/wizzardForm.jsx\")),\r\n // },\r\n {\r\n exact: false,\r\n path: \"/shop/dev/norbert/docs\",\r\n component: myLazy(() => import(\"views/dev/norbert/docsComponent\"))\r\n },\r\n\r\n {\r\n exact: true,\r\n path: \"/shop/dev/tamas\",\r\n component: myLazy(() => import(\"views/dev/tamas\"))\r\n },\r\n\r\n {\r\n exact: true,\r\n path: \"/shop/dev/gyula\",\r\n component: myLazy(() => import(\"views/dev/gyula\"))\r\n },\r\n\r\n {\r\n exact: true,\r\n path: \"/shop/dev/gyula\",\r\n component: myLazy(() => import(\"views/dev/gyula\"))\r\n },\r\n\r\n {\r\n exact: true,\r\n path: \"/shop/dev/cristi\",\r\n component: myLazy(() => import(\"views/dev/cristi\"))\r\n }\r\n]\r\n","import { Redirect } from \"react-router\"\r\nimport { useSelector } from 'react-redux'\r\nimport useIsLogged from \"utils/useIsLogged\"\r\nimport { arrayPartialMatch } from \"utils/arrayUtils\"\r\n\r\nconst AuthGuard = (props) => {\r\n const { path } = props\r\n const userPermissions = useSelector(state => state?.auth?.userData?.role?.permissions)\r\n //console.log(\"PERMISSIONS \", userPermissions)\r\n //console.log(\"PATH \", path)\r\n const isLogged = useIsLogged()\r\n\r\n if(path === \"/admin\") {\r\n if (!isLogged || !arrayPartialMatch(userPermissions,\r\n [\"WEBSHOP_ADMIN\", \"WEBSHOP_HR_ADMIN\", \"WEBSHOP_MARKETING_ADMIN\"]))\r\n //ADMIN_WRITE WEBSHOP_ADMIN ADMIN_READ ADMIN_DELETE\r\n return \r\n }\r\n if(path === \"/shop/dashboard\") {\r\n if(!isLogged)\r\n return \r\n }\r\n if(path === \"/shop/cart\") {\r\n if(!isLogged)\r\n return \r\n }\r\n if(path === \"/shop/invoices\") {\r\n if(!isLogged || !userPermissions?.includes?.(\"CLIENT_INVOICE_READ\") )\r\n return \r\n }\r\n if(path === \"/shop/invoice/details\") {\r\n if(!isLogged || !userPermissions?.includes?.(\"CLIENT_INVOICE_READ\") )\r\n return \r\n }\r\n if(path === \"/shop/orders\") {\r\n if(!isLogged)\r\n return \r\n }\r\n if(path === \"/shop/orders/details\") {\r\n if(!isLogged)\r\n return \r\n }\r\n if(path === \"/shop/offers\") {\r\n if(!isLogged || !userPermissions?.includes?.(\"CUSTOMER_OFFER_READ\"))\r\n return \r\n }\r\n if(path === \"/shop/offers/details\") {\r\n if(!isLogged || !userPermissions?.includes?.(\"CUSTOMER_OFFER_READ\"))\r\n return \r\n }\r\n if(path === \"/shop/lists\") {\r\n if(!isLogged)\r\n return \r\n }\r\n if(path === \"/shop/careers\") {//TODO ASK QA TEA IF THIS IS OK\r\n if(isLogged)\r\n return \r\n }\r\n if(path === \"/shop/job/:customUrl\") {//TODO ASK QA TEAM IF IS THIS OK\r\n if(isLogged)\r\n return \r\n }\r\n if(path === \"/shop/tutorials\") {\r\n if(!isLogged)\r\n return \r\n }\r\n if(path === \"/shop/tutorial/:customUrl\") {\r\n if(!isLogged)\r\n return \r\n }\r\n if(path === \"/shop/lists/details\") {\r\n if(!isLogged)\r\n return \r\n }\r\n if(path === \"/shop/client/mycompany\") {\r\n if(!isLogged)\r\n return \r\n }\r\n if(path === \"/shop/client/users\") {\r\n if(!isLogged)\r\n return \r\n }\r\n if(path === \"/shop/alerts\") {\r\n if(!isLogged)\r\n return \r\n }\r\n if(path === \"/shop/excelimport\") {\r\n if(!isLogged)\r\n return \r\n }\r\n if(path === \"/shop/signup\") {\r\n if(isLogged)\r\n return \r\n }\r\n if(path === \"/shop/client/profile\") {\r\n if(!isLogged)\r\n return \r\n }\r\n // if(path === \"/shop/signin\") {\r\n // if(isLogged)\r\n // return \r\n // }\r\n // if(path === \"/login\") {\r\n // if(isLogged)\r\n // return \r\n // }\r\n return props.children\r\n}\r\n\r\nexport default AuthGuard\r\n","import React, { Suspense, Fragment, lazy } from \"react\"\r\nimport { Switch, Redirect, Route } from \"react-router-dom\"\r\nimport LoadingScreen from \"components/LoadingScreen/LoadingScreen\"\r\nimport ShopLayout from \"layouts/shop\"\r\nimport AdminLayout from \"layouts/AdminLayout\"\r\nimport BrandMindsLayout from \"layouts/BrandMindsLayout\"\r\nimport { adminRoutes } from \"routes/admin.routes\"\r\nimport { shopDevRoutes } from \"routes/shop.dev\"\r\nimport AuthGuard from \"components/AuthGuard\"\r\nimport store from \"store/index\"\r\nimport { loadDynamoItemsBySK } from \"store/modules/dataView.search\"\r\nimport HelmetMetaData, { defaultPageTitle } from \"components/HelmetMetaData\"\r\nimport { myLazy } from \"utils/myLazy\"\r\nimport { campaignConfig, GoToCampaign, isCampaignPartiallyActive } from \"views/shoppingCart/useCampaignInfo\"\r\n\r\nstore.dispatch(\r\n loadDynamoItemsBySK({ SK: \"MAINTENANCE-SK\", dictionary: \"MAINTENANCE\" })\r\n)\r\n\r\nconst defaultmeta = [\r\n { property: \"og:title\", content: \"Routes Title meta\" },\r\n { property: \"product:availability\", content: \"instock\" }\r\n]\r\n\r\nexport const renderRoutes = (routes = []) => (\r\n }>\r\n \r\n {routes?.map?.((route, i) => {\r\n const Guard = route.guard || Fragment\r\n const Layout = route.layout || Fragment\r\n const Component = route.component\r\n const guardProps = route.guard\r\n ? {path: route?.path}\r\n : undefined\r\n return (\r\n (\r\n \r\n \r\n \r\n {route.routes ? (\r\n renderRoutes(route.routes)\r\n ) : (\r\n \r\n )}\r\n \r\n \r\n )}\r\n />\r\n )\r\n })}\r\n \r\n \r\n)\r\n\r\nlet routes = [\r\n {\r\n exact: true,\r\n path: \"/maintenance\",\r\n component: myLazy(() => import(\"views/MaintenancePage/MaintenancePage\"))\r\n },\r\n {\r\n path: \"/admin\",\r\n layout: AdminLayout,\r\n routes: [...adminRoutes || []],\r\n guard: AuthGuard\r\n },\r\n // {\r\n // path: \"xyz\",\r\n // routes: [\r\n // {\r\n // component: () => \r\n // }\r\n // ]\r\n // },\r\n {\r\n path: \"/shop\",\r\n layout: ShopLayout,\r\n routes: [\r\n // {\r\n // path: \"xyz\",\r\n // routes: [\r\n // {\r\n // component: () => \r\n // }\r\n // ]\r\n // },\r\n ...shopDevRoutes,\r\n // {\r\n // path: \"/shop/dev\",\r\n // routes: shopDevRoutes,\r\n // },\r\n {\r\n exact: true,\r\n // guard: () => no access
,\r\n path: \"/shop/productlist\",\r\n component: myLazy(() => import(\"views/productsList\")) // DONE // Localization/Balazs/Done\r\n },\r\n {\r\n exact: true,\r\n path: \"/shop/details/:customUrl\",\r\n component: myLazy(() => import(\"views/productDetails\")),// DONE // Localization/Balazs/Done\r\n },\r\n {\r\n exact: true,\r\n path: \"/shop/details\",\r\n component: myLazy(() => import(\"views/productDetails\")), // DONE // Localization/Balazs/Done\r\n },\r\n {\r\n // exact: true,\r\n path: \"/shop/cart\",\r\n component: myLazy(() => import(\"views/shoppingCart\")), // DONE // Localization/Balazs/Done 90%\r\n guard: AuthGuard\r\n },\r\n {\r\n exact: true,\r\n path: \"/shop/dashboard\",\r\n component: myLazy(() => import(\"views/dashboard\")),// NEXT || PROGRESS ========================== // Localization/Balazs/Done 80%\r\n guard: AuthGuard\r\n },\r\n {\r\n exact: true,\r\n path: \"/shop/invoices\",\r\n component: myLazy(() => import(\"views/invoices/index_2\")),// Localization/Balazs/Done\r\n // component: myLazy(() => import(\"views/invoices\")),\r\n guard: AuthGuard\r\n },\r\n // {\r\n // exact: true,\r\n // path: \"/shop/invoices/facturi\",\r\n // component: myLazy(() => import(\"views/invoices/facturi\"))\r\n // },\r\n // {\r\n // exact: true,\r\n // path: \"/shop/invoices/comenzi\",\r\n // component: myLazy(() => import(\"views/invoices/comenzi\"))\r\n // },\r\n {\r\n exact: true,\r\n path: \"/shop/orders\",\r\n component: myLazy(() => import(\"views/orders\")), // Localization/Balazs/Done\r\n guard: AuthGuard\r\n },\r\n {\r\n // exact: true,\r\n path: \"/shop/orders/details\",\r\n component: myLazy(() => import(\"views/shoppingCart/orderDetails.js\")), // DONE\r\n guard: AuthGuard\r\n },\r\n {\r\n exact: true,\r\n path: \"/shop/offers\",\r\n component: myLazy(() => import(\"views/offerts\")),\r\n guard: AuthGuard\r\n },\r\n {\r\n // exact: true,\r\n path: \"/shop/offers/details\",\r\n component: myLazy(() => import(\"views/offerts/offerDetails.jsx\")), // DONE\r\n guard: AuthGuard\r\n },\r\n {\r\n // exact: true,\r\n path: \"/shop/invoice/details\",\r\n component: myLazy(() => import(\"views/invoices/invoiceDetails\")), // DONE\r\n guard: AuthGuard\r\n },\r\n {\r\n exact: true,\r\n path: \"/shop/lists\",\r\n // component: myLazy(() => import(\"views/lists\")),\r\n component: myLazy(() => import(\"views/lists/listsView\")), // Localization/Balazs/Done\r\n guard: AuthGuard\r\n },\r\n {\r\n exact: true,\r\n path: \"/shop/news\",\r\n pageTitle: `${defaultPageTitle} - Blog`,\r\n component: myLazy(() => import(\"views/guest/news/GuestCardsList\")) // Localization/Balazs/Done\r\n },\r\n {\r\n exact: true,\r\n path: \"/shop/careers\",\r\n pageTitle: `${defaultPageTitle} - Cariere`,\r\n component: myLazy(() => import(\"views/guest/news/GuestCardsList\")), // Localization/Balazs/Done\r\n guard: AuthGuard\r\n },\r\n {\r\n exact: true,\r\n path: \"/shop/predefinedlists\",\r\n pageTitle: `${defaultPageTitle} - Liste create de experții Uniprest Instal`,\r\n component: myLazy(() => import(\"views/guest/news/GuestCardsList\")) // Localization/Balazs/Done\r\n },\r\n {\r\n exact: true,\r\n path: \"/shop/tutorials\",\r\n component: myLazy(() => import(\"views/guest/news/GuestCardsList\")), // Localization/Balazs/Done\r\n guard: AuthGuard\r\n },\r\n {\r\n exact: true,\r\n path: \"/shop/about\",\r\n pageTitle: `${defaultPageTitle} - Despre noi`,\r\n component: myLazy(() => import(\"views/guest/about\")) // Localization/Balazs/Done/there was no text\r\n },\r\n {\r\n exact: false,\r\n path: \"/shop/article/:customUrl\",\r\n component: myLazy(() =>\r\n import(\"views/guest/news/GuestArticleDetails.jsx\")\r\n )\r\n },\r\n {\r\n exact: false,\r\n path: \"/shop/unilist/:customUrl\",\r\n component: myLazy(() =>\r\n import(\"views/guest/news/GuestArticleDetails.jsx\")\r\n )\r\n },\r\n {\r\n exact: false,\r\n path: \"/shop/tutorial/:customUrl\",\r\n component: myLazy(() =>\r\n import(\"views/guest/news/GuestArticleDetails.jsx\")\r\n ),\r\n guard: AuthGuard\r\n },\r\n // {\r\n // exact: true,\r\n // path: \"/shop/article/preview/:customUrl\",\r\n // component: myLazy(() => import(\"views/guest/news/GuestArticleDetails.jsx\")),\r\n // },\r\n {\r\n exact: false,\r\n path: \"/shop/job/:customUrl\",\r\n component: myLazy(() =>\r\n import(\"views/guest/news/GuestArticleDetails.jsx\")\r\n ),\r\n guard: AuthGuard\r\n },\r\n // {\r\n // exact: true,\r\n // path: \"/shop/job/preview/:customUrl\",\r\n // component: myLazy(() => import(\"views/guest/news/GuestArticleDetails.jsx\")),\r\n // },\r\n {\r\n exact: true,//?????????????????????????????????????\r\n path: \"/shop/my-list\",\r\n component: myLazy(() =>\r\n import(\"views/guest/news/GuestArticleDetails.jsx\")\r\n ),\r\n },\r\n // {\r\n // exact: true,\r\n // path: \"/shop/article2\",\r\n // component: myLazy(() => import(\"views/guest/article2\")),\r\n // },\r\n {\r\n exact: true,\r\n path: \"/shop/lists/details\",\r\n component: myLazy(() =>\r\n import(\"views/registeredUser/listDetails/index.jsx\")\r\n ),\r\n guard: AuthGuard\r\n },\r\n {\r\n exact: true,\r\n path: \"/shop/services\",\r\n pageTitle: `${defaultPageTitle} - Servicii`,\r\n component: myLazy(() => import(\"views/guest/services\")) // Localization/Istvan/Done\r\n },\r\n {\r\n exact: true,\r\n path: \"/shop/partners\",\r\n pageTitle: `${defaultPageTitle} - Parteneri`,\r\n component: myLazy(() => import(\"views/guest/partners\")) // Localization/Balazs/Done\r\n },\r\n\r\n {\r\n exact: true,\r\n path: \"/shop/map\",\r\n pageTitle: `${defaultPageTitle} - Unde ne găsești`,\r\n component: myLazy(() => import(\"views/guest/map2\")) // changed with map2 , the old is map // Localization/Istvan/Done\r\n },\r\n {\r\n exact: true,\r\n path: \"/shop/support\",\r\n pageTitle: `${defaultPageTitle} - Contact`,\r\n component: myLazy(() => import(\"views/guest/support\")) // Localization/Balazs/Done\r\n },\r\n {\r\n exact: true,\r\n path: \"/shop/terms\",\r\n component: myLazy(() => import(\"views/guest/terms\"))\r\n // component: myLazy(() => lazyRetry(() => import(\"views/guest/terms\")))\r\n },\r\n {\r\n exact: true,\r\n path: \"/shop/signup\",\r\n pageTitle: `${defaultPageTitle} - Solicită un cont`,\r\n component: myLazy(() => import(\"views/signUp/signUp.view\")), // Localization/Balazs/Done\r\n guard: AuthGuard\r\n },\r\n {\r\n exact: true,\r\n path: \"/shop/signin\",\r\n pageTitle: `${defaultPageTitle} - Login`,\r\n component: myLazy(() => import(\"views/signIn/signIn.view\")), // Localization/Balazs/Done\r\n guard: AuthGuard\r\n },\r\n\r\n // {\r\n // exact: true,\r\n // path: \"/shop/profile\",\r\n // component: myLazy(() => import(\"views/profile/profile\"))\r\n // },\r\n {\r\n exact: true,\r\n path: \"/shop/client/mycompany\",\r\n component: myLazy(() =>\r\n import(\"views/client/companiileMele/companiileMele\")\r\n ),\r\n guard: AuthGuard\r\n },\r\n {\r\n exact: true,\r\n path: \"/shop/client/users\",\r\n component: myLazy(() => import(\"views/client/utilizatori\")),\r\n guard: AuthGuard\r\n },\r\n // {\r\n // exact: true,//?????????????????????????\r\n // path: \"/shop/createcompany\",\r\n // component: myLazy(() => import(\"views/createCompany/createCompany\"))\r\n // },\r\n // {\r\n // exact: true,//??????????????????????\r\n // // path: \"/shop/searchResults\",\r\n // // component: myLazy(() => import(\"./views/searchResults\"))\r\n // path: \"/shop/settings\",\r\n // component: myLazy(() => import(\"views/setari/Setari\"))\r\n // },\r\n // {\r\n // exact: true,//??????????????????????\r\n // // path: \"/shop/searchResults\",\r\n // // component: myLazy(() => import(\"./views/searchResults\"))\r\n // path: \"/shop/company/users\",\r\n // component: myLazy(() => import(\"views/setari/Setari\"))\r\n // },\r\n {\r\n exact: true,\r\n path: \"/shop/client/profile\",\r\n component: myLazy(() => import(\"views/client/myProfile/myProfile\")),\r\n guard: AuthGuard\r\n },\r\n // {\r\n // exact: true,\r\n // path: \"/shop/adduser\",\r\n // component: myLazy(() => import(\"views/addUser/AddUser\"))\r\n // },\r\n // {\r\n // exact: true,//??????????????\r\n // path: \"/shop/addproduct\",\r\n // component: myLazy(() => import(\"views/addProduct/AddProduct\"))\r\n // },\r\n // {\r\n // exact: true,//??????????????\r\n // path: \"/shop/oferta\",\r\n // component: myLazy(() => import(\"views/oferta/ofertaPret\"))\r\n // },\r\n {\r\n exact: true,\r\n path: \"/shop/alerts\",\r\n component: myLazy(() => import(\"views/alert/Alert\")),\r\n guard: AuthGuard\r\n },\r\n // {\r\n // exact: true,\r\n // path: \"/shop/mylist\",\r\n // component: myLazy(() => import(\"views/mylist\")),\r\n // },\r\n // {\r\n // exact: true,\r\n // path: \"/shop/job-old\",\r\n // component: myLazy(() => import(\"views/guest/job\")),\r\n // },\r\n // {\r\n // exact: true,//??????????????????\r\n // path: \"/shop/searchResults\",\r\n // component: myLazy(() => import(\"views/searchResults\"))\r\n // },\r\n {\r\n exact: true,\r\n path: \"/shop/excelimport\",\r\n component: myLazy(() => import(\"views/ImportFromExcel/index.jsx\")), // DONE // Localization/Balazs/Done\r\n //component: myLazy(() => import(\"views/ExcelImports/listsView.jsx\")) // DONE // Localization/Balazs/Done\r\n guard: AuthGuard\r\n },\r\n // {\r\n // exact: true,\r\n // path: \"/shop/importfromexcel/details\",\r\n // component: myLazy(() => import(\"views/ImportFromExcel/index.jsx\")) // DONE // Localization/Balazs/Done\r\n // },\r\n {\r\n component: myLazy(() => import(\"views/404Page/404Page\"))\r\n }\r\n ]\r\n },\r\n {\r\n exact: true,\r\n path: \"/dev/sorin\",\r\n component: myLazy(() => import(\"views/dev/sorin\"))\r\n },\r\n\r\n {\r\n exact: true,\r\n path: \"/dev/sorin3\",\r\n component: myLazy(() => import(\"views/dev/sorin/index3\"))\r\n },\r\n {\r\n exact: true,\r\n path: \"/dev/sorin5\",\r\n component: myLazy(() => import(\"views/dev/sorin/index5\"))\r\n },\r\n {\r\n exact: true,\r\n path: \"/dev/sorin6\",\r\n component: myLazy(() => import(\"views/dev/sorin/index6\"))\r\n },\r\n\r\n {\r\n exact: true,\r\n path: \"/dev/gyula/toastr\",\r\n component: myLazy(() => import(\"views/dev/gyula/Toastr/index\"))\r\n },\r\n\r\n // {\r\n // exact: true,\r\n // path: \"/\",\r\n // component: myLazy(() => import(\"views/guest/landing\")),\r\n // },\r\n {\r\n exact: true,\r\n path: \"/\",\r\n pageTitle: \"Uniprest\",\r\n component: myLazy(() => import(\"views/dev/sorin/NewHomePage\"))\r\n },\r\n\r\n {\r\n exact: true,\r\n path: \"/dev/erno\",\r\n component: myLazy(() => import(\"views/dev/erno\"))\r\n },\r\n {\r\n exact: true,\r\n path: \"/dev/erno2\",\r\n component: myLazy(() => import(\"views/dev/erno/index2\"))\r\n },\r\n {\r\n exact: true,\r\n layout: ShopLayout,\r\n path: \"/login\",\r\n component: myLazy(() => import(\"views/signIn/signIn.view\")),\r\n guard: AuthGuard\r\n },\r\n {\r\n exact: true,\r\n layout: ShopLayout,\r\n path: \"/password-reset\",\r\n component: myLazy(() => import(\"views/passwordReset/passwordReset\"))\r\n },\r\n {\r\n exact: true,\r\n layout: ShopLayout,\r\n path: \"/invitationaccept\",\r\n component: myLazy(() => import(\"views/passwordReset/passwordReset\"))\r\n },\r\n {\r\n exact: true,\r\n path: \"/dev/norbert\",\r\n component: myLazy(() => import(\"views/dev/norbert\"))\r\n },\r\n {\r\n exact: true,\r\n path: \"/dev/tamas\",\r\n component: myLazy(() => import(\"views/dev/tamas\"))\r\n },\r\n {\r\n exact: true,\r\n path: \"/safariNotSupported\",\r\n component: myLazy(() => import(\"views/MaintenancePage/MaintenancePage\"))\r\n },\r\n {\r\n exact: true,\r\n // guard: () => no access
,\r\n path: \"/media/black-friday.pdf\",\r\n component: GoToCampaign\r\n },\r\n {\r\n exact: true,\r\n // guard: () => no access
,\r\n path: \"/media/black-friday.html\",\r\n component: GoToCampaign \r\n },\r\n {\r\n exact: true,\r\n layout: ShopLayout,\r\n path: \"/404\",\r\n component: myLazy(() => import(\"views/404Page/404Page\"))\r\n },\r\n // {\r\n // exact: true,\r\n // path: \"/shop/admin/users/list\",\r\n // component: myLazy(() => import(\"./views/userTable/usersTable\")),\r\n // },\r\n {\r\n exact: true,\r\n layout: ShopLayout,\r\n path: \"/:customUrl/pd/:productId\",\r\n pageMeta: defaultmeta,\r\n component: myLazy(() => import(\"views/productDetails\")) // DONE // Localization/Balazs/Done\r\n },\r\n {\r\n exact: true,\r\n layout: ShopLayout,\r\n // guard: () => no access
,\r\n path: \"/:customUrl/ct\",\r\n component: myLazy(() => import(\"views/productsList\")) // DONE // Localization/Balazs/Done\r\n },\r\n \r\n {\r\n path: \"*\",\r\n layout: ShopLayout,\r\n // layout: DashboardLayout,\r\n routes: [\r\n // {\r\n // exact: true,\r\n // path: '/',\r\n // component: () => \r\n // },\r\n {\r\n component: myLazy(() => import(\"views/404Page/404Page\"))\r\n }\r\n ]\r\n }\r\n]\r\n\r\n\r\nconst campaignLandingPageRoute = {\r\n exact: true,\r\n path: \"/un_viitor_digital_impreuna\",\r\n pageTitle: \"Un viitor digital împreună\",\r\n component: myLazy(() => import(\"views/campaignLanding/CampaignLandingPage\"))\r\n}\r\n\r\n\r\n\r\nexport default (\r\n isCampaignPartiallyActive() && campaignConfig.doesAffectRouting\r\n)\r\n ? [campaignLandingPageRoute, ...routes || []]\r\n : routes\r\n","export const theme = {\r\n baseSpacing: 0.5 //used for CSS spacings\r\n}\r\n","import { createSelector } from \"reselect\"\r\n\r\nconst language = (state) => state.user?.language\r\n\r\nexport const allYupMessages = {\r\n ES: {\r\n mixed: {\r\n required: \"Estos campos es obligatorio!\"\r\n },\r\n string: {\r\n min: \"¡Ingrese un mínimo de ${min} caracteres!\",\r\n max: \"¡Ingrese un máximo de ${max} caracteres!\",\r\n url: \"El enlace proporcionado es incorrecto (Ejemplo: https://...)!\",\r\n email:\r\n \"¡La dirección de correo electrónico que ha introducido es incorrecta!\"\r\n }\r\n },\r\n EN: {\r\n mixed: {\r\n required: \"Required field!\"\r\n },\r\n string: {\r\n min: \"Enter a minimum of ${min} characters!\",\r\n max: \"Enter a maximum of ${max} characters!\",\r\n url: \"The link provided is incorrect (EX: https://...)!\",\r\n email: \"The email address you entered is incorrect!\"\r\n }\r\n },\r\n HU: {\r\n mixed: {\r\n required: \"Kötelező mező!\"\r\n },\r\n string: {\r\n min: \"Írjon be minimum ${min} karaktert!\",\r\n max: \"Írjon be maximum ${max} karaktert!\",\r\n url: \"A megadott link helytelen (PÉLDA: https://...)!\",\r\n email: \"A megadott email cím helytelen!\"\r\n }\r\n },\r\n RO: {\r\n mixed: {\r\n required: \"Câmp obligatoriu!\"\r\n },\r\n string: {\r\n min: \"Introduceți minim ${min} caractere!\",\r\n max: \"introduceți maxim ${max} caractere!\",\r\n url: \"Linkul introdus nu este valid (EX: https://...)!\",\r\n email: \"Adresa de email este invalidă!\"\r\n }\r\n }\r\n}\r\n\r\nexport const selectFormErros = createSelector(language, (language) => {\r\n return {\r\n yupLocale: allYupMessages?.[language]\r\n }\r\n})\r\n","// Import the functions you need from the SDKs you need\r\nimport { initializeApp } from \"firebase/app\"\r\nimport { getDatabase } from \"firebase/database\"\r\n\r\n// TODO: Add SDKs for Firebase products that you want to use\r\n// https://firebase.google.com/docs/web/setup#available-libraries\r\n\r\n// Your web app's Firebase configuration\r\nconst firebaseConfig = {\r\n apiKey: \"AIzaSyDHlp7NLCoqcfcpHh3u_ahTC3ZsqUHphss\",\r\n authDomain: \"uniprest-magic-live.firebaseapp.com\",\r\n databaseURL: \"https://uniprest-magic-live-default-rtdb.europe-west1.firebasedatabase.app\",\r\n projectId: \"uniprest-magic-live\",\r\n storageBucket: \"uniprest-magic-live.appspot.com\",\r\n messagingSenderId: \"97829345711\",\r\n appId: \"1:97829345711:web:b28316994c8f766a48f75a\"\r\n}\r\n\r\n// Initialize Firebase\r\nconst app = initializeApp(firebaseConfig)\r\nexport const firebaseRealtimeDbInstance = getDatabase(app)\r\n\r\n","import { onValue, ref } from 'firebase/database'\r\nimport { useEffect } from 'react'\r\nimport { useDispatch } from 'react-redux'\r\nimport { setFirebaseRealtimeDbFields } from 'store/modules/firebaseRealtimeDb'\r\nimport { firebaseRealtimeDbInstance } from 'utils/firebase'\r\n\r\n\r\n/**\r\n * Fetches the data from Firebase RealtimeDB and updates the redux state.\r\n */\r\nconst useFirestoreRealtimeDb = () => {\r\n \r\n const dispatch = useDispatch()\r\n\r\n useEffect(() => {\r\n\r\n const query = ref(firebaseRealtimeDbInstance)\r\n\r\n return onValue(query, (snapshot) => {\r\n const data = snapshot?.val?.()\r\n\r\n dispatch(setFirebaseRealtimeDbFields({\r\n changingThisForcesRefresh: data?.changingThisForcesRefresh,\r\n isMaintenanceModeOn: data?.isMaintenanceModeOn,\r\n }))\r\n\r\n })\r\n }, [])\r\n\r\n \r\n return null\r\n}\r\n\r\n\r\n\r\n\r\n\r\nexport default useFirestoreRealtimeDb\r\n","import { useEffect, useRef } from 'react'\r\nimport { useSelector } from 'react-redux'\r\nimport useFirestoreRealtimeDb from 'utils/useFirestoreRealtimeDb'\r\nimport { randomIntFromInterval } from 'utils/numberUtils'\r\n\r\n \r\nconst reloadAfterMillis = randomIntFromInterval(1000, 20000)//1 - 20 sec\r\n\r\n\r\n/**\r\n * Does a forced refresh whenever it is triggered from the back-end \r\n * (triggered from Firebase RealtimeDB through socket communication).\r\n */\r\nexport const useForcedRefresh = () => {\r\n\r\n const prevValueRef = useRef()\r\n\r\n const changingThisForcesRefresh = useSelector(\r\n state => state?.firebaseRealtimeDb?.changingThisForcesRefresh\r\n )\r\n \r\n // Responsible for fetching the data from firestore and updating the redux state:\r\n useFirestoreRealtimeDb() \r\n \r\n useEffect(() => {\r\n\r\n const wasValueKnownUntilNow = Boolean(prevValueRef?.current)\r\n const didValueJustChange = prevValueRef?.current !== changingThisForcesRefresh\r\n\r\n if(wasValueKnownUntilNow && didValueJustChange && changingThisForcesRefresh) {\r\n console.log(\r\n `Doing forced refresh. ` + \r\n `Old value: ${prevValueRef?.current}, new value: ${changingThisForcesRefresh}` + \r\n `, in ${reloadAfterMillis} milliseconds.`\r\n )\r\n\r\n /**\r\n * Delay the forced refresh by n seconds to give \r\n * time to the redux persistence to properly persist the value of\r\n * state.firebaseRealtimeDb.changingThisForcesRefresh\r\n * \r\n * That is needed because after the reload the redux state will be \r\n * reinitialized and we need the new value by then. Otherwise,\r\n * the non-updated value will differ from the one sent by Firebase and\r\n * the forced refresh will be triggered again (causing an infinite \r\n * reload loop).\r\n */\r\n setTimeout(() => {\r\n window.location.reload(forceDisabledCache) \r\n }, reloadAfterMillis)\r\n \r\n }\r\n\r\n if(prevValueRef) prevValueRef.current = changingThisForcesRefresh\r\n \r\n }, [changingThisForcesRefresh])\r\n\r\n return null\r\n\r\n}\r\n\r\n\r\nconst forceDisabledCache = true\r\n","import { useEffect, useState } from 'react'\r\nimport { useSelector } from 'react-redux'\r\nimport useFirestoreRealtimeDb from 'utils/useFirestoreRealtimeDb'\r\nimport { randomIntFromInterval } from 'utils/numberUtils'\r\n\r\n \r\nconst turnOffAfterMillis = randomIntFromInterval(1000, 20000) // 1 - 20 sec\r\n\r\nexport const useShouldShowMaintenanceScreen = () => {\r\n\r\n /** The final value that determines whether maintenance \r\n * mode is on or off is stored here in this local state. */\r\n const [isMaintenanceStateOn, setIsMaintenanceStateOn] = useState(false)\r\n\r\n\r\n // Redux state fetched from firestore\r\n const isMaintenanceModeOn = useSelector(\r\n state => state?.firebaseRealtimeDb?.isMaintenanceModeOn\r\n )\r\n \r\n \r\n // Responsible for fetching the data from firestore and updating the redux state:\r\n useFirestoreRealtimeDb() \r\n\r\n\r\n useEffect(() => {\r\n /** \r\n * Turning maintenance mode ON: instant.\r\n * Turning maintenance mode OFF: delayed.\r\n * \r\n * (To avoid every client overwhelming the server with requests at the same time.)\r\n */\r\n const wasMaintenanceOnUntilNow = isMaintenanceStateOn\r\n\r\n if(!isTrue(isMaintenanceModeOn)){\r\n if(wasMaintenanceOnUntilNow){\r\n console.log(`Turning maintenance mode off in ${turnOffAfterMillis} milliseconds. `)\r\n const timeout = setTimeout(() => setIsMaintenanceStateOn(false), turnOffAfterMillis)\r\n \r\n return () => clearTimeout(timeout)\r\n }\r\n } else {\r\n setIsMaintenanceStateOn(true)\r\n }\r\n \r\n }, [isMaintenanceModeOn])\r\n \r\n return Boolean(isMaintenanceStateOn)\r\n \r\n}\r\n\r\n\r\nconst isTrue = value => {\r\n /**\r\n * When setting the value of this variable to false (in the database), \r\n * someone may accidentally enter the string value 'false' instead of \r\n * the boolean value false. To avoid evaluating 'false' to the boolean \r\n * true, (because non-empty strings are truthy), we need to check for \r\n * this case specifically. \r\n */\r\n if(value?.toLowerCase?.() === 'false') return false\r\n return Boolean(value)\r\n}\r\n","\r\nimport { getValidDateOrNull } from \"utils/dateUtils\"\r\n\r\n\r\n// TODO: This code is very similar to utils/myLazy.js\r\n// Consider refactoring to avoid duplication.\r\n\r\n\r\n\r\nconst APP_ERROR_REFRESHED_TIMESTAMP = 'appErrorRefreshedTimestamp'\r\nconst WAIT_MILLIS_BEFORE_ANOTHER_REFRESH = 15000 // 15 seconds\r\n/**\r\n * Save the timestamp of the last app error refresh to the session storage.\r\n * Meant to be used to prevent an infinite loop of app error refreshes.\r\n */\r\nexport const saveAppErrorRefreshTimestamp = () => \r\n window?.sessionStorage?.setItem?.(\r\n APP_ERROR_REFRESHED_TIMESTAMP, Date.now()\r\n )\r\n\r\n\r\n\r\n/**\r\n * Check if the app error refresh is allowed yet.\r\n * If another app error refresh was done recently,\r\n * then it is not allowed yet to prevent an infinite loop \r\n * of app error refreshes.\r\n */\r\nexport const isAppErrorRefreshAllowed = () => {\r\n\r\n const appErrorRefreshedTimestamp = window?.sessionStorage?.getItem?.(\r\n APP_ERROR_REFRESHED_TIMESTAMP\r\n )\r\n\r\n const lastRefreshDateObj = \r\n getValidDateOrNull(appErrorRefreshedTimestamp) ||\r\n getValidDateOrNull(parseInt(appErrorRefreshedTimestamp))\r\n\r\n const lastRefreshTimestamp = lastRefreshDateObj?.getTime?.()\r\n \r\n if(!lastRefreshTimestamp) return true\r\n\r\n const now = Date.now()\r\n \r\n return now - lastRefreshTimestamp > WAIT_MILLIS_BEFORE_ANOTHER_REFRESH\r\n \r\n}","import React from 'react'\r\nimport { printError } from 'utils/printError'\r\nimport { isAppErrorRefreshAllowed, saveAppErrorRefreshTimestamp } from 'layouts/appErrorRefreshLogic'\r\nimport * as Sentry from \"@sentry/react\"\r\n\r\n// TODO: (maybe) clear local storage? Or just redux?\r\n// TODO: show a nicer UI\r\n// TODO: (maybe) generate a unique random ID for each error, \r\n// and show it to the user while sending it to sentry\r\n\r\n/**\r\n * Meant to be used as a wrapper around the entire app.\r\n * If there is an error, it will catch it, and try to refresh the page.\r\n * Such a refresh, however, is prevented if it was done recently \r\n * (to avoid an infinite loop of refreshes).\r\n */\r\nclass AppErrorBoundary extends React.Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = { \r\n hasError: false,\r\n randomErrorId: (Math.random() + 1)?.toString?.(36)?.substring?.(2)?.toUpperCase?.(),\r\n }\r\n }\r\n\r\n // Update state so the next render will show the fallback UI.\r\n static getDerivedStateFromError = error => {\r\n\r\n\r\n return { \r\n ...this.state,\r\n hasError: true,\r\n }\r\n\r\n }\r\n \r\n\r\n componentDidCatch(error, errorInfo) {\r\n\r\n printError('AppErrorBoundary componentDidCatch() error: ', error)\r\n console.log(`AppErrorBoundary componentDidCatch() randomErrorId: ${this.state.randomErrorId}`)\r\n\r\n // Send the error to Sentry:\r\n Sentry.captureException(error)\r\n Sentry.captureMessage(`randomErrorId: ${this.state.randomErrorId}`)\r\n\r\n // Try to also send the errorInfo to Sentry:\r\n try{ Sentry.captureMessage(`AppErrorBoundary componentDidCatch() \r\n errorInfo: ${JSON.stringify(errorInfo)}`) \r\n }\r\n catch(_){} // we don't care if this fails\r\n \r\n if(isAppErrorRefreshAllowed()){\r\n \r\n logBeforeRefreshing(this.state.randomErrorId)\r\n saveAppErrorRefreshTimestamp()\r\n window?.location?.reload(true)\r\n\r\n }else{\r\n logPreventedRefresh({ \r\n error, \r\n errorInfo, \r\n randomErrorId: this.state.randomErrorId \r\n })\r\n }\r\n }\r\n\r\n\r\n render() {\r\n \r\n if (this.state.hasError) return \r\n \r\n A apărut o eroare: \r\n {' '}\r\n {this.state.randomErrorId}\r\n \r\n \r\n \r\n Te rugăm să reîncarci pagina.\r\n
\r\n\r\n return this.props.children \r\n \r\n }\r\n\r\n}\r\n\r\nconst logBeforeRefreshing = randomErrorId => {\r\n\r\n const message = `AppErrorBoundary componentDidCatch() app \r\n error ${randomErrorId} detected, refreshing the page to try to recover.`\r\n\r\n console.log(message)\r\n Sentry.captureMessage(message)\r\n\r\n}\r\n\r\nconst logPreventedRefresh = ({ error, errorInfo, randomErrorId }) => {\r\n\r\n const message = `\r\n AppErrorBoundary componentDidCatch() ${randomErrorId} Preventing infinite \r\n refresh loop (Not refreshing now because there was a refresh \r\n already recently because appError). \r\n `\r\n\r\n console.log(message, error, errorInfo)\r\n Sentry.captureMessage(message)\r\n\r\n}\r\n\r\n\r\nexport default AppErrorBoundary\r\n","import React, { useEffect } from 'react'\r\nimport LoadingScreen from 'components/LoadingScreen'\r\nimport { useSelector } from 'react-redux'\r\n\r\nconst FullPageLoadingScreen = () => {\r\n\r\n const apiCallsInProgress = useSelector((state) => state?.apiCallsInProgress)\r\n\r\n const filteredApiCalls = apiCallsInProgress?.filter?.(\r\n apiCall => \r\n apiCall?.endPoint?.includes?.('/basket/address-change')\r\n )\r\n\r\n const isLoading = (filteredApiCalls?.length || 0) > 0\r\n\r\n useEffect(() => {\r\n\r\n /** The class 'page-content' exists in multiple pages. */\r\n const body = document?.querySelector?.(\"body\")\r\n body?.classList?.toggle?.(\"page-content--loading\", isLoading)\r\n\r\n }, [isLoading])\r\n\r\n\r\n return isLoading \r\n ? \r\n : null\r\n\r\n}\r\n\r\nexport default FullPageLoadingScreen\r\n","import { Router } from \"react-router-dom\"\r\nimport routes, { renderRoutes } from \"routes/routes\"\r\nimport \"./App.css\"\r\nimport React, { useEffect, useState } from \"react\"\r\nimport ThemeContext from \"./theme/themeProvider\"\r\nimport { theme } from \"./theme/theme\"\r\n// import { history } from './utils/history';\r\nimport { Amplify } from \"aws-amplify\"\r\nimport * as yup from \"yup\"\r\nimport { useSelector } from \"react-redux\"\r\nimport { selectFormErros } from \"store/selectors/form/formErrors.selector\"\r\nimport \"style/index.scss\"\r\nimport { useDispatch } from \"store\"\r\nimport { clearAllLoadingIndicators, setOnBehalfIdInState, setPageEdit, setPageSeo, setTestFieldForDebugging } from \"store/modules/page\"\r\nimport { javaLogin } from \"store/justActions/javaAuth\"\r\nimport { QueryParamProvider } from \"use-query-params\"\r\nimport { ReactRouter5Adapter } from \"use-query-params/adapters/react-router-5\"\r\nimport { parse, stringify } from \"query-string\"\r\nimport { myLazy } from \"utils/myLazy\"\r\n\r\n// import { LocalizeProvider } from \"react-localize-redux\";\r\n// import store from 'store/index'\r\n// const history = createBrowserHistory({});\r\n// import queryString from \"query-string\";\r\n// import { setCheckFilters } from 'store/modules/dataView';\r\nimport { history } from \"utils/history\"\r\nimport { setPageModal } from \"store/modules/page\"\r\nimport Lang from \"components/Lang/Lang\"\r\nimport { useForcedRefresh } from \"utils/useForcedRefresh\"\r\nimport { useShouldShowMaintenanceScreen } from \"utils/useShouldShowMaintenanceScreen\"\r\nimport { clearOldReduxPersistence } from \"utils/localStorageUtils\"\r\nimport { searchStuff } from \"store/modules/dataView.search\"\r\nimport { loadAllDictionaries, loadDictionary, loadProductCategories, loadPublicDictionary } from \"store/modules/backData\"\r\nimport useIsLogged from \"utils/useIsLogged\"\r\n\r\nimport AppErrorBoundary from \"layouts/AppErrorBoundary\"\r\nimport { fetchTranslations } from \"store/modules/localizationApi\"\r\nimport FullPageLoadingScreen from \"components/LoadingScreen/FullPageLoadingScreen\"\r\n\r\n// AWS.config.region = process.env.REACT_APP_USER_REGION; // Region\r\n// AWS.config.credentials = new AWS.CognitoIdentityCredentials({\r\n// IdentityPoolId: process.env.REACT_APP_IDENTITY_POOL_ID,\r\n// // IdentityPoolId: 'eu-central-1:62eceb07-e41b-4a6f-8f6e-74cef9a1bac1',\r\n// });\r\n\r\n// Called when an identity provider has a token for a logged in user\r\n// ===== NOT USED =====\r\n// export function userLoggedIn(providerName, token) {\r\n// const creds = AWS.config.credentials\r\n// creds.params.Logins = creds.params.Logins || {};\r\n// creds.params.Logins[providerName] = token;\r\n// //console.log(creds.params.Logins)\r\n// // Expire credentials to refresh them on the next request\r\n// creds.expired = true;\r\n// }\r\n\r\n//===== NOT USED =====\r\n// export function userLogOut() {\r\n// const creds = AWS.config.credentials\r\n// creds.params.Logins = {};\r\n// creds.expired = true;\r\n// }\r\n\r\nexport const frontEndVersion = \"V-0.7.28\"\r\n\r\nconst options = {\r\n searchStringToObject: parse,\r\n objectToSearchString: stringify\r\n}\r\n\r\nAmplify.configure({\r\n Auth: {\r\n userPoolWebClientId: process.env.REACT_APP_USER_POOL_WEB_CLIENT_ID,\r\n // REQUIRED - Amazon Cognito Region\r\n region: process.env.REACT_APP_USER_REGION,\r\n // OPTIONAL - Amazon Cognito User Pool ID\r\n userPoolId: process.env.REACT_APP_USER_POOL_ID\r\n }\r\n})\r\n\r\nfunction App() {\r\n const { yupLocale } = useSelector((state) => selectFormErros(state))\r\n const dictionaries = useSelector((state) => state?.backData?.dictionary)\r\n const productCategories = useSelector((state) => state?.backData?.productCategory)\r\n const isMaintenance = useShouldShowMaintenanceScreen()\r\n\r\n const dispatch = useDispatch() //temp auto login\r\n useEffect(() => {\r\n yup.setLocale(yupLocale)\r\n }, [yupLocale])\r\n\r\n const translationsApiData = useSelector((state) => state.localizationApi?.translations)\r\n const [isLocReFetchNeeded, setIsLocReFetchNeeded] = useState(false)\r\n\r\n // useEffect(() => {\r\n // if (authenticatedState === undefined || authenticatedState === false)\r\n // dispatch(javaLogin(\"anonymous\", \"Password123!!!!\", true)) //anonymus login\r\n\r\n // }, [authenticatedState])\r\n\r\n // load vital dictionaries\r\n useEffect(() => {\r\n if (Object.keys?.(dictionaries || {})?.length === 0) {\r\n dispatch(\r\n searchStuff({\r\n type: \"public/organization/workplace\",\r\n dictionary: \"LOCATION_RESPONSE\",\r\n searchTerm: null,\r\n reload: true\r\n })\r\n )\r\n dispatch(loadAllDictionaries())\r\n }\r\n }, [dictionaries])\r\n\r\n\r\n useEffect(() => {\r\n dispatch(loadPublicDictionary('PRODUCT_BRAND'))\r\n }, [])\r\n\r\n\r\n\r\n useEffect(() => {\r\n if(!productCategories?.length) {\r\n dispatch(loadProductCategories())//!myArr.length\r\n }\r\n // dispatch(loadDictionary(\"PRODUCT_BRAND\"))\r\n // dispatch(loadDictionary(\"PRODUCT_SUPPLIER\"))\r\n // dispatch(loadDictionary(\"USER_POSITION\"))\r\n // dispatch(loadDictionary(\"UNIT_OF_MEASURE\"))\r\n // dispatch(loadDictionary(\"COUNTY\"))\r\n // dispatch(getRankingOptions())\r\n // dispatch(setOnBehalfIdInState())\r\n\r\n }, [productCategories])\r\n\r\n // load localizations safety check\r\n useEffect(()=> {\r\n if(isLocReFetchNeeded)\r\n if(translationsApiData?.wasCalled && !translationsApiData?.hasResponded)\r\n dispatch(fetchTranslations())\r\n}, [isLocReFetchNeeded])\r\n\r\nuseEffect(() => {\r\n console.log('frontEndVersion', frontEndVersion) // This is meant to be kept here even for production\r\n\r\n const locRefetchTimeout = setTimeout(() => setIsLocReFetchNeeded(true), 3000)\r\n return () => clearTimeout(locRefetchTimeout)\r\n},[])\r\n\r\n\r\n useEffect(() => {\r\n maybeThrowFatalErrorForTesting()\r\n \r\n const { search } = window?.location || {}\r\n if (search?.includes?.(\"fatalErrorDirtyRedux\")) {\r\n dispatch(setTestFieldForDebugging(\r\n \r\n ))\r\n }\r\n\r\n clearOldReduxPersistence(dispatch)\r\n\r\n }, [])\r\n\r\n const url = window.location.pathname\r\n useEffect(() => {\r\n dispatch(setPageSeo())\r\n if (url?.includes?.(\"form\")) dispatch(setPageEdit(false))\r\n dispatch(setPageModal(undefined))\r\n\r\n // const qsParams = queryString.parse(window.location.search);\r\n // if (qsParams) {\r\n // const filterKeys = Object?.entries?.(qsParams)\r\n // ?.filter?.(([key, value]) => key?.includes?.(\"FLT\"))\r\n // ?.reduce?.((acc, [key, value]) => {\r\n // acc[key] = value\r\n // return acc\r\n // }, {})\r\n // //log\r\n\r\n // dispatch(setCheckFilters({filterKeys}))\r\n // }\r\n }, [url])\r\n\r\n \r\n /**\r\n * Does a forced refresh whenever it is triggered from the back-end \r\n * (from Firebase RealtimeDB through socket communication).\r\n */\r\n useForcedRefresh()\r\n\r\n useEffect(() => {\r\n dispatch(clearAllLoadingIndicators())\r\n },[])\r\n\r\n\r\n return (\r\n // \r\n\r\n \r\n \r\n \r\n <>\r\n \r\n {/* */}\r\n {renderRoutes(isMaintenance ? maintenanceRoutes : routes)}\r\n >\r\n \r\n \r\n \r\n \r\n // \r\n )\r\n}\r\n\r\n/**\r\n * When maintenance mode is on, every single URL\r\n * (route) is served by the maintenance page.\r\n *\r\n * The user intuitively keeps refreshing the page.\r\n * Eventually when the maintenance mode is turned off,\r\n * the original routes are used again to match a page.\r\n */\r\nconst maintenanceRoutes = [\r\n {\r\n exact: false,\r\n path: \"*\",\r\n component: myLazy(() => import(\"views/MaintenancePage/MaintenancePage\"))\r\n },\r\n]\r\n\r\n\r\nconst maybeThrowFatalErrorForTesting = () => {\r\n const { search } = window?.location || {}\r\n if (search?.includes?.(\"throwFatalError\")) {\r\n throw new Error(\"Fatal error for testing\")\r\n }\r\n}\r\n\r\n\r\nconst WrappedApp = () => {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n\r\n\r\n// export default App\r\nexport default WrappedApp\r\n","const reportWebVitals = (onPerfEntry) => {\r\n if (onPerfEntry && onPerfEntry instanceof Function) {\r\n import(\"web-vitals\").then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n getCLS(onPerfEntry)\r\n getFID(onPerfEntry)\r\n getFCP(onPerfEntry)\r\n getLCP(onPerfEntry)\r\n getTTFB(onPerfEntry)\r\n })\r\n }\r\n}\r\n\r\nexport default reportWebVitals\r\n","import React from \"react\"\r\nimport ReactDOM from \"react-dom\"\r\n\r\nimport * as Sentry from \"@sentry/react\";\r\nimport { BrowserTracing } from \"@sentry/tracing\";\r\n\r\nimport \"./index.css\"\r\nimport \"./style/index.scss\"\r\n// import '../node_modules/carbon-components/scss/globals/scss/styles.scss';\r\nimport App from \"App\"\r\nimport reportWebVitals from \"reportWebVitals\"\r\nimport { Provider } from \"react-redux\"\r\nimport store, { persistor } from \"store\"\r\nimport { PersistGate } from \"redux-persist/integration/react\"\r\nimport ConfirmActionModal from \"components/_modals/ConfirmActionModal\"\r\nimport ReduxToastr from \"react-redux-toastr\"\r\nimport { LocalizeProvider } from \"react-localize-redux\"\r\nimport LoadLocalization from \"components/Lang/Lang\"\r\n\r\n// Supports weights 100-900\r\nimport '@fontsource-variable/montserrat';\r\n// Supports weights 300-800\r\nimport '@fontsource-variable/open-sans/wdth.css';\r\nimport '@fontsource/ibm-plex-mono/100-italic.css';\r\nimport '@fontsource/ibm-plex-mono/200-italic.css';\r\nimport '@fontsource/ibm-plex-mono/300-italic.css';\r\nimport '@fontsource/ibm-plex-mono/400-italic.css';\r\nimport '@fontsource/ibm-plex-mono/500-italic.css';\r\nimport '@fontsource/ibm-plex-mono/600-italic.css';\r\nimport '@fontsource/ibm-plex-mono/700-italic.css';\r\n\r\nimport '@fontsource/ibm-plex-sans/100-italic.css';\r\nimport '@fontsource/ibm-plex-sans/200-italic.css';\r\nimport '@fontsource/ibm-plex-sans/300-italic.css';\r\nimport '@fontsource/ibm-plex-sans/400-italic.css';\r\nimport '@fontsource/ibm-plex-sans/500-italic.css';\r\nimport '@fontsource/ibm-plex-sans/600-italic.css';\r\nimport '@fontsource/ibm-plex-sans/700-italic.css';\r\n\r\n\r\n\r\n\r\nconst toastrProps = {\r\n timeOut: 10000,\r\n newestOnTop: false,\r\n preventDuplicates: true,\r\n position: \"bottom-left\",\r\n getState: (state) => state?.toastr, // This is the default\r\n transitionIn: \"fadeIn\",\r\n transitionOut: \"fadeOut\",\r\n // progressBar\r\n closeOnToastrClick: true\r\n}\r\n\r\nif (process.env.NODE_ENV && process.env.NODE_ENV === 'production') {\r\n Sentry.init({\r\n dsn: \"https://b71da713e9b14c709463f76733568eb8@o4504293326585856.ingest.sentry.io/4504315725873152\",\r\n integrations: [new BrowserTracing()],\r\n environment: process.env.REACT_APP_SENTRY_ENV,\r\n release: 'V-0.7.28',\r\n // Set tracesSampleRate to 1.0 to capture 100%\r\n // of transactions for performance monitoring.\r\n // We recommend adjusting this value in production\r\n tracesSampleRate: 1.0,\r\n });\r\n // process.env.REACT_APP_SENTRY_ENV\r\n}\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById(\"root\")\r\n)\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals()\r\n"],"version":3}