Skip to content

Commit

Permalink
type fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
theosanderson committed Jul 11, 2024
1 parent 4eba0bd commit 052caa9
Show file tree
Hide file tree
Showing 5 changed files with 115 additions and 110 deletions.
43 changes: 19 additions & 24 deletions website/src/components/SearchPage/SearchFullUI.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,15 @@ import {
import { type OrderBy } from '../../types/lapis.ts';
import type { ReferenceGenomesSequenceNames } from '../../types/referencesGenomes.ts';
import type { ClientConfig } from '../../types/runtimeConfig.ts';
import {
getFieldValuesFromQuery,
getColumnVisibilitiesFromQuery,
getFieldVisibilitiesFromQuery,
VISIBILITY_PREFIX,
COLUMN_VISIBILITY_PREFIX,
getLapisSearchParameters,
} from '../../utils/search.ts';
import ErrorBox from '../common/ErrorBox.tsx';
import { getFieldValuesFromQuery, getColumnVisibilitiesFromQuery, getFieldVisibilitiesFromQuery, VISIBILITY_PREFIX, COLUMN_VISIBILITY_PREFIX, getLapisSearchParameters } from '../../utils/search.ts';



interface InnerSearchFullUIProps {
accessToken?: string;
Expand Down Expand Up @@ -91,17 +96,12 @@ export const InnerSearchFullUI = ({
const [page, setPage] = useState(1);

const searchVisibilities = useMemo(() => {
return getFieldVisibilitiesFromQuery(schema, state)


}, [schema.metadata, state]);
return getFieldVisibilitiesFromQuery(schema, state);
}, [schema, state]);

const columnVisibilities = useMemo(() => {
return getColumnVisibilitiesFromQuery(schema, state)



}, [schema.metadata, schema.tableColumns, state]);
return getColumnVisibilitiesFromQuery(schema, state);
}, [schema, state]);

