UNPKG

gatsby-source-smartrecruiters

Version:

Gatsby source plugin for loading job posts from smartrecruiters

149 lines (121 loc) 4.59 kB
'use strict'; /** * Return all open jobs for a given department * @param apiToken string. * @param departmentId string. */ let getJobsForDepartment = (() => { var _ref = _asyncToGenerator(function* (companyIdentifier, departmentId) { return getJobPosts(companyIdentifier, { department: departmentId }); }); return function getJobsForDepartment(_x, _x2) { return _ref.apply(this, arguments); }; })(); /** * Return all job posts * @param apiToken string. * @param queryParams object, defaults to only live job posts */ let getJobPosts = (() => { var _ref2 = _asyncToGenerator(function* (companyIdentifier, queryParams = {}) { return axios.get(`https://api.smartrecruiters.com/v1/companies/${companyIdentifier}/postings`, { params: queryParams }); }); return function getJobPosts(_x3) { return _ref2.apply(this, arguments); }; })(); /** * Gets all departments for a given organization * @param apiToken string. */ let getDepartments = (() => { var _ref3 = _asyncToGenerator(function* (companyIdentifier) { return axios.get(`https://api.smartrecruiters.com/v1/companies/${companyIdentifier}/departments`); }); return function getDepartments(_x4) { return _ref3.apply(this, arguments); }; })(); /** * Gatsby requires ID to be a string to define nodes and greenhouse.io uses an integer instead. * * @param obj object. * @returns object. */ var _nodes = require('./nodes'); function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } const crypto = require('crypto'); const axios = require('axios'); const changeId = obj => { const updatedObj = obj; updatedObj.id = updatedObj.id.toString(); return updatedObj; }; exports.sourceNodes = (() => { var _ref4 = _asyncToGenerator(function* ({ boundActionCreators }, { companyIdentifier, pluginOptions }) { const createNode = boundActionCreators.createNode; const options = pluginOptions || {}; console.log(`Starting to fetch data from Smart Recruiters`); let departments, jobPosts; try { departments = yield getDepartments(companyIdentifier).then(function (response) { return response.data.content; }); jobPosts = yield getJobPosts(companyIdentifier, options.jobPosts).then(function (response) { return response.data.content; }); } catch (e) { console.log(`Failed to fetch data from Smart Recruiters`); process.exit(1); } console.log(`jobPosts fetched`, jobPosts.length); console.log(`departments fetched`, departments.length); return Promise.all(departments.map((() => { var _ref5 = _asyncToGenerator(function* (department) { const convertedDepartment = changeId(department); let jobs; try { const jobsForDepartmentResults = yield getJobsForDepartment(companyIdentifier, convertedDepartment.id); jobs = jobsForDepartmentResults.data.content.map(function (job) { return changeId(job); }); } catch (e) { console.log(`Failed to fetch jobs for department.`); process.exit(1); } var jobPostsMapping = jobPosts.reduce(function (map, jobPost) { map[jobPost.id] = jobPost; return map; }, {}); var jobPostsForDepartment = jobs.reduce(function (arr, job) { const mappedJobPost = jobPostsMapping[job.id]; if (mappedJobPost) { arr.push(mappedJobPost); } return arr; }, []); convertedDepartment.jobPosts = jobPostsForDepartment; const departmentNode = (0, _nodes.DepartmentNode)(changeId(convertedDepartment)); jobPostsForDepartment.forEach(function (jobPost) { const convertedJobPost = changeId(jobPost); const jobPostNode = (0, _nodes.JobPostNode)(convertedJobPost, { parent: departmentNode.id }); createNode(jobPostNode); }); createNode(departmentNode); }); return function (_x7) { return _ref5.apply(this, arguments); }; })())); }); return function (_x5, _x6) { return _ref4.apply(this, arguments); }; })();