Repository: GenSpectrum/dashboards
Pull request #638: feat(website): add more filter fields
Author: login: JonasKellerer
Created: 2025-03-20T08:44:27Z | Merged: 2025-03-24T10:27:50Z

Resolves #550

<!-- Mention the issue that this PR resolves. Delete if there is no corresponding issue -->


### Summary

<!--
Add a few sentences describing the main changes introduced in this PR
This is only relevant, if there is no issue that already contains the information
-->


Adds more filters to each view. 

Leftover: completeness. New ticket: #637

### Screenshot

![grafik](https://github.com/user-attachments/assets/862b2090-d135-4bfd-8bf0-4904daa378dc)


<!--
When applicable, add a screenshot showing the main effect this PR has, even if "trivial":
e.g. changed layout, changed button text, different logging in backend.
This helps others quickly grasping what you did even if they are not familiar with the code base.
-->


Linked issue #550: Add more filter fields
Now that #473 added the possibility to have more filters, investigate which fields we want to add.

Guideline: All fields that have more than one meaningful value.
Linked issue comments: user: login: fengelniederhammer
created_at: 2025-02-17T16:23:12Z
body: I wrote a little script that counts how many values each LAPIS field has:
```typescript
#!/usr/bin/env node

const lapisUrl = "https://api.loculus.genspectrum.org/rsv-a/";

console.log("Querying:", lapisUrl);

const configResponse = await fetch(`${lapisUrl}sample/databaseConfig`, {
    method: 'GET',
});
const fields = (await configResponse.json()).schema.metadata.map(m => m.name);

const aggregatedResponse = await fetch(`${lapisUrl}sample/aggregated`, {
    method: 'GET',
});
const totalSequences = (await aggregatedResponse.json()).data[0].count;
console.log(`Total sequences: ${totalSequences}`);

console.log("Number of values per field:");

const countsByField = Object.fromEntries(
    (await Promise.all(fields.map(async field => {
            const response = await fetch(`${lapisUrl}sample/aggregated`, {
                method: 'POST',
                headers: {'Content-Type': 'application/json'},
                body: JSON.stringify({fields: [field]}),
            });
            const data = await response.json();
            return [field, data.data.length];
        }))
    ).toSorted(([_, a], [__, b]) => b - a)
)

console.log(countsByField);

``` 
author_association: CONTRIBUTOR
user: login: fengelniederhammer
created_at: 2025-02-17T16:27:44Z
body: # RSV-A:

<details>

<summary>Full result</summary>

```javascript
{
  accessionVersion: 21978,
  displayName: 21978,
  submissionId: 21974,
  insdcAccessionFull: 21974,
  accession: 21736,
  insdcAccessionBase: 21736,
  specimenCollectorSampleId: 15733,
  sampleCollectionDate: 3972,
  completeness: 1902,
  length: 1318,
  biosampleAccession: 1309,
  totalUnknownNucs: 936,
  sraRunAccession: 753,
  totalSnps: 457,
  authors: 329,
  ncbiUpdateDate: 301,
  ncbiReleaseDate: 289,
  authorAffiliations: 250,
  frameShifts: 179,
  division: 173,
  totalDeletedNucs: 149,
  totalInsertedNucs: 98,
  country: 69,
  releasedAtTimestamp: 56,
  lineage: 36,
  totalAmbiguousNucs: 26,
  bioprojectAccession: 18,
  submittedAtTimestamp: 13,
  submittedDate: 12,
  releasedDate: 12,
  totalFrameShifts: 7,
  ncbiVirusName: 5,
  ncbiVirusTaxId: 5,
  hostNameScientific: 3,
  hostTaxonId: 3,
  version: 2,
  versionStatus: 2,
  insdcVersion: 2,
  ncbiSourceDb: 2,
  isRevocation: 1,
  submitter: 1,
  groupName: 1,
  groupId: 1,
  dataUseTerms: 1,
  dataUseTermsRestrictedUntil: 1,
  versionComment: 1,
  pipelineVersion: 1,
  isLabHost: 1,
  purposeOfSampling: 1
}
```

</details>

IMO those are the candidate that we might want to consider:
```javascript
{
  specimenCollectorSampleId: 15733,
  completeness: 1902,
  length: 1318,
  biosampleAccession: 1309,
  totalUnknownNucs: 936,
  sraRunAccession: 753,
  totalSnps: 457,
  authors: 329,
  ncbiUpdateDate: 301,
  ncbiReleaseDate: 289,
  authorAffiliations: 250,
  releasedAtTimestamp: 56,
  bioprojectAccession: 18,
  submittedAtTimestamp: 13,
  submittedDate: 12,
  releasedDate: 12,
  ncbiVirusName: 5,
  ncbiVirusTaxId: 5,
  hostNameScientific: 3,
  hostTaxonId: 3,
  ncbiSourceDb: 2,
}
```

author_association: CONTRIBUTOR
user: login: fengelniederhammer
created_at: 2025-02-17T16:30:24Z
body: # RSV-B

<details>

<summary>Full result</summary>

```javascript
{
  accessionVersion: 17364,
  submissionId: 17364,
  displayName: 17364,
  insdcAccessionFull: 17364,
  accession: 17193,
  insdcAccessionBase: 17193,
  specimenCollectorSampleId: 12191,
  sampleCollectionDate: 3747,
  completeness: 1645,
  biosampleAccession: 1305,
  length: 1012,
  totalUnknownNucs: 827,
  sraRunAccession: 798,
  totalSnps: 344,
  authors: 286,
  ncbiReleaseDate: 263,
  ncbiUpdateDate: 263,
  authorAffiliations: 217,
  division: 163,
  frameShifts: 161,
  totalDeletedNucs: 127,
  totalInsertedNucs: 83,
  country: 67,
  releasedAtTimestamp: 42,
  totalAmbiguousNucs: 23,
  lineage: 18,
  bioprojectAccession: 17,
  submittedAtTimestamp: 15,
  submittedDate: 14,
  releasedDate: 14,
  totalFrameShifts: 7,
  ncbiVirusName: 5,
  ncbiVirusTaxId: 5,
  hostNameScientific: 3,
  hostTaxonId: 3,
  version: 2,
  versionStatus: 2,
  insdcVersion: 2,
  isLabHost: 2,
  isRevocation: 1,
  submitter: 1,
  groupName: 1,
  groupId: 1,
  dataUseTerms: 1,
  dataUseTermsRestrictedUntil: 1,
  versionComment: 1,
  pipelineVersion: 1,
  ncbiSourceDb: 1,
  purposeOfSampling: 1
}
```

</details>

IMO those are the candidate that we might want to consider:

```javascript
{
  completeness: 1645,
  biosampleAccession: 1305,
  length: 1012,
  sraRunAccession: 798,
  authors: 286,
  ncbiReleaseDate: 263,
  ncbiUpdateDate: 263,
  authorAffiliations: 217,
  releasedAtTimestamp: 42,
  bioprojectAccession: 17,
  submittedAtTimestamp: 15,
  submittedDate: 14,
  releasedDate: 14,
  ncbiVirusName: 5,
  ncbiVirusTaxId: 5,
  hostNameScientific: 3,
  hostTaxonId: 3,
  isLabHost: 2,
}
```

author_association: CONTRIBUTOR
user: login: fengelniederhammer
created_at: 2025-02-18T07:57:17Z
body: # Covid

<details>
<summary>Full result</summary>

```javascript
{
  strain: 9304313,
  genbankAccession: 8814001,
  genbankAccessionRev: 8814001,
  sraAccession: 7617819,
  gisaidEpiIsl: 7291252,
  nextcladeQcOverallScore: 349420,
  nextcladeCoverage: 15827,
  nextcladeQcMissingDataScore: 15412,
  ace2Binding: 4454,
  pangoLineage: 4171,
  nextcladePangoLineage: 3393,
  originatingLab: 2445,
  location: 1991,
  dateOriginalValue: 1928,
  date: 1861,
  dateSubmitted: 1690,
  dateSubmittedOriginalValue: 1690,
  immuneEscape: 1660,
  dateUpdated: 1611,
  dateUpdatedOriginalValue: 1611,
  authors: 1315,
  submittingLab: 1116,
  division: 655,
  divisionExposure: 655,
  nextcladeQcMixedSites: 371,
  nextcladeQcPrivateMutationsScore: 319,
  age: 187,
  countryExposure: 125,
  country: 124,
  nextcladeQcFrameShiftsScore: 77,
  nextstrainClade: 52,
  host: 43,
  dateDay: 32,
  dateUpdatedDay: 32,
  dateSubmittedDay: 31,
  nextcladeQcSnpClustersScore: 30,
  whoClade: 14,
  dateMonth: 13,
  dateUpdatedMonth: 13,
  dateSubmittedMonth: 12,
  nextcladeQcStopCodonsScore: 11,
  dateYear: 8,
  dateUpdatedYear: 7,
  regionExposure: 7,
  dateSubmittedYear: 6,
  region: 6,
  samplingStrategy: 5,
  sex: 4,
  database: 2,
  gisaidClade: 1,
  nextcladeQcMixedSitesScore: 1,
  died: 1,
  fullyVaccinated: 1,
  hospitalized: 1,
  nextcladeDatasetVersion: 1
}
``` 

</details>

IMO those are the candidate that we might want to consider:
```javascript
{
  nextcladeQcOverallScore: 349420,
  nextcladeCoverage: 15827,
  nextcladeQcMissingDataScore: 15412,
  ace2Binding: 4454,
  originatingLab: 2445,
  dateOriginalValue: 1928,
  dateSubmitted: 1690,
  dateSubmittedOriginalValue: 1690,
  immuneEscape: 1660,
  dateUpdated: 1611,
  dateUpdatedOriginalValue: 1611,
  authors: 1315,
  submittingLab: 1116,
  divisionExposure: 655,
  nextcladeQcMixedSites: 371,
  nextcladeQcPrivateMutationsScore: 319,
  age: 187,
  countryExposure: 125,
  nextcladeQcFrameShiftsScore: 77,
  nextstrainClade: 52,
  host: 43,
  dateDay: 32,
  dateUpdatedDay: 32,
  dateSubmittedDay: 31,
  nextcladeQcSnpClustersScore: 30,
  whoClade: 14,
  dateMonth: 13,
  dateUpdatedMonth: 13,
  dateSubmittedMonth: 12,
  nextcladeQcStopCodonsScore: 11,
  dateYear: 8,
  dateUpdatedYear: 7,
  regionExposure: 7,
  dateSubmittedYear: 6,
  samplingStrategy: 5,
  sex: 4,
}
``` 
author_association: CONTRIBUTOR
user: login: fengelniederhammer
created_at: 2025-02-18T08:06:13Z
body: # Influenza A

<details>

<summary>Full result</summary>


```
{
  accessionVersion: 367430,
  displayName: 367430,
  accession: 367427,
  submissionId: 367427,
  insdcAccessionBase_seg4: 196061,
  insdcAccessionFull_seg4: 196061,
  insdcAccessionBase_seg6: 163856,
  insdcAccessionFull_seg6: 163856,
  insdcAccessionBase_seg7: 144921,
  insdcAccessionFull_seg7: 144921,
  insdcAccessionBase_seg8: 132184,
  insdcAccessionFull_seg8: 132184,
  insdcAccessionBase_seg5: 130458,
  insdcAccessionFull_seg5: 130458,
  insdcAccessionBase_seg1: 128481,
  insdcAccessionFull_seg1: 128481,
  insdcAccessionBase_seg3: 127932,
  insdcAccessionFull_seg3: 127932,
  insdcAccessionBase_seg2: 126497,
  insdcAccessionFull_seg2: 126497,
  ncbiVirusName: 107224,
  specimenCollectorSampleId: 97456,
  ncbiVirusTaxId_seg4: 95539,
  ncbiVirusTaxId_seg6: 71762,
  ncbiVirusTaxId_seg7: 61481,
  ncbiVirusTaxId_seg8: 50808,
  ncbiVirusTaxId_seg5: 49568,
  ncbiVirusTaxId_seg1: 48826,
  ncbiVirusTaxId_seg2: 48771,
  ncbiVirusTaxId_seg3: 48698,
  sampleCollectionDate: 9809,
  authors: 8098,
  biosampleAccession: 5674,
  ncbiReleaseDate: 4944,
  division: 3973,
  authorAffiliations: 3798,
  sraRunAccession: 3247,
  length_seg4: 1632,
  length_seg1: 1407,
  length_seg2: 1343,
  length_seg6: 1267,
  length_seg3: 1232,
  length_seg5: 892,
  length_seg7: 740,
  hostNameScientific: 557,
  hostTaxonId: 555,
  length_seg8: 505,
  country: 166,
  releasedAtTimestamp: 139,
  bioprojectAccession: 109,
  submittedAtTimestamp: 24,
  subtype_seg4: 19,
  subtypeHA: 19,
  submittedDate: 12,
  releasedDate: 12,
  subtype_seg6: 12,
  subtypeNA: 12,
  insdcVersion_seg1: 5,
  insdcVersion_seg3: 5,
  insdcVersion_seg4: 5,
  insdcVersion_seg6: 5,
  insdcVersion_seg8: 5,
  insdcVersion_seg2: 4,
  insdcVersion_seg5: 4,
  insdcVersion_seg7: 4,
  version: 2,
  versionStatus: 2,
  isLabHost: 2,
  ncbiSourceDb: 2,
  isRevocation: 1,
  submitter: 1,
  groupName: 1,
  groupId: 1,
  dataUseTerms: 1,
  dataUseTermsRestrictedUntil: 1,
  versionComment: 1,
  pipelineVersion: 1,
  completeness_seg1: 1,
  completeness_seg2: 1,
  completeness_seg3: 1,
  completeness_seg4: 1,
  completeness_seg5: 1,
  completeness_seg6: 1,
  completeness_seg7: 1,
  completeness_seg8: 1,
  frameShifts_seg1: 1,
  frameShifts_seg2: 1,
  frameShifts_seg3: 1,
  frameShifts_seg4: 1,
  frameShifts_seg5: 1,
  frameShifts_seg6: 1,
  frameShifts_seg7: 1,
  frameShifts_seg8: 1,
  ncbiUpdateDate_seg1: 1,
  ncbiUpdateDate_seg2: 1,
  ncbiUpdateDate_seg3: 1,
  ncbiUpdateDate_seg4: 1,
  ncbiUpdateDate_seg5: 1,
  ncbiUpdateDate_seg6: 1,
  ncbiUpdateDate_seg7: 1,
  ncbiUpdateDate_seg8: 1,
  purposeOfSampling: 1,
  subtype_seg1: 1,
  subtype_seg2: 1,
  subtype_seg3: 1,
  subtype_seg5: 1,
  subtype_seg7: 1,
  subtype_seg8: 1,
  totalAmbiguousNucs_seg1: 1,
  totalAmbiguousNucs_seg2: 1,
  totalAmbiguousNucs_seg3: 1,
  totalAmbiguousNucs_seg4: 1,
  totalAmbiguousNucs_seg5: 1,
  totalAmbiguousNucs_seg6: 1,
  totalAmbiguousNucs_seg7: 1,
  totalAmbiguousNucs_seg8: 1,
  totalDeletedNucs_seg1: 1,
  totalDeletedNucs_seg2: 1,
  totalDeletedNucs_seg3: 1,
  totalDeletedNucs_seg4: 1,
  totalDeletedNucs_seg5: 1,
  totalDeletedNucs_seg6: 1,
  totalDeletedNucs_seg7: 1,
  totalDeletedNucs_seg8: 1,
  totalFrameShifts_seg1: 1,
  totalFrameShifts_seg2: 1,
  totalFrameShifts_seg3: 1,
  totalFrameShifts_seg4: 1,
  totalFrameShifts_seg5: 1,
  totalFrameShifts_seg6: 1,
  totalFrameShifts_seg7: 1,
  totalFrameShifts_seg8: 1,
  totalInsertedNucs_seg1: 1,
  totalInsertedNucs_seg2: 1,
  totalInsertedNucs_seg3: 1,
  totalInsertedNucs_seg4: 1,
  totalInsertedNucs_seg5: 1,
  totalInsertedNucs_seg6: 1,
  totalInsertedNucs_seg7: 1,
  totalInsertedNucs_seg8: 1,
  totalSnps_seg1: 1,
  totalSnps_seg2: 1,
  totalSnps_seg3: 1,
  totalSnps_seg4: 1,
  totalSnps_seg5: 1,
  totalSnps_seg6: 1,
  totalSnps_seg7: 1,
  totalSnps_seg8: 1,
  totalUnknownNucs_seg1: 1,
  totalUnknownNucs_seg2: 1,
  totalUnknownNucs_seg3: 1,
  totalUnknownNucs_seg4: 1,
  totalUnknownNucs_seg5: 1,
  totalUnknownNucs_seg6: 1,
  totalUnknownNucs_seg7: 1,
  totalUnknownNucs_seg8: 1
}
```

</details>


IMO those are the candidate that we might want to consider:

```
{
  ncbiVirusName: 107224,
  specimenCollectorSampleId: 97456,
  ncbiVirusTaxId_seg4: 95539,
  ncbiVirusTaxId_seg6: 71762,
  ncbiVirusTaxId_seg7: 61481,
  ncbiVirusTaxId_seg8: 50808,
  ncbiVirusTaxId_seg5: 49568,
  ncbiVirusTaxId_seg1: 48826,
  ncbiVirusTaxId_seg2: 48771,
  ncbiVirusTaxId_seg3: 48698,
  authors: 8098,
  biosampleAccession: 5674,
  ncbiReleaseDate: 4944,
  authorAffiliations: 3798,
  sraRunAccession: 3247,
  length_seg4: 1632,
  length_seg1: 1407,
  length_seg2: 1343,
  length_seg6: 1267,
  length_seg3: 1232,
  length_seg5: 892,
  length_seg7: 740,
  hostNameScientific: 557,
  hostTaxonId: 555,
  length_seg8: 505,
  releasedAtTimestamp: 139,
  bioprojectAccession: 109,
  submittedAtTimestamp: 24,
  subtype_seg4: 19,
  submittedDate: 12,
  releasedDate: 12,
  subtype_seg6: 12,
  subtype_seg1: 1,
  subtype_seg2: 1,
  subtype_seg3: 1,
  subtype_seg5: 1,
  subtype_seg7: 1,
  subtype_seg8: 1,
}
```

author_association: CONTRIBUTOR
user: login: fengelniederhammer
created_at: 2025-02-18T08:10:04Z
body: # Influenza A / H5N1

<details>

<summary>Full result</summary>

```
{
  accessionVersion: 23928,
  displayName: 23928,
  submissionId: 22371,
  accession: 22367,
  insdcAccessionFull_seg4: 14982,
  insdcAccessionBase_seg4: 14978,
  insdcAccessionFull_seg6: 13028,
  insdcAccessionBase_seg6: 13024,
  insdcAccessionFull_seg7: 11633,
  insdcAccessionBase_seg7: 11629,
  insdcAccessionFull_seg5: 11315,
  insdcAccessionBase_seg5: 11311,
  insdcAccessionFull_seg8: 11258,
  insdcAccessionBase_seg8: 11254,
  insdcAccessionFull_seg1: 11221,
  insdcAccessionBase_seg1: 11217,
  insdcAccessionFull_seg2: 11210,
  insdcAccessionBase_seg2: 11206,
  insdcAccessionFull_seg3: 11193,
  insdcAccessionBase_seg3: 11189,
  specimenCollectorSampleId: 7888,
  ncbiVirusName: 6842,
  ncbiVirusTaxId_seg4: 6196,
  ncbiVirusTaxId_seg6: 4635,
  ncbiVirusTaxId_seg7: 3445,
  ncbiVirusTaxId_seg8: 3307,
  ncbiVirusTaxId_seg5: 3142,
  ncbiVirusTaxId_seg2: 3126,
  ncbiVirusTaxId_seg1: 3117,
  ncbiVirusTaxId_seg3: 3063,
  sampleCollectionDate: 2620,
  biosampleAccession: 2357,
  sraRunAccession: 2269,
  authors: 1439,
  ncbiReleaseDate: 1257,
  division: 873,
  authorAffiliations: 751,
  length_seg4: 607,
  completeness_seg4: 576,
  completeness_seg2: 396,
  length_seg6: 392,
  length_seg2: 390,
  completeness_seg1: 377,
  length_seg1: 372,
  length_seg3: 353,
  completeness_seg3: 348,
  completeness_seg6: 337,
  hostNameScientific: 322,
  hostTaxonId: 322,
  totalSnps_seg1: 317,
  length_seg5: 307,
  completeness_seg5: 303,
  totalSnps_seg2: 256,
  totalSnps_seg4: 237,
  totalSnps_seg3: 236,
  length_seg7: 198,
  totalSnps_seg6: 194,
  completeness_seg7: 192,
  length_seg8: 180,
  totalSnps_seg5: 177,
  completeness_seg8: 136,
  frameShifts_seg6: 128,
  totalSnps_seg8: 125,
  releasedAtTimestamp: 121,
  frameShifts_seg4: 103,
  totalSnps_seg7: 99,
  country: 86,
  totalDeletedNucs_seg6: 70,
  totalDeletedNucs_seg4: 64,
  totalUnknownNucs_seg1: 57,
  clade: 55,
  frameShifts_seg2: 54,
  totalDeletedNucs_seg8: 53,
  totalInsertedNucs_seg8: 50,
  totalDeletedNucs_seg2: 49,
  submittedAtTimestamp: 47,
  totalInsertedNucs_seg4: 47,
  totalUnknownNucs_seg2: 47,
  totalUnknownNucs_seg3: 43,
  totalDeletedNucs_seg1: 42,
  totalInsertedNucs_seg6: 42,
  frameShifts_seg1: 41,
  totalUnknownNucs_seg4: 37,
  totalDeletedNucs_seg3: 35,
  totalUnknownNucs_seg6: 35,
  submittedDate: 31,
  releasedDate: 31,
  bioprojectAccession: 31,
  totalDeletedNucs_seg5: 30,
  totalUnknownNucs_seg5: 26,
  frameShifts_seg5: 25,
  frameShifts_seg8: 25,
  totalDeletedNucs_seg7: 25,
  totalAmbiguousNucs_seg1: 24,
  totalAmbiguousNucs_seg4: 22,
  totalUnknownNucs_seg8: 22,
  totalAmbiguousNucs_seg3: 21,
  totalInsertedNucs_seg1: 21,
  totalInsertedNucs_seg3: 21,
  frameShifts_seg3: 20,
  totalInsertedNucs_seg7: 20,
  totalInsertedNucs_seg2: 19,
  frameShifts_seg7: 18,
  totalAmbiguousNucs_seg2: 18,
  totalAmbiguousNucs_seg6: 17,
  totalInsertedNucs_seg5: 16,
  totalAmbiguousNucs_seg5: 15,
  totalAmbiguousNucs_seg7: 11,
  totalFrameShifts_seg6: 11,
  totalUnknownNucs_seg7: 11,
  totalAmbiguousNucs_seg8: 10,
  totalFrameShifts_seg4: 9,
  insdcVersion_seg1: 5,
  insdcVersion_seg6: 5,
  insdcVersion_seg2: 4,
  insdcVersion_seg3: 4,
  insdcVersion_seg4: 4,
  insdcVersion_seg5: 4,
  insdcVersion_seg7: 4,
  insdcVersion_seg8: 4,
  totalFrameShifts_seg1: 4,
  totalFrameShifts_seg2: 4,
  totalFrameShifts_seg3: 4,
  totalFrameShifts_seg5: 4,
  totalFrameShifts_seg7: 4,
  version: 3,
  totalFrameShifts_seg8: 3,
  versionStatus: 2,
  isLabHost: 2,
  ncbiSourceDb: 2,
  isRevocation: 1,
  submitter: 1,
  groupName: 1,
  groupId: 1,
  dataUseTerms: 1,
  dataUseTermsRestrictedUntil: 1,
  versionComment: 1,
  pipelineVersion: 1,
  ncbiUpdateDate_seg1: 1,
  ncbiUpdateDate_seg2: 1,
  ncbiUpdateDate_seg3: 1,
  ncbiUpdateDate_seg4: 1,
  ncbiUpdateDate_seg5: 1,
  ncbiUpdateDate_seg6: 1,
  ncbiUpdateDate_seg7: 1,
  ncbiUpdateDate_seg8: 1,
  purposeOfSampling: 1
}
```

</details>

IMO those are the candidate that we might want to consider:

```
{
  specimenCollectorSampleId: 7888,
  ncbiVirusName: 6842,
  ncbiVirusTaxId_seg4: 6196,
  ncbiVirusTaxId_seg6: 4635,
  ncbiVirusTaxId_seg7: 3445,
  ncbiVirusTaxId_seg8: 3307,
  ncbiVirusTaxId_seg5: 3142,
  ncbiVirusTaxId_seg2: 3126,
  ncbiVirusTaxId_seg1: 3117,
  ncbiVirusTaxId_seg3: 3063,
  sampleCollectionDate: 2620,
  biosampleAccession: 2357,
  sraRunAccession: 2269,
  authors: 1439,
  ncbiReleaseDate: 1257,
  authorAffiliations: 751,
  length_seg4: 607,
  completeness_seg4: 576,
  completeness_seg2: 396,
  length_seg6: 392,
  length_seg2: 390,
  completeness_seg1: 377,
  length_seg1: 372,
  length_seg3: 353,
  completeness_seg3: 348,
  completeness_seg6: 337,
  hostNameScientific: 322,
  hostTaxonId: 322,
  totalSnps_seg1: 317,
  length_seg5: 307,
  completeness_seg5: 303,
  totalSnps_seg2: 256,
  totalSnps_seg4: 237,
  totalSnps_seg3: 236,
  length_seg7: 198,
  totalSnps_seg6: 194,
  completeness_seg7: 192,
  length_seg8: 180,
  totalSnps_seg5: 177,
  completeness_seg8: 136,
  totalSnps_seg8: 125,
  releasedAtTimestamp: 121,
  totalSnps_seg7: 99,
  clade: 55,
  submittedAtTimestamp: 47,
  submittedDate: 31,
  releasedDate: 31,
  bioprojectAccession: 31,
  insdcVersion_seg1: 5,
  insdcVersion_seg6: 5,
  insdcVersion_seg2: 4,
  insdcVersion_seg3: 4,
  insdcVersion_seg4: 4,
  insdcVersion_seg5: 4,
  insdcVersion_seg7: 4,
  insdcVersion_seg8: 4,
}
```

author_association: CONTRIBUTOR
user: login: fengelniederhammer
created_at: 2025-02-18T08:17:46Z
body: # West Nile

<details>

<summary>Full result</summary>

```
{
  accessionVersion: 21630,
  displayName: 21630,
  accession: 7773,
  submissionId: 7773,
  insdcAccessionBase: 7773,
  insdcAccessionFull: 7773,
  specimenCollectorSampleId: 4738,
  sampleCollectionDateRangeUpper: 1759,
  sampleCollectionDate: 1622,
  sampleCollectionDateRangeLower: 1590,
  completeness: 1483,
  length: 1074,
  geoLocAdmin1: 857,
  biosampleAccession: 750,
  authors: 616,
  earliestReleaseDate: 553,
  ncbiReleaseDate: 550,
  totalSnps: 501,
  ncbiUpdateDate: 475,
  totalUnknownNucs: 475,
  authorAffiliations: 357,
  hostNameScientific: 287,
  hostTaxonId: 287,
  totalDeletedNucs: 230,
  frameShifts: 168,
  releasedAtTimestamp: 122,
  totalInsertedNucs: 85,
  totalAmbiguousNucs: 72,
  geoLocCountry: 69,
  geoLocLatitude: 58,
  geoLocLongitude: 58,
  specimenProcessingDetails: 51,
  geoLocCity: 46,
  insdcRawReadsAccession: 36,
  submittedAtTimestamp: 30,
  submittedDate: 28,
  releasedDate: 28,
  bioprojectAccession: 17,
  ncbiVirusName: 16,
  ncbiVirusTaxId: 16,
  geoLocAdmin2: 10,
  lineage: 9,
  sequencingDate: 9,
  totalFrameShifts: 8,
  stopCodons: 6,
  insdcVersion: 5,
  version: 4,
  collectionDevice: 4,
  isLabHost: 4,
  submitter: 3,
  ncbiSourceDb: 3,
  groupName: 2,
  groupId: 2,
  versionStatus: 2,
  ampliconPcrPrimerScheme: 2,
  ampliconSize: 2,
  collectionMethod: 2,
  consensusSequenceSoftwareName: 2,
  consensusSequenceSoftwareVersion: 2,
  depthOfCoverage: 2,
  purposeOfSampling: 2,
  qualityControlMethodName: 2,
  qualityControlMethodVersion: 2,
  rawSequenceDataProcessingMethod: 2,
  sampleType: 2,
  sequencedByContactName: 2,
  sequencedByOrganization: 2,
  sequencingProtocol: 2,
  totalStopCodons: 2,
  isRevocation: 1,
  dataUseTerms: 1,
  dataUseTermsRestrictedUntil: 1,
  dataUseTermsUrl: 1,
  versionComment: 1,
  pipelineVersion: 1,
  anatomicalMaterial: 1,
  anatomicalPart: 1,
  assemblyReferenceGenomeAccession: 1,
  bodyProduct: 1,
  breadthOfCoverage: 1,
  cellLine: 1,
  cultureId: 1,
  dehostingMethod: 1,
  diagnosticMeasurementMethod: 1,
  diagnosticMeasurementUnit: 1,
  diagnosticMeasurementValue: 1,
  diagnosticTargetGeneName: 1,
  diagnosticTargetPresence: 1,
  environmentalMaterial: 1,
  environmentalSite: 1,
  experimentalSpecimenRoleType: 1,
  exposureDetails: 1,
  exposureEvent: 1,
  exposureSetting: 1,
  foodProduct: 1,
  foodProductProperties: 1,
  geoLocSite: 1,
  hostAge: 1,
  hostAgeBin: 1,
  hostDisease: 1,
  hostGender: 1,
  hostHealthOutcome: 1,
  hostHealthState: 1,
  hostNameCommon: 1,
  hostOriginCountry: 1,
  hostRole: 1,
  hostVaccinationStatus: 1,
  ncbiSubmitterCountry: 1,
  passageMethod: 1,
  passageNumber: 1,
  presamplingActivity: 1,
  previousInfectionDisease: 1,
  previousInfectionOrganism: 1,
  purposeOfSequencing: 1,
  qualityControlDetails: 1,
  qualityControlDetermination: 1,
  qualityControlIssues: 1,
  sampleReceivedDate: 1,
  sequencedByContactEmail: 1,
  sequencingAssayType: 1,
  sequencingInstrument: 1,
  signsAndSymptoms: 1,
  specimenProcessing: 1,
  travelHistory: 1
}
```

</details>

```
{
  specimenCollectorSampleId: 4738,
  sampleCollectionDateRangeUpper: 1759,
  sampleCollectionDate: 1622,
  sampleCollectionDateRangeLower: 1590,
  completeness: 1483,
  length: 1074,
  biosampleAccession: 750,
  authors: 616,
  earliestReleaseDate: 553,
  ncbiReleaseDate: 550,
  totalSnps: 501,
  ncbiUpdateDate: 475,
  totalUnknownNucs: 475,
  authorAffiliations: 357,
  hostNameScientific: 287,
  hostTaxonId: 287,
  frameShifts: 168,
  releasedAtTimestamp: 122,
  specimenProcessingDetails: 51,
  insdcRawReadsAccession: 36,
  submittedAtTimestamp: 30,
  submittedDate: 28,
  releasedDate: 28,
  bioprojectAccession: 17,
  ncbiVirusName: 16,
  ncbiVirusTaxId: 16,
  lineage: 9,
  sequencingDate: 9,
  totalFrameShifts: 8,
  stopCodons: 6,
  collectionDevice: 4,
  ncbiSourceDb: 3,
  groupName: 2,
}
```


author_association: CONTRIBUTOR
user: login: fengelniederhammer
created_at: 2025-02-18T08:24:28Z
body: # Mpox

<details>

<summary>Full result</summary>

```
{
  accessionVersion: 10925,
  displayName: 10925,
  accession: 9865,
  submissionId: 9865,
  specimenCollectorSampleId: 9584,
  insdcAccessionBase: 9163,
  insdcAccessionFull: 9163,
  completeness: 5708,
  totalUnknownNucs: 4868,
  length: 2253,
  biosampleAccession: 1483,
  frameShifts: 998,
  sampleCollectionDate: 967,
  sampleCollectionDateRangeUpper: 962,
  insdcRawReadsAccession: 957,
  sampleCollectionDateRangeLower: 934,
  totalInsertedNucs: 669,
  totalDeletedNucs: 645,
  authors: 521,
  totalSnps: 496,
  ncbiUpdateDate: 356,
  earliestReleaseDate: 350,
  ncbiReleaseDate: 349,
  geoLocAdmin1: 293,
  authorAffiliations: 176,
  stopCodons: 137,
  releasedAtTimestamp: 76,
  totalAmbiguousNucs: 59,
  geoLocCountry: 55,
  lineage: 45,
  totalFrameShifts: 45,
  bioprojectAccession: 30,
  submittedAtTimestamp: 22,
  submittedDate: 18,
  releasedDate: 18,
  hostNameScientific: 13,
  hostTaxonId: 13,
  totalStopCodons: 13,
  clade: 7,
  insdcVersion: 5,
  ncbiVirusName: 4,
  ncbiVirusTaxId: 4,
  submitter: 3,
  groupName: 3,
  groupId: 3,
  ncbiSourceDb: 3,
  version: 2,
  dataUseTerms: 2,
  dataUseTermsRestrictedUntil: 2,
  dataUseTermsUrl: 2,
  versionStatus: 2,
  hostNameCommon: 2,
  isLabHost: 2,
  outbreak: 2,
  sequencedByOrganization: 2,
  sequencingDate: 2,
  sequencingInstrument: 2,
  sequencingProtocol: 2,
  isRevocation: 1,
  versionComment: 1,
  pipelineVersion: 1,
  ampliconPcrPrimerScheme: 1,
  ampliconSize: 1,
  anatomicalMaterial: 1,
  anatomicalPart: 1,
  assemblyReferenceGenomeAccession: 1,
  bodyProduct: 1,
  breadthOfCoverage: 1,
  cellLine: 1,
  collectionDevice: 1,
  collectionMethod: 1,
  consensusSequenceSoftwareName: 1,
  consensusSequenceSoftwareVersion: 1,
  cultureId: 1,
  dehostingMethod: 1,
  depthOfCoverage: 1,
  diagnosticMeasurementMethod: 1,
  diagnosticMeasurementUnit: 1,
  diagnosticMeasurementValue: 1,
  diagnosticTargetGeneName: 1,
  diagnosticTargetPresence: 1,
  environmentalMaterial: 1,
  environmentalSite: 1,
  experimentalSpecimenRoleType: 1,
  exposureDetails: 1,
  exposureEvent: 1,
  exposureSetting: 1,
  foodProduct: 1,
  foodProductProperties: 1,
  geoLocAdmin2: 1,
  geoLocCity: 1,
  geoLocLatitude: 1,
  geoLocLongitude: 1,
  geoLocSite: 1,
  hostAge: 1,
  hostAgeBin: 1,
  hostDisease: 1,
  hostGender: 1,
  hostHealthOutcome: 1,
  hostHealthState: 1,
  hostOriginCountry: 1,
  hostRole: 1,
  hostVaccinationStatus: 1,
  ncbiSubmitterCountry: 1,
  passageMethod: 1,
  passageNumber: 1,
  presamplingActivity: 1,
  previousInfectionDisease: 1,
  previousInfectionOrganism: 1,
  purposeOfSampling: 1,
  purposeOfSequencing: 1,
  qualityControlDetails: 1,
  qualityControlDetermination: 1,
  qualityControlIssues: 1,
  qualityControlMethodName: 1,
  qualityControlMethodVersion: 1,
  rawSequenceDataProcessingMethod: 1,
  sampleReceivedDate: 1,
  sampleType: 1,
  sequencedByContactEmail: 1,
  sequencedByContactName: 1,
  sequencingAssayType: 1,
  signsAndSymptoms: 1,
  specimenProcessing: 1,
  specimenProcessingDetails: 1,
  travelHistory: 1
}
```

</details>

```
{
  specimenCollectorSampleId: 9584,
  completeness: 5708,
  length: 2253,
  biosampleAccession: 1483,
  insdcRawReadsAccession: 957,
  authors: 521,
  totalSnps: 496,
  ncbiUpdateDate: 356,
  earliestReleaseDate: 350,
  ncbiReleaseDate: 349,
  authorAffiliations: 176,
  releasedAtTimestamp: 76,
  bioprojectAccession: 30,
  submittedAtTimestamp: 22,
  submittedDate: 18,
  releasedDate: 18,
  hostNameScientific: 13,
  hostTaxonId: 13,
  totalStopCodons: 13,
  ncbiVirusName: 4,
  ncbiVirusTaxId: 4,
  hostNameCommon: 2,
  groupName: 2,
  isLabHost: 2,
  outbreak: 2,
}
```
author_association: CONTRIBUTOR
user: login: anna-parker
created_at: 2025-02-27T10:24:41Z
body: I think it would make sense to also make the config more generic if we add all these new fields: https://github.com/GenSpectrum/dashboards/issues/593
author_association: CONTRIBUTOR
user: login: chaoran-chen
created_at: 2025-03-03T21:34:30Z
body: Thanks very much, Fabian, for the statistics! For Pathoplexus instances, I suggest adding:

- earliestReleaseDate
- hostNameScientific
- completeness (once we have https://github.com/GenSpectrum/dashboard-components/issues/349)
- groupName
- dateUseTerms

For West Nile, in addition:

- collectionDevice

For COVID:

- host
- regionExposure / countryExposure / divisionExposure
- samplingStrategy
- dateSubmitted

For other instances:

- hostNameScientific
- ncbiReleaseDate
- completeness

author_association: MEMBER

Diff:
diff --git a/website/src/views/OrganismConstants.ts b/website/src/views/OrganismConstants.ts
index e4aa51c0f..ef4e5d2d6 100644
--- a/website/src/views/OrganismConstants.ts
+++ b/website/src/views/OrganismConstants.ts
@@ -1,6 +1,16 @@
-import { views, type AggregateView, type MutationAnnotation } from '@genspectrum/dashboard-components/util';
+import {
+    type AggregateView,
+    type DateRangeOption,
+    type MutationAnnotation,
+    views,
+} from '@genspectrum/dashboard-components/util';
 
-import { pathoplexusGroupNameField, type VariantFilter } from './View.ts';
+import {
+    GENSPECTRUM_LOCULUS_MAIN_FILTER_DATE_COLUMN,
+    PATHOPLEXUS_MAIN_FILTER_DATE_COLUMN,
+    pathoplexusGroupNameField,
+    type VariantFilter,
+} from './View.ts';
 import type { BaselineFilterConfig } from '../components/pageStateSelectors/BaselineSelector.tsx';
 import type { LineageFilterConfig } from '../components/pageStateSelectors/LineageFilterInput.tsx';
 import type { Organism } from '../types/Organism.ts';
@@ -127,3 +137,81 @@ export const INFLUENZA_ACCESSION_DOWNLOAD_FIELDS = [
     'insdcAccessionFull_seg7',
     'insdcAccessionFull_seg8',
 ];
+
+export const PATHOPLEXUS_HOST_FIELD = 'hostNameScientific';
+
+export function getPathoplexusFilters({
+    dateRangeOptions,
+    earliestDate,
+}: {
+    dateRangeOptions: DateRangeOption[];
+    earliestDate: string;
+}): BaselineFilterConfig[] {
+    return [
+        {
+            type: 'date',
+            dateRangeOptions,
+            earliestDate,
+            dateColumn: PATHOPLEXUS_MAIN_FILTER_DATE_COLUMN,
+            label: 'Sample collection date',
+        },
+        {
+            lapisField: PATHOPLEXUS_HOST_FIELD,
+            placeholderText: 'Host',
+            type: 'text' as const,
+            label: 'Host',
+        },
+        {
+            lapisField: 'groupName',
+            placeholderText: 'Group name',
+            type: 'text' as const,
+            label: 'Group name',
+        },
+        {
+            type: 'date',
+            dateRangeOptions,
+            earliestDate: '1956-01-01',
+            dateColumn: 'earliestReleaseDate',
+            label: 'Earliest release date',
+        },
+        {
+            lapisField: 'dataUseTerms',
+            placeholderText: 'Data use terms',
+            type: 'text' as const,
+            label: 'Data use terms',
+        },
+    ];
+}
+
+export const GENPSECTRUM_LOCULUS_HOST_FIELD = 'hostNameScientific';
+
+export function getGenspectrumLoculusFilters({
+    dateRangeOptions,
+    earliestDate,
+}: {
+    dateRangeOptions: DateRangeOption[];
+    earliestDate: string;
+}): BaselineFilterConfig[] {
+    return [
+        {
+            type: 'date',
+            dateRangeOptions,
+            earliestDate,
+            dateColumn: GENSPECTRUM_LOCULUS_MAIN_FILTER_DATE_COLUMN,
+            label: 'Sample collection date',
+        },
+        {
+            lapisField: GENPSECTRUM_LOCULUS_HOST_FIELD,
+            placeholderText: 'Host',
+            type: 'text' as const,
+            label: 'Host',
+        },
+        {
+            type: 'date',
+            dateRangeOptions,
+            earliestDate,
+            dateColumn: 'ncbiReleaseDate',
+            label: 'NCBI release date',
+        },
+    ];
+}
diff --git a/website/src/views/cchf.ts b/website/src/views/cchf.ts
index 32270bb45..e20c87f4c 100644
--- a/website/src/views/cchf.ts
+++ b/website/src/views/cchf.ts
@@ -19,11 +19,13 @@ import {
 } from './BaseView.ts';
 import {
     getPathoplexusAdditionalSequencingEffortsFields,
-    type OrganismConstants,
+    getPathoplexusFilters,
+    LOCULUS_AUTHORS_AFFILIATIONS_FIELD,
     LOCULUS_AUTHORS_FIELD,
+    type OrganismConstants,
     PATHOPLEXUS_COMMON_DOWNLOAD_FIELDS,
+    PATHOPLEXUS_HOST_FIELD,
     PATHOPLEXUS_LOCATION_FIELDS,
-    LOCULUS_AUTHORS_AFFILIATIONS_FIELD,
 } from './OrganismConstants.ts';
 import { compareSideBySideViewConstants } from './ViewConstants.ts';
 import type { LineageFilterConfig } from '../components/pageStateSelectors/LineageFilterInput.tsx';
@@ -33,14 +35,12 @@ import { CompareSideBySideStateHandler } from './pageStateHandlers/CompareSideBy
 import type { BaselineFilterConfig } from '../components/pageStateSelectors/BaselineSelector.tsx';
 
 const earliestDate = '1956-01-01';
-const hostField = 'hostNameScientific';
 
 class CchfConstants implements OrganismConstants {
     public readonly organism = Organisms.cchf;
     public readonly earliestDate = earliestDate;
     public readonly baselineFilterConfigs: BaselineFilterConfig[] = [
-        {
-            type: 'date',
+        ...getPathoplexusFilters({
             dateRangeOptions: [
                 dateRangeOptionPresets.last6Months,
                 dateRangeOptionPresets.lastYear,
@@ -52,21 +52,13 @@ class CchfConstants implements OrganismConstants {
                 dateRangeOptionPresets.allTimes,
             ],
             earliestDate,
-            dateColumn: PATHOPLEXUS_MAIN_FILTER_DATE_COLUMN,
-            label: 'Sample collection date',
-        },
-        {
-            lapisField: hostField,
-            placeholderText: 'Host',
-            type: 'text' as const,
-            label: 'Host',
-        },
+        }),
     ];
     public readonly mainDateField: string;
     public readonly locationFields = PATHOPLEXUS_LOCATION_FIELDS;
     public readonly lineageFilters: LineageFilterConfig[] = [];
     public readonly useAdvancedQuery = false;
-    public readonly hostField: string = hostField;
+    public readonly hostField: string = PATHOPLEXUS_HOST_FIELD;
     public readonly authorsField = LOCULUS_AUTHORS_FIELD;
     public readonly authorAffiliationsField = LOCULUS_AUTHORS_AFFILIATIONS_FIELD;
     public readonly accessionDownloadFields = [
diff --git a/website/src/views/covid.ts b/website/src/views/covid.ts
index 2bd411e68..d6ccfbbc0 100644
--- a/website/src/views/covid.ts
+++ b/website/src/views/covid.ts
@@ -45,6 +45,20 @@ const mainDateFilterColumn = 'date';
 
 const nextcladePangoLineage = 'nextcladePangoLineage';
 
+const dateRangeOptions = [
+    dateRangeOptionPresets.lastMonth,
+    dateRangeOptionPresets.last2Months,
+    dateRangeOptionPresets.last3Months,
+    dateRangeOptionPresets.last6Months,
+    dateRangeOptionPresets.lastYear,
+    { label: '2024', dateFrom: '2024-01-01', dateTo: '2024-12-31' },
+    { label: '2023', dateFrom: '2023-01-02', dateTo: '2023-12-31' },
+    { label: '2022', dateFrom: '2022-01-03', dateTo: '2023-01-01' },
+    { label: '2021', dateFrom: '2021-01-04', dateTo: '2022-01-02' },
+    { label: '2020', dateFrom: earliestDate, dateTo: '2021-01-03' },
+    dateRangeOptionPresets.allTimes,
+];
+
 class CovidConstants implements OrganismConstants {
     public readonly organism = Organisms.covid;
     public readonly earliestDate = earliestDate;
@@ -69,20 +83,8 @@ class CovidConstants implements OrganismConstants {
     public readonly baselineFilterConfigs: BaselineFilterConfig[] = [
         {
             type: 'date',
-            dateRangeOptions: [
-                dateRangeOptionPresets.lastMonth,
-                dateRangeOptionPresets.last2Months,
-                dateRangeOptionPresets.last3Months,
-                dateRangeOptionPresets.last6Months,
-                dateRangeOptionPresets.lastYear,
-                { label: '2024', dateFrom: '2024-01-01', dateTo: '2024-12-31' },
-                { label: '2023', dateFrom: '2023-01-02', dateTo: '2023-12-31' },
-                { label: '2022', dateFrom: '2022-01-03', dateTo: '2023-01-01' },
-                { label: '2021', dateFrom: '2021-01-04', dateTo: '2022-01-02' },
-                { label: '2020', dateFrom: earliestDate, dateTo: '2021-01-03' },
-                { label: 'All times', dateFrom: this.earliestDate },
-            ],
-            earliestDate: earliestDate,
+            dateRangeOptions,
+            earliestDate,
             dateColumn: mainDateFilterColumn,
             label: 'Date',
         },
@@ -92,6 +94,37 @@ class CovidConstants implements OrganismConstants {
             type: 'text' as const,
             label: 'Host',
         },
+        {
+            lapisField: 'samplingStrategy',
+            placeholderText: 'Sampling strategy',
+            type: 'text' as const,
+            label: 'Sampling strategy',
+        },
+        {
+            type: 'date',
+            dateRangeOptions,
+            earliestDate,
+            dateColumn: 'dateSubmitted',
+            label: 'Date submitted',
+        },
+        {
+            lapisField: 'regionExposure',
+            placeholderText: 'Region exposure',
+            type: 'text' as const,
+            label: 'Region exposure',
+        },
+        {
+            lapisField: 'countryExposure',
+            placeholderText: 'Country exposure',
+            type: 'text' as const,
+            label: 'Country exposure',
+        },
+        {
+            lapisField: 'divisionExposure',
+            placeholderText: 'Division exposure',
+            type: 'text' as const,
+            label: 'Division exposure',
+        },
     ];
     public readonly hostField: string = hostField;
     public readonly originatingLabField = 'originatingLab';
diff --git a/website/src/views/ebolaSudan.ts b/website/src/views/ebolaSudan.ts
index c54b2b9bd..291c4f740 100644
--- a/website/src/views/ebolaSudan.ts
+++ b/website/src/views/ebolaSudan.ts
@@ -24,6 +24,8 @@ import {
     PATHOPLEXUS_ACCESSION_DOWNLOAD_FIELDS,
     LOCULUS_AUTHORS_FIELD,
     LOCULUS_AUTHORS_AFFILIATIONS_FIELD,
+    getPathoplexusFilters,
+    PATHOPLEXUS_HOST_FIELD,
 } from './OrganismConstants.ts';
 import { compareSideBySideViewConstants } from './ViewConstants.ts';
 import type { LineageFilterConfig } from '../components/pageStateSelectors/LineageFilterInput.tsx';
@@ -33,14 +35,12 @@ import { CompareSideBySideStateHandler } from './pageStateHandlers/CompareSideBy
 import type { BaselineFilterConfig } from '../components/pageStateSelectors/BaselineSelector.tsx';
 
 const earliestDate = '1975-01-01';
-const hostField = 'hostNameScientific';
 
 class EbolaSudanConstants implements OrganismConstants {
     public readonly organism = Organisms.ebolaSudan;
     public readonly earliestDate = '1975-01-01';
     public readonly baselineFilterConfigs: BaselineFilterConfig[] = [
-        {
-            type: 'date',
+        ...getPathoplexusFilters({
             dateRangeOptions: [
                 dateRangeOptionPresets.last6Months,
                 dateRangeOptionPresets.lastYear,
@@ -52,21 +52,13 @@ class EbolaSudanConstants implements OrganismConstants {
                 dateRangeOptionPresets.allTimes,
             ],
             earliestDate,
-            dateColumn: PATHOPLEXUS_MAIN_FILTER_DATE_COLUMN,
-            label: 'Sample collection date',
-        },
-        {
-            lapisField: hostField,
-            placeholderText: 'Host',
-            type: 'text' as const,
-            label: 'Host',
-        },
+        }),
     ];
     public readonly mainDateField: string;
     public readonly locationFields = PATHOPLEXUS_LOCATION_FIELDS;
     public readonly lineageFilters: LineageFilterConfig[] = [];
     public readonly useAdvancedQuery = false;
-    public readonly hostField: string = hostField;
+    public readonly hostField: string = PATHOPLEXUS_HOST_FIELD;
     public readonly authorsField = LOCULUS_AUTHORS_FIELD;
     public readonly authorAffiliationsField = LOCULUS_AUTHORS_AFFILIATIONS_FIELD;
     public readonly accessionDownloadFields = PATHOPLEXUS_ACCESSION_DOWNLOAD_FIELDS;
diff --git a/website/src/views/ebolaZaire.ts b/website/src/views/ebolaZaire.ts
index 33cbdd61d..da83846a0 100644
--- a/website/src/views/ebolaZaire.ts
+++ b/website/src/views/ebolaZaire.ts
@@ -24,6 +24,8 @@ import {
     PATHOPLEXUS_LOCATION_FIELDS,
     LOCULUS_AUTHORS_FIELD,
     LOCULUS_AUTHORS_AFFILIATIONS_FIELD,
+    getPathoplexusFilters,
+    PATHOPLEXUS_HOST_FIELD,
 } from './OrganismConstants.ts';
 import { compareSideBySideViewConstants } from './ViewConstants.ts';
 import type { LineageFilterConfig } from '../components/pageStateSelectors/LineageFilterInput.tsx';
@@ -33,14 +35,12 @@ import { CompareSideBySideStateHandler } from './pageStateHandlers/CompareSideBy
 import type { BaselineFilterConfig } from '../components/pageStateSelectors/BaselineSelector.tsx';
 
 const earliestDate = '1975-01-01';
-const hostField = 'hostNameScientific';
 
 class EbolaZaireConstants implements OrganismConstants {
     public readonly organism = Organisms.ebolaZaire;
     public readonly earliestDate = earliestDate;
     public readonly baselineFilterConfigs: BaselineFilterConfig[] = [
-        {
-            type: 'date',
+        ...getPathoplexusFilters({
             dateRangeOptions: [
                 dateRangeOptionPresets.last6Months,
                 dateRangeOptionPresets.lastYear,
@@ -52,21 +52,14 @@ class EbolaZaireConstants implements OrganismConstants {
                 dateRangeOptionPresets.allTimes,
             ],
             earliestDate,
-            dateColumn: PATHOPLEXUS_MAIN_FILTER_DATE_COLUMN,
-            label: 'Sample collection date',
-        },
-        {
-            lapisField: hostField,
-            placeholderText: 'Host',
-            type: 'text' as const,
-            label: 'Host',
-        },
+        }),
     ];
+
     public readonly mainDateField: string;
     public readonly locationFields = PATHOPLEXUS_LOCATION_FIELDS;
     public readonly lineageFilters: LineageFilterConfig[] = [];
     public readonly useAdvancedQuery = false;
-    public readonly hostField: string = hostField;
+    public readonly hostField: string = PATHOPLEXUS_HOST_FIELD;
     public readonly authorsField = LOCULUS_AUTHORS_FIELD;
     public readonly authorAffiliationsField = LOCULUS_AUTHORS_AFFILIATIONS_FIELD;
     public readonly accessionDownloadFields = PATHOPLEXUS_ACCESSION_DOWNLOAD_FIELDS;
diff --git a/website/src/views/h1n1pdm.ts b/website/src/views/h1n1pdm.ts
index 260364b25..90bb986dd 100644
--- a/website/src/views/h1n1pdm.ts
+++ b/website/src/views/h1n1pdm.ts
@@ -18,12 +18,14 @@ import {
     GenericSingleVariantView,
 } from './BaseView.ts';
 import {
-    type OrganismConstants,
-    getAuthorRelatedSequencingEffortsFields,
+    GENPSECTRUM_LOCULUS_HOST_FIELD,
     GENSPECTRUM_LOCULUS_LOCATION_FIELDS,
+    getAuthorRelatedSequencingEffortsFields,
+    getGenspectrumLoculusFilters,
     INFLUENZA_ACCESSION_DOWNLOAD_FIELDS,
-    LOCULUS_AUTHORS_FIELD,
     LOCULUS_AUTHORS_AFFILIATIONS_FIELD,
+    LOCULUS_AUTHORS_FIELD,
+    type OrganismConstants,
 } from './OrganismConstants.ts';
 import { compareSideBySideViewConstants } from './ViewConstants.ts';
 import type { BaselineFilterConfig } from '../components/pageStateSelectors/BaselineSelector.tsx';
@@ -33,7 +35,19 @@ import { type DataOrigin, dataOrigins } from '../types/dataOrigins.ts';
 import { CompareSideBySideStateHandler } from './pageStateHandlers/CompareSideBySidePageStateHandler.ts';
 
 const earliestDate = '1900-01-01';
-const hostField = 'hostNameScientific';
+const dateRangeOptions = [
+    dateRangeOptionPresets.lastMonth,
+    dateRangeOptionPresets.last2Months,
+    dateRangeOptionPresets.last3Months,
+    dateRangeOptionPresets.last6Months,
+    dateRangeOptionPresets.lastYear,
+    { label: 'Since 2020', dateFrom: '2020-01-01' },
+    { label: '2010-2019', dateFrom: '2010-01-01', dateTo: '2019-12-31' },
+    { label: '2000-2009', dateFrom: '2000-01-01', dateTo: '2009-12-31' },
+    { label: 'Since 2000', dateFrom: '2000-01-01' },
+    { label: 'Before 2000', dateFrom: earliestDate, dateTo: '1999-12-31' },
+    dateRangeOptionPresets.allTimes,
+];
 
 class H1n1pdmConstants implements OrganismConstants {
     public readonly organism = Organisms.h1n1pdm;
@@ -54,33 +68,12 @@ class H1n1pdmConstants implements OrganismConstants {
     ];
     public readonly useAdvancedQuery = false;
     public readonly baselineFilterConfigs: BaselineFilterConfig[] = [
-        {
-            type: 'date',
-            dateRangeOptions: [
-                dateRangeOptionPresets.lastMonth,
-                dateRangeOptionPresets.last2Months,
-                dateRangeOptionPresets.last3Months,
-                dateRangeOptionPresets.last6Months,
-                dateRangeOptionPresets.lastYear,
-                { label: 'Since 2020', dateFrom: '2020-01-01' },
-                { label: '2010-2019', dateFrom: '2010-01-01', dateTo: '2019-12-31' },
-                { label: '2000-2009', dateFrom: '2000-01-01', dateTo: '2009-12-31' },
-                { label: 'Since 2000', dateFrom: '2000-01-01' },
-                { label: 'Before 2000', dateFrom: earliestDate, dateTo: '1999-12-31' },
-                { label: 'All times', dateFrom: this.earliestDate },
-            ],
+        ...getGenspectrumLoculusFilters({
+            dateRangeOptions,
             earliestDate,
-            dateColumn: GENSPECTRUM_LOCULUS_MAIN_FILTER_DATE_COLUMN,
-            label: 'Sample collection date',
-        },
-        {
-            lapisField: hostField,
-            placeholderText: 'Host',
-            type: 'text' as const,
-            label: 'Host',
-        },
+        }),
     ];
-    public readonly hostField: string = hostField;
+    public readonly hostField: string = GENPSECTRUM_LOCULUS_HOST_FIELD;
     public readonly authorsField = LOCULUS_AUTHORS_FIELD;
     public readonly authorAffiliationsField = LOCULUS_AUTHORS_AFFILIATIONS_FIELD;
     public readonly additionalFilters: Record<string, string> | undefined;
diff --git a/website/src/views/h3n2.ts b/website/src/views/h3n2.ts
index de33fe5f9..481f6ddcc 100644
--- a/website/src/views/h3n2.ts
+++ b/website/src/views/h3n2.ts
@@ -24,6 +24,8 @@ import {
     INFLUENZA_ACCESSION_DOWNLOAD_FIELDS,
     LOCULUS_AUTHORS_FIELD,
     LOCULUS_AUTHORS_AFFILIATIONS_FIELD,
+    getGenspectrumLoculusFilters,
+    GENPSECTRUM_LOCULUS_HOST_FIELD,
 } from './OrganismConstants.ts';
 import { compareSideBySideViewConstants } from './ViewConstants.ts';
 import type { BaselineFilterConfig } from '../components/pageStateSelectors/BaselineSelector.tsx';
@@ -33,7 +35,19 @@ import { type DataOrigin, dataOrigins } from '../types/dataOrigins.ts';
 import { CompareSideBySideStateHandler } from './pageStateHandlers/CompareSideBySidePageStateHandler.ts';
 
 const earliestDate = '1905-01-01';
-const hostField = 'hostNameScientific';
+const dateRangeOptions = [
+    dateRangeOptionPresets.lastMonth,
+    dateRangeOptionPresets.last2Months,
+    dateRangeOptionPresets.last3Months,
+    dateRangeOptionPresets.last6Months,
+    dateRangeOptionPresets.lastYear,
+    { label: 'Since 2020', dateFrom: '2020-01-01' },
+    { label: '2010-2019', dateFrom: '2010-01-01', dateTo: '2019-12-31' },
+    { label: '2000-2009', dateFrom: '2000-01-01', dateTo: '2009-12-31' },
+    { label: 'Since 2000', dateFrom: '2000-01-01' },
+    { label: 'Before 2000', dateFrom: earliestDate, dateTo: '1999-12-31' },
+    dateRangeOptionPresets.allTimes,
+];
 
 class H3n2Constants implements OrganismConstants {
     public readonly organism = Organisms.h3n2;
@@ -54,33 +68,12 @@ class H3n2Constants implements OrganismConstants {
     ];
     public readonly useAdvancedQuery = false;
     public readonly baselineFilterConfigs: BaselineFilterConfig[] = [
-        {
-            type: 'date',
-            dateRangeOptions: [
-                dateRangeOptionPresets.lastMonth,
-                dateRangeOptionPresets.last2Months,
-                dateRangeOptionPresets.last3Months,
-                dateRangeOptionPresets.last6Months,
-                dateRangeOptionPresets.lastYear,
-                { label: 'Since 2020', dateFrom: '2020-01-01' },
-                { label: '2010-2019', dateFrom: '2010-01-01', dateTo: '2019-12-31' },
-                { label: '2000-2009', dateFrom: '2000-01-01', dateTo: '2009-12-31' },
-                { label: 'Since 2000', dateFrom: '2000-01-01' },
-                { label: 'Before 2000', dateFrom: earliestDate, dateTo: '1999-12-31' },
-                { label: 'All times', dateFrom: this.earliestDate },
-            ],
+        ...getGenspectrumLoculusFilters({
+            dateRangeOptions,
             earliestDate,
-            dateColumn: GENSPECTRUM_LOCULUS_MAIN_FILTER_DATE_COLUMN,
-            label: 'Sample collection date',
-        },
-        {
-            lapisField: hostField,
-            placeholderText: 'Host',
-            type: 'text' as const,
-            label: 'Host',
-        },
+        }),
     ];
-    public readonly hostField: string = hostField;
+    public readonly hostField: string = GENPSECTRUM_LOCULUS_HOST_FIELD;
     public readonly authorsField = LOCULUS_AUTHORS_FIELD;
     public readonly authorAffiliationsField = LOCULUS_AUTHORS_AFFILIATIONS_FIELD;
     public readonly additionalFilters: Record<string, string> | undefined;
diff --git a/website/src/views/h5n1.ts b/website/src/views/h5n1.ts
index 97d561cac..c8dd9a968 100644
--- a/website/src/views/h5n1.ts
+++ b/website/src/views/h5n1.ts
@@ -18,12 +18,14 @@ import {
     GenericSingleVariantView,
 } from './BaseView.ts';
 import {
-    type OrganismConstants,
-    getAuthorRelatedSequencingEffortsFields,
+    GENPSECTRUM_LOCULUS_HOST_FIELD,
     GENSPECTRUM_LOCULUS_LOCATION_FIELDS,
+    getAuthorRelatedSequencingEffortsFields,
+    getGenspectrumLoculusFilters,
     INFLUENZA_ACCESSION_DOWNLOAD_FIELDS,
-    LOCULUS_AUTHORS_FIELD,
     LOCULUS_AUTHORS_AFFILIATIONS_FIELD,
+    LOCULUS_AUTHORS_FIELD,
+    type OrganismConstants,
 } from './OrganismConstants.ts';
 import { compareSideBySideViewConstants } from './ViewConstants.ts';
 import type { BaselineFilterConfig } from '../components/pageStateSelectors/BaselineSelector.tsx';
@@ -33,7 +35,19 @@ import { type DataOrigin, dataOrigins } from '../types/dataOrigins.ts';
 import { CompareSideBySideStateHandler } from './pageStateHandlers/CompareSideBySidePageStateHandler.ts';
 
 const earliestDate = '1905-01-01';
-const hostField = 'hostNameScientific';
+const dateRangeOptions = [
+    dateRangeOptionPresets.lastMonth,
+    dateRangeOptionPresets.last2Months,
+    dateRangeOptionPresets.last3Months,
+    dateRangeOptionPresets.last6Months,
+    dateRangeOptionPresets.lastYear,
+    { label: 'Since 2020', dateFrom: '2020-01-01' },
+    { label: '2010-2019', dateFrom: '2010-01-01', dateTo: '2019-12-31' },
+    { label: '2000-2009', dateFrom: '2000-01-01', dateTo: '2009-12-31' },
+    { label: 'Since 2000', dateFrom: '2000-01-01' },
+    { label: 'Before 2000', dateFrom: earliestDate, dateTo: '1999-12-31' },
+    dateRangeOptionPresets.allTimes,
+];
 
 class H5n1Constants implements OrganismConstants {
     public readonly organism = Organisms.h5n1;
@@ -49,33 +63,12 @@ class H5n1Constants implements OrganismConstants {
     ];
     public readonly useAdvancedQuery = false;
     public readonly baselineFilterConfigs: BaselineFilterConfig[] = [
-        {
-            type: 'date',
-            dateRangeOptions: [
-                dateRangeOptionPresets.lastMonth,
-                dateRangeOptionPresets.last2Months,
-                dateRangeOptionPresets.last3Months,
-                dateRangeOptionPresets.last6Months,
-                dateRangeOptionPresets.lastYear,
-                { label: 'Since 2020', dateFrom: '2020-01-01' },
-                { label: '2010-2019', dateFrom: '2010-01-01', dateTo: '2019-12-31' },
-                { label: '2000-2009', dateFrom: '2000-01-01', dateTo: '2009-12-31' },
-                { label: 'Since 2000', dateFrom: '2000-01-01' },
-                { label: 'Before 2000', dateFrom: earliestDate, dateTo: '1999-12-31' },
-                { label: 'All times', dateFrom: this.earliestDate },
-            ],
+        ...getGenspectrumLoculusFilters({
+            dateRangeOptions,
             earliestDate,
-            dateColumn: GENSPECTRUM_LOCULUS_MAIN_FILTER_DATE_COLUMN,
-            label: 'Sample collection date',
-        },
-        {
-            lapisField: hostField,
-            placeholderText: 'Host',
-            type: 'text' as const,
-            label: 'Host',
-        },
+        }),
     ];
-    public readonly hostField: string = hostField;
+    public readonly hostField: string = GENPSECTRUM_LOCULUS_HOST_FIELD;
     public readonly authorsField = LOCULUS_AUTHORS_FIELD;
     public readonly authorAffiliationsField = LOCULUS_AUTHORS_AFFILIATIONS_FIELD;
     public readonly additionalFilters: Record<string, string> | undefined;
diff --git a/website/src/views/influenza-a.ts b/website/src/views/influenza-a.ts
index c6778fc0f..f7a8dd7ba 100644
--- a/website/src/views/influenza-a.ts
+++ b/website/src/views/influenza-a.ts
@@ -10,12 +10,14 @@ import {
 import type { OrganismsConfig } from '../config.ts';
 import { BaseView, GenericSequencingEffortsView } from './BaseView.ts';
 import {
-    type OrganismConstants,
-    getAuthorRelatedSequencingEffortsFields,
+    GENPSECTRUM_LOCULUS_HOST_FIELD,
     GENSPECTRUM_LOCULUS_LOCATION_FIELDS,
+    getAuthorRelatedSequencingEffortsFields,
+    getGenspectrumLoculusFilters,
     INFLUENZA_ACCESSION_DOWNLOAD_FIELDS,
-    LOCULUS_AUTHORS_FIELD,
     LOCULUS_AUTHORS_AFFILIATIONS_FIELD,
+    LOCULUS_AUTHORS_FIELD,
+    type OrganismConstants,
 } from './OrganismConstants.ts';
 import { compareSideBySideViewConstants } from './ViewConstants.ts';
 import type { LineageFilterConfig } from '../components/pageStateSelectors/LineageFilterInput.tsx';
@@ -25,7 +27,19 @@ import { CompareSideBySideStateHandler } from './pageStateHandlers/CompareSideBy
 import type { BaselineFilterConfig } from '../components/pageStateSelectors/BaselineSelector.tsx';
 
 const earliestDate = '1905-01-01';
-const hostField = 'hostNameScientific';
+const dateRangeOptions = [
+    dateRangeOptionPresets.lastMonth,
+    dateRangeOptionPresets.last2Months,
+    dateRangeOptionPresets.last3Months,
+    dateRangeOptionPresets.last6Months,
+    dateRangeOptionPresets.lastYear,
+    { label: 'Since 2020', dateFrom: '2020-01-01' },
+    { label: '2010-2019', dateFrom: '2010-01-01', dateTo: '2019-12-31' },
+    { label: '2000-2009', dateFrom: '2000-01-01', dateTo: '2009-12-31' },
+    { label: 'Since 2000', dateFrom: '2000-01-01' },
+    { label: 'Before 2000', dateFrom: earliestDate, dateTo: '1999-12-31' },
+    dateRangeOptionPresets.allTimes,
+];
 
 class InfluenzaAConstants implements OrganismConstants {
     public readonly organism = Organisms.influenzaA;
@@ -45,34 +59,13 @@ class InfluenzaAConstants implements OrganismConstants {
         },
     ];
     public readonly baselineFilterConfigs: BaselineFilterConfig[] = [
-        {
-            type: 'date',
-            dateRangeOptions: [
-                dateRangeOptionPresets.lastMonth,
-                dateRangeOptionPresets.last2Months,
-                dateRangeOptionPresets.last3Months,
-                dateRangeOptionPresets.last6Months,
-                dateRangeOptionPresets.lastYear,
-                { label: 'Since 2020', dateFrom: '2020-01-01' },
-                { label: '2010-2019', dateFrom: '2010-01-01', dateTo: '2019-12-31' },
-                { label: '2000-2009', dateFrom: '2000-01-01', dateTo: '2009-12-31' },
-                { label: 'Since 2000', dateFrom: '2000-01-01' },
-                { label: 'Before 2000', dateFrom: earliestDate, dateTo: '1999-12-31' },
-                { label: 'All times', dateFrom: this.earliestDate },
-            ],
-            earliestDate: earliestDate,
-            dateColumn: GENSPECTRUM_LOCULUS_MAIN_FILTER_DATE_COLUMN,
-            label: 'Sample collection date',
-        },
-        {
-            lapisField: hostField,
-            placeholderText: 'Host',
-            type: 'text' as const,
-            label: 'Host',
-        },
+        ...getGenspectrumLoculusFilters({
+            dateRangeOptions,
+            earliestDate,
+        }),
     ];
     public readonly useAdvancedQuery = false;
-    public readonly hostField: string = hostField;
+    public readonly hostField: string = GENPSECTRUM_LOCULUS_HOST_FIELD;
     public readonly authorsField = LOCULUS_AUTHORS_FIELD;
     public readonly authorAffiliationsField = LOCULUS_AUTHORS_AFFILIATIONS_FIELD;
     public readonly additionalFilters: Record<string, string> | undefined;
diff --git a/website/src/views/influenza-b.ts b/website/src/views/influenza-b.ts
index 4e36dde82..aec20de41 100644
--- a/website/src/views/influenza-b.ts
+++ b/website/src/views/influenza-b.ts
@@ -10,12 +10,14 @@ import {
 import type { OrganismsConfig } from '../config.ts';
 import { BaseView, GenericSequencingEffortsView } from './BaseView.ts';
 import {
-    type OrganismConstants,
-    getAuthorRelatedSequencingEffortsFields,
+    GENPSECTRUM_LOCULUS_HOST_FIELD,
     GENSPECTRUM_LOCULUS_LOCATION_FIELDS,
+    getAuthorRelatedSequencingEffortsFields,
+    getGenspectrumLoculusFilters,
     INFLUENZA_ACCESSION_DOWNLOAD_FIELDS,
-    LOCULUS_AUTHORS_FIELD,
     LOCULUS_AUTHORS_AFFILIATIONS_FIELD,
+    LOCULUS_AUTHORS_FIELD,
+    type OrganismConstants,
 } from './OrganismConstants.ts';
 import { compareSideBySideViewConstants } from './ViewConstants.ts';
 import type { LineageFilterConfig } from '../components/pageStateSelectors/LineageFilterInput.tsx';
@@ -25,7 +27,20 @@ import { CompareSideBySideStateHandler } from './pageStateHandlers/CompareSideBy
 import type { BaselineFilterConfig } from '../components/pageStateSelectors/BaselineSelector.tsx';
 
 const earliestDate = '1905-01-01';
-const hostField = 'hostNameScientific';
+
+const dateRangeOptions = [
+    dateRangeOptionPresets.lastMonth,
+    dateRangeOptionPresets.last2Months,
+    dateRangeOptionPresets.last3Months,
+    dateRangeOptionPresets.last6Months,
+    dateRangeOptionPresets.lastYear,
+    { label: 'Since 2020', dateFrom: '2020-01-01' },
+    { label: '2010-2019', dateFrom: '2010-01-01', dateTo: '2019-12-31' },
+    { label: '2000-2009', dateFrom: '2000-01-01', dateTo: '2009-12-31' },
+    { label: 'Since 2000', dateFrom: '2000-01-01' },
+    { label: 'Before 2000', dateFrom: earliestDate, dateTo: '1999-12-31' },
+    dateRangeOptionPresets.allTimes,
+];
 
 class InfluenzaBConstants implements OrganismConstants {
     public readonly organism = Organisms.influenzaB;
@@ -40,34 +55,13 @@ class InfluenzaBConstants implements OrganismConstants {
         },
     ];
     public readonly baselineFilterConfigs: BaselineFilterConfig[] = [
-        {
-            type: 'date',
-            dateRangeOptions: [
-                dateRangeOptionPresets.lastMonth,
-                dateRangeOptionPresets.last2Months,
-                dateRangeOptionPresets.last3Months,
-                dateRangeOptionPresets.last6Months,
-                dateRangeOptionPresets.lastYear,
-                { label: 'Since 2020', dateFrom: '2020-01-01' },
-                { label: '2010-2019', dateFrom: '2010-01-01', dateTo: '2019-12-31' },
-                { label: '2000-2009', dateFrom: '2000-01-01', dateTo: '2009-12-31' },
-                { label: 'Since 2000', dateFrom: '2000-01-01' },
-                { label: 'Before 2000', dateFrom: earliestDate, dateTo: '1999-12-31' },
-                { label: 'All times', dateFrom: this.earliestDate },
-            ],
-            earliestDate: earliestDate,
-            dateColumn: GENSPECTRUM_LOCULUS_MAIN_FILTER_DATE_COLUMN,
-            label: 'Sample collection date',
-        },
-        {
-            lapisField: hostField,
-            placeholderText: 'Host',
-            type: 'text' as const,
-            label: 'Host',
-        },
+        ...getGenspectrumLoculusFilters({
+            dateRangeOptions,
+            earliestDate,
+        }),
     ];
     public readonly useAdvancedQuery = false;
-    public readonly hostField: string = hostField;
+    public readonly hostField: string = GENPSECTRUM_LOCULUS_HOST_FIELD;
     public readonly authorsField = LOCULUS_AUTHORS_FIELD;
     public readonly authorAffiliationsField = LOCULUS_AUTHORS_AFFILIATIONS_FIELD;
     public readonly additionalFilters: Record<string, string> | undefined;
diff --git a/website/src/views/mpox.ts b/website/src/views/mpox.ts
index 27fdd3360..f6755da5f 100644
--- a/website/src/views/mpox.ts
+++ b/website/src/views/mpox.ts
@@ -24,6 +24,8 @@ import {
     PATHOPLEXUS_LOCATION_FIELDS,
     LOCULUS_AUTHORS_FIELD,
     LOCULUS_AUTHORS_AFFILIATIONS_FIELD,
+    PATHOPLEXUS_HOST_FIELD,
+    getPathoplexusFilters,
 } from './OrganismConstants.ts';
 import { compareSideBySideViewConstants } from './ViewConstants.ts';
 import type { LineageFilterConfig } from '../components/pageStateSelectors/LineageFilterInput.tsx';
@@ -33,7 +35,6 @@ import { CompareSideBySideStateHandler } from './pageStateHandlers/CompareSideBy
 import type { BaselineFilterConfig } from '../components/pageStateSelectors/BaselineSelector.tsx';
 
 const earliestDate = '1960-01-01';
-const hostField = 'hostNameScientific';
 
 class MpoxConstants implements OrganismConstants {
     public readonly organism = Organisms.mpox;
@@ -54,8 +55,7 @@ class MpoxConstants implements OrganismConstants {
     ];
     public readonly useAdvancedQuery = false;
     public readonly baselineFilterConfigs: BaselineFilterConfig[] = [
-        {
-            type: 'date',
+        ...getPathoplexusFilters({
             dateRangeOptions: [
                 dateRangeOptionPresets.lastMonth,
                 dateRangeOptionPresets.last2Months,
@@ -74,17 +74,9 @@ class MpoxConstants implements OrganismConstants {
                 dateRangeOptionPresets.allTimes,
             ],
             earliestDate: '1960-01-01',
-            dateColumn: PATHOPLEXUS_MAIN_FILTER_DATE_COLUMN,
-            label: 'Sample collection date',
-        },
-        {
-            lapisField: hostField,
-            placeholderText: 'Host',
-            type: 'text' as const,
-            label: 'Host',
-        },
+        }),
     ];
-    public readonly hostField: string = hostField;
+    public readonly hostField: string = PATHOPLEXUS_HOST_FIELD;
     public readonly authorsField = LOCULUS_AUTHORS_FIELD;
     public readonly authorAffiliationsField = LOCULUS_AUTHORS_AFFILIATIONS_FIELD;
     public readonly accessionDownloadFields = PATHOPLEXUS_ACCESSION_DOWNLOAD_FIELDS;
diff --git a/website/src/views/rsvA.ts b/website/src/views/rsvA.ts
index 2c78dc916..63a76981c 100644
--- a/website/src/views/rsvA.ts
+++ b/website/src/views/rsvA.ts
@@ -18,11 +18,13 @@ import {
     GenericSingleVariantView,
 } from './BaseView.ts';
 import {
-    type OrganismConstants,
-    getAuthorRelatedSequencingEffortsFields,
+    GENPSECTRUM_LOCULUS_HOST_FIELD,
     GENSPECTRUM_LOCULUS_LOCATION_FIELDS,
-    LOCULUS_AUTHORS_FIELD,
+    getAuthorRelatedSequencingEffortsFields,
+    getGenspectrumLoculusFilters,
     LOCULUS_AUTHORS_AFFILIATIONS_FIELD,
+    LOCULUS_AUTHORS_FIELD,
+    type OrganismConstants,
 } from './OrganismConstants.ts';
 import { compareSideBySideViewConstants } from './ViewConstants.ts';
 import type { LineageFilterConfig } from '../components/pageStateSelectors/LineageFilterInput.tsx';
@@ -32,7 +34,20 @@ import { CompareSideBySideStateHandler } from './pageStateHandlers/CompareSideBy
 import type { BaselineFilterConfig } from '../components/pageStateSelectors/BaselineSelector.tsx';
 
 const earliestDate = '1956-01-01';
-const hostField = 'hostNameScientific';
+
+const dateRangeOptions = [
+    dateRangeOptionPresets.lastMonth,
+    dateRangeOptionPresets.last2Months,
+    dateRangeOptionPresets.last3Months,
+    dateRangeOptionPresets.last6Months,
+    dateRangeOptionPresets.lastYear,
+    { label: 'Since 2020', dateFrom: '2020-01-01' },
+    { label: '2010-2019', dateFrom: '2010-01-01', dateTo: '2019-12-31' },
+    { label: '2000-2009', dateFrom: '2000-01-01', dateTo: '2009-12-31' },
+    { label: 'Since 2000', dateFrom: '2000-01-01' },
+    { label: 'Before 2000', dateFrom: earliestDate, dateTo: '1999-12-31' },
+    dateRangeOptionPresets.allTimes,
+];
 
 class RsvAConstants implements OrganismConstants {
     public readonly organism = Organisms.rsvA;
@@ -48,33 +63,12 @@ class RsvAConstants implements OrganismConstants {
     ];
     public readonly useAdvancedQuery = false;
     public readonly baselineFilterConfigs: BaselineFilterConfig[] = [
-        {
-            type: 'date',
-            dateRangeOptions: [
-                dateRangeOptionPresets.lastMonth,
-                dateRangeOptionPresets.last2Months,
-                dateRangeOptionPresets.last3Months,
-                dateRangeOptionPresets.last6Months,
-                dateRangeOptionPresets.lastYear,
-                { label: 'Since 2020', dateFrom: '2020-01-01' },
-                { label: '2010-2019', dateFrom: '2010-01-01', dateTo: '2019-12-31' },
-                { label: '2000-2009', dateFrom: '2000-01-01', dateTo: '2009-12-31' },
-                { label: 'Since 2000', dateFrom: '2000-01-01' },
-                { label: 'Before 2000', dateFrom: earliestDate, dateTo: '1999-12-31' },
-                { label: 'All times', dateFrom: earliestDate },
-            ],
-            earliestDate: '1956-01-01',
-            dateColumn: GENSPECTRUM_LOCULUS_MAIN_FILTER_DATE_COLUMN,
-            label: 'Sample collection date',
-        },
-        {
-            lapisField: hostField,
-            placeholderText: 'Host',
-            type: 'text' as const,
-            label: 'Host',
-        },
+        ...getGenspectrumLoculusFilters({
+            dateRangeOptions,
+            earliestDate,
+        }),
     ];
-    public readonly hostField: string = hostField;
+    public readonly hostField: string = GENPSECTRUM_LOCULUS_HOST_FIELD;
     public readonly authorsField = LOCULUS_AUTHORS_FIELD;
     public readonly authorAffiliationsField = LOCULUS_AUTHORS_AFFILIATIONS_FIELD;
     public readonly additionalFilters: Record<string, string> | undefined;
diff --git a/website/src/views/rsvB.ts b/website/src/views/rsvB.ts
index 7c137340c..fc51ff33f 100644
--- a/website/src/views/rsvB.ts
+++ b/website/src/views/rsvB.ts
@@ -23,6 +23,8 @@ import {
     GENSPECTRUM_LOCULUS_LOCATION_FIELDS,
     LOCULUS_AUTHORS_FIELD,
     LOCULUS_AUTHORS_AFFILIATIONS_FIELD,
+    GENPSECTRUM_LOCULUS_HOST_FIELD,
+    getGenspectrumLoculusFilters,
 } from './OrganismConstants.ts';
 import { compareSideBySideViewConstants } from './ViewConstants.ts';
 import type { LineageFilterConfig } from '../components/pageStateSelectors/LineageFilterInput.tsx';
@@ -32,7 +34,20 @@ import { CompareSideBySideStateHandler } from './pageStateHandlers/CompareSideBy
 import type { BaselineFilterConfig } from '../components/pageStateSelectors/BaselineSelector.tsx';
 
 const earliestDate = '1956-01-01';
-const hostField = 'hostNameScientific';
+
+const dateRangeOptions = [
+    dateRangeOptionPresets.lastMonth,
+    dateRangeOptionPresets.last2Months,
+    dateRangeOptionPresets.last3Months,
+    dateRangeOptionPresets.last6Months,
+    dateRangeOptionPresets.lastYear,
+    { label: 'Since 2020', dateFrom: '2020-01-01' },
+    { label: '2010-2019', dateFrom: '2010-01-01', dateTo: '2019-12-31' },
+    { label: '2000-2009', dateFrom: '2000-01-01', dateTo: '2009-12-31' },
+    { label: 'Since 2000', dateFrom: '2000-01-01' },
+    { label: 'Before 2000', dateFrom: earliestDate, dateTo: '1999-12-31' },
+    dateRangeOptionPresets.allTimes,
+];
 
 class RsvBConstants implements OrganismConstants {
     public readonly organism = Organisms.rsvB;
@@ -48,33 +63,12 @@ class RsvBConstants implements OrganismConstants {
     ];
     public readonly useAdvancedQuery = false;
     public readonly baselineFilterConfigs: BaselineFilterConfig[] = [
-        {
-            type: 'date',
-            dateRangeOptions: [
-                dateRangeOptionPresets.lastMonth,
-                dateRangeOptionPresets.last2Months,
-                dateRangeOptionPresets.last3Months,
-                dateRangeOptionPresets.last6Months,
-                dateRangeOptionPresets.lastYear,
-                { label: 'Since 2020', dateFrom: '2020-01-01' },
-                { label: '2010-2019', dateFrom: '2010-01-01', dateTo: '2019-12-31' },
-                { label: '2000-2009', dateFrom: '2000-01-01', dateTo: '2009-12-31' },
-                { label: 'Since 2000', dateFrom: '2000-01-01' },
-                { label: 'Before 2000', dateFrom: earliestDate, dateTo: '1999-12-31' },
-                { label: 'All times', dateFrom: earliestDate },
-            ],
-            earliestDate: '1956-01-01',
-            dateColumn: GENSPECTRUM_LOCULUS_MAIN_FILTER_DATE_COLUMN,
-            label: 'Sample collection date',
-        },
-        {
-            lapisField: hostField,
-            placeholderText: 'Host',
-            type: 'text' as const,
-            label: 'Host',
-        },
+        ...getGenspectrumLoculusFilters({
+            dateRangeOptions,
+            earliestDate,
+        }),
     ];
-    public readonly hostField: string = hostField;
+    public readonly hostField: string = GENPSECTRUM_LOCULUS_HOST_FIELD;
     public readonly authorsField = LOCULUS_AUTHORS_FIELD;
     public readonly authorAffiliationsField = LOCULUS_AUTHORS_AFFILIATIONS_FIELD;
     public readonly additionalFilters: Record<string, string> | undefined;
diff --git a/website/src/views/victoria.ts b/website/src/views/victoria.ts
index c68095107..cb0ea38cc 100644
--- a/website/src/views/victoria.ts
+++ b/website/src/views/victoria.ts
@@ -18,12 +18,14 @@ import {
     GenericSingleVariantView,
 } from './BaseView.ts';
 import {
-    type OrganismConstants,
-    getAuthorRelatedSequencingEffortsFields,
+    GENPSECTRUM_LOCULUS_HOST_FIELD,
     GENSPECTRUM_LOCULUS_LOCATION_FIELDS,
+    getAuthorRelatedSequencingEffortsFields,
+    getGenspectrumLoculusFilters,
     INFLUENZA_ACCESSION_DOWNLOAD_FIELDS,
-    LOCULUS_AUTHORS_FIELD,
     LOCULUS_AUTHORS_AFFILIATIONS_FIELD,
+    LOCULUS_AUTHORS_FIELD,
+    type OrganismConstants,
 } from './OrganismConstants.ts';
 import { compareSideBySideViewConstants } from './ViewConstants.ts';
 import type { BaselineFilterConfig } from '../components/pageStateSelectors/BaselineSelector.tsx';
@@ -33,7 +35,19 @@ import { type DataOrigin, dataOrigins } from '../types/dataOrigins.ts';
 import { CompareSideBySideStateHandler } from './pageStateHandlers/CompareSideBySidePageStateHandler.ts';
 
 const earliestDate = '1905-01-01';
-const hostField = 'hostNameScientific';
+const dateRangeOptions = [
+    dateRangeOptionPresets.lastMonth,
+    dateRangeOptionPresets.last2Months,
+    dateRangeOptionPresets.last3Months,
+    dateRangeOptionPresets.last6Months,
+    dateRangeOptionPresets.lastYear,
+    { label: 'Since 2020', dateFrom: '2020-01-01' },
+    { label: '2010-2019', dateFrom: '2010-01-01', dateTo: '2019-12-31' },
+    { label: '2000-2009', dateFrom: '2000-01-01', dateTo: '2009-12-31' },
+    { label: 'Since 2000', dateFrom: '2000-01-01' },
+    { label: 'Before 2000', dateFrom: earliestDate, dateTo: '1999-12-31' },
+    dateRangeOptionPresets.allTimes,
+];
 
 class VictoriaConstants implements OrganismConstants {
     public readonly organism = Organisms.victoria;
@@ -54,33 +68,9 @@ class VictoriaConstants implements OrganismConstants {
     ];
     public readonly useAdvancedQuery = false;
     public readonly baselineFilterConfigs: BaselineFilterConfig[] = [
-        {
-            type: 'date',
-            dateRangeOptions: [
-                dateRangeOptionPresets.lastMonth,
-                dateRangeOptionPresets.last2Months,
-                dateRangeOptionPresets.last3Months,
-                dateRangeOptionPresets.last6Months,
-                dateRangeOptionPresets.lastYear,
-                { label: 'Since 2020', dateFrom: '2020-01-01' },
-                { label: '2010-2019', dateFrom: '2010-01-01', dateTo: '2019-12-31' },
-                { label: '2000-2009', dateFrom: '2000-01-01', dateTo: '2009-12-31' },
-                { label: 'Since 2000', dateFrom: '2000-01-01' },
-                { label: 'Before 2000', dateFrom: earliestDate, dateTo: '1999-12-31' },
-                { label: 'All times', dateFrom: this.earliestDate },
-            ],
-            earliestDate,
-            dateColumn: GENSPECTRUM_LOCULUS_MAIN_FILTER_DATE_COLUMN,
-            label: 'Sample collection date',
-        },
-        {
-            lapisField: hostField,
-            placeholderText: 'Host',
-            type: 'text' as const,
-            label: 'Host',
-        },
+        ...getGenspectrumLoculusFilters({ dateRangeOptions, earliestDate }),
     ];
-    public readonly hostField: string = hostField;
+    public readonly hostField: string = GENPSECTRUM_LOCULUS_HOST_FIELD;
     public readonly authorsField = LOCULUS_AUTHORS_FIELD;
     public readonly authorAffiliationsField = LOCULUS_AUTHORS_AFFILIATIONS_FIELD;
     public readonly additionalFilters: Record<string, string> | undefined;
diff --git a/website/src/views/westNile.ts b/website/src/views/westNile.ts
index fb6832724..a62153604 100644
--- a/website/src/views/westNile.ts
+++ b/website/src/views/westNile.ts
@@ -24,6 +24,8 @@ import {
     PATHOPLEXUS_LOCATION_FIELDS,
     LOCULUS_AUTHORS_FIELD,
     LOCULUS_AUTHORS_AFFILIATIONS_FIELD,
+    getPathoplexusFilters,
+    PATHOPLEXUS_HOST_FIELD,
 } from './OrganismConstants.ts';
 import { compareSideBySideViewConstants } from './ViewConstants.ts';
 import type { LineageFilterConfig } from '../components/pageStateSelectors/LineageFilterInput.tsx';
@@ -33,7 +35,6 @@ import { CompareSideBySideStateHandler } from './pageStateHandlers/CompareSideBy
 import type { BaselineFilterConfig } from '../components/pageStateSelectors/BaselineSelector.tsx';
 
 const earliestDate = '1930-01-01';
-const hostField = 'hostNameScientific';
 
 class WestNileConstants implements OrganismConstants {
     public readonly organism = Organisms.westNile;
@@ -48,8 +49,7 @@ class WestNileConstants implements OrganismConstants {
         },
     ];
     public readonly baselineFilterConfigs: BaselineFilterConfig[] = [
-        {
-            type: 'date',
+        ...getPathoplexusFilters({
             dateRangeOptions: [
                 dateRangeOptionPresets.lastMonth,
                 dateRangeOptionPresets.last2Months,
@@ -63,19 +63,17 @@ class WestNileConstants implements OrganismConstants {
                 { label: 'Before 2000', dateTo: '1999-12-31' },
                 dateRangeOptionPresets.allTimes,
             ],
-            earliestDate: '1999-01-01',
-            dateColumn: PATHOPLEXUS_MAIN_FILTER_DATE_COLUMN,
-            label: 'Sample collection date',
-        },
+            earliestDate,
+        }),
         {
-            lapisField: hostField,
-            placeholderText: 'Host',
+            lapisField: 'collectionDevice',
+            placeholderText: 'Collection device',
             type: 'text' as const,
-            label: 'Host',
+            label: 'Collection device',
         },
     ];
     public readonly useAdvancedQuery = false;
-    public readonly hostField: string = hostField;
+    public readonly hostField: string = PATHOPLEXUS_HOST_FIELD;
     public readonly authorsField = LOCULUS_AUTHORS_FIELD;
     public readonly authorAffiliationsField = LOCULUS_AUTHORS_AFFILIATIONS_FIELD;
     public readonly accessionDownloadFields = PATHOPLEXUS_ACCESSION_DOWNLOAD_FIELDS;
diff --git a/website/tests/ViewPage.ts b/website/tests/ViewPage.ts
index 17c1b1367..be146eb78 100644
--- a/website/tests/ViewPage.ts
+++ b/website/tests/ViewPage.ts
@@ -21,6 +21,6 @@ export abstract class ViewPage {
     }
 
     public async selectDateRange(dateRangeOption: string) {
-        await this.page.locator('gs-date-range-filter').getByRole('combobox').selectOption(dateRangeOption);
+        await this.page.locator('gs-date-range-filter').getByRole('combobox').first().selectOption(dateRangeOption);
     }
 }


Reviews:
user: login: fengelniederhammer
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-20T12:03:29Z
user: login: fengelniederhammer
body: I'll have a closer look again tomorrow.
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-20T16:27:59Z
user: login: JonasKellerer
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-21T07:58:40Z
user: login: chaoran-chen
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-21T09:10:04Z
user: login: fengelniederhammer
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-03-21T10:27:50Z
user: login: JonasKellerer
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-24T08:30:25Z
user: login: JonasKellerer
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-24T08:57:43Z

Review comments:
diff_hunk: @@ -127,3 +132,48 @@ export const INFLUENZA_ACCESSION_DOWNLOAD_FIELDS = [
     'insdcAccessionFull_seg7',
     'insdcAccessionFull_seg8',
 ];
+
+export const PATHOPLEXUS_HOST_FIELD = 'hostNameScientific';
+
+export function getPathoplexusFilters({
+    dateRangeOptions,
+    earliestDate,
+}: {
+    dateRangeOptions: DateRangeOption[];
+    earliestDate: string;
+}): BaselineFilterConfig[] {
+    return [
+        {
+            type: 'date',
+            dateRangeOptions,
+            earliestDate,
+            dateColumn: PATHOPLEXUS_MAIN_FILTER_DATE_COLUMN,
+            label: 'Sample collection date',
+        },
+        {
+            lapisField: 'hostNameScientific',
path: website/src/views/OrganismConstants.ts
user: login: fengelniederhammer
body: ```suggestion
            lapisField: PATHOPLEXUS_HOST_FIELD,
```
created_at: 2025-03-20T12:02:11Z
author_association: CONTRIBUTOR
diff_hunk: @@ -92,6 +94,37 @@ class CovidConstants implements OrganismConstants {
             type: 'text' as const,
             label: 'Host',
         },
+        {
+            lapisField: 'samplingStrategy',
+            placeholderText: 'Sampling strategy',
+            type: 'text' as const,
+            label: 'Sampling strategy',
+        },
+        {
+            type: 'date',
+            dateRangeOptions,
+            earliestDate,
+            dateColumn: 'dateSubmitted',
+            label: 'Date submitted',
+        },
+        {
+            lapisField: 'regionExposure',
+            placeholderText: 'Region exposure',
+            type: 'text' as const,
+            label: 'Region exposure',
+        },
+        {
+            lapisField: 'countryExposure',
+            placeholderText: 'Country exposure',
+            type: 'text' as const,
+            label: 'Country exposure',
+        },
+        {
+            lapisField: 'divisionExposure',
+            placeholderText: 'Division exposure',
+            type: 'text' as const,
+            label: 'Division exposure',
+        },
path: website/src/views/covid.ts
user: login: fengelniederhammer
body: What's the difference between the exposures and the normal location? Do we need an explanation somewhere on the website?
created_at: 2025-03-20T15:55:23Z
author_association: CONTRIBUTOR
diff_hunk: @@ -45,6 +45,20 @@ const mainDateFilterColumn = 'date';
 
 const nextcladePangoLineage = 'nextcladePangoLineage';
 
+const dateRangeOptions = [
+    dateRangeOptionPresets.lastMonth,
+    dateRangeOptionPresets.last2Months,
+    dateRangeOptionPresets.last3Months,
+    dateRangeOptionPresets.last6Months,
+    dateRangeOptionPresets.lastYear,
+    { label: '2024', dateFrom: '2024-01-01', dateTo: '2024-12-31' },
+    { label: '2023', dateFrom: '2023-01-02', dateTo: '2023-12-31' },
+    { label: '2022', dateFrom: '2022-01-03', dateTo: '2023-01-01' },
+    { label: '2021', dateFrom: '2021-01-04', dateTo: '2022-01-02' },
+    { label: '2020', dateFrom: earliestDate, dateTo: '2021-01-03' },
+    { label: 'All times', dateFrom: earliestDate },
path: website/src/views/covid.ts
user: login: fengelniederhammer
body: Nitpick:
```suggestion
    dateRangeOptionPresets.allTimes,
```
created_at: 2025-03-20T15:56:18Z
author_association: CONTRIBUTOR
diff_hunk: @@ -34,6 +34,19 @@ import { CompareSideBySideStateHandler } from './pageStateHandlers/CompareSideBy
 
 const earliestDate = '1905-01-01';
 const hostField = 'hostNameScientific';
+const dateRangeOptions = [
+    dateRangeOptionPresets.lastMonth,
+    dateRangeOptionPresets.last2Months,
+    dateRangeOptionPresets.last3Months,
+    dateRangeOptionPresets.last6Months,
+    dateRangeOptionPresets.lastYear,
+    { label: 'Since 2020', dateFrom: '2020-01-01' },
+    { label: '2010-2019', dateFrom: '2010-01-01', dateTo: '2019-12-31' },
+    { label: '2000-2009', dateFrom: '2000-01-01', dateTo: '2009-12-31' },
+    { label: 'Since 2000', dateFrom: '2000-01-01' },
+    { label: 'Before 2000', dateFrom: earliestDate, dateTo: '1999-12-31' },
path: website/src/views/h5n1.ts
user: login: fengelniederhammer
body: Not necessarily now, but I think it would also make sense to extract those custom date ranges to constants in the dashboards. We have repeated them quite a number of times now.
created_at: 2025-03-20T16:00:44Z
author_association: CONTRIBUTOR
diff_hunk: @@ -92,6 +94,37 @@ class CovidConstants implements OrganismConstants {
             type: 'text' as const,
             label: 'Host',
         },
+        {
+            lapisField: 'samplingStrategy',
+            placeholderText: 'Sampling strategy',
+            type: 'text' as const,
+            label: 'Sampling strategy',
+        },
+        {
+            type: 'date',
+            dateRangeOptions,
+            earliestDate,
+            dateColumn: 'dateSubmitted',
+            label: 'Date submitted',
+        },
+        {
+            lapisField: 'regionExposure',
+            placeholderText: 'Region exposure',
+            type: 'text' as const,
+            label: 'Region exposure',
+        },
+        {
+            lapisField: 'countryExposure',
+            placeholderText: 'Country exposure',
+            type: 'text' as const,
+            label: 'Country exposure',
+        },
+        {
+            lapisField: 'divisionExposure',
+            placeholderText: 'Division exposure',
+            type: 'text' as const,
+            label: 'Division exposure',
+        },
path: website/src/views/covid.ts
user: login: JonasKellerer
body: Honestly, I don't know. We could add the option to provide also a little help text. I can imagine, that we have a tooltip attached to the label of the filter. But this would be its own ticket. @chaoran-chen What do you think? Is the name enough, or do we need to provide some explanation?
created_at: 2025-03-21T07:58:40Z
author_association: CONTRIBUTOR
diff_hunk: @@ -92,6 +94,37 @@ class CovidConstants implements OrganismConstants {
             type: 'text' as const,
             label: 'Host',
         },
+        {
+            lapisField: 'samplingStrategy',
+            placeholderText: 'Sampling strategy',
+            type: 'text' as const,
+            label: 'Sampling strategy',
+        },
+        {
+            type: 'date',
+            dateRangeOptions,
+            earliestDate,
+            dateColumn: 'dateSubmitted',
+            label: 'Date submitted',
+        },
+        {
+            lapisField: 'regionExposure',
+            placeholderText: 'Region exposure',
+            type: 'text' as const,
+            label: 'Region exposure',
+        },
+        {
+            lapisField: 'countryExposure',
+            placeholderText: 'Country exposure',
+            type: 'text' as const,
+            label: 'Country exposure',
+        },
+        {
+            lapisField: 'divisionExposure',
+            placeholderText: 'Division exposure',
+            type: 'text' as const,
+            label: 'Division exposure',
+        },
path: website/src/views/covid.ts
user: login: chaoran-chen
body: The normal location is usually the sampling location, which is where a patient does a test. The exposure location is where (we believe) a patient was infected. I think that we don't need to add an explanation at this moment.

created_at: 2025-03-21T09:10:04Z
author_association: MEMBER
diff_hunk: @@ -74,6 +75,13 @@ class H5n1Constants implements OrganismConstants {
             type: 'text' as const,
             label: 'Host',
         },
+        {
+            type: 'date',
+            dateRangeOptions,
+            earliestDate,
+            dateColumn: 'ncbiReleaseDate',
+            label: 'NCBI release date',
+        },
     ];
path: website/src/views/h5n1.ts
user: login: fengelniederhammer
body: How about extracting a `getGenspectrumLoculusFilters(...)`?
created_at: 2025-03-21T10:24:57Z
author_association: CONTRIBUTOR
diff_hunk: @@ -45,6 +45,20 @@ const mainDateFilterColumn = 'date';
 
 const nextcladePangoLineage = 'nextcladePangoLineage';
 
+const dateRangeOptions = [
+    dateRangeOptionPresets.lastMonth,
+    dateRangeOptionPresets.last2Months,
+    dateRangeOptionPresets.last3Months,
+    dateRangeOptionPresets.last6Months,
+    dateRangeOptionPresets.lastYear,
+    { label: '2024', dateFrom: '2024-01-01', dateTo: '2024-12-31' },
+    { label: '2023', dateFrom: '2023-01-02', dateTo: '2023-12-31' },
+    { label: '2022', dateFrom: '2022-01-03', dateTo: '2023-01-01' },
+    { label: '2021', dateFrom: '2021-01-04', dateTo: '2022-01-02' },
+    { label: '2020', dateFrom: earliestDate, dateTo: '2021-01-03' },
+    { label: 'All times', dateFrom: earliestDate },
path: website/src/views/covid.ts
user: login: JonasKellerer
body: I also found this in many other places.
created_at: 2025-03-24T08:30:25Z
author_association: CONTRIBUTOR
diff_hunk: @@ -34,6 +34,19 @@ import { CompareSideBySideStateHandler } from './pageStateHandlers/CompareSideBy
 
 const earliestDate = '1905-01-01';
 const hostField = 'hostNameScientific';
+const dateRangeOptions = [
+    dateRangeOptionPresets.lastMonth,
+    dateRangeOptionPresets.last2Months,
+    dateRangeOptionPresets.last3Months,
+    dateRangeOptionPresets.last6Months,
+    dateRangeOptionPresets.lastYear,
+    { label: 'Since 2020', dateFrom: '2020-01-01' },
+    { label: '2010-2019', dateFrom: '2010-01-01', dateTo: '2019-12-31' },
+    { label: '2000-2009', dateFrom: '2000-01-01', dateTo: '2009-12-31' },
+    { label: 'Since 2000', dateFrom: '2000-01-01' },
+    { label: 'Before 2000', dateFrom: earliestDate, dateTo: '1999-12-31' },
path: website/src/views/h5n1.ts
user: login: JonasKellerer
body: I created #643 to do this.
created_at: 2025-03-24T08:57:43Z
author_association: CONTRIBUTOR

PR comments:
user: login: anna-parker
created_at: 2025-03-20T11:24:27Z
body: This looks good - for covid I see we now have separate fields for each exposure type (division, country, region), however we merged all three in sample location - could we also merge these three types? I find it otherwise confusing why we would have more room for the exposure location than the collection location. 
author_association: CONTRIBUTOR
user: login: JonasKellerer
created_at: 2025-03-21T07:56:27Z
body: > however we merged all three in sample location - could we also merge these three types?

We are currently treating the location filter in a special way (for the sequencing efforts page), so that here can be only one location filter. We could change it, but this would need a new issue, since this is a different change. We could wait with this PR until we have the possiblity to set more location filters. @chaoran-chen What do you think? 
author_association: CONTRIBUTOR
user: login: chaoran-chen
created_at: 2025-03-21T09:11:44Z
body: Merging the fields would be great but can wait until a follow-up PR.
author_association: MEMBER
user: login: JonasKellerer
created_at: 2025-03-24T08:58:10Z
body: There is now #642 to add multiple location filters.
author_association: CONTRIBUTOR