From 37633c77170ba5d9eb8cc9cf5ce0e7784dd40eae Mon Sep 17 00:00:00 2001 From: weko3-dev040 Date: Mon, 4 Oct 2021 19:01:26 +0700 Subject: [PATCH 1/4] weko#26661: Fix bug sort item facet search by id. --- app-facet-search/src/App.js | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/app-facet-search/src/App.js b/app-facet-search/src/App.js index 8c1d4f9..faf576b 100644 --- a/app-facet-search/src/App.js +++ b/app-facet-search/src/App.js @@ -18,22 +18,26 @@ class FacetSearch extends React.Component { is_enable: true, list_title: {}, list_facet: {}, + list_order: {} }; - this.getTitle = this.getTitle.bind(this); + this.getTitleAndOrder = this.getTitleAndOrder.bind(this); this.get_facet_search_list = this.get_facet_search_list.bind(this); this.convertData = this.convertData.bind(this); this.getUrlVars = this.getUrlVars.bind(this); } - getTitle() { + getTitleAndOrder() { let titleLst = {}; - fetch("/facet-search/get-title", {method: "POST"}) + let orderLst = {}; + fetch("/facet-search/get-title-and-order", {method: "POST"}) .then((r) => r.json()) .then((response) => { if (response.status) { - titleLst = response.data; + titleLst = response.data.titles; + orderLst =response.data.order; } this.setState({ list_title: titleLst }); + this.setState({ list_order: orderLst }); }); } @@ -76,21 +80,26 @@ class FacetSearch extends React.Component { convertData(data) { let list_facet = {}; + const {list_order} = this.state; if (data) { - Object.keys(data).map(function (name, k) { - let val = data[name][name] ? data[name][name] : data[name]; - let hasBuckets = val["key"] && val["key"].hasOwnProperty("buckets"); - hasBuckets = val.hasOwnProperty("buckets") || hasBuckets; - if (hasBuckets) { - list_facet[name] = val[name] ? val[name] : val; - } + Object.keys(list_order).map(function (order, key_order) { + Object.keys(data).map(function (name, k) { + if (list_order[order] == name) { + let val = data[name][name] ? data[name][name] : data[name]; + let hasBuckets = val["key"] && val["key"].hasOwnProperty("buckets"); + hasBuckets = val.hasOwnProperty("buckets") || hasBuckets; + if (hasBuckets) { + list_facet[name] = val[name] ? val[name] : val; + } + } + }); }); } - this.setState({ list_facet: list_facet }); + this.setState({list_facet: list_facet}); } componentDidMount() { - this.getTitle(); + this.getTitleAndOrder(); this.get_facet_search_list(); } From e60793155dc29decde19972d54912460c8c95263 Mon Sep 17 00:00:00 2001 From: weko3-dev040 Date: Mon, 4 Oct 2021 19:05:14 +0700 Subject: [PATCH 2/4] weko#26662: Fix bug facet search is incorrect. --- app-facet-search/src/components/RangeSelect.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/app-facet-search/src/components/RangeSelect.jsx b/app-facet-search/src/components/RangeSelect.jsx index 294409e..19607e8 100644 --- a/app-facet-search/src/components/RangeSelect.jsx +++ b/app-facet-search/src/components/RangeSelect.jsx @@ -24,6 +24,7 @@ function RangeSelect({ value, name, labels }) { encodeURIComponent(name) + "=" + encodeURIComponent(subitem.value); search += "&" + pattern; }); + search = search.replace("q=0", "q="); window.location.href = "/search" + search; } From cfcc2f20eb9d1bf494ecb5a65e18030eb6c3e4ad Mon Sep 17 00:00:00 2001 From: weko3-dev040 Date: Tue, 5 Oct 2021 13:58:05 +0700 Subject: [PATCH 3/4] weko#27066 : Fix bug facet search special character. --- app-facet-search/src/App.js | 52 +++++++++++++++---- .../src/components/RangeFacet.jsx | 4 +- .../src/components/RangeSelect.jsx | 35 +++++++------ 3 files changed, 62 insertions(+), 29 deletions(-) diff --git a/app-facet-search/src/App.js b/app-facet-search/src/App.js index faf576b..fc510ec 100644 --- a/app-facet-search/src/App.js +++ b/app-facet-search/src/App.js @@ -42,26 +42,55 @@ class FacetSearch extends React.Component { } get_facet_search_list() { - let search = window.location.search; + let search = new URLSearchParams(window.location.search); let url = "/api/records/"; let params = this.getUrlVars(); if (params.search_type && String(params.search_type) === "2") { url = "/api/index/"; } - fetch(url + search) + fetch(url + '?' + search.toString()) .then((r) => r.json()) .then((res) => { if (params.search_type && String(params.search_type) === "2") { // Index faceted search - const data = - res && - res.aggregations && - res.aggregations.path && - res.aggregations.path.buckets && - res.aggregations.path.buckets[0] - ? res.aggregations.path.buckets[0] - : {}; - this.convertData(data && data[0] ? data[0] : {}); + const buckets = res && res.aggregations && res.aggregations.path && + res.aggregations.path.buckets && res.aggregations.path.buckets[0] + ? res.aggregations.path.buckets[0] : {}; + // Statistic items of facets for api /api/index/... + let aggregations = {}; + for (let i = 0; i < buckets.length; i++) { + if (i == 0) { + Object.keys(buckets[0]).map(function (key, ind) { + if (typeof (buckets[0][key]) == 'object') { + aggregations[key] = {'buckets': []}; + } + }); + } + Object.keys(buckets[i]).map(function (key, ind) { + if (typeof (buckets[i][key]) == 'object' && aggregations[key]) { + let aggregations_buckets = aggregations[key]['buckets']; + let cur_buckets = buckets[i][key][key] ? buckets[i][key][key]['buckets'] : buckets[i][key]['buckets']; + cur_buckets = cur_buckets ? cur_buckets : []; + for (let j = 0; j < cur_buckets.length; j++) { + let flag = false; + for (let k = 0; k < aggregations_buckets.length; k++) { + if (aggregations_buckets[k]['key'] == cur_buckets[j]['key']) { + aggregations_buckets[k]['doc_count'] = aggregations_buckets[k]['doc_count'] + cur_buckets[j]['doc_count']; + flag = !flag; + break; + } + } + if (!flag) { + aggregations_buckets.push({ + 'key': cur_buckets[j]['key'], + 'doc_count': cur_buckets[j]['doc_count'] + }); + } + } + } + }); + } + this.convertData(aggregations); } else { // default faceted search this.convertData(res && res.aggregations ? res.aggregations : {}); @@ -83,6 +112,7 @@ class FacetSearch extends React.Component { const {list_order} = this.state; if (data) { Object.keys(list_order).map(function (order, key_order) { + list_facet[list_order[order]] = {'buckets': []}; Object.keys(data).map(function (name, k) { if (list_order[order] == name) { let val = data[name][name] ? data[name][name] : data[name]; diff --git a/app-facet-search/src/components/RangeFacet.jsx b/app-facet-search/src/components/RangeFacet.jsx index 51711bb..e05437c 100644 --- a/app-facet-search/src/components/RangeFacet.jsx +++ b/app-facet-search/src/components/RangeFacet.jsx @@ -34,10 +34,10 @@ function RangeFacet({ item, nameshow, name, key, labels }) {
{!check_temp(name) && ( - + )} {check_temp(name) && false && ( - + )}
diff --git a/app-facet-search/src/components/RangeSelect.jsx b/app-facet-search/src/components/RangeSelect.jsx index 19607e8..9dcaca4 100644 --- a/app-facet-search/src/components/RangeSelect.jsx +++ b/app-facet-search/src/components/RangeSelect.jsx @@ -3,7 +3,7 @@ import "rc-tooltip/assets/bootstrap.css"; import React from "react"; import Select from "react-select"; -function RangeSelect({ value, name, labels }) { +function RangeSelect({ values, name, labels }) { function handleChange(params) { let searchUrl = ""; if (search.indexOf("&") >= 0) { @@ -21,29 +21,32 @@ function RangeSelect({ value, name, labels }) { } params.map(function (subitem, k) { const pattern = - encodeURIComponent(name) + "=" + encodeURIComponent(subitem.value); + encodeURIComponent(name) + "=" + encodeURIComponent(subitem.value); search += "&" + pattern; }); search = search.replace("q=0", "q="); + search = search.replace("search_type=2", "search_type=0"); + search = search + '&is_facet_search=true'; window.location.href = "/search" + search; } let search = window.location.search.replace(",", "%2C") || "?"; - let options_default = []; + let params = window.location.search.substring(1).split('&'); + for (let i = 0; i < params.length; i++) { + params[i] = decodeURIComponent(params[i]); + } + let defaultOptions = []; let options = []; - if (value) { - value.map(function (subitem, k) { - let option = { label: "", value: "" }; - const pattern = - encodeURIComponent(name) + "=" + encodeURIComponent(subitem.key); - const is_check = search.indexOf(pattern + "&") >= 0 ? true : false; - const is_end = search.endsWith(pattern); - option.label = - (labels[subitem.key] || subitem.key) + "(" + subitem.doc_count + ")"; - option.value = subitem.key; + if (values) { + values.map(function (subitem, k) { + let option = { + label: (labels[subitem.key] || subitem.key) + "(" + subitem.doc_count + ")", + value: subitem.key + }; options.push(option); - if (is_check || is_end) { - options_default.push(option); + let pattern = name + "=" + subitem.key; + if (params.indexOf(pattern) != -1) { + defaultOptions.push(option); } }); } @@ -51,7 +54,7 @@ function RangeSelect({ value, name, labels }) {