Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
brentvollebregt committed Mar 13, 2020
2 parents a71e54b + cdc8bf9 commit 1d043df
Show file tree
Hide file tree
Showing 17 changed files with 405 additions and 113 deletions.
4 changes: 2 additions & 2 deletions prettierrc → .prettierrc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"eslintIntegration": true,
"printWidth": 120,
"printWidth": 100,
"trailingComma": "es5",
"endOfLine": "lf",
"endOfLine": "lf"
}
2 changes: 1 addition & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"editor.formatOnSave": true,
"editor.rulers": [120],
"editor.rulers": [100],
"editor.tabSize": 2,
"editor.codeActionsOnSave": {
"source.fixAll.tslint": true
Expand Down
144 changes: 70 additions & 74 deletions webapp/src/api/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
DeviceSummary,
PersonSummary,
Person,
DiscoveryTimes
DiscoveryTimes,
} from "./dto";

const parsePythonTime = (timeString: string) =>
Expand All @@ -25,7 +25,7 @@ export function getScansByFilter(
return fetch(`${Config.api.root}/api/scan`, {
method: "POST",
headers: {
"Content-Type": "application/json"
"Content-Type": "application/json",
},
body: JSON.stringify({
ids,
Expand All @@ -34,8 +34,8 @@ export function getScansByFilter(
deviceIds,
ownerIds,
limit,
page
})
page,
}),
}).then(r => {
if (r.status === 200) {
return r.json().then(payload => {
Expand All @@ -45,7 +45,7 @@ export function getScansByFilter(
network_id: s.network_id,
devices_discovered_count: s.devices_discovered_count,
people_seen_count: s.people_seen_count,
primary_devices_seen_count: s.primary_devices_seen_count
primary_devices_seen_count: s.primary_devices_seen_count,
}));
});
} else {
Expand All @@ -62,7 +62,7 @@ export function getScanById(scanId: number): Promise<Scan | undefined> {
id: payload.id,
scan_time: parsePythonTime(payload.scan_time),
network_id: payload.network_id,
discoveries: payload.discoveries
discoveries: payload.discoveries,
};
});
} else {
Expand All @@ -80,9 +80,9 @@ export function getDevicesByFilter(
return fetch(`${Config.api.root}/api/device`, {
method: "POST",
headers: {
"Content-Type": "application/json"
"Content-Type": "application/json",
},
body: JSON.stringify({ ids, search_query, owner_id, is_primary })
body: JSON.stringify({ ids, search_query, owner_id, is_primary }),
}).then(r => {
if (r.status === 200) {
return r.json().then(payload => {
Expand All @@ -94,7 +94,7 @@ export function getDevicesByFilter(
owner_id: d.owner_id,
is_primary: d.is_primary,
first_seen: parsePythonTime(d.first_seen),
last_seen: parsePythonTime(d.last_seen)
last_seen: parsePythonTime(d.last_seen),
}));
});
} else {
Expand All @@ -116,7 +116,7 @@ export function getDeviceById(deviceId: number): Promise<Device | undefined> {
is_primary: payload.is_primary,
first_seen: parsePythonTime(payload.first_seen),
last_seen: parsePythonTime(payload.last_seen),
last_10_discoveries: payload.last_10_discoveries
last_10_discoveries: payload.last_10_discoveries,
};
});
} else {
Expand All @@ -135,9 +135,9 @@ export function updateDeviceById(
return fetch(`${Config.api.root}/api/device/${deviceId}`, {
method: "POST",
headers: {
"Content-Type": "application/json"
"Content-Type": "application/json",
},
body: JSON.stringify({ name, note, ownerId, isPrimary })
body: JSON.stringify({ name, note, ownerId, isPrimary }),
}).then(r => {
if (r.status === 200) {
return r.json().then(payload => {
Expand All @@ -150,7 +150,7 @@ export function updateDeviceById(
is_primary: payload.is_primary,
first_seen: parsePythonTime(payload.first_seen),
last_seen: parsePythonTime(payload.last_seen),
last_10_discoveries: payload.last_10_discoveries
last_10_discoveries: payload.last_10_discoveries,
};
});
} else {
Expand All @@ -159,16 +159,41 @@ export function updateDeviceById(
});
}

export function getPeopleByFilter(
ids?: number[],
name_partial?: string
): Promise<PersonSummary[]> {
export function mergeDevice(sourceDeviceId: number, destinationDeviceId: number): Promise<Device> {
return fetch(`${Config.api.root}/api/device/${sourceDeviceId}/merge`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ destinationDeviceId }),
}).then(r => {
if (r.status === 200) {
return r.json().then(payload => {
return {
id: payload.id,
mac_address: payload.mac_address,
name: payload.name,
note: payload.note,
owner_id: payload.owner_id,
is_primary: payload.is_primary,
first_seen: parsePythonTime(payload.first_seen),
last_seen: parsePythonTime(payload.last_seen),
last_10_discoveries: payload.last_10_discoveries,
};
});
} else {
throw Error(`Server Error (HTTP${r.status})`);
}
});
}

export function getPeopleByFilter(ids?: number[], name_partial?: string): Promise<PersonSummary[]> {
return fetch(`${Config.api.root}/api/person`, {
method: "POST",
headers: {
"Content-Type": "application/json"
"Content-Type": "application/json",
},
body: JSON.stringify({ ids, name_partial })
body: JSON.stringify({ ids, name_partial }),
}).then(r => {
if (r.status === 200) {
return r.json().then(payload => {
Expand All @@ -177,9 +202,8 @@ export function getPeopleByFilter(
name: p.name,
note: p.note,
device_count: p.device_count,
first_seen:
p.first_seen !== null ? parsePythonTime(p.first_seen) : null,
last_seen: p.first_seen !== null ? parsePythonTime(p.last_seen) : null
first_seen: p.first_seen !== null ? parsePythonTime(p.first_seen) : null,
last_seen: p.first_seen !== null ? parsePythonTime(p.last_seen) : null,
}));
});
} else {
Expand All @@ -192,24 +216,18 @@ export function createPerson(name?: string): Promise<Person | undefined> {
return fetch(`${Config.api.root}/api/person`, {
method: "PUT",
headers: {
"Content-Type": "application/json"
"Content-Type": "application/json",
},
body: JSON.stringify({ name })
body: JSON.stringify({ name }),
}).then(r => {
if (r.status === 200) {
return r.json().then(payload => {
return {
id: payload.id,
name: payload.name,
note: payload.note,
first_seen:
payload.first_seen !== null
? parsePythonTime(payload.first_seen)
: null,
last_seen:
payload.last_seen !== null
? parsePythonTime(payload.last_seen)
: null
first_seen: payload.first_seen !== null ? parsePythonTime(payload.first_seen) : null,
last_seen: payload.last_seen !== null ? parsePythonTime(payload.last_seen) : null,
};
});
} else {
Expand All @@ -226,14 +244,8 @@ export function getPersonById(personId: number): Promise<Person | undefined> {
id: payload.id,
name: payload.name,
note: payload.note,
first_seen:
payload.first_seen !== null
? parsePythonTime(payload.first_seen)
: null,
last_seen:
payload.last_seen !== null
? parsePythonTime(payload.last_seen)
: null
first_seen: payload.first_seen !== null ? parsePythonTime(payload.first_seen) : null,
last_seen: payload.last_seen !== null ? parsePythonTime(payload.last_seen) : null,
};
});
} else {
Expand All @@ -242,32 +254,22 @@ export function getPersonById(personId: number): Promise<Person | undefined> {
});
}

export function updatePersonById(
personId: number,
name: string,
note: string
): Promise<Person> {
export function updatePersonById(personId: number, name: string, note: string): Promise<Person> {
return fetch(`${Config.api.root}/api/person/${personId}`, {
method: "POST",
headers: {
"Content-Type": "application/json"
"Content-Type": "application/json",
},
body: JSON.stringify({ name, note })
body: JSON.stringify({ name, note }),
}).then(r => {
if (r.status === 200) {
return r.json().then(payload => {
return {
id: payload.id,
name: payload.name,
note: payload.note,
first_seen:
payload.first_seen !== null
? parsePythonTime(payload.first_seen)
: null,
last_seen:
payload.last_seen !== null
? parsePythonTime(payload.last_seen)
: null
first_seen: payload.first_seen !== null ? parsePythonTime(payload.first_seen) : null,
last_seen: payload.last_seen !== null ? parsePythonTime(payload.last_seen) : null,
};
});
} else {
Expand All @@ -284,17 +286,15 @@ export function getDeviceDiscoveryTimes(
return fetch(`${Config.api.root}/api/device/discovery-times`, {
method: "POST",
headers: {
"Content-Type": "application/json"
"Content-Type": "application/json",
},
body: JSON.stringify({ ids, startDate, endDate })
body: JSON.stringify({ ids, startDate, endDate }),
}).then(r => {
if (r.status === 200) {
return r.json().then(payload => {
const returnPayload = { ...payload };
Object.keys(returnPayload).forEach((key: string) => {
returnPayload[key] = returnPayload[key].map((d: string) =>
parsePythonTime(d)
);
returnPayload[key] = returnPayload[key].map((d: string) => parsePythonTime(d));
});
return returnPayload as DiscoveryTimes;
});
Expand All @@ -312,17 +312,15 @@ export function getPersonDiscoveryTimes(
return fetch(`${Config.api.root}/api/person/discovery-times`, {
method: "POST",
headers: {
"Content-Type": "application/json"
"Content-Type": "application/json",
},
body: JSON.stringify({ ids, startDate, endDate })
body: JSON.stringify({ ids, startDate, endDate }),
}).then(r => {
if (r.status === 200) {
return r.json().then(payload => {
const returnPayload = { ...payload };
Object.keys(returnPayload).forEach((key: string) => {
returnPayload[key] = returnPayload[key].map((d: string) =>
parsePythonTime(d)
);
returnPayload[key] = returnPayload[key].map((d: string) => parsePythonTime(d));
});
return returnPayload as DiscoveryTimes;
});
Expand All @@ -333,15 +331,13 @@ export function getPersonDiscoveryTimes(
}

export function lookupMacVendor(macAddress: string): Promise<string> {
return fetch(`${Config.api.root}/api/external/mac-lookup/${macAddress}`).then(
async r => {
if (r.status === 200) {
return r.text();
} else {
return "";
}
return fetch(`${Config.api.root}/api/external/mac-lookup/${macAddress}`).then(async r => {
if (r.status === 200) {
return r.text();
} else {
return "";
}
);
});
}

export function runSingleScan(): Promise<Scan | undefined> {
Expand All @@ -352,7 +348,7 @@ export function runSingleScan(): Promise<Scan | undefined> {
id: payload.id,
scan_time: parsePythonTime(payload.scan_time),
network_id: payload.network_id,
discoveries: payload.discoveries
discoveries: payload.discoveries,
};
});
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ import { scaleBand, scaleTime } from "@vx/scale";
import { Circle, Line } from "@vx/shape";
import { localPoint } from "@vx/event";
import { WithTooltipProvidedProps } from "@vx/tooltip/lib/enhancers/withTooltip";
import { EntityIdNameMap } from "./Home";
import { EntityIdNameMap } from "../../pages/Home/Home";

export interface ChartProps {
entityIds: string[];
entityIds: string[]; // Required for ordering; Object.keys(entityIdNameMap) will be out of order
entityDiscoveryTimes: DiscoveryTimes;
entityIdNameMap: EntityIdNameMap;
onEntityClick: (entityId: string) => void;
onEntityLinkClick: (entityId: string) => void;
onEntityClick?: (entityId: string) => void;
onEntityLinkClick?: (entityId: string) => void;
maxDate: DateTime;
minDate: DateTime;
width: number;
Expand Down Expand Up @@ -76,7 +76,7 @@ const Chart: React.FC<ChartProps & WithTooltipProvidedProps<TooltipData>> = ({
},
undefined
);
if (entityId !== undefined) {
if (entityId !== undefined && onEntityClick !== undefined) {
onEntityClick(entityId);
}
};
Expand All @@ -92,7 +92,7 @@ const Chart: React.FC<ChartProps & WithTooltipProvidedProps<TooltipData>> = ({
},
undefined
);
if (entityId !== undefined) {
if (entityId !== undefined && onEntityLinkClick !== undefined) {
onEntityLinkClick(entityId);
}
};
Expand Down Expand Up @@ -173,7 +173,9 @@ const Chart: React.FC<ChartProps & WithTooltipProvidedProps<TooltipData>> = ({
<tspan onClick={onDeviceNameClick(formattedValue)}>
{formattedValue}
</tspan>
<tspan onClick={onDeviceLinkClick(formattedValue)}> 🔗</tspan>
{onEntityLinkClick !== undefined && (
<tspan onClick={onDeviceLinkClick(formattedValue)}> 🔗</tspan>
)}
</text>
)}
/>
Expand Down
Loading

0 comments on commit 1d043df

Please sign in to comment.