course name mayhem
Closed this issue · 3 comments
mluukkai commented
find out how the course name should be shown
eg perinne/perintökieli vs ohtu
https://norppa.helsinki.fi/targets/72283150/edit
https://norppa.helsinki.fi/targets/72482660/feedback
it is unclear how the name shown in studies is deduced for the API responses:
https://studies.helsinki.fi/api/courses/cur/otm-5b5485c3-3d9f-42ff-99b7-cadc5bcaf78d?languageCode=fi
HRemonen commented
/**
* 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);
};
HRemonen commented
// 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-');
HRemonen commented
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}`;
};