Skip to content

Commit

Permalink
Added priority filters
Browse files Browse the repository at this point in the history
  • Loading branch information
mmoreram committed Feb 6, 2024
1 parent 662ca49 commit 9d92a5a
Show file tree
Hide file tree
Showing 33 changed files with 884 additions and 33 deletions.
307 changes: 297 additions & 10 deletions dist/apisearch-ui.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/apisearch-ui.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/apisearch-ui.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/apisearch-ui.min.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion lib/components/Banner/defaultTemplates.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
"use strict";
exports.__esModule = true;
exports.defaultBannerTemplate = void 0;
exports.defaultBannerTemplate = "\n <div class=\"banner\">\n {{#has_url}}<a href=\"{{url}}\">{{/has_url}}\n <picture>\n <source srcset=\"{{image_prefix}}{{desktop_img}}\" media=\"(min-width: {{breaking_point_size}}px)\" />\n <img src=\"{{image_prefix}}{{mobile_img}}\" />\n </picture>\n {{#has_url}}</a>{{/has_url}}\n </div>\n";
exports.defaultBannerTemplate = "\n <div class=\"banner\">\n {{#has_url}}<a href=\"{{url}}\">{{/has_url}}\n <picture>\n <source srcset=\"{{image_prefix}}{{desktop_img}}\" media=\"(min-width: {{breaking_point_size}}px)\" />\n <img src=\"{{image_prefix}}{{mobile_img}}\" loading=\"lazy\" class=\"soft-lazy\" onload=\"window.asImageShow(this)\" />\n </picture>\n {{#has_url}}</a>{{/has_url}}\n </div>\n";
3 changes: 3 additions & 0 deletions lib/components/ClearFilters/ClearFiltersActions.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ function clearFiltersAction(environmentId, currentQuery, repository, filterToCle
if (valueIndex > -1) {
clonedQuery.filters[filterToClear].values.splice(valueIndex, 1);
}
if (clonedQuery.filters[filterToClear].values.length === 0) {
delete clonedQuery.filters[filterToClear];
}
}
clonedQuery.page = 1;
var dispatcher = Container_1["default"].get("".concat(Constants_1.APISEARCH_DISPATCHER, "__").concat(environmentId));
Expand Down
2 changes: 1 addition & 1 deletion lib/components/MultipleFilter/MultipleFilterActions.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ function filterAction(environmentId, currentQuery, repository, filterName, filte
repository
.query(clonedQuery)
.then(function (result) {
clonedQuery.setMetadataValue("af", []);
delete clonedQuery.metadata.af;
dispatcher.dispatch("RENDER_FETCHED_DATA", {
query: clonedQuery,
result: result
Expand Down
46 changes: 46 additions & 0 deletions lib/components/PriorityFilter/PriorityFilterActions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
"use strict";
exports.__esModule = true;
exports.priorityFilterAction = exports.setupPriorityFilters = void 0;
var Constants_1 = require("../../Constants");
var Container_1 = require("../../Container");
var Clone_1 = require("../Clone");
function setupPriorityFilters(environmentId, currentQuery, filters) {
var clonedQuery = Clone_1["default"].object(currentQuery);
clonedQuery.setMetadataValue("pf", filters);
var dispatcher = Container_1["default"].get("".concat(Constants_1.APISEARCH_DISPATCHER, "__").concat(environmentId));
dispatcher.dispatch("UPDATE_APISEARCH_SETUP", {
query: clonedQuery
});
}
exports.setupPriorityFilters = setupPriorityFilters;
/**
* @param environmentId
* @param currentQuery
* @param repository
* @param filterName
* @param filterField
* @param filterValue
* @param applicationType
*/
function priorityFilterAction(environmentId, currentQuery, repository, filterName, filterField, filterValue, applicationType) {
window.postMessage({
name: "apisearch_scroll_top"
}, "*");
var clonedQuery = Clone_1["default"].object(currentQuery);
clonedQuery.filterBy(filterName, filterField, [filterValue], applicationType, false);
clonedQuery.page = 1;
var dispatcher = Container_1["default"].get("".concat(Constants_1.APISEARCH_DISPATCHER, "__").concat(environmentId));
clonedQuery.setMetadataValue("af", [filterField, filterValue]);
repository
.query(clonedQuery)
.then(function (result) {
delete clonedQuery.metadata.af;
dispatcher.dispatch("RENDER_FETCHED_DATA", {
query: clonedQuery,
result: result
});
})["catch"](function (error) {
// Do nothing
});
}
exports.priorityFilterAction = priorityFilterAction;
117 changes: 117 additions & 0 deletions lib/components/PriorityFilter/PriorityFilterComponent.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
"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) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
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 preact_1 = require("preact");
var Template_1 = require("../Template");
var defaultTemplates_1 = require("./defaultTemplates");
var PriorityFilterActions_1 = require("./PriorityFilterActions");
/**
* PriorityFilterComponent
*/
var PriorityFilterComponent = /** @class */ (function (_super) {
__extends(PriorityFilterComponent, _super);
/**
* Constructor
*/
function PriorityFilterComponent() {
var _this = _super.call(this) || this;
_this.handleClick = function (filterValue) {
var props = _this.props;
var environmentId = props.environmentId;
var repository = props.repository;
var currentQuery = props.store.getCurrentQuery();
var priorityFilter = _this.props.store.getCurrentResult().getMetadataValue("priority_filter");
var priorityFilterName = priorityFilter.name;
var priorityFilterObject = props.store.getCurrentQuery().getAggregation(priorityFilterName);
(0, PriorityFilterActions_1.priorityFilterAction)(environmentId, currentQuery, repository, priorityFilterName, priorityFilterObject.getField().replace("indexed_metadata.", ""), filterValue, priorityFilterObject.getApplicationType());
};
_this.state = {
filterName: ""
};
return _this;
}
/**
* Components will mount
*/
PriorityFilterComponent.prototype.componentWillMount = function () {
var props = this.props;
/**
* Dispatch action
*/
(0, PriorityFilterActions_1.setupPriorityFilters)(props.environmentId, props.store.getCurrentQuery(), props.filters);
};
/**
* Component will receive props
*
* @param props
*/
PriorityFilterComponent.prototype.componentWillReceiveProps = function (props) {
this.setState(function (_) {
return {
filterName: props.store.getCurrentResult().getMetadataValue("priority_filter")
};
});
};
/**
* Render
*
* @return {any}
*/
PriorityFilterComponent.prototype.render = function () {
var _this = this;
var priorityFilter = this.props.store.getCurrentResult().getMetadataValue("priority_filter");
if (!priorityFilter) {
return null;
}
var priorityFilterName = priorityFilter.name;
var that = this;
return ((0, preact_1.h)("div", { className: "as-priorityFilter" },
(0, preact_1.h)(Template_1["default"], { template: this.props.template.top, className: "as-priorityFilter__top", dictionary: this.props.dictionary, data: {
name: priorityFilterName
} }),
(0, preact_1.h)("div", { className: "as-priorityFilter__itemsList" },
(0, preact_1.h)("ul", null, Object.keys(priorityFilter.values).map(function (key) {
var data = priorityFilter.values[key];
return ((0, preact_1.h)("li", { onClick: function (e) {
e.stopPropagation();
e.preventDefault();
that.handleClick(key);
} },
(0, preact_1.h)(Template_1["default"], { template: _this.props.template.item, data: __assign(__assign({}, data), { value: key }), dictionary: _this.props.dictionary })));
})))));
};
return PriorityFilterComponent;
}(preact_1.Component));
PriorityFilterComponent.defaultProps = {
aggregationField: null,
template: {
item: defaultTemplates_1.defaultPriorityFilterItemTemplate,
top: defaultTemplates_1.defaultPriorityFilterTopTemplate
}
};
exports["default"] = PriorityFilterComponent;
2 changes: 2 additions & 0 deletions lib/components/PriorityFilter/PriorityFilterProps.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
"use strict";
exports.__esModule = true;
2 changes: 2 additions & 0 deletions lib/components/PriorityFilter/PriorityFilterState.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
"use strict";
exports.__esModule = true;
5 changes: 5 additions & 0 deletions lib/components/PriorityFilter/defaultTemplates.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
"use strict";
exports.__esModule = true;
exports.defaultPriorityFilterItemTemplate = exports.defaultPriorityFilterTopTemplate = void 0;
exports.defaultPriorityFilterTopTemplate = "\n {{name}}\n";
exports.defaultPriorityFilterItemTemplate = "\n <div>{{value}}</div>\n <img src=\"{{image}}\" />\n";
5 changes: 4 additions & 1 deletion lib/components/Result/Item.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,10 @@ var Item = /** @class */ (function (_super) {
* @param nextState
*/
Item.prototype.shouldComponentUpdate = function (nextProps, nextState) {
var shouldUpdate = this.props.data.uuid_composed !== nextProps.data.uuid_composed;
console.log(nextProps.data.query);
var shouldUpdate = this.props.data.uuid_composed !== nextProps.data.uuid_composed ||
this.props.data.metadata.image !== nextProps.data.metadata.image ||
this.props.data.query !== nextProps.data.query;
if (!shouldUpdate) {
this.highlight();
}
Expand Down
3 changes: 2 additions & 1 deletion lib/components/Result/ResultComponent.js
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,7 @@ var ResultComponent = /** @class */ (function (_super) {
: ((items.length > 0)
? ((0, preact_1.h)("div", { className: "as-result__itemsList ".concat(props.classNames.itemsList) },
items.map(function (item) {
return (0, preact_1.h)(Item_1["default"], { data: __assign(__assign({}, reducedTemplateData), _this.hydrateItem(item)), template: props.template.item, className: "as-result__item ".concat(props.classNames.item), dictionary: props.dictionary });
return (0, preact_1.h)(Item_1["default"], { data: __assign(__assign(__assign({}, reducedTemplateData), _this.hydrateItem(item)), { query: currentQuery.getQueryText() }), template: props.template.item, className: "as-result__item ".concat(props.classNames.item), dictionary: props.dictionary });
}),
hasInfiniteScrollNextPage
? (props.infiniteScrollButton
Expand Down Expand Up @@ -420,6 +420,7 @@ ResultComponent.defaultProps = {
promote: [],
exclude: [],
filter: function (query) { return null; },
subResult: false,
classNames: {
container: "",
itemsList: "",
Expand Down
6 changes: 3 additions & 3 deletions lib/components/SortBy/SortByHelper.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,15 @@ var apisearch_1 = require("apisearch");
function applySortByToQuery(query, selectedOption) {
var sortByData = splitQueryValue(selectedOption);
var sortBy = apisearch_1["default"].createEmptySortBy();
if (sortByData.field == 'distance') {
if (sortByData.field === "distance") {
sortBy.byValue({
type: apisearch_1.SORT_BY_TYPE_DISTANCE,
unit: sortByData.sort
? sortByData.sort
: 'km'
: "km"
});
}
else if (sortByData.field == 'score') {
else if (sortByData.field === "score") {
sortBy.byValue(apisearch_1.SORT_BY_SCORE);
}
else {
Expand Down
67 changes: 67 additions & 0 deletions lib/widgets/PriorityFilter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
"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) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
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 preact_1 = require("preact");
var PriorityFilterComponent_1 = require("../components/PriorityFilter/PriorityFilterComponent");
var Widget_1 = require("./Widget");
/**
* PriorityFilter
*/
var PriorityFilter = /** @class */ (function (_super) {
__extends(PriorityFilter, _super);
/**
*
* @param target
* @param filters
* @param template
*/
function PriorityFilter(_a) {
var target = _a.target, filters = _a.filters, template = _a.template;
var _this = _super.call(this) || this;
_this.target = target;
_this.component = (0, preact_1.h)(PriorityFilterComponent_1["default"], { target: target, filters: filters, template: __assign(__assign({}, PriorityFilterComponent_1["default"].defaultProps.template), template) });
return _this;
}
/**
* @param environmentId
* @param store
* @param repository
* @param dictionary
*/
PriorityFilter.prototype.render = function (environmentId, store, repository, dictionary) {
this.component.props = __assign(__assign({}, this.component.props), { dictionary: dictionary, environmentId: environmentId, repository: repository, store: store });
(0, preact_1.render)(this.component, document.querySelector(this.target));
};
return PriorityFilter;
}(Widget_1["default"]));
/**
* Multiple filter widget
*
* @param settings
*/
exports["default"] = (function (settings) { return new PriorityFilter(settings); });
3 changes: 1 addition & 2 deletions lib/widgets/SortBy.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,11 +102,10 @@ var SortBy = /** @class */ (function (_super) {
* @private
*/
SortBy.setSortToQuery = function (query, option) {
query.sort = [{}];
if (option === "score") {
query.sort[0].type = "score";
return;
}
query.sort = [{}];
if (option.indexOf("distance:") === 0) {
var distanceSortParts = option.split(":");
query.sort[0].type = distanceSortParts[0];
Expand Down
4 changes: 3 additions & 1 deletion lib/widgets/Widgets.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ var Snapshot_1 = require("./Snapshot");
var SortBy_1 = require("./SortBy");
var Suggestions_1 = require("./Suggestions");
var Banner_1 = require("./Banner");
var PriorityFilter_1 = require("./PriorityFilter");
/**
* Widget factories
*/
Expand All @@ -29,5 +30,6 @@ exports["default"] = {
reload: Reload_1["default"],
snapshot: Snapshot_1["default"],
suggestions: Suggestions_1["default"],
banner: Banner_1["default"]
banner: Banner_1["default"],
priorityFilter: PriorityFilter_1["default"]
};
2 changes: 1 addition & 1 deletion src/components/Banner/defaultTemplates.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ export const defaultBannerTemplate = `
{{#has_url}}<a href="{{url}}">{{/has_url}}
<picture>
<source srcset="{{image_prefix}}{{desktop_img}}" media="(min-width: {{breaking_point_size}}px)" />
<img src="{{image_prefix}}{{mobile_img}}" />
<img src="{{image_prefix}}{{mobile_img}}" loading="lazy" class="soft-lazy" onload="window.asImageShow(this)" />
</picture>
{{#has_url}}</a>{{/has_url}}
</div>
Expand Down
4 changes: 4 additions & 0 deletions src/components/ClearFilters/ClearFiltersActions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ export function clearFiltersAction(
if (valueIndex > -1) {
clonedQuery.filters[filterToClear].values.splice(valueIndex, 1);
}

if (clonedQuery.filters[filterToClear].values.length === 0) {
delete clonedQuery.filters[filterToClear];
}
}

clonedQuery.page = 1;
Expand Down
2 changes: 1 addition & 1 deletion src/components/MultipleFilter/MultipleFilterActions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ export function filterAction(
repository
.query(clonedQuery)
.then((result) => {
clonedQuery.setMetadataValue("af", []);
delete clonedQuery.metadata.af;
dispatcher.dispatch("RENDER_FETCHED_DATA", {
query: clonedQuery,
result,
Expand Down
Loading

0 comments on commit 9d92a5a

Please sign in to comment.