url_handler.js 6.09 KiB
export function createUrl(urlData) {
const keys = Object.keys(urlData);
let search = '?';
keys.forEach(key => {
if (urlData[key] !== null && urlData[key] !== '') {
search += `${key}=${urlData[key]}&`;
}
});
return search.substring(0, search.length - 1);
}
export function getUrl(location) {
// const location = location;
const data =
process.browser && location.search
? location.search.slice(location.search.indexOf('?') + 1).split('&')
: [];
const urlData = {};
data.forEach(data => {
try {
data = data.split('=');
const dataVal = decodeURIComponent(data[1]);
urlData[data[0]] = dataVal;
} catch (e) {}
});
return urlData;
}
export function setStateToUrl(state) {
let urlData = {};
for (const key in state) {
if (state.hasOwnProperty(key)) {
switch (key) {
case 'date_range':
let data = Object.values(state[key]);
if (data[0] === null && data[1] === null) {
data = '';
}
urlData[key] = data && data.length ? data.join() : null;
break;
case 'amenities':
urlData[key] =
state[key] && state[key].length ? state[key].join() : null;
break;
case 'room':
if (state[key]) {
urlData[key] = state[key] ? state[key] : 0;
} else {
urlData[key] = '';
}
break;
case 'guest':
if (state[key]) {
urlData[key] = state[key] ? state[key] : 0;
} else {
urlData[key] = '';
}
break;
case 'property':
urlData[key] =
state[key] && state[key].length ? state[key].join() : null;
break;
case 'price':
urlData[key] =
state[key] && state[key].length ? state[key].join() : null;
break;
case 'location':
if (state[key] && state[key].lat) {
urlData[`${key}_lat`] = state[key].lat;
}
if (state[key] && state[key].lng) {
urlData[`${key}_lng`] = state[key].lng;
}
break;
case 'reset':
urlData = state[key];
break;
default:
urlData[key] = state[key];
break;
}
}
}
return createUrl(urlData);
}
export function getStateFromUrl(location) {
const urlData = getUrl(location);
const state = {};
for (const key in urlData) {
if (urlData.hasOwnProperty(key)) {
switch (key) {
// case 'text':
// state[key] =
// urlData[key] && urlData[key] !== 'null' ? urlData[key] : '';
// break;
// case 'categories':
// state[key] =
// urlData[key] && urlData[key] !== 'null'
// ? urlData[key].split(',')
// : [];
// break;
case 'date_range':
const date = urlData[key] ? urlData[key] : null;
if (date) {
let splitDate = date ? date.split(',') : null;
let setStartDate = splitDate ? splitDate[0] : null;
let setEndDate = splitDate ? splitDate[1] : null;
state[key] = date
? { setStartDate: setStartDate, setEndDate: setEndDate }
: null;
}
break;
case 'amenities':
state[key] =
urlData[key] && urlData[key] !== 'null'
? urlData[key].split(',')
: [];
break;
case 'room':
if (urlData[key]) {
state[key] = urlData[key] ? urlData[key] : 0;
} else {
state[key] = '';
}
break;
case 'guest':
if (urlData[key]) {
state[key] = urlData[key] ? urlData[key] : 0;
} else {
state[key] = '';
}
break;
case 'property':
state[key] =
urlData[key] && urlData[key] !== 'null'
? urlData[key].split(',')
: [];
break;
case 'price':
const defaultPrice = {
min: 0,
max: 100,
defaultMin: 0,
defaultMax: 100,
};
const price = urlData[key] ? urlData[key].split(',') : defaultPrice;
if (price) {
let min, max;
min = price ? Number(price[0]) : 0;
max = price ? Number(price[1]) : 100;
if (min > 0 || max < 100) {
state[key] = {
min: min,
max: max,
defaultMin: 0,
defaultMax: 100,
};
} else {
state[key] = '';
}
}
break;
// case 'radius':
// state[key] = Number(urlData[key]);
// break;
// case 'condition':
// state[key] = urlData[key] && urlData[key] == 'true' ? true : false;
// break;
// case 'isNegotiable':
// state[key] = urlData[key] && urlData[key] == 'true' ? true : false;
// break;
case 'location_lat':
if (urlData['location_lat']) {
state['location'] = {};
state['location']['lat'] = Number(urlData[key]);
} else {
state['location'] = null;
}
break;
case 'location_lng':
if (urlData[key]) {
state['location']['lng'] = Number(urlData[key]);
}
break;
// case 'sorting_field':
// if (urlData[key]) {
// state['sorting'] = {};
// state['sorting']['field'] = urlData[key];
// }
// break;
// case 'sorting_type':
// if (urlData[key]) {
// state['sorting']['type'] = urlData[key];
// }
// break;
case 'page':
if (urlData[key]) {
state['page'] = Number(urlData[key]);
}
break;
case 'limit':
if (urlData[key]) {
state['limit'] = Number(urlData[key]);
}
break;
default:
state[key] = urlData[key];
break;
}
}
}
return state;
}