From f79aa265ef90dc382ef0e280287930a378064f6a Mon Sep 17 00:00:00 2001 From: ansengarvin <45224464+ansengarvin@users.noreply.github.com> Date: Fri, 26 Apr 2024 10:39:23 -0700 Subject: [PATCH] Protein Search Paging (#248) * Updates search proteins URL to include paging * Added page UI elements to search page * Changed display when no proteins found from spinner to none found message * Small grammar fix: proteins -> protein when only 1 protein found * Format * Ruff reformat * Changed != none to is not none to appease Ruff * Fixed issue where pressing next page would break search functionality if the last page had exactly 20 entries * Added searchAndResetPage function for the search bar to call * Fix: Accounted for edge case scenario where next page would return 0 proteins: Changed message from 'no proteins found' to 'no more proteins found' in this case. * Fix: Input fields for length and mass now reset on filter --- backend/src/api/search.py | 17 +++- frontend/src/lib/openapi/core/ApiError.ts | 2 +- .../src/lib/openapi/core/ApiRequestOptions.ts | 2 +- frontend/src/lib/openapi/core/ApiResult.ts | 2 +- .../src/lib/openapi/core/CancelablePromise.ts | 8 +- frontend/src/lib/openapi/core/OpenAPI.ts | 2 +- frontend/src/lib/openapi/core/request.ts | 4 +- frontend/src/lib/openapi/index.ts | 2 +- frontend/src/lib/openapi/models/Article.ts | 2 +- .../openapi/models/ArticleImageComponent.ts | 2 +- .../openapi/models/ArticleProteinComponent.ts | 2 +- .../openapi/models/ArticleTextComponent.ts | 2 +- .../src/lib/openapi/models/ArticleUpload.ts | 2 +- .../models/EditArticleImageComponent.ts | 2 +- .../lib/openapi/models/EditArticleMetadata.ts | 2 +- .../models/EditArticleProteinComponent.ts | 2 +- .../models/EditArticleTextComponent.ts | 2 +- frontend/src/lib/openapi/models/EditBody.ts | 2 +- .../lib/openapi/models/HTTPValidationError.ts | 2 +- .../openapi/models/InsertBlankComponentEnd.ts | 2 +- .../src/lib/openapi/models/InsertComponent.ts | 2 +- frontend/src/lib/openapi/models/LoginBody.ts | 2 +- .../src/lib/openapi/models/LoginResponse.ts | 2 +- .../src/lib/openapi/models/MoveComponent.ts | 2 +- .../lib/openapi/models/ProteinEditSuccess.ts | 2 +- .../src/lib/openapi/models/ProteinEntry.ts | 2 +- .../src/lib/openapi/models/RangeFilter.ts | 2 +- .../lib/openapi/models/SearchProteinsBody.ts | 4 +- .../openapi/models/SearchProteinsResults.ts | 2 +- .../src/lib/openapi/models/SimilarProtein.ts | 2 +- .../models/UploadArticleImageComponent.ts | 2 +- .../models/UploadArticleProteinComponent.ts | 2 +- .../models/UploadArticleTextComponent.ts | 2 +- frontend/src/lib/openapi/models/UploadBody.ts | 2 +- .../src/lib/openapi/models/UploadError.ts | 2 +- .../src/lib/openapi/models/UploadPNGBody.ts | 2 +- .../src/lib/openapi/models/ValidationError.ts | 2 +- .../lib/openapi/services/DefaultService.ts | 2 +- frontend/src/routes/Search.svelte | 90 ++++++++++++++----- 39 files changed, 127 insertions(+), 64 deletions(-) diff --git a/backend/src/api/search.py b/backend/src/api/search.py index 7846fb30..7fc1447f 100644 --- a/backend/src/api/search.py +++ b/backend/src/api/search.py @@ -29,6 +29,8 @@ class SearchProteinsBody(CamelModel): species_filter: str | None = None length_filter: RangeFilter | None = None mass_filter: RangeFilter | None = None + proteinsPerPage: int | None = None + page: int | None = None class SearchProteinsResults(CamelModel): @@ -94,8 +96,16 @@ def gen_sql_filters( @router.post("/search/proteins", response_model=SearchProteinsResults) def search_proteins(body: SearchProteinsBody): text_query = sanitize_query(body.query) + limit = 10000 # Limit defaulted to exceed the number of entries in db to grab whole thing. + offset = 0 with Database() as db: try: + # If both the number requested and the page number are present in the request, the limit and offset are set. + # Otherwise, defaults to entire database. + if body.proteinsPerPage is not None and body.page is not None: + limit = body.proteinsPerPage + offset = limit * body.page + filter_clauses = gen_sql_filters( "species", "proteins_scores", @@ -124,10 +134,13 @@ def search_proteins(body: SearchProteinsBody): FROM proteins) as proteins_scores JOIN species ON species.id = proteins_scores.species_id WHERE {} {} - ORDER BY (proteins_scores.name_score*4 + proteins_scores.desc_score*2 + proteins_scores.content_score) DESC; + ORDER BY (proteins_scores.name_score*4 + proteins_scores.desc_score*2 + proteins_scores.content_score) DESC + LIMIT {} + OFFSET {}; """.format( - score_filter, filter_clauses + score_filter, filter_clauses, limit, offset ) # numbers in order by correspond to weighting + log.warn("EQ:" + entries_query) log.warn(filter_clauses) entries_result = db.execute_return( sanitize_query(entries_query), diff --git a/frontend/src/lib/openapi/core/ApiError.ts b/frontend/src/lib/openapi/core/ApiError.ts index d6b8fcc3..ec7b16af 100644 --- a/frontend/src/lib/openapi/core/ApiError.ts +++ b/frontend/src/lib/openapi/core/ApiError.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/core/ApiRequestOptions.ts b/frontend/src/lib/openapi/core/ApiRequestOptions.ts index c19adcc9..93143c3c 100644 --- a/frontend/src/lib/openapi/core/ApiRequestOptions.ts +++ b/frontend/src/lib/openapi/core/ApiRequestOptions.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/core/ApiResult.ts b/frontend/src/lib/openapi/core/ApiResult.ts index ad8fef2b..ee1126e2 100644 --- a/frontend/src/lib/openapi/core/ApiResult.ts +++ b/frontend/src/lib/openapi/core/ApiResult.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/core/CancelablePromise.ts b/frontend/src/lib/openapi/core/CancelablePromise.ts index eb02246c..d70de929 100644 --- a/frontend/src/lib/openapi/core/CancelablePromise.ts +++ b/frontend/src/lib/openapi/core/CancelablePromise.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ @@ -85,9 +85,9 @@ export class CancelablePromise implements Promise { }); } - get [Symbol.toStringTag]() { - return "Cancellable Promise"; - } + get [Symbol.toStringTag]() { + return "Cancellable Promise"; + } public then( onFulfilled?: ((value: T) => TResult1 | PromiseLike) | null, diff --git a/frontend/src/lib/openapi/core/OpenAPI.ts b/frontend/src/lib/openapi/core/OpenAPI.ts index e357bb22..0cfae5db 100644 --- a/frontend/src/lib/openapi/core/OpenAPI.ts +++ b/frontend/src/lib/openapi/core/OpenAPI.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/core/request.ts b/frontend/src/lib/openapi/core/request.ts index 2201a0e6..f83d7119 100644 --- a/frontend/src/lib/openapi/core/request.ts +++ b/frontend/src/lib/openapi/core/request.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ @@ -164,7 +164,7 @@ export const getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptio headers['Authorization'] = `Basic ${credentials}`; } - if (options.body) { + if (options.body !== undefined) { if (options.mediaType) { headers['Content-Type'] = options.mediaType; } else if (isBlob(options.body)) { diff --git a/frontend/src/lib/openapi/index.ts b/frontend/src/lib/openapi/index.ts index 101c5b97..f94854ae 100644 --- a/frontend/src/lib/openapi/index.ts +++ b/frontend/src/lib/openapi/index.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/Article.ts b/frontend/src/lib/openapi/models/Article.ts index ca9b5df3..d1eacbf8 100644 --- a/frontend/src/lib/openapi/models/Article.ts +++ b/frontend/src/lib/openapi/models/Article.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/ArticleImageComponent.ts b/frontend/src/lib/openapi/models/ArticleImageComponent.ts index a3c858de..30af8ba2 100644 --- a/frontend/src/lib/openapi/models/ArticleImageComponent.ts +++ b/frontend/src/lib/openapi/models/ArticleImageComponent.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/ArticleProteinComponent.ts b/frontend/src/lib/openapi/models/ArticleProteinComponent.ts index 3ed90e81..2a505001 100644 --- a/frontend/src/lib/openapi/models/ArticleProteinComponent.ts +++ b/frontend/src/lib/openapi/models/ArticleProteinComponent.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/ArticleTextComponent.ts b/frontend/src/lib/openapi/models/ArticleTextComponent.ts index 564c6d2c..bc90d20d 100644 --- a/frontend/src/lib/openapi/models/ArticleTextComponent.ts +++ b/frontend/src/lib/openapi/models/ArticleTextComponent.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/ArticleUpload.ts b/frontend/src/lib/openapi/models/ArticleUpload.ts index 04b4a5ac..d731eab9 100644 --- a/frontend/src/lib/openapi/models/ArticleUpload.ts +++ b/frontend/src/lib/openapi/models/ArticleUpload.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/EditArticleImageComponent.ts b/frontend/src/lib/openapi/models/EditArticleImageComponent.ts index a58254ef..b4554eb6 100644 --- a/frontend/src/lib/openapi/models/EditArticleImageComponent.ts +++ b/frontend/src/lib/openapi/models/EditArticleImageComponent.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/EditArticleMetadata.ts b/frontend/src/lib/openapi/models/EditArticleMetadata.ts index c130c50e..6cb6815b 100644 --- a/frontend/src/lib/openapi/models/EditArticleMetadata.ts +++ b/frontend/src/lib/openapi/models/EditArticleMetadata.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/EditArticleProteinComponent.ts b/frontend/src/lib/openapi/models/EditArticleProteinComponent.ts index 05643c3f..c09275c4 100644 --- a/frontend/src/lib/openapi/models/EditArticleProteinComponent.ts +++ b/frontend/src/lib/openapi/models/EditArticleProteinComponent.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/EditArticleTextComponent.ts b/frontend/src/lib/openapi/models/EditArticleTextComponent.ts index 6d66e58d..feeb8a67 100644 --- a/frontend/src/lib/openapi/models/EditArticleTextComponent.ts +++ b/frontend/src/lib/openapi/models/EditArticleTextComponent.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/EditBody.ts b/frontend/src/lib/openapi/models/EditBody.ts index d7c56b56..68f8ef07 100644 --- a/frontend/src/lib/openapi/models/EditBody.ts +++ b/frontend/src/lib/openapi/models/EditBody.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/HTTPValidationError.ts b/frontend/src/lib/openapi/models/HTTPValidationError.ts index 892e4257..f9b1a79e 100644 --- a/frontend/src/lib/openapi/models/HTTPValidationError.ts +++ b/frontend/src/lib/openapi/models/HTTPValidationError.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/InsertBlankComponentEnd.ts b/frontend/src/lib/openapi/models/InsertBlankComponentEnd.ts index d3355521..5e386be3 100644 --- a/frontend/src/lib/openapi/models/InsertBlankComponentEnd.ts +++ b/frontend/src/lib/openapi/models/InsertBlankComponentEnd.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/InsertComponent.ts b/frontend/src/lib/openapi/models/InsertComponent.ts index b9d3801b..29da1370 100644 --- a/frontend/src/lib/openapi/models/InsertComponent.ts +++ b/frontend/src/lib/openapi/models/InsertComponent.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/LoginBody.ts b/frontend/src/lib/openapi/models/LoginBody.ts index 5dc8041c..ff5c4ff6 100644 --- a/frontend/src/lib/openapi/models/LoginBody.ts +++ b/frontend/src/lib/openapi/models/LoginBody.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/LoginResponse.ts b/frontend/src/lib/openapi/models/LoginResponse.ts index 2f1faac8..1b25684a 100644 --- a/frontend/src/lib/openapi/models/LoginResponse.ts +++ b/frontend/src/lib/openapi/models/LoginResponse.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/MoveComponent.ts b/frontend/src/lib/openapi/models/MoveComponent.ts index f85ead11..3f1737ef 100644 --- a/frontend/src/lib/openapi/models/MoveComponent.ts +++ b/frontend/src/lib/openapi/models/MoveComponent.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/ProteinEditSuccess.ts b/frontend/src/lib/openapi/models/ProteinEditSuccess.ts index e1a4aee7..da3d0969 100644 --- a/frontend/src/lib/openapi/models/ProteinEditSuccess.ts +++ b/frontend/src/lib/openapi/models/ProteinEditSuccess.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/ProteinEntry.ts b/frontend/src/lib/openapi/models/ProteinEntry.ts index 02779401..6c12f6df 100644 --- a/frontend/src/lib/openapi/models/ProteinEntry.ts +++ b/frontend/src/lib/openapi/models/ProteinEntry.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/RangeFilter.ts b/frontend/src/lib/openapi/models/RangeFilter.ts index 13a16880..f7cab08b 100644 --- a/frontend/src/lib/openapi/models/RangeFilter.ts +++ b/frontend/src/lib/openapi/models/RangeFilter.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/SearchProteinsBody.ts b/frontend/src/lib/openapi/models/SearchProteinsBody.ts index d739124f..eab92f82 100644 --- a/frontend/src/lib/openapi/models/SearchProteinsBody.ts +++ b/frontend/src/lib/openapi/models/SearchProteinsBody.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ @@ -8,5 +8,7 @@ export type SearchProteinsBody = { speciesFilter?: (string | null); lengthFilter?: (RangeFilter | null); massFilter?: (RangeFilter | null); + proteinsPerPage?: (number | null); + page?: (number | null); }; diff --git a/frontend/src/lib/openapi/models/SearchProteinsResults.ts b/frontend/src/lib/openapi/models/SearchProteinsResults.ts index 76e1e22c..3ab92cf9 100644 --- a/frontend/src/lib/openapi/models/SearchProteinsResults.ts +++ b/frontend/src/lib/openapi/models/SearchProteinsResults.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/SimilarProtein.ts b/frontend/src/lib/openapi/models/SimilarProtein.ts index 16113600..340f9abc 100644 --- a/frontend/src/lib/openapi/models/SimilarProtein.ts +++ b/frontend/src/lib/openapi/models/SimilarProtein.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/UploadArticleImageComponent.ts b/frontend/src/lib/openapi/models/UploadArticleImageComponent.ts index dc7ed1f6..2d48051d 100644 --- a/frontend/src/lib/openapi/models/UploadArticleImageComponent.ts +++ b/frontend/src/lib/openapi/models/UploadArticleImageComponent.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/UploadArticleProteinComponent.ts b/frontend/src/lib/openapi/models/UploadArticleProteinComponent.ts index a368e38c..6f22339b 100644 --- a/frontend/src/lib/openapi/models/UploadArticleProteinComponent.ts +++ b/frontend/src/lib/openapi/models/UploadArticleProteinComponent.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/UploadArticleTextComponent.ts b/frontend/src/lib/openapi/models/UploadArticleTextComponent.ts index dc32ede7..653db8c5 100644 --- a/frontend/src/lib/openapi/models/UploadArticleTextComponent.ts +++ b/frontend/src/lib/openapi/models/UploadArticleTextComponent.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/UploadBody.ts b/frontend/src/lib/openapi/models/UploadBody.ts index 9d05cbcd..6b0884f3 100644 --- a/frontend/src/lib/openapi/models/UploadBody.ts +++ b/frontend/src/lib/openapi/models/UploadBody.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/UploadError.ts b/frontend/src/lib/openapi/models/UploadError.ts index 5240304b..9a91db09 100644 --- a/frontend/src/lib/openapi/models/UploadError.ts +++ b/frontend/src/lib/openapi/models/UploadError.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/UploadPNGBody.ts b/frontend/src/lib/openapi/models/UploadPNGBody.ts index c9e295c5..44dcfa5c 100644 --- a/frontend/src/lib/openapi/models/UploadPNGBody.ts +++ b/frontend/src/lib/openapi/models/UploadPNGBody.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/models/ValidationError.ts b/frontend/src/lib/openapi/models/ValidationError.ts index f2ff49a2..aaf1c921 100644 --- a/frontend/src/lib/openapi/models/ValidationError.ts +++ b/frontend/src/lib/openapi/models/ValidationError.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/lib/openapi/services/DefaultService.ts b/frontend/src/lib/openapi/services/DefaultService.ts index abf47c4a..d125304c 100644 --- a/frontend/src/lib/openapi/services/DefaultService.ts +++ b/frontend/src/lib/openapi/services/DefaultService.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/frontend/src/routes/Search.svelte b/frontend/src/routes/Search.svelte index 59ea24ff..3415e3e0 100644 --- a/frontend/src/routes/Search.svelte +++ b/frontend/src/routes/Search.svelte @@ -6,6 +6,8 @@ import { Search, Button } from "flowbite-svelte"; import RangerFilter from "../lib/RangerFilter.svelte"; import DelayedSpinner from "../lib/DelayedSpinner.svelte"; + import app from "../main"; + import { navigate } from "svelte-routing"; let query = ""; let proteinEntries: ProteinEntry[]; @@ -16,13 +18,28 @@ let lengthExtent: { min: number; max: number }; let massFilter: { min: number; max: number } | undefined; let massExtent: { min: number; max: number }; + let filterResetCounter = 0; + + let urlParams = new URLSearchParams(window.location.search) + let proteinsPerPage = 20 // The number of proteins to show per page + let page = 0 onMount(async () => { + // Redirects user to ?page=1 if page query string not present + + /* + if (page == null) { + navigate('search?page=1') + } + console.log("Page is", page) + */ + await search(); species = await Backend.searchSpecies(); lengthExtent = await Backend.searchRangeLength(); massExtent = await Backend.searchRangeMass(); massFilter = massExtent; lengthFilter = lengthExtent; + console.log(page) }); async function search() { @@ -31,15 +48,23 @@ speciesFilter, lengthFilter, massFilter, + proteinsPerPage, + page }); proteinEntries = result.proteinEntries; totalFound = result.totalFound; } + async function searchAndResetPage() { + page = 0; + await search(); + } async function resetFilter() { speciesFilter = undefined; lengthFilter = lengthExtent; massFilter = massExtent; query = ""; + page = 0; + filterResetCounter++; // Incrementing this so relevant components can be destroyed and re-created await search(); } @@ -63,7 +88,7 @@ outline on:click={async () => { speciesFilter = s; - await search(); + await searchAndResetPage(); }} > {s} @@ -75,28 +100,32 @@

Amino Acids Length

{#if lengthExtent && lengthFilter} - { - lengthFilter = detail; - await search(); - }} - /> + {#key filterResetCounter} + { + lengthFilter = detail; + await searchAndResetPage(); + }} + /> + {/key} {/if}

Mass (Da)

{#if massExtent && massFilter} - { - massFilter = detail; - await search(); - }} - /> + {#key filterResetCounter} + { + massFilter = detail; + await searchAndResetPage() + }} + /> + {/key} {/if}
@@ -111,7 +140,7 @@
-