1
0
mirror of https://github.com/checktheroads/hyperglass synced 2024-05-11 05:55:08 +00:00

fix device location/vrf filtering logic

This commit is contained in:
checktheroads
2021-03-03 15:57:47 -07:00
parent c2b8362e5e
commit ee4c653813

View File

@@ -77,7 +77,7 @@ export const LookingGlass: React.FC = () => {
defaultValues: { query_vrf: 'default', query_target: '', query_location: [], query_type: '' },
});
const { handleSubmit, register, setValue } = formInstance;
const { handleSubmit, register, setValue, setError, clearErrors } = formInstance;
const {
queryVrf,
@@ -130,13 +130,16 @@ export const LookingGlass: React.FC = () => {
}
function handleLocChange(locations: string[]): void {
clearErrors('query_location');
const allVrfs = [] as TDeviceVrf[][];
const locationNames = [] as string[];
queryLocation.set(locations);
// Create an array of each device's VRFs.
for (const loc of locations) {
const device = getDevice(loc);
locationNames.push(device.name);
allVrfs.push(device.vrfs);
}
@@ -148,9 +151,15 @@ export const LookingGlass: React.FC = () => {
availVrfs.set(intersecting);
// If there are no intersecting VRFs, use the default VRF.
if (intersecting.filter(i => i._id === queryVrf.value).length === 0) {
queryVrf.set('__hyperglass_default');
// If there is more than one location selected, but there are no intersecting VRFs, show an error.
if (locations.length > 1 && intersecting.length === 0) {
setError('query_location', {
message: `${locationNames.join(', ')} have no VRFs in common.`,
});
}
// If there is only one intersecting VRF, set it as the form value so the user doesn't have to.
else if (intersecting.length === 1) {
queryVrf.set(intersecting[0]._id);
}
// Determine which address families are available in the intersecting VRFs.