const columnsToShow = useMemo(() => {
return schema.metadata
Expand Down Expand Up @@ -130,8 +130,7 @@ export const InnerSearchFullUI = ({
};

const fieldValues = useMemo(() => {
return getFieldValuesFromQuery(state, hiddenFieldValues)

return getFieldValuesFromQuery(state, hiddenFieldValues);
}, [state, hiddenFieldValues]);

const setAFieldValue: SetAFieldValue = (fieldName, value) => {
Expand Down Expand Up @@ -175,8 +174,7 @@ export const InnerSearchFullUI = ({
const detailsHook = hooks.useDetails({}, {});

const lapisSearchParameters = useMemo(() => {
return getLapisSearchParameters(fieldValues, referenceGenomesSequenceNames)

return getLapisSearchParameters(fieldValues, referenceGenomesSequenceNames);
}, [fieldValues, referenceGenomesSequenceNames]);

useEffect(() => {
Expand Down Expand Up @@ -282,14 +280,11 @@ export const InnerSearchFullUI = ({
{(detailsHook.isPaused || aggregatedHook.isPaused) &&
(!detailsHook.isSuccess || !aggregatedHook.isSuccess) && (
<ErrorBox title='Connection problem'>

{

JSON.stringify(detailsHook) !== `{"error":null,"failureCount":0,"failureReason":null,"isPaused":true,"status":"loading","variables":{"versionStatus":"LATEST_VERSION","isRevocation":"false","accession":["s"],"nucleotideMutations":["A23T"],"aminoAcidMutations":[],"nucleotideInsertions":[],"aminoAcidInsertions":[],"fields":["date","country","division","pango_lineage","accessionVersion"],"limit":100,"offset":0,"orderBy":[{"field":"date","type":"descending"}]},"isLoading":true,"isSuccess":false,"isError":false,"isIdle":false}`
? "did not match" : "matched"
}
<p className="text-xs">{JSON.stringify(detailsHook) }</p>

{JSON.stringify(detailsHook) !==
`{"error":null,"failureCount":0,"failureReason":null,"isPaused":true,"status":"loading","variables":{"versionStatus":"LATEST_VERSION","isRevocation":"false","accession":["s"],"nucleotideMutations":["A23T"],"aminoAcidMutations":[],"nucleotideInsertions":[],"aminoAcidInsertions":[],"fields":["date","country","division","pango_lineage","accessionVersion"],"limit":100,"offset":0,"orderBy":[{"field":"date","type":"descending"}]},"isLoading":true,"isSuccess":false,"isError":false,"isIdle":false}`
? 'did not match'
: 'matched'}
<p className='text-xs'>{JSON.stringify(detailsHook)}</p>
</ErrorBox>
)}
{!(totalSequences === undefined && oldCount === null) && (
Expand Down
9 changes: 4 additions & 5 deletions website/src/pages/[organism]/search/index.astro
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ import { getAccessToken } from '../../../utils/getAccessToken';
import { getMyGroups } from '../../../utils/getMyGroups';
import { getReferenceGenomesSequenceNames } from '../../../utils/search';
const HIDDEN_FIELD_VALUES = {
[VERSION_STATUS_FIELD]: siloVersionStatuses.latestVersion,
[IS_REVOCATION_FIELD]: 'false',
}
[VERSION_STATUS_FIELD]: siloVersionStatuses.latestVersion,
[IS_REVOCATION_FIELD]: 'false',
};
const { organism: cleanedOrganism } = cleanOrganism(Astro.params.organism);
Expand All @@ -22,8 +22,7 @@ if (!cleanedOrganism) {
};
}
//const [visibilities, columnVisibilities, fieldValues] = getVisibilitiesAndFieldValuesFromQueryParams()
// const [visibilities, columnVisibilities, fieldValues] = getVisibilitiesAndFieldValuesFromQueryParams()
const clientConfig = getRuntimeConfig().public;
const schema = getSchema(cleanedOrganism.key);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,11 @@ const accessToken = getAccessToken(Astro.locals.session);
const referenceGenomeSequenceNames = getReferenceGenomesSequenceNames(cleanedOrganism.key);
const hiddenFieldValues = {
[VERSION_STATUS_FIELD]: siloVersionStatuses.latestVersion,
[GROUP_ID_FIELD]: group.groupId,
}
[VERSION_STATUS_FIELD]: siloVersionStatuses.latestVersion,
[GROUP_ID_FIELD]: group.groupId,
};
const preloadedData = getPreloadedSearchData(Astro.url.searchParams, hiddenFieldValues, schema, cleanedOrganism.key)
// const preloadedData = getPreloadedSearchData(Astro.url.searchParams, hiddenFieldValues, schema, cleanedOrganism.key)
---

<SubmissionPageWrapper groupsResult={groupsResult} title='Released sequences'>
Expand Down
2 changes: 1 addition & 1 deletion website/src/utils/KeycloakClientManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ export class KeycloakClientManager {
} catch (error: any) {
if (error.code !== 'ECONNREFUSED') {
this.logger.error(`Error discovering keycloak issuer: ${error}`);
//throw error;
// throw error;
}
this.logger.warn(`Connection refused when trying to discover the keycloak issuer at url: ${issuerUrl}`);
}
Expand Down
163 changes: 87 additions & 76 deletions website/src/utils/search.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import type { TableSequenceData } from '../components/SearchPage/Table.tsx';
import { parseMutationString } from '../components/SearchPage/fields/MutationField.tsx';
import { getReferenceGenomes } from '../config.ts';
import type { MetadataFilter } from '../types/config.ts';
import type { ReferenceGenomesSequenceNames, ReferenceAccession, NamedSequence } from '../types/referencesGenomes.ts';


import type { TableSequenceData } from '../components/SearchPage/Table';
import { parseMutationString } from '../components/SearchPage/fields/MutationField';
import { getReferenceGenomes } from '../config';
import type { MetadataFilter, Schema } from '../types/config';
import type { ReferenceGenomesSequenceNames, ReferenceAccession, NamedSequence } from '../types/referencesGenomes';

export const VISIBILITY_PREFIX = 'visibility_';

Expand All @@ -13,14 +11,15 @@ export const COLUMN_VISIBILITY_PREFIX = 'column_';
const ORDER_KEY = 'orderBy';
const ORDER_DIRECTION_KEY = 'order';



export type SearchResponse = {
data: TableSequenceData[];
totalCount: number;
};

export function addHiddenFilters(searchFormFilter: MetadataFilter[], hiddenFilters: MetadataFilter[]) {
export function addHiddenFilters(
searchFormFilter: MetadataFilter[],
hiddenFilters: MetadataFilter[],
): MetadataFilter[] {
const searchFormFilterNames = searchFormFilter.map((filter) => filter.name);
const hiddenFiltersToAdd = hiddenFilters.filter((filter) => !searchFormFilterNames.includes(filter.name));
return [...searchFormFilter, ...hiddenFiltersToAdd];
Expand All @@ -42,51 +41,54 @@ export const getReferenceGenomesSequenceNames = (organism: string): ReferenceGen
};
};

type VisibilityAccessor = (field: MetadataFilter) => boolean;

const getFieldOrColumnVisibilitiesFromQuery = (schema, state, visibilityPrefix, initiallyVisibleAccessor) => {

const getFieldOrColumnVisibilitiesFromQuery = (
schema: Schema,
state: Record<string, string>,
visibilityPrefix: string,
initiallyVisibleAccessor: VisibilityAccessor,
): Map<string, boolean> => {
const visibilities = new Map<string, boolean>();
schema.metadata.forEach((field) => {
if (field.hideOnSequenceDetailsPage === true) {
return;
}
visibilities.set(field.name, initiallyVisibleAccessor(field) === true);
});

const visibilityKeys = Object.keys(state).filter((key) => key.startsWith(visibilityPrefix));

for (const key of visibilityKeys) {
visibilities.set(key.slice(visibilityPrefix.length), state[key] === 'true');
schema.metadata.forEach((field) => {
if (field.hideOnSequenceDetailsPage === true) {
return;
}
return visibilities;
}
visibilities.set(field.name, initiallyVisibleAccessor(field) === true);
});

export const getFieldVisibilitiesFromQuery = (schema, state) => {
const initiallyVisibleAccessor = field => field.initiallyVisible
return getFieldOrColumnVisibilitiesFromQuery(schema, state, VISIBILITY_PREFIX, initiallyVisibleAccessor)
}
const visibilityKeys = Object.keys(state).filter((key) => key.startsWith(visibilityPrefix));

export const getColumnVisibilitiesFromQuery = (schema, state) => {
for (const key of visibilityKeys) {
visibilities.set(key.slice(visibilityPrefix.length), state[key] === 'true');
}
return visibilities;
};

const initiallyVisibleAccessor = field => schema.tableColumns.includes(field.name)
return getFieldOrColumnVisibilitiesFromQuery(schema, state, COLUMN_VISIBILITY_PREFIX, initiallyVisibleAccessor)
}
export const getFieldVisibilitiesFromQuery = (schema: Schema, state: Record<string, string>): Map<string, boolean> => {
const initiallyVisibleAccessor: VisibilityAccessor = (field) => field.initiallyVisible === true;
return getFieldOrColumnVisibilitiesFromQuery(schema, state, VISIBILITY_PREFIX, initiallyVisibleAccessor);
};

export const getColumnVisibilitiesFromQuery = (schema: Schema, state: Record<string, string>): Map<string, boolean> => {
const initiallyVisibleAccessor: VisibilityAccessor = (field) => schema.tableColumns.includes(field.name);
return getFieldOrColumnVisibilitiesFromQuery(schema, state, COLUMN_VISIBILITY_PREFIX, initiallyVisibleAccessor);
};

export const getFieldValuesFromQuery = (state, hiddenFieldValues) => {
export const getFieldValuesFromQuery = (
state: Record<string, string>,
hiddenFieldValues: Record<string, any>,
): Record<string, any> => {
const fieldKeys = Object.keys(state)
.filter((key) => !key.startsWith(VISIBILITY_PREFIX) && !key.startsWith(COLUMN_VISIBILITY_PREFIX))
.filter((key) => key !== ORDER_KEY && key !== ORDER_DIRECTION_KEY);

const values: Record<string, any> = { ...hiddenFieldValues };
for (const key of fieldKeys) {
values[key] = state[key];
}
return values;


}
.filter((key) => !key.startsWith(VISIBILITY_PREFIX) && !key.startsWith(COLUMN_VISIBILITY_PREFIX))
.filter((key) => key !== ORDER_KEY && key !== ORDER_DIRECTION_KEY);

const values: Record<string, any> = { ...hiddenFieldValues };
for (const key of fieldKeys) {
values[key] = state[key];
}
return values;
};

const textAccessionsToList = (text: string): string[] => {
const accessions = text
Expand All @@ -103,39 +105,48 @@ const textAccessionsToList = (text: string): string[] => {
return accessions;
};

export const getLapisSearchParameters = (
fieldValues: Record<string, any>,
referenceGenomesSequenceNames: ReferenceGenomesSequenceNames,
): Record<string, any> => {
const sequenceFilters = Object.fromEntries(
Object.entries(fieldValues).filter(([, value]) => value !== undefined && value !== ''),
);

export const getLapisSearchParameters = (fieldValues, referenceGenomesSequenceNames) =>
{
const sequenceFilters = Object.fromEntries(
Object.entries(fieldValues).filter(([, value]) => value !== undefined && value !== ''),
);
if (sequenceFilters.accession !== '' && sequenceFilters.accession !== undefined) {
sequenceFilters.accession = textAccessionsToList(sequenceFilters.accession);
}

if (sequenceFilters.accession !== '' && sequenceFilters.accession !== undefined) {
sequenceFilters.accession = textAccessionsToList(sequenceFilters.accession);
}
delete sequenceFilters.mutation;

delete sequenceFilters.mutation;

const mutationFilter = parseMutationString(fieldValues.mutation ?? '', referenceGenomesSequenceNames);

return {
...sequenceFilters,
nucleotideMutations: mutationFilter
.filter((m) => m.baseType === 'nucleotide' && m.mutationType === 'substitutionOrDeletion')
.map((m) => m.text),
aminoAcidMutations: mutationFilter
.filter((m) => m.baseType === 'aminoAcid' && m.mutationType === 'substitutionOrDeletion')
.map((m) => m.text),
nucleotideInsertions: mutationFilter
.filter((m) => m.baseType === 'nucleotide' && m.mutationType === 'insertion')
.map((m) => m.text),
aminoAcidInsertions: mutationFilter
.filter((m) => m.baseType === 'aminoAcid' && m.mutationType === 'insertion')
.map((m) => m.text),
};
}
const mutationFilter = parseMutationString(fieldValues.mutation ?? '', referenceGenomesSequenceNames);

export const getPreloadedSearchData = (searchParams, hiddenFieldValues, schema, organismName) =>
{
return {
...sequenceFilters,
nucleotideMutations: mutationFilter
.filter((m) => m.baseType === 'nucleotide' && m.mutationType === 'substitutionOrDeletion')
.map((m) => m.text),
aminoAcidMutations: mutationFilter
.filter((m) => m.baseType === 'aminoAcid' && m.mutationType === 'substitutionOrDeletion')
.map((m) => m.text),
nucleotideInsertions: mutationFilter
.filter((m) => m.baseType === 'nucleotide' && m.mutationType === 'insertion')
.map((m) => m.text),
aminoAcidInsertions: mutationFilter
.filter((m) => m.baseType === 'aminoAcid' && m.mutationType === 'insertion')
.map((m) => m.text),
};
};

/*
export const getPreloadedSearchData = (
searchParams: URLSearchParams,
hiddenFieldValues: Record<string, any>,
schema: Schema,
organismName: string
): Record<string, any> => {
// This function is empty in the original code, so I'm leaving it as is
return {};
};
}
*/

0 comments on commit 052caa9

Please sign in to comment.