search by name
This commit is contained in:
parent
fd46b9c42c
commit
e728c1511d
@ -27,7 +27,7 @@ public static class SolicitorsEndpoints
|
||||
IFilter<Solicitor>? filter = null;
|
||||
|
||||
if (!string.IsNullOrEmpty(nameFilter))
|
||||
filter = new WrapperFilter<Solicitor>(filter, solicitor => solicitor.Name.Contains(nameFilter));
|
||||
filter = new WrapperFilter<Solicitor>(filter, solicitor => solicitor.Name.Contains(nameFilter, StringComparison.CurrentCultureIgnoreCase));
|
||||
|
||||
if (cities is not null && cities.Length > 0)
|
||||
filter = new WrapperFilter<Solicitor>(filter, solicitor => cities.Any(city => solicitor.Cities.Any(solCity => solCity.Name == city)));
|
||||
|
||||
@ -8,7 +8,16 @@ import ResultsList from "./resultsList";
|
||||
|
||||
export default function Results() {
|
||||
const [results, setResults] = useState<ResultsType>(waitingResults);
|
||||
const [filters, setFilters] = useState<FilterState>({cities: [], minRating: 3, resultsPerPage: 20, currentPage: 1, ratingsProvider: 'Solicitors.com', sortBy: 'RatingDescending'});
|
||||
const [filters, setFilters] = useState<FilterState>({
|
||||
cities: [],
|
||||
minRating: 3,
|
||||
resultsPerPage: 20,
|
||||
currentPage: 1,
|
||||
ratingsProvider: 'Solicitors.com',
|
||||
sortBy: 'RatingDescending',
|
||||
namePart: '',
|
||||
nameOnly: false});
|
||||
|
||||
useEffect(() => {
|
||||
if (results.type == 'Waiting') {
|
||||
GetSolicitors(filters)
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
import { Autocomplete, Box, Divider, Grid, InputLabel, MenuItem, Paper, Rating, Select, SelectChangeEvent, TextField, Typography } from "@mui/material";
|
||||
import { Autocomplete, Box, Divider, Grid, InputLabel, MenuItem, Paper, Rating, Select, SelectChangeEvent, TextField, ToggleButton, Typography } from "@mui/material";
|
||||
import getCities from "../functions/getCities";
|
||||
import FilterState from "../models/filterState";
|
||||
import { useEffect, useState } from "react";
|
||||
import NumberField from "./numberField";
|
||||
import getRatingsProviders from "../functions/getRatingsProviders";
|
||||
import capitaliseFirstLetter from "../functions/capitaliseFirstLetter";
|
||||
import CheckIcon from '@mui/icons-material/Check';
|
||||
import ClearIcon from '@mui/icons-material/Clear';
|
||||
|
||||
interface SidebarProps {
|
||||
filters : FilterState;
|
||||
@ -32,6 +34,32 @@ export default function Sidebar(props : SidebarProps) {
|
||||
<Box sx={{p: 2}}>
|
||||
<Typography variant='h5' component='h2'>Filter Conveyancers</Typography>
|
||||
</Box>
|
||||
<Box sx={{ p: 2}}>
|
||||
<Grid container spacing={1} sx={{width: '100%'}}>
|
||||
<Grid size={6}>
|
||||
<Typography component='legend'>Firm Name</Typography>
|
||||
<TextField
|
||||
label='Firm Name'
|
||||
variant='standard'
|
||||
value={props.filters.namePart}
|
||||
onChange={e => props.onChange(Object.assign({}, {...props.filters}, {namePart: (e.target as any).value}))}
|
||||
/>
|
||||
</Grid>
|
||||
<Grid size={6}>
|
||||
<Typography component='legend'>Search by Name Only</Typography>
|
||||
<ToggleButton
|
||||
value="check"
|
||||
selected={props.filters.nameOnly}
|
||||
onChange={() => props.onChange(Object.assign({}, {...props.filters}, {nameOnly: !props.filters.nameOnly}))}
|
||||
>
|
||||
{props.filters.nameOnly
|
||||
? <CheckIcon color='success' />
|
||||
: <ClearIcon color='error' />}
|
||||
</ToggleButton>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Box>
|
||||
<Divider />
|
||||
<Box sx={{ p: 2}}>
|
||||
<Typography component='legend'>Cities</Typography>
|
||||
<Autocomplete
|
||||
|
||||
@ -13,9 +13,15 @@ export default async function GetSolicitors(filters : FilterState) {
|
||||
if (filters.cities.length > 0) {
|
||||
queryString += '&cities=' + filters.cities.join('&cities=');
|
||||
}
|
||||
|
||||
if (filters.sortBy != null) {
|
||||
queryString += `&orderingType=${filters.sortBy}`;
|
||||
}
|
||||
|
||||
if (filters.namePart != null && filters.namePart !== '') {
|
||||
queryString += `&nameFilter=${filters.namePart}`;
|
||||
}
|
||||
|
||||
const response = await api.get(`/solicitors?${queryString}`);
|
||||
return response.data as PaginationResponse<SolicitorSummary>;
|
||||
}
|
||||
@ -5,4 +5,6 @@ export default interface FilterState {
|
||||
currentPage : number;
|
||||
ratingsProvider : string;
|
||||
sortBy : string;
|
||||
namePart : string;
|
||||
nameOnly : boolean;
|
||||
};
|
||||
Loading…
x
Reference in New Issue
Block a user