Feature(challenges): add code-uri utils
Fix(nav): points nav item propTypes
This commit is contained in:
64
client/utils/code-uri.js
Normal file
64
client/utils/code-uri.js
Normal file
@@ -0,0 +1,64 @@
|
||||
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);
|
||||
}
|
Reference in New Issue
Block a user