80 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import flow from 'lodash/flow';
 | 
						|
import { decodeFcc } from '../../common/utils/encode-decode';
 | 
						|
 | 
						|
const queryRegex = /^(\?|#\?)/;
 | 
						|
export function legacyIsInQuery(query, decode) {
 | 
						|
  let decoded;
 | 
						|
  try {
 | 
						|
    decoded = decode(query);
 | 
						|
  } catch (err) {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  if (!decoded || typeof decoded.split !== 'function') {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  return decoded
 | 
						|
    .replace(queryRegex, '')
 | 
						|
    .split('&')
 | 
						|
    .reduce(function(found, param) {
 | 
						|
      var key = param.split('=')[0];
 | 
						|
      if (key === 'solution') {
 | 
						|
        return true;
 | 
						|
      }
 | 
						|
      return found;
 | 
						|
    }, false);
 | 
						|
}
 | 
						|
 | 
						|
export function getKeyInQuery(query, keyToFind = '') {
 | 
						|
  return query
 | 
						|
    .split('&')
 | 
						|
    .reduce((oldValue, param) => {
 | 
						|
      const key = param.split('=')[0];
 | 
						|
      const value = param
 | 
						|
        .split('=')
 | 
						|
        .slice(1)
 | 
						|
        .join('=');
 | 
						|
 | 
						|
      if (key === keyToFind) {
 | 
						|
        return value;
 | 
						|
      }
 | 
						|
      return oldValue;
 | 
						|
    }, null);
 | 
						|
}
 | 
						|
 | 
						|
export function getLegacySolutionFromQuery(query = '', decode) {
 | 
						|
  return flow(
 | 
						|
    getKeyInQuery,
 | 
						|
    decode,
 | 
						|
    decodeFcc
 | 
						|
  )(query, 'solution');
 | 
						|
}
 | 
						|
 | 
						|
export function getCodeUri(location, decodeURIComponent) {
 | 
						|
  let query;
 | 
						|
  if (
 | 
						|
    location.search &&
 | 
						|
    legacyIsInQuery(location.search, decodeURIComponent)
 | 
						|
  ) {
 | 
						|
    query = location.search.replace(/^\?/, '');
 | 
						|
  } else {
 | 
						|
    return null;
 | 
						|
  }
 | 
						|
 | 
						|
  return getLegacySolutionFromQuery(query, decodeURIComponent);
 | 
						|
}
 | 
						|
 | 
						|
export function removeCodeUri(location, history) {
 | 
						|
  if (
 | 
						|
    typeof location.href.split !== 'function' ||
 | 
						|
    typeof history.replaceState !== 'function'
 | 
						|
  ) {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  history.replaceState(
 | 
						|
    history.state,
 | 
						|
    null,
 | 
						|
    location.href.split('?')[0]
 | 
						|
  );
 | 
						|
  return true;
 | 
						|
}
 |