@mitodl/course-search-utils
Version:
JS utils for interacting with MIT Open Course search
147 lines (146 loc) • 5.47 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.serializeSearchParams = exports.serializeUI = exports.serializeSort = exports.deserializeSearchParams = exports.deserializeUI = exports.deserializeSort = exports.toArray = void 0;
/* eslint-disable camelcase */
var _ = __importStar(require("lodash"));
var qs = __importStar(require("query-string"));
var toArray = function (obj) {
return Array.isArray(obj) ? obj : obj ? [obj] : undefined;
};
exports.toArray = toArray;
var urlParamToArray = function (param) {
return _.union((0, exports.toArray)(param) || []);
};
var handleText = function (q) {
if (Array.isArray(q)) {
return q.join("");
}
if (q === null || q === undefined) {
return "";
}
return q;
};
var deserializeSort = function (sortParam) {
if (!sortParam) {
return null;
}
if (sortParam.startsWith("-")) {
return {
field: sortParam.slice(1),
option: "desc"
};
}
else {
return {
field: sortParam,
option: "asc"
};
}
};
exports.deserializeSort = deserializeSort;
var deserializeUI = function (uiParam) {
if (!uiParam) {
return null;
}
return uiParam;
};
exports.deserializeUI = deserializeUI;
var deserializeSearchParams = function (_a) {
var search = _a.search;
var searchUrlParams = search.replace(/^\?/, "").split("?", 1)[0];
var _b = qs.parse(searchUrlParams), type = _b.type, o = _b.o, t = _b.t, q = _b.q, a = _b.a, c = _b.c, d = _b.d, l = _b.l, f = _b.f, r = _b.r, s = _b.s, u = _b.u;
return {
text: handleText(q),
activeFacets: {
audience: urlParamToArray(a),
certification: urlParamToArray(c),
type: urlParamToArray(type),
offered_by: urlParamToArray(o),
topics: urlParamToArray(t),
department_name: urlParamToArray(d),
level: urlParamToArray(l),
course_feature_tags: urlParamToArray(f),
resource_type: urlParamToArray(r)
},
sort: (0, exports.deserializeSort)(handleText(s)),
ui: (0, exports.deserializeUI)(handleText(u))
};
};
exports.deserializeSearchParams = deserializeSearchParams;
var serializeSort = function (sort) {
if (sort === null) {
// leave it off the params if set to default
return undefined;
}
if (sort.option === "desc") {
return "-".concat(sort.field);
}
else {
return sort.field;
}
};
exports.serializeSort = serializeSort;
var serializeUI = function (ui) {
if (ui === null) {
// leave it off the params if set to default
return undefined;
}
return ui;
};
exports.serializeUI = serializeUI;
var serializeSearchParams = function (_a) {
var text = _a.text, activeFacets = _a.activeFacets, sort = _a.sort, ui = _a.ui;
var _b = activeFacets !== null && activeFacets !== void 0 ? activeFacets : {}, type = _b.type, offered_by = _b.offered_by, topics = _b.topics, audience = _b.audience, certification = _b.certification, department_name = _b.department_name, level = _b.level, course_feature_tags = _b.course_feature_tags, resource_type = _b.resource_type, others = __rest(_b, ["type", "offered_by", "topics", "audience", "certification", "department_name", "level", "course_feature_tags", "resource_type"]);
if (Object.keys(others).length > 0) {
console.warn("Unrecognized facets:", others);
}
return qs.stringify({
q: text || undefined,
type: type,
a: audience,
c: certification,
o: offered_by,
t: topics,
d: department_name,
l: level,
f: course_feature_tags,
r: resource_type,
s: (0, exports.serializeSort)(sort || null),
u: (0, exports.serializeUI)(ui || null)
});
};
exports.serializeSearchParams = serializeSearchParams;
;