gatsby-source-feliks-2
Version:
Gatsby source plugin for building websites using Apricore's Feliks as a data source
137 lines (116 loc) • 4.95 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
var crypto = require("crypto");
var getCourseCategories = exports.getCourseCategories = function getCourseCategories(keywords) {
return (keywords || []).reduce(function (acc, cur) {
return !cur.includes("Hjemmeside@ ") ? acc : [].concat(_toConsumableArray(acc), [cur.split("Hjemmeside@ ")[1]]);
}, []);
};
var formatTime = function formatTime(day_time) {
return day_time.split(" ")[1].split(":").slice(0, 2).join(".");
};
var formatDate = function formatDate(day_time) {
return day_time.split(" ")[0].split("-").reverse().join(" / ");
};
var getCourseTimeOfDay = exports.getCourseTimeOfDay = function getCourseTimeOfDay(lectures) {
// Find the index of the first lecture that takes place later than now
var now = new Date(Date.now());
var next_i = lectures.findIndex(function (lec) {
return lec.date.valueOf() >= now.valueOf();
});
// Get either the next lecture if it's later in time, or the last lecture.
var lecture = lectures[next_i !== -1 ? next_i : lectures.length - 1];
if (lecture === undefined) return { day: "", from: "", to: "" };
var days = ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"];
return {
day: days[lecture.date.getDay()],
from: formatTime(lecture.lecture_date_time_start),
to: formatTime(lecture.lecture_date_time_end)
};
};
var getFirstDay = exports.getFirstDay = function getFirstDay(lectures) {
var first_lecture = lectures[0];
return first_lecture === undefined ? "" : formatDate(first_lecture.lecture_date_time_start);
};
var getLastDay = exports.getLastDay = function getLastDay(lectures) {
var lecture = lectures[lectures.length - 1];
return lecture === undefined ? "" : formatDate(lecture.lecture_date_time_start);
};
var getTeachers = exports.getTeachers = function getTeachers(teachers) {
return Array.from(Object.values(teachers || {}).map(function (teacher) {
return teacher.display_name ? teacher.display_name : teacher.firstname + " " + teacher.surname;
}));
};
var getLocation = exports.getLocation = function getLocation(course) {
var site_id = course.meeting_place_id || course.education_site_id;
if (site_id === undefined) return { room: "", address: [] };
var tree = course.meeting_place_tree || course.education_site_tree;
if (tree.length === 1) return {
room: "",
address: [tree[0].name, tree[0].address_street, tree[0].address_zip]
};
var address = void 0,
room = void 0;
tree.forEach(function (site) {
if (site.id === site_id) {
room = site.name;
} else {
address = [site.name, site.address_street, site.address_zip];
}
});
return {
room: room || "",
address: address || []
};
};
var formatCourseNode = exports.formatCourseNode = function formatCourseNode(course) {
var sorted_lectures = Object.values(course.lectures || {}).map(function (lec) {
return _extends({}, lec, {
date: new Date(lec.lecture_date_time_start.split(" ")[0])
});
}).sort(function (a, b) {
return a.date.valueOf() < b.date.valueOf();
});
return {
id: course.course_id || "",
name: course.name || "",
day_and_time: getCourseTimeOfDay(sorted_lectures),
first_day_date: getFirstDay(sorted_lectures),
last_day_date: getLastDay(sorted_lectures),
categories: getCourseCategories(course.keywords),
description: course.description || "",
image_url: course.image_url || "",
teachers: getTeachers(course.teachers),
location: getLocation(course),
enrollment: {
status: (course.enrollment_status || {}).status_code || "",
start_date: formatDate(course.enrollment_period_start_date || ""),
end_date: formatDate(course.enrollment_period_end_date || ""),
waitlist_open_until: formatDate(course.waitlist_open_up_to_and_including_date || "")
},
// Internal GraphQL stuff
parent: null,
children: [],
internal: {
type: "feliksCourse",
contentDigest: crypto.createHash("md5").update(JSON.stringify(course) || "").digest("hex")
}
};
};
var formatStringNode = exports.formatStringNode = function formatStringNode(name, type) {
return {
id: crypto.randomBytes(16).toString("hex"),
name: name,
// Internal GraphQL stuff
parent: null,
children: [],
internal: {
type: type,
contentDigest: crypto.createHash("md5").update(JSON.stringify(name) || "").digest("hex")
}
};
};