UNPKG

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
"use strict"; 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") } }; };