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;
 | |
| }
 |