JSFiddle - React, Tailwind, and code Playground

by Felipe Alfaro

JavaScript

console.clear();
// framework ------------------------------------------------------------------------------------------------------

var sampleParams = {
  'q': 'Sample data',
  'loc': 'ID1234567890,1234567',
  'another_param': 'another_value'
};

function searchFn(newParams) {
	console.log('change url using...', newParams);
  sampleParams = newParams;
}

searchFn(sampleParams);

// service ------------------------------------------------------------------------------------------------------
var multipleParamSeparator = ',';
var paramsConfig = {
	q: {
  	name: 'query_string',
    parser: String
  },
	loc: {
  	name: 'location',
    parser: stringToStringsInArray
  }
};

function stringToStringsInArray(value) {
	return String(value).split(multipleParamSeparator).map(String);
}

function paramIsValid(paramName) {
	return Boolean(paramsConfig[paramName]);
}

function valueIsUnique(paramName, value) {
	var parsedParam = fnParams(paramName);
}

function fnAdd(paramName, value) {
	if (paramIsValid(paramName)) {
  	var currentValue = sampleParams[paramName].split(multipleParamSeparator);
    if (currentValue.indexOf(value) === -1) {
      searchFn(Object.assign({}, sampleParams, {
        [paramName]: (function () {
          return sampleParams[paramName] + multipleParamSeparator + String(value);
        })()
      }));
    }
  }
}

function fnParams(paramName) {
  if (paramName) {
    if (paramIsValid(paramName)) {
      return paramsConfig[paramName].parser ? paramsConfig[paramName].parser(sampleParams[paramName]) : sampleParams[paramName];
    }
  }
  else {
    var parameters = {};
    for (var param in sampleParams) {
      if (paramIsValid(param)) {
        parameters[param] = paramsConfig[param].parser ? paramsConfig[param].parser(sampleParams[param]) : sampleParams[param];
      }
    }
    return parameters;
  }

}

function fnData() {
  var parameters = {};
  for (var param in sampleParams) {
    if (paramIsValid(param)) {
     ...