UNPKG

apisearch-ui

Version:

Javascript User Interface of Apisearch.

133 lines (132 loc) 4.66 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; exports.__esModule = true; var apisearch_1 = require("apisearch"); var preact_1 = require("preact"); var SortByComponent_1 = require("../components/SortBy/SortByComponent"); var Widget_1 = require("./Widget"); /** * SortBy */ var SortBy = /** @class */ (function (_super) { __extends(SortBy, _super); function SortBy(_a) { var target = _a.target, classNames = _a.classNames, options = _a.options; var _this = _super.call(this) || this; _this.target = target; _this.targetNode = document.querySelector(_this.target); _this.component = preact_1.h(SortByComponent_1["default"], { target: target, classNames: __assign(__assign({}, SortByComponent_1["default"].defaultProps.classNames), classNames), options: options }); return _this; } /** * @param environmentId * @param store * @param repository * @param dictionary */ SortBy.prototype.render = function (environmentId, store, repository, dictionary) { this.component.props = __assign(__assign({}, this.component.props), { environmentId: environmentId, repository: repository, store: store }); preact_1.render(this.component, this.targetNode); }; /** * @private */ SortBy.prototype.firstOptionAsString = function () { return this.component.props.options[0].value; }; /** * @param query * @param object */ SortBy.prototype.toUrlObject = function (query, object) { if (query.sort !== undefined) { var sort = query.sort[0]; var sortInstance = apisearch_1.SortBy.createFromArray(query.sort); var sortAsString = sortInstance.getFirstSortAsString(); var firstSortAsString = this.firstOptionAsString(); if (sortAsString !== firstSortAsString) { if (sort.type === "distance") { object.sort = "distance:" + sort.unit + ":" + sort.coordinate.lat + ":" + sort.coordinate.lon; } else { object.sort = sort.field.substr(17) + ":" + sort.order; } } } }; /** * @param object * @param query */ SortBy.prototype.fromUrlObject = function (object, query) { if (object.sort !== undefined) { SortBy.setSortToQuery(query, object.sort); } }; /** * @param query */ SortBy.prototype.reset = function (query) { delete query.sort; var firstSortAsString = this.firstOptionAsString(); SortBy.setSortToQuery(query, firstSortAsString); }; /** * @param query * @param option * @private */ SortBy.setSortToQuery = function (query, option) { query.sort = [{}]; if (option === "score") { query.sort[0].type = "score"; return; } if (option.indexOf("distance:") === 0) { var distanceSortParts = option.split(":"); query.sort[0].type = distanceSortParts[0]; query.sort[0].unit = distanceSortParts[1]; query.sort[0].coordinate = { lat: distanceSortParts[2], lon: distanceSortParts[3] }; return; } var sortParts = option.split(":"); query.sort[0].type = "field"; query.sort[0].field = "indexed_metadata." + sortParts[0]; query.sort[0].order = sortParts[1]; }; return SortBy; }(Widget_1["default"])); /** * SortBy widget * * @param settings */ exports["default"] = (function (settings) { return new SortBy(settings); });