{"version":3,"sources":["webpack:///../jarvis/app/assets/javascripts/core/services/Modal2/index.jsx","webpack:///../jarvis/app/assets/javascripts/core/services/Modal2/components/Modal.jsx","webpack:///../jarvis/app/assets/javascripts/core/services/Modal2/components/Head.jsx","webpack:///../jarvis/app/assets/javascripts/core/services/Modal2/components/Actions.jsx","webpack:///../jarvis/app/assets/javascripts/core/services/Modal2/ModalWrapper.ts","webpack:///../jarvis/app/assets/javascripts/site/VControllers/Autocomplete/components/Cities/index.tsx","webpack:///../jarvis/app/assets/javascripts/site/VControllers/Autocomplete/components/Countries/index.tsx","webpack:///../jarvis/app/assets/javascripts/site/VDOMComponents/HOCs/withCitySelect.tsx","webpack:///../jarvis/app/assets/javascripts/site/VDOMComponents/LocationSelectorWidget/index.tsx","webpack:///../jarvis/app/assets/javascripts/site/VDOMComponents/CitySelect/index.tsx","webpack:///../jarvis/app/assets/javascripts/site/VControllers/CitySelect/components/CitySelect/index.tsx"],"names":["MODAL_MODE_SIMPLE","MODAL_MODE_FULLPAGE","Modal2","props","callbacks","CALLBACK_MOUNT","CALLBACK_UNMOUNT","CALLBACK_CANCEL","CALLBACK_RENDER","name","title","style","actions","mode","renderer","createVDOMRenderer","document","body","onMount","onUnmount","onCancel","render","classList","add","destroy","remove","createVDOMComponent","self","handleClick","e","target","getDOMNode","children","className","onClick","componentDidMount","setImmediate","getProps","componentWillUnmount","Head","Actions","visibleActions","filter","hidden","length","class","map","type","$$","modal","componentWillMount","cancelHandler","mountHandler","unMountHandler","CityAutocomplete","baseAutocomplete","CITY_CHANGE_EVENT_NAME","extraStateBuilder","component","countryId","extraQueryParams","state","CountryAutocomplete","COUNTRY_CHANGE_EVENT_NAME","deliveryCountries","delivery","saveLocation","cityId","params","redirectUrl","window","location","href","Http","post","withCitySelect","WrappedComponent","arguments","isOpen","Boolean","handleOpenControlClick","closest","handleOpen","setState","handleClose","confirm","handleApply","id","a","url","data","this","addEventListener","removeEventListener","h","Object","assign","onApply","onClose","Component","LocationSelectorWidget","handleSelectCity","handleCountryRef","el","countryEl","handleCityRef","cityEl","handleChangeCountryId","item","_prevItem","dispatchCustomEvent","undefined","text","handleChangeCityId","modalOpen","cities","ModalWrapper","modalActions","ref","inputEl","items","onChange","withStyleLoading","CitySelect","proposedCities"],"mappings":"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","file":"chunk.59.804b0836a5bb61299f44.e039d7f6.js","sourcesContent":["import { createVDOMRenderer, h } from 'core/services/VDOM'\n\nimport Modal from './components/Modal'\n\nconst MODAL_MODE_SIMPLE = 'simple'\nconst MODAL_MODE_FULLPAGE = 'fullpage'\n\nfunction Modal2({\n props,\n\n callbacks: {\n CALLBACK_MOUNT = () => {},\n CALLBACK_UNMOUNT = () => {},\n CALLBACK_CANCEL = () => {},\n CALLBACK_RENDER,\n }\n}) {\n props = {\n name: '',\n title: '',\n style: '',\n actions: [],\n mode: MODAL_MODE_SIMPLE,\n ...props\n }\n\n let renderer = createVDOMRenderer(document.body, () => {\n return (\n \n {CALLBACK_RENDER()}\n \n )\n })\n\n let render = () => {\n renderer.render()\n }\n\n let destroy = () => {\n renderer.destroy()\n\n document.body.classList.remove('has-modal-open')\n }\n\n let init = () => {\n document.body.classList.add('has-modal-open')\n\n render()\n }\n\n init()\n\n return { destroy, render }\n}\n\nexport { MODAL_MODE_SIMPLE, MODAL_MODE_FULLPAGE, Modal2 }\n\nexport default Modal2\n","import { h, createVDOMComponent } from 'core/services/VDOM'\nimport Head from './Head'\nimport Actions from './Actions'\n\nfunction Modal(self) {\n let componentDidMount = () => {\n setImmediate(() => self.getProps().onMount())\n }\n\n let componentWillUnmount = () => {\n self.getProps().onUnmount()\n }\n\n let handleClick = onCancel => e => {\n if (e.target === self.getDOMNode()) {\n onCancel()\n }\n }\n\n let render = ({ title, name, style, mode, actions, onCancel, children }) => {\n /*\n .b-Modal2__${style} – legacy\n .m-${name} – new\n */\n\n return
\n
\n
\n
\n
\n }\n\n return { render, componentDidMount, componentWillUnmount }\n}\n\nexport default createVDOMComponent(Modal)\n","import { h } from 'core/services/VDOM'\n\nfunction Head({ title }) {\n return (\n
\n
{title}
\n
\n )\n}\n\nexport default Head\n","import { h } from 'core/services/VDOM'\n\nfunction Actions({ actions }) {\n let visibleActions = actions.filter(({ hidden }) => !hidden)\n\n return visibleActions.length\n ? (\n
\n {visibleActions.map(({ type, title, onClick, }) => (\n
{title}
\n ))}\n
\n ) : ''\n}\n\nexport default Actions\n","import { createVDOMComponent } from 'core/services/VDOM';\nimport Modal2 from './index';\nfunction ModalWrapper($$) {\n let modal;\n let componentWillMount = () => {\n let { name, title, style, actions = [], cancelHandler = () => { }, mountHandler = () => { }, unMountHandler = () => { } } = $$.getProps();\n modal = Modal2({\n props: { title, style, actions, name },\n callbacks: {\n CALLBACK_RENDER: () => $$.getProps().children,\n CALLBACK_UNMOUNT: unMountHandler,\n CALLBACK_MOUNT: mountHandler,\n CALLBACK_CANCEL: cancelHandler\n }\n });\n };\n let componentWillUnmount = () => {\n modal.destroy();\n };\n let render = () => {\n modal.render();\n };\n return { render, componentWillMount, componentWillUnmount };\n}\nexport default createVDOMComponent(ModalWrapper);\n","import { baseAutocomplete } from '../Hoc/baseAutocomplete';\nimport { CITY_CHANGE_EVENT_NAME } from '../../cities';\nexport const CityAutocomplete = baseAutocomplete('/front_api/autocomplete/cities', 'Город', CITY_CHANGE_EVENT_NAME, {\n extraStateBuilder: (component) => ({ countryId: component.props.countryId }),\n extraQueryParams: (component) => ({ countryId: component.state.countryId })\n});\n","import { baseAutocomplete } from '../Hoc/baseAutocomplete';\nimport { COUNTRY_CHANGE_EVENT_NAME } from '../../countries';\nexport const CountryAutocomplete = baseAutocomplete('/front_api/autocomplete/countries', 'Страна', COUNTRY_CHANGE_EVENT_NAME, {\n extraQueryParams: (component) => {\n const { deliveryCountries: delivery = false } = component.props;\n return { delivery };\n }\n});\n","import { h, Component } from 'preact';\nimport Http from 'core/services/HttpClient';\nconst OPEN_CONTROL_SELECTOR = '[data-open-city-select]';\nconst saveLocation = (cityId) => {\n const params = {\n cityId,\n redirectUrl: window.location.href // to handle Referrer-Policy restrictions\n };\n return Http.post('/front_api/location/set_city', params);\n};\nexport function withCitySelect(WrappedComponent) {\n return class WithCitySelect extends Component {\n constructor() {\n super(...arguments);\n this.state = { isOpen: Boolean(this.props.isOpen) };\n this.handleOpenControlClick = (e) => {\n if (!e.target.closest(OPEN_CONTROL_SELECTOR))\n return;\n this.handleOpen();\n };\n this.handleOpen = () => {\n this.setState({ isOpen: true });\n };\n this.handleClose = () => {\n this.confirm();\n this.setState({ isOpen: false });\n };\n this.handleApply = async (id) => {\n const { data: { url } } = await saveLocation(id);\n window.location.href = url;\n };\n }\n componentDidMount() {\n document.addEventListener('click', this.handleOpenControlClick);\n }\n componentWillUnmount() {\n document.removeEventListener('click', this.handleOpenControlClick);\n }\n confirm() {\n Http.post('/front_api/location/confirm_city');\n }\n render() {\n const { isOpen } = this.state;\n if (!isOpen)\n return null;\n return (h(WrappedComponent, Object.assign({}, this.props, { onApply: this.handleApply, onClose: this.handleClose })));\n }\n };\n}\nexport default withCitySelect;\n","import { h, Component } from 'preact';\nimport ModalWrapper from 'core/services/Modal2/ModalWrapper';\nimport { CountryAutocomplete } from 'site/VControllers/Autocomplete/components/Countries';\nimport { CityAutocomplete } from 'site/VControllers/Autocomplete/components/Cities';\nimport { withStyleLoading } from 'core/components/Hoc/withStyleLoading';\nimport { dispatchCustomEvent } from 'core/utils/events';\nimport { CITY_CHANGE_EVENT_NAME } from 'site/VControllers/Autocomplete/cities';\nclass LocationSelectorWidget extends Component {\n constructor() {\n super(...arguments);\n this.state = {};\n this.handleApply = () => {\n const { cityId } = this.state;\n cityId && this.props.onApply(cityId);\n };\n this.handleSelectCity = (id) => () => {\n this.props.onApply(id);\n };\n this.handleCountryRef = (el) => {\n this.setState({ countryEl: el });\n };\n this.handleCityRef = (el) => {\n this.setState({ cityEl: el });\n };\n this.handleChangeCountryId = (item, _prevItem) => {\n dispatchCustomEvent(this.state.countryEl, CITY_CHANGE_EVENT_NAME, { item: { id: undefined, text: '' }, countryId: item.id }); // dirty crutch for update nested state in city autocomplete\n };\n this.handleChangeCityId = (item, _prevItem) => {\n this.setState({ cityId: item.id });\n };\n }\n get modalActions() {\n return [\n { type: 'cancel', title: 'Отмена', onClick: this.props.onCancel },\n { type: 'apply', title: 'Сохранить', onClick: this.handleApply }\n ];\n }\n render() {\n const { modalOpen, onCancel, cities } = this.props;\n if (!modalOpen)\n return null;\n const { countryEl, cityEl } = this.state;\n return (h(ModalWrapper, { title: '\\u0412\\u044B\\u0431\\u0435\\u0440\\u0438\\u0442\\u0435 \\u043C\\u0435\\u0441\\u0442\\u043E\\u043F\\u043E\\u043B\\u043E\\u0436\\u0435\\u043D\\u0438\\u0435', actions: this.modalActions, cancelHandler: onCancel, style: 'location-selector' },\n h(\"div\", { className: 'b-LocationSelector' },\n h(\"div\", { className: 'b-LocationSelector_cities' }, cities.map(({ id, name }) => (h(\"a\", { onClick: this.handleSelectCity(id) }, name)))),\n h(\"div\", { className: 'b-LocationSelector_manual' },\n h(\"div\", { className: 'ui-Input __autocomplete b-LocationSelector_autocomplete' },\n h(\"input\", { ref: this.handleCountryRef }),\n countryEl && (h(CountryAutocomplete, { inputEl: countryEl, items: [], onChange: this.handleChangeCountryId }))),\n h(\"div\", { className: 'ui-Input __autocomplete b-LocationSelector_autocomplete' },\n h(\"input\", { ref: this.handleCityRef }),\n cityEl && (h(CityAutocomplete, { inputEl: cityEl, items: [], onChange: this.handleChangeCityId })))))));\n }\n}\nexport default withStyleLoading(LocationSelectorWidget, 'LocationSelectorWidget');\n","import { h, Component } from 'preact';\nimport LocationSelectorWidget from 'site/VDOMComponents/LocationSelectorWidget';\nconst BODY_CLASS_NAME_ON_OPEN = 'has-modal-open';\nexport class CitySelect extends Component {\n componentDidMount() {\n document.body.classList.add(BODY_CLASS_NAME_ON_OPEN);\n }\n componentWillMount() {\n document.body.classList.remove(BODY_CLASS_NAME_ON_OPEN);\n }\n render() {\n const { proposedCities, onApply, onClose } = this.props;\n return (h(LocationSelectorWidget, { onApply: onApply, onCancel: onClose, cities: proposedCities, modalOpen: true }));\n }\n}\n","import { withCitySelect } from 'site/VDOMComponents/HOCs/withCitySelect';\nimport { CitySelect } from 'site/VDOMComponents/CitySelect';\nexport default withCitySelect(CitySelect);\n"],"sourceRoot":""}