Set stateful button and send correct http command

This commit is contained in:
Nick Mowen 2022-01-13 16:56:55 -07:00
parent 091e363e0c
commit 322677e1e0
2 changed files with 28 additions and 11 deletions

View File

@ -129,12 +129,17 @@ def update_event(id):
jsonify({"success": False, "message": "Event" + id + " not found"}), 404 jsonify({"success": False, "message": "Event" + id + " not found"}), 404
) )
retain = request.form.get('retain') retain = request.form.get("retain")
event.retain_indefinitely = retain
# if retain:
# event.retain_indefinitely = retain
# event.save()
# retain_string = "set as retained" if retain else "set as not retained"
event.retain_indefinitely = True
event.save() event.save()
retain_string = "set as retained" if retain else "set as not retained"
return make_response( return make_response(
jsonify({"success": True, "message": "Event" + id + " " + retain_string}), 200 jsonify({"success": True, "message": "Event" + id + " updated"}), 200
) )
@ -380,7 +385,13 @@ def best(camera_name, label):
box_size = 300 box_size = 300
box = best_object.get("box", (0, 0, box_size, box_size)) box = best_object.get("box", (0, 0, box_size, box_size))
region = calculate_region( region = calculate_region(
best_frame.shape, box[0], box[1], box[2], box[3], box_size, multiplier=1.1 best_frame.shape,
box[0],
box[1],
box[2],
box[3],
box_size,
multiplier=1.1,
) )
best_frame = best_frame[region[1] : region[3], region[0] : region[2]] best_frame = best_frame[region[1] : region[3], region[0] : region[2]]

View File

@ -16,10 +16,10 @@ import VideoPlayer from '../components/VideoPlayer';
import { Table, Thead, Tbody, Th, Tr, Td } from '../components/Table'; import { Table, Thead, Tbody, Th, Tr, Td } from '../components/Table';
import { FetchStatus, useApiHost, useEvent, useDelete, useRetain } from '../api'; import { FetchStatus, useApiHost, useEvent, useDelete, useRetain } from '../api';
const ActionButtonGroup = ({ className, handleClickRetain, handleClickDelete, close }) => ( const ActionButtonGroup = ({ className, handleClickRetain, isRetained, handleClickDelete, close }) => (
<div className={`space-y-2 space-x-2 sm:space-y-0 xs:space-x-4 ${className}`}> <div className={`space-y-2 space-x-2 sm:space-y-0 xs:space-x-4 ${className}`}>
<Button className="xs:w-auto" color="yellow" onClick={handleClickRetain}> <Button className="xs:w-auto" color="yellow" onClick={handleClickRetain}>
<StarRecording className="w-6" /> Retain event <StarRecording className="w-6" /> { isRetained ? "Un-retain event" : "Retain event" }
</Button> </Button>
<Button className="xs:w-auto" color="red" onClick={handleClickDelete}> <Button className="xs:w-auto" color="red" onClick={handleClickDelete}>
<Delete className="w-6" /> Delete event <Delete className="w-6" /> Delete event
@ -58,6 +58,7 @@ export default function Event({ eventId, close, scrollRef }) {
const [showDetails, setShowDetails] = useState(false); const [showDetails, setShowDetails] = useState(false);
const [shouldScroll, setShouldScroll] = useState(true); const [shouldScroll, setShouldScroll] = useState(true);
const [deleteStatus, setDeleteStatus] = useState(FetchStatus.NONE); const [deleteStatus, setDeleteStatus] = useState(FetchStatus.NONE);
const [isRetained, setIsRetained] = useState(false);
const setRetainEvent = useRetain(); const setRetainEvent = useRetain();
const setDeleteEvent = useDelete(); const setDeleteEvent = useDelete();
@ -77,12 +78,16 @@ export default function Event({ eventId, close, scrollRef }) {
}, [data, scrollRef, eventId, shouldScroll]); }, [data, scrollRef, eventId, shouldScroll]);
const handleClickRetain = useCallback(async () => { const handleClickRetain = useCallback(async () => {
console.log("handleClickRetain go go go");
let success; let success;
try { try {
success = await setRetainEvent(eventId); success = await setRetainEvent(eventId);
setRetainStatus(success ? FetchStatus.LOADED : FetchStatus.ERROR);
if (success) {
setIsRetained(!isRetained);
}
} catch (e) { } catch (e) {
setRetainStatus(FetchStatus.ERROR);
} }
}, [eventId, setRetainEvent]); }, [eventId, setRetainEvent]);
@ -113,6 +118,7 @@ export default function Event({ eventId, close, scrollRef }) {
return <ActivityIndicator />; return <ActivityIndicator />;
} }
setIsRetained(data.retain_indefinitely);
const startime = new Date(data.start_time * 1000); const startime = new Date(data.start_time * 1000);
const endtime = data.end_time ? new Date(data.end_time * 1000) : null; const endtime = data.end_time ? new Date(data.end_time * 1000) : null;
return ( return (
@ -134,7 +140,7 @@ export default function Event({ eventId, close, scrollRef }) {
)} )}
</Button> </Button>
</div> </div>
<ActionButtonGroup handleClickDelete={handleClickDelete} close={close} className="hidden sm:block" /> <ActionButtonGroup isRetained={isRetained} handleClickRetain={handleClickRetain} handleClickDelete={handleClickDelete} close={close} className="hidden sm:block" />
{showDialog ? ( {showDialog ? (
<Dialog <Dialog
onDismiss={handleDismissDeleteDialog} onDismiss={handleDismissDeleteDialog}
@ -225,7 +231,7 @@ export default function Event({ eventId, close, scrollRef }) {
</div> </div>
<div className="space-y-2 xs:space-y-0"> <div className="space-y-2 xs:space-y-0">
<DownloadButtonGroup apiHost={apiHost} eventId={eventId} className="block sm:hidden" /> <DownloadButtonGroup apiHost={apiHost} eventId={eventId} className="block sm:hidden" />
<ActionButtonGroup handleClickDelete={handleClickDelete} close={close} className="block sm:hidden" /> <ActionButtonGroup handleClickRetain={handleClickRetain} handleClickDelete={handleClickDelete} close={close} className="block sm:hidden" />
</div> </div>
</div> </div>
); );