Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Attempt to fix pagination #1503

Merged
merged 6 commits into from
Jun 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 4 additions & 6 deletions src/app/datasets/dashboard/dashboard.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,14 @@ import {
addDatasetAction,
fetchDatasetCompleteAction,
fetchMetadataKeysAction,
setSearchTermsAction,
} from "state-management/actions/datasets.actions";

import {
selectFilters,
selectHasPrefilledFilters,
selectDatasetsInBatch,
selectCurrentDataset,
selectSelectedDatasets,
selectSearchTerms,
selectPagination,
} from "state-management/selectors/datasets.selectors";
import { distinctUntilChanged, filter, map, take } from "rxjs/operators";
import { MatDialog } from "@angular/material/dialog";
Expand Down Expand Up @@ -51,7 +49,7 @@ import { AppConfigService } from "app-config.service";
styleUrls: ["dashboard.component.scss"],
})
export class DashboardComponent implements OnInit, OnDestroy {
private filters$ = this.store.select(selectFilters);
private pagination$ = this.store.select(selectPagination);
private readyToFetch$ = this.store
.select(selectHasPrefilledFilters)
.pipe(filter((has) => has));
Expand Down Expand Up @@ -187,9 +185,9 @@ export class DashboardComponent implements OnInit, OnDestroy {
this.updateColumnSubscription();

this.subscriptions.push(
combineLatest([this.readyToFetch$, this.loggedIn$])
combineLatest([this.pagination$, this.readyToFetch$, this.loggedIn$])
.pipe(
map(([_, loggedIn]) => [loggedIn]),
map(([pagination, _, loggedIn]) => [pagination, loggedIn]),
distinctUntilChanged(deepEqual),
)
.subscribe((obj) => {
Expand Down
14 changes: 7 additions & 7 deletions src/app/state-management/reducers/datasets.reducer.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -275,8 +275,8 @@ describe("DatasetsReducer", () => {
const action = fromActions.setDatasetsLimitFilterAction({ limit });
const state = fromDatasets.datasetsReducer(initialDatasetState, action);

expect(state.filters.limit).toEqual(limit);
expect(state.filters.skip).toEqual(0);
expect(state.pagination.limit).toEqual(limit);
expect(state.pagination.skip).toEqual(0);
});
});

Expand All @@ -289,8 +289,8 @@ describe("DatasetsReducer", () => {
const action = fromActions.changePageAction({ page, limit });
const state = fromDatasets.datasetsReducer(initialDatasetState, action);

expect(state.filters.limit).toEqual(limit);
expect(state.filters.skip).toEqual(skip);
expect(state.pagination.limit).toEqual(limit);
expect(state.pagination.skip).toEqual(skip);
});
});

Expand Down Expand Up @@ -366,13 +366,13 @@ describe("DatasetsReducer", () => {
const act = fromActions.changePageAction({ page, limit });
const sta = fromDatasets.datasetsReducer(initialDatasetState, act);

expect(sta.filters.skip).toEqual(skip);
expect(sta.pagination.skip).toEqual(skip);

const action = fromActions.clearFacetsAction();
const state = fromDatasets.datasetsReducer(sta, action);

expect(state.filters.skip).toEqual(0);
expect(state.filters.limit).toEqual(limit);
expect(state.pagination.skip).toEqual(0);
expect(state.pagination.limit).toEqual(limit);
expect(state.searchTerms).toEqual("");
});
});
Expand Down
13 changes: 7 additions & 6 deletions src/app/state-management/reducers/datasets.reducer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -227,15 +227,15 @@ const reducer = createReducer(
on(
fromActions.setDatasetsLimitFilterAction,
(state, { limit }): DatasetState => {
const filters = { ...state.filters, limit, skip: 0 };
return { ...state, filters };
const pagination = { limit, skip: 0 };
return { ...state, pagination };
},
),

on(fromActions.changePageAction, (state, { page, limit }): DatasetState => {
const skip = page * limit;
const filters = { ...state.filters, skip, limit };
return { ...state, filters };
const pagination = { skip, limit };
return { ...state, pagination };
}),
on(
fromActions.sortByColumnAction,
Expand Down Expand Up @@ -347,9 +347,10 @@ const reducer = createReducer(
}),

on(fromActions.clearFacetsAction, (state): DatasetState => {
const limit = state.filters.limit; // Save limit
const limit = state.pagination.limit; // Save limit
const filters = { ...initialDatasetState.filters, skip: 0, limit };
return { ...state, filters, searchTerms: "" };
const pagination = { skip: 0, limit };
return { ...state, filters, pagination, searchTerms: "" };
}),

on(fromActions.setTextFilterAction, (state, { text }): DatasetState => {
Expand Down
19 changes: 13 additions & 6 deletions src/app/state-management/selectors/datasets.selectors.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ const initialDatasetState: DatasetState = {
isPublished: false,
pid: "",
},
pagination: {
skip: 0,
limit: 30,
},
relatedDatasetsFilters: {
skip: 0,
limit: 25,
Expand Down Expand Up @@ -275,7 +279,7 @@ describe("test dataset selectors", () => {
it("should return the fullquery params", () => {
const fullqueryKeys = Object.keys(
fromDatasetSelectors.selectFullqueryParams.projector(
initialDatasetState.filters,
initialDatasetState,
),
);
expect(fullqueryKeys).toContain("query");
Expand All @@ -284,9 +288,10 @@ describe("test dataset selectors", () => {

describe("selectFullfacetParams", () => {
it("should return the fullfacet params", () => {
const fullfacet = fromDatasetSelectors.selectFullfacetParams.projector(
initialDatasetState.filters,
);
const fullfacet =
fromDatasetSelectors.selectFullfacetParams.projector(
initialDatasetState,
);
const fullfacetKeys = Object.keys(fullfacet);
expect(fullfacet.facets).toEqual([
"type",
Expand All @@ -309,7 +314,9 @@ describe("test dataset selectors", () => {
describe("selectPage", () => {
it("should select the current page", () => {
expect(
fromDatasetSelectors.selectPage.projector(initialDatasetState.filters),
fromDatasetSelectors.selectPage.projector(
initialDatasetState.pagination,
),
).toEqual(0);
});
});
Expand All @@ -318,7 +325,7 @@ describe("test dataset selectors", () => {
it("should select the limit filter", () => {
expect(
fromDatasetSelectors.selectDatasetsPerPage.projector(
initialDatasetState.filters,
initialDatasetState.pagination,
),
).toEqual(30);
});
Expand Down
52 changes: 35 additions & 17 deletions src/app/state-management/selectors/datasets.selectors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,11 @@ export const selectCurrentAttachments = createSelector(
(dataset) => (dataset ? dataset.attachments : []),
);

export const selectPagination = createSelector(
selectDatasetState,
(state) => state.pagination,
);

// === Filters ===

export const selectFilters = createSelector(
Expand Down Expand Up @@ -168,20 +173,33 @@ const restrictFilter = (filter: any, allowedKeys?: string[]) => {
}, {});
};

export const selectFullqueryParams = createSelector(selectFilters, (filter) => {
// don't query with modeToggle, it's only in filters for persistent routing
const { skip, limit, sortField, modeToggle, ...theRest } = filter;
const limits = { skip, limit, order: sortField };
const query = restrictFilter(theRest);
return { query: JSON.stringify(query), limits };
});
export const selectFullqueryParams = createSelector(
selectDatasetState,
(state) => {
const filter = state.filters;
const pagination = state.pagination;
// don't query with modeToggle, it's only in filters for persistent routing
const { skip, limit, sortField, modeToggle, ...theRest } = filter;
const limits = { ...pagination, order: sortField };
const query = restrictFilter(theRest);
return { query: JSON.stringify(query), limits };
},
);

export const selectFullfacetParams = createSelector(selectFilters, (filter) => {
const { skip, limit, sortField, modeToggle, ...theRest } = filter;
const fields = restrictFilter(theRest);
const facets = ["type", "creationLocation", "ownerGroup", "keywords"];
return { fields, facets };
});
export const selectFullfacetParams = createSelector(
selectDatasetState,
(state) => {
const filter = state.filters;
const pagination = state.pagination;
const { skip, limit, sortField, modeToggle, ...theRest } = {
...filter,
...pagination,
};
const fields = restrictFilter(theRest);
const facets = ["type", "creationLocation", "ownerGroup", "keywords"];
return { fields, facets };
},
);

// === Misc. ===

Expand All @@ -190,14 +208,14 @@ export const selectTotalSets = createSelector(
(state) => state.totalCount,
);

export const selectPage = createSelector(selectFilters, (filters) => {
const { skip, limit } = filters;
export const selectPage = createSelector(selectPagination, (pagination) => {
const { skip, limit } = pagination;
return skip / limit;
});

export const selectDatasetsPerPage = createSelector(
selectFilters,
(filters) => filters.limit,
selectPagination,
(pagination) => pagination.limit,
);

export const selectSearchTerms = createSelector(
Expand Down
10 changes: 10 additions & 0 deletions src/app/state-management/state/datasets.store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ export interface FacetCounts {
[field: string]: FacetCount[];
}

export interface Pagination {
skip: number;
limit: number;
}

export interface DatasetState {
datasets: Dataset[];
selectedSets: Dataset[];
Expand All @@ -30,6 +35,7 @@ export interface DatasetState {
keywordsTerms: string;
pidTerms: string;
filters: DatasetFilters;
pagination: Pagination;

relatedDatasetsFilters: {
skip: number;
Expand Down Expand Up @@ -72,6 +78,10 @@ export const initialDatasetState: DatasetState = {
isPublished: "",
pid: "",
},
pagination: {
skip: 0,
limit: 25,
},
relatedDatasetsFilters: {
skip: 0,
limit: 25,
Expand Down
Loading