search by name
This commit is contained in:
parent
fd46b9c42c
commit
e728c1511d
@ -27,7 +27,7 @@ public static class SolicitorsEndpoints
|
|||||||
IFilter<Solicitor>? filter = null;
|
IFilter<Solicitor>? filter = null;
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(nameFilter))
|
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)
|
if (cities is not null && cities.Length > 0)
|
||||||
filter = new WrapperFilter<Solicitor>(filter, solicitor => cities.Any(city => solicitor.Cities.Any(solCity => solCity.Name == city)));
|
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() {
|
export default function Results() {
|
||||||
const [results, setResults] = useState<ResultsType>(waitingResults);
|
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(() => {
|
useEffect(() => {
|
||||||
if (results.type == 'Waiting') {
|
if (results.type == 'Waiting') {
|
||||||
GetSolicitors(filters)
|
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 getCities from "../functions/getCities";
|
||||||
import FilterState from "../models/filterState";
|
import FilterState from "../models/filterState";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import NumberField from "./numberField";
|
import NumberField from "./numberField";
|
||||||
import getRatingsProviders from "../functions/getRatingsProviders";
|
import getRatingsProviders from "../functions/getRatingsProviders";
|
||||||
import capitaliseFirstLetter from "../functions/capitaliseFirstLetter";
|
import capitaliseFirstLetter from "../functions/capitaliseFirstLetter";
|
||||||
|
import CheckIcon from '@mui/icons-material/Check';
|
||||||
|
import ClearIcon from '@mui/icons-material/Clear';
|
||||||
|
|
||||||
interface SidebarProps {
|
interface SidebarProps {
|
||||||
filters : FilterState;
|
filters : FilterState;
|
||||||
@ -32,6 +34,32 @@ export default function Sidebar(props : SidebarProps) {
|
|||||||
<Box sx={{p: 2}}>
|
<Box sx={{p: 2}}>
|
||||||
<Typography variant='h5' component='h2'>Filter Conveyancers</Typography>
|
<Typography variant='h5' component='h2'>Filter Conveyancers</Typography>
|
||||||
</Box>
|
</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}}>
|
<Box sx={{ p: 2}}>
|
||||||
<Typography component='legend'>Cities</Typography>
|
<Typography component='legend'>Cities</Typography>
|
||||||
<Autocomplete
|
<Autocomplete
|
||||||
|
|||||||
@ -13,9 +13,15 @@ export default async function GetSolicitors(filters : FilterState) {
|
|||||||
if (filters.cities.length > 0) {
|
if (filters.cities.length > 0) {
|
||||||
queryString += '&cities=' + filters.cities.join('&cities=');
|
queryString += '&cities=' + filters.cities.join('&cities=');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filters.sortBy != null) {
|
if (filters.sortBy != null) {
|
||||||
queryString += `&orderingType=${filters.sortBy}`;
|
queryString += `&orderingType=${filters.sortBy}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (filters.namePart != null && filters.namePart !== '') {
|
||||||
|
queryString += `&nameFilter=${filters.namePart}`;
|
||||||
|
}
|
||||||
|
|
||||||
const response = await api.get(`/solicitors?${queryString}`);
|
const response = await api.get(`/solicitors?${queryString}`);
|
||||||
return response.data as PaginationResponse<SolicitorSummary>;
|
return response.data as PaginationResponse<SolicitorSummary>;
|
||||||
}
|
}
|
||||||
@ -5,4 +5,6 @@ export default interface FilterState {
|
|||||||
currentPage : number;
|
currentPage : number;
|
||||||
ratingsProvider : string;
|
ratingsProvider : string;
|
||||||
sortBy : string;
|
sortBy : string;
|
||||||
|
namePart : string;
|
||||||
|
nameOnly : boolean;
|
||||||
};
|
};
|
||||||
Loading…
x
Reference in New Issue
Block a user