UniversityOfHelsinkiCS/palaute

course name mayhem

Closed this issue · 3 comments

/**
 * Translate and format course name.
 *
 * Realisations created in Sisu (id format "otm-<nnn>") contain course type in "name" field and descriptive name in "nameSpecifier" field.
 * Realisations created in Optime (id format "hy-opt-cur-<nnn>") or Oodi (id format "hy-CUR-<nnn>") are opposite of this.
 *
 * Returns course name as "Descriptive name, Course type" for sisu native and oodi courses and courses descriptive name for
 * realisations created in Optime.
 *
 * @param {string} id - Course unit realisation id
 * @param {LocalizedText|string} name - Course unit realisation name from sisu
 * @param {LocalizedText|string} nameSpecifier - Course unit realisation nameSpecifier from sisu
 * @param {string} lang - Language to translate name in
 * @returns {string} - Formatted course name
 */
export const formatCourseName = (id, name, nameSpecifier, lang) => {
  if (hasSisuLikeNamingConvention(id)) {
    return courseNameWithCourseType(nameSpecifier, name, lang);
  } if (isOptimeOriginatingId(id)) {
    return courseNameWithCourseType(name, null, lang);
  }
  return courseNameWithCourseType(name, nameSpecifier, lang);
};
// Documents created in sisu have id format of `otm-{UUID}`
export const isSisuNativeId = (id) => id && id.startsWith('otm-');

export const isAiliOriginatingId = (id) => id && id.startsWith('hy-cur-aili-');

export const hasSisuLikeNamingConvention = (id) => id.startsWith('otm-') || id.startsWith('hy-cur-aili-');

export const isOptimeOriginatingId = (id) => id && id.startsWith('hy-opt-cur-');
const courseNameWithCourseType = (name, type, lang) => {
  const nameTranslated = typeof (name) === 'string' ? name : getTranslation(name, lang);
  const typeTranslated = typeof (type) === 'string' ? type : getTranslation(type, lang);

  if (!nameTranslated) {
    return typeTranslated;
  }
  if (!typeTranslated) {
    return nameTranslated;
  }
  return `${nameTranslated}, ${typeTranslated}`;
};