lgtm
This commit is contained in:
parent
2efa4d9f47
commit
5e73287eaf
99 changed files with 6392 additions and 1462 deletions
|
|
@ -22,6 +22,13 @@ import {
|
|||
isSpecificCrimeFeatureName,
|
||||
isSpecificCrimeFilterName,
|
||||
} from './crime-filter';
|
||||
import {
|
||||
createCrimeSeverityFilterKey,
|
||||
getCrimeSeverityFeatureName,
|
||||
getCrimeSeverityFilterName,
|
||||
isCrimeSeverityFeatureName,
|
||||
isCrimeSeverityFilterName,
|
||||
} from './crime-severity-filter';
|
||||
import {
|
||||
ELECTION_VOTE_SHARE_FILTER_NAME,
|
||||
createElectionVoteShareFilterKey,
|
||||
|
|
@ -36,6 +43,20 @@ import {
|
|||
isEthnicityFeatureName,
|
||||
isEthnicityFilterName,
|
||||
} from './ethnicity-filter';
|
||||
import {
|
||||
QUALIFICATIONS_FILTER_NAME,
|
||||
createQualificationFilterKey,
|
||||
getQualificationFeatureName,
|
||||
isQualificationFeatureName,
|
||||
isQualificationFilterName,
|
||||
} from './qualification-filter';
|
||||
import {
|
||||
TENURE_FILTER_NAME,
|
||||
createTenureFilterKey,
|
||||
getTenureFeatureName,
|
||||
isTenureFeatureName,
|
||||
isTenureFilterName,
|
||||
} from './tenure-filter';
|
||||
import {
|
||||
POI_DISTANCE_FILTER_NAME,
|
||||
TRANSPORT_DISTANCE_FILTER_NAME,
|
||||
|
|
@ -83,8 +104,11 @@ function parseFilters(params: URLSearchParams): FeatureFilters {
|
|||
const filterParams = params.getAll('filter');
|
||||
const schoolParams = params.getAll('school');
|
||||
const crimeParams = params.getAll('crime');
|
||||
const crimeSeverityParams = params.getAll('crimeSeverity');
|
||||
const voteShareParams = params.getAll('voteShare');
|
||||
const ethnicityParams = params.getAll('ethnicity');
|
||||
const qualificationParams = params.getAll('qualification');
|
||||
const tenureParams = params.getAll('tenure');
|
||||
const amenityDistanceParams = params.getAll('amenityDistance');
|
||||
const transportDistanceParams = params.getAll('transportDistance');
|
||||
const amenityCount2KmParams = params.getAll('amenityCount2km');
|
||||
|
|
@ -93,8 +117,11 @@ function parseFilters(params: URLSearchParams): FeatureFilters {
|
|||
filterParams.length === 0 &&
|
||||
schoolParams.length === 0 &&
|
||||
crimeParams.length === 0 &&
|
||||
crimeSeverityParams.length === 0 &&
|
||||
voteShareParams.length === 0 &&
|
||||
ethnicityParams.length === 0 &&
|
||||
qualificationParams.length === 0 &&
|
||||
tenureParams.length === 0 &&
|
||||
amenityDistanceParams.length === 0 &&
|
||||
transportDistanceParams.length === 0 &&
|
||||
amenityCount2KmParams.length === 0 &&
|
||||
|
|
@ -155,6 +182,19 @@ function parseFilters(params: URLSearchParams): FeatureFilters {
|
|||
filters[createSpecificCrimeFilterKey(featureName, index)] = [min, max];
|
||||
});
|
||||
|
||||
crimeSeverityParams.forEach((entry, index) => {
|
||||
const parts = entry.split(':');
|
||||
if (parts.length < 3) return;
|
||||
const featureName = parts.slice(0, -2).join(':');
|
||||
const min = Number(parts[parts.length - 2]);
|
||||
const max = Number(parts[parts.length - 1]);
|
||||
const filterName = getCrimeSeverityFilterName(featureName);
|
||||
if (!isCrimeSeverityFeatureName(featureName) || !filterName || isNaN(min) || isNaN(max)) {
|
||||
return;
|
||||
}
|
||||
filters[createCrimeSeverityFilterKey(filterName, featureName, index)] = [min, max];
|
||||
});
|
||||
|
||||
voteShareParams.forEach((entry, index) => {
|
||||
const parts = entry.split(':');
|
||||
if (parts.length < 3) return;
|
||||
|
|
@ -179,6 +219,30 @@ function parseFilters(params: URLSearchParams): FeatureFilters {
|
|||
filters[createEthnicityFilterKey(featureName, index)] = [min, max];
|
||||
});
|
||||
|
||||
qualificationParams.forEach((entry, index) => {
|
||||
const parts = entry.split(':');
|
||||
if (parts.length < 3) return;
|
||||
const featureName = parts.slice(0, -2).join(':');
|
||||
const min = Number(parts[parts.length - 2]);
|
||||
const max = Number(parts[parts.length - 1]);
|
||||
if (!isQualificationFeatureName(featureName) || isNaN(min) || isNaN(max)) {
|
||||
return;
|
||||
}
|
||||
filters[createQualificationFilterKey(featureName, index)] = [min, max];
|
||||
});
|
||||
|
||||
tenureParams.forEach((entry, index) => {
|
||||
const parts = entry.split(':');
|
||||
if (parts.length < 3) return;
|
||||
const featureName = parts.slice(0, -2).join(':');
|
||||
const min = Number(parts[parts.length - 2]);
|
||||
const max = Number(parts[parts.length - 1]);
|
||||
if (!isTenureFeatureName(featureName) || isNaN(min) || isNaN(max)) {
|
||||
return;
|
||||
}
|
||||
filters[createTenureFilterKey(featureName, index)] = [min, max];
|
||||
});
|
||||
|
||||
const parsePoiParams = (entries: string[], filterName: PoiFilterName, startIndex: number) => {
|
||||
entries.forEach((entry, index) => {
|
||||
const parts = entry.split(':');
|
||||
|
|
@ -401,6 +465,13 @@ export function stateToParams(
|
|||
continue;
|
||||
}
|
||||
|
||||
const crimeSeverityFeatureName = getCrimeSeverityFeatureName(name);
|
||||
if (crimeSeverityFeatureName && isCrimeSeverityFilterName(name)) {
|
||||
const [min, max] = value as [number, number];
|
||||
params.append('crimeSeverity', `${crimeSeverityFeatureName}:${min}:${max}`);
|
||||
continue;
|
||||
}
|
||||
|
||||
const electionVoteShareFeatureName = getElectionVoteShareFeatureName(name);
|
||||
if (electionVoteShareFeatureName && isElectionVoteShareFilterName(name)) {
|
||||
const [min, max] = value as [number, number];
|
||||
|
|
@ -415,6 +486,20 @@ export function stateToParams(
|
|||
continue;
|
||||
}
|
||||
|
||||
const qualificationFeatureName = getQualificationFeatureName(name);
|
||||
if (qualificationFeatureName && isQualificationFilterName(name)) {
|
||||
const [min, max] = value as [number, number];
|
||||
params.append('qualification', `${qualificationFeatureName}:${min}:${max}`);
|
||||
continue;
|
||||
}
|
||||
|
||||
const tenureFeatureName = getTenureFeatureName(name);
|
||||
if (tenureFeatureName && isTenureFilterName(name)) {
|
||||
const [min, max] = value as [number, number];
|
||||
params.append('tenure', `${tenureFeatureName}:${min}:${max}`);
|
||||
continue;
|
||||
}
|
||||
|
||||
const amenityDistanceFeatureName = getPoiDistanceFeatureName(name);
|
||||
if (amenityDistanceFeatureName && isPoiDistanceFilterName(name)) {
|
||||
const [min, max] = value as [number, number];
|
||||
|
|
@ -522,8 +607,11 @@ export function summarizeParams(queryString: string): string {
|
|||
const filterParams = params.getAll('filter');
|
||||
const schoolParams = params.getAll('school');
|
||||
const crimeParams = params.getAll('crime');
|
||||
const crimeSeverityParams = params.getAll('crimeSeverity');
|
||||
const voteShareParams = params.getAll('voteShare');
|
||||
const ethnicityParams = params.getAll('ethnicity');
|
||||
const qualificationParams = params.getAll('qualification');
|
||||
const tenureParams = params.getAll('tenure');
|
||||
const amenityDistanceParams = params.getAll('amenityDistance');
|
||||
const transportDistanceParams = params.getAll('transportDistance');
|
||||
const amenityCount2KmParams = params.getAll('amenityCount2km');
|
||||
|
|
@ -532,8 +620,11 @@ export function summarizeParams(queryString: string): string {
|
|||
filterParams.length > 0 ||
|
||||
schoolParams.length > 0 ||
|
||||
crimeParams.length > 0 ||
|
||||
crimeSeverityParams.length > 0 ||
|
||||
voteShareParams.length > 0 ||
|
||||
ethnicityParams.length > 0 ||
|
||||
qualificationParams.length > 0 ||
|
||||
tenureParams.length > 0 ||
|
||||
amenityDistanceParams.length > 0 ||
|
||||
transportDistanceParams.length > 0 ||
|
||||
amenityCount2KmParams.length > 0 ||
|
||||
|
|
@ -544,8 +635,11 @@ export function summarizeParams(queryString: string): string {
|
|||
const colonIdx = entry.indexOf(':');
|
||||
const name = colonIdx > 0 ? entry.substring(0, colonIdx) : entry;
|
||||
if (isSpecificCrimeFeatureName(name)) return SPECIFIC_CRIMES_FILTER_NAME;
|
||||
if (isCrimeSeverityFeatureName(name)) return getCrimeSeverityFilterName(name) ?? name;
|
||||
if (isElectionVoteShareFeatureName(name)) return ELECTION_VOTE_SHARE_FILTER_NAME;
|
||||
if (isEthnicityFeatureName(name)) return ETHNICITIES_FILTER_NAME;
|
||||
if (isQualificationFeatureName(name)) return QUALIFICATIONS_FILTER_NAME;
|
||||
if (isTenureFeatureName(name)) return TENURE_FILTER_NAME;
|
||||
const poiFilterName = getPoiFilterName(name);
|
||||
if (poiFilterName) return poiFilterName;
|
||||
return name;
|
||||
|
|
@ -555,12 +649,24 @@ export function summarizeParams(queryString: string): string {
|
|||
for (let i = 0; i < crimeParams.length; i++) {
|
||||
filterNames.push(SPECIFIC_CRIMES_FILTER_NAME);
|
||||
}
|
||||
for (const entry of crimeSeverityParams) {
|
||||
const colonIdx = entry.indexOf(':');
|
||||
const featureName = colonIdx > 0 ? entry.substring(0, colonIdx) : entry;
|
||||
const severityFilterName = getCrimeSeverityFilterName(featureName);
|
||||
if (severityFilterName) filterNames.push(severityFilterName);
|
||||
}
|
||||
for (let i = 0; i < voteShareParams.length; i++) {
|
||||
filterNames.push(ELECTION_VOTE_SHARE_FILTER_NAME);
|
||||
}
|
||||
for (let i = 0; i < ethnicityParams.length; i++) {
|
||||
filterNames.push(ETHNICITIES_FILTER_NAME);
|
||||
}
|
||||
for (let i = 0; i < qualificationParams.length; i++) {
|
||||
filterNames.push(QUALIFICATIONS_FILTER_NAME);
|
||||
}
|
||||
for (let i = 0; i < tenureParams.length; i++) {
|
||||
filterNames.push(TENURE_FILTER_NAME);
|
||||
}
|
||||
for (let i = 0; i < amenityDistanceParams.length; i++) {
|
||||
filterNames.push(POI_DISTANCE_FILTER_NAME);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue