Skip to content
Snippets Groups Projects
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;
}