summaryrefslogtreecommitdiffstats
path: root/grid/src
diff options
context:
space:
mode:
authorivarlovlie <git@ivarlovlie.no>2020-11-17 19:56:58 +0100
committerivarlovlie <git@ivarlovlie.no>2020-11-17 19:56:58 +0100
commit9b6223d35ce090af1f8ea5d7ee63a629bb2a023f (patch)
tree8b9dfbb2f7ffa18727d7a524a7136b295047b484 /grid/src
parentb7196aea72ccea2a26ad9c7cac1fac0da80b6d26 (diff)
downloadweb-components-9b6223d35ce090af1f8ea5d7ee63a629bb2a023f.tar.xz
web-components-9b6223d35ce090af1f8ea5d7ee63a629bb2a023f.zip
0.0.2
Diffstat (limited to 'grid/src')
-rw-r--r--grid/src/grid.ts31
1 files changed, 25 insertions, 6 deletions
diff --git a/grid/src/grid.ts b/grid/src/grid.ts
index 0953268..4623dda 100644
--- a/grid/src/grid.ts
+++ b/grid/src/grid.ts
@@ -21,7 +21,6 @@ interface GridConfiguration {
interface SearchConfiguration {
dataIds: Array<string>;
}
-
interface GridColumn {
dataId?: string;
columnName: string | Function;
@@ -46,6 +45,7 @@ export default class Grid {
private configuration: GridConfiguration;
private domElement: Element;
public currentPage: number = 0;
+ private searchIndex: JsSearch.Search;
constructor(props: GridProps) {
this.setOptions(props);
@@ -152,8 +152,17 @@ export default class Grid {
wrapper.appendChild(row);
}
- private renderBody(data: Array<Object> = null): void {
- const wrapper = this.domElement.querySelector("table tbody");
+ private renderBody(data: Array<Object> = null, isSearchResult: boolean = false): void {
+ let wrapper = this.domElement.querySelector("table tbody");
+ if (isSearchResult) {
+ this.domElement.querySelector("table tbody:not(.search-results)").classList.add("d-none");
+ this.domElement.querySelector("table tbody.search-results").classList.remove("d-none");
+ wrapper = this.domElement.querySelector("table tbody.search-results");
+ } else {
+ this.domElement.querySelector("table tbody.search-results")?.classList.add("d-none");
+ this.domElement.querySelector("table tbody:not(.search-results)").classList.remove("d-none");
+ wrapper = this.domElement.querySelector("table tbody:not(.search-results)");
+ }
wrapper.innerHTML = "";
let items = data ?? this.configuration.data;
if (this.configuration.pageSize !== 0) {
@@ -170,6 +179,7 @@ export default class Grid {
if (typeof val.dataId === "string" && val.dataId.length > 0) {
val.cellValue = item[val.dataId];
}
+ cell.className = "text-break";
if (typeof val.cellValue === "string" || typeof val.cellValue === "number") {
cell.innerText = val.cellValue;
@@ -215,7 +225,12 @@ export default class Grid {
this.domElement.appendChild(wrapper);
}
- private searchIndex: JsSearch.Search;
+ private renderSearchResultWrapper() {
+ if (this.configuration.search.dataIds.length < 1) return;
+ const searchWrapper = document.createElement("tbody");
+ searchWrapper.className = "search-results";
+ this.domElement.querySelector("table").appendChild(searchWrapper);
+ }
private populateSearchIndex() {
if (this.configuration.search.dataIds.length < 1) return;
@@ -229,8 +244,11 @@ export default class Grid {
public search(query: string): void {
if (this.configuration.search.dataIds.length < 1) return;
let result = this.searchIndex.search(query);
- if (result.length === 0) result = this.configuration.data;
- this.renderBody(result);
+ if (result.length === 0) {
+ this.renderBody(this.configuration.data);
+ } else {
+ this.renderBody(result, true);
+ }
}
public navigate(pageNumber): void {
@@ -274,6 +292,7 @@ export default class Grid {
this.renderBody();
this.renderPaginator();
this.renderCurrentPageIndicator();
+ this.renderSearchResultWrapper();
this.log("Grid was rendered");
} else {
throw new GridError("render is not allowed due to invalid props");