2019-01-12 14:09:17 +01:00
|
|
|
import React from "react";
|
|
|
|
|
import Select from "react-select";
|
|
|
|
|
import { connect } from "react-redux";
|
2019-01-19 16:53:27 +01:00
|
|
|
import {
|
|
|
|
|
CATEGORY_SELECT,
|
|
|
|
|
ITEMS_CHANGED,
|
|
|
|
|
USER_DATA_CHANGED
|
|
|
|
|
} from "constants/actionTypes";
|
2019-01-14 22:41:53 +01:00
|
|
|
import { hoc, areObjectEqual } from "utils/helpers";
|
2019-01-12 14:09:17 +01:00
|
|
|
import { createOlxLink } from "utils/createOlxLink";
|
|
|
|
|
import axios from "axios";
|
|
|
|
|
|
2019-01-16 21:00:14 +01:00
|
|
|
import * as Vozila from "./categories/Vozila";
|
|
|
|
|
import * as Nekretnine from "./categories/Nekretnine";
|
2019-01-16 22:06:06 +01:00
|
|
|
|
2019-01-16 21:00:14 +01:00
|
|
|
import DeepCategoryWrapper from "components/widgets/DeepCategoryWrapper";
|
2019-01-12 14:09:17 +01:00
|
|
|
import ItemsContainer from "./items/itemscontainer/ItemsContainer";
|
2019-01-16 22:06:06 +01:00
|
|
|
import NotificationModal from "./NotificationModal";
|
2019-01-12 14:09:17 +01:00
|
|
|
|
|
|
|
|
const options = [
|
|
|
|
|
{ value: "Vozila", label: "Vozila" },
|
|
|
|
|
{ value: "Nekretnine", label: "Nekretnine" }
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
const mapStateToProps = state => {
|
|
|
|
|
return {
|
|
|
|
|
category: state.category,
|
|
|
|
|
options: state.options,
|
|
|
|
|
subcategory: state.subcategory,
|
2019-01-19 16:53:27 +01:00
|
|
|
items: state.items,
|
|
|
|
|
userdata: state.userdata
|
2019-01-12 14:09:17 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const mapDispatchToProps = dispatch => ({
|
|
|
|
|
onCategoryChanged: option => dispatch({ type: CATEGORY_SELECT, option }),
|
2019-01-19 16:53:27 +01:00
|
|
|
onItemsChanged: items => dispatch({ type: ITEMS_CHANGED, items }),
|
|
|
|
|
onUserDataChange: change => dispatch({ type: USER_DATA_CHANGED, ...change })
|
2019-01-12 14:09:17 +01:00
|
|
|
});
|
|
|
|
|
|
2019-01-14 22:41:53 +01:00
|
|
|
let lastUpdateTime = null;
|
|
|
|
|
let interval = null;
|
2019-01-12 14:09:17 +01:00
|
|
|
class App extends React.Component {
|
2019-01-14 22:41:53 +01:00
|
|
|
componentDidMount() {
|
|
|
|
|
interval = setInterval(() => {
|
|
|
|
|
if (lastUpdateTime && Date.now() - lastUpdateTime > 2000) {
|
2019-01-19 16:53:27 +01:00
|
|
|
const {
|
|
|
|
|
category,
|
|
|
|
|
options,
|
|
|
|
|
subcategory,
|
|
|
|
|
onItemsChanged,
|
|
|
|
|
onUserDataChange
|
|
|
|
|
} = this.props;
|
2019-01-14 22:41:53 +01:00
|
|
|
let url = createOlxLink(category, subcategory, options);
|
|
|
|
|
url = encodeURI(url);
|
2019-01-19 16:53:27 +01:00
|
|
|
onUserDataChange({ info: "olx_url", value: url });
|
2019-01-14 22:41:53 +01:00
|
|
|
if (url) {
|
|
|
|
|
axios
|
|
|
|
|
.get(`/api/${url}`)
|
2019-01-19 16:53:27 +01:00
|
|
|
.then(response => {
|
|
|
|
|
onItemsChanged(response.data.items);
|
|
|
|
|
onUserDataChange({
|
|
|
|
|
info: "last_date",
|
|
|
|
|
value: response.data.last_date
|
|
|
|
|
});
|
|
|
|
|
})
|
2019-01-14 22:41:53 +01:00
|
|
|
.catch(error => console.log(error));
|
|
|
|
|
}
|
|
|
|
|
lastUpdateTime = null;
|
|
|
|
|
}
|
|
|
|
|
}, 1000);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
componentWillUnmount() {
|
|
|
|
|
clearInterval(interval);
|
|
|
|
|
}
|
|
|
|
|
componentWillReceiveProps(newProps) {
|
|
|
|
|
const { subcategory, category, options } = this.props;
|
|
|
|
|
if (
|
|
|
|
|
newProps.subcategory !== subcategory ||
|
|
|
|
|
newProps.category !== category ||
|
|
|
|
|
!areObjectEqual(newProps.options, options)
|
|
|
|
|
) {
|
|
|
|
|
lastUpdateTime = Date.now();
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-01-12 14:09:17 +01:00
|
|
|
handleChange = selectedOption => {
|
|
|
|
|
this.props.onCategoryChanged(selectedOption);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
render() {
|
2019-01-16 22:06:06 +01:00
|
|
|
const { category, items } = this.props;
|
2019-01-12 14:09:17 +01:00
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<div>
|
|
|
|
|
<Select
|
|
|
|
|
value={category}
|
|
|
|
|
onChange={this.handleChange}
|
|
|
|
|
options={options}
|
|
|
|
|
/>
|
|
|
|
|
{hoc(category && category.value, {
|
2019-01-16 21:00:14 +01:00
|
|
|
Vozila: <DeepCategoryWrapper {...Vozila.properties} />,
|
|
|
|
|
Nekretnine: <DeepCategoryWrapper {...Nekretnine.properties} />
|
2019-01-12 14:09:17 +01:00
|
|
|
})}
|
|
|
|
|
<ItemsContainer />
|
2019-01-16 22:06:06 +01:00
|
|
|
{items.length ? <NotificationModal /> : null}
|
2019-01-12 14:09:17 +01:00
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default connect(
|
|
|
|
|
mapStateToProps,
|
|
|
|
|
mapDispatchToProps
|
|
|
|
|
)(App);
|