All files / ia-components/components/audio-players/utils youtube-params-parser.js

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54                                                                                                           
import { includes } from 'lodash';
 
/**
 * YouTube Params Parser
 * Takes the given YouTube URN
 * and returns a body to feed into YouTube iFrame API
 *
 * @param { string } fullID
 * @return { object } ytParams
 * ytParams.videoId - string
 * ytParams.startSeconds - number
 * ytParams.suggestedQuality - 'default'
 * ytParams.hasTimestamp - boolean
 */
export default (fullID) => {
  const urnQueryStart = new RegExp(/\?\=/g);
  const suggestedQuality = 'default';
  const defaultStartSeconds = 0;
  let secondsRetrieved;
 
  const videoIdPieces = fullID.split(urnQueryStart);
  const hasTimestamp = videoIdPieces.length > 1;
  const videoId = videoIdPieces[0];
 
  if (!hasTimestamp) {
    return {
      videoId,
      startSeconds: defaultStartSeconds,
      suggestedQuality,
      hasTimestamp
    };
  }
 
  videoIdPieces.forEach((idPiece) => {
    const hasTimeStamp = includes(idPiece, 't=');
    if (hasTimeStamp) {
      const secondsString = idPiece.substring(2);
      secondsRetrieved = parseInt(secondsString, 10);
    }
  });
 
  const startSeconds = Number.isInteger(secondsRetrieved)
    ? secondsRetrieved
    : defaultStartSeconds;
  const params = {
    videoId,
    startSeconds,
    suggestedQuality,
    hasTimestamp
  };
 
  return params;
};