mirror of
				https://github.com/blakeblackshear/frigate.git
				synced 2025-10-27 10:52:11 +01:00 
			
		
		
		
	Update UI and then run api call (#10460)
This commit is contained in:
		
							parent
							
								
									61c4ed9f12
								
							
						
					
					
						commit
						8d85a69203
					
				@ -128,6 +128,40 @@ export default function Events() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  // review status
 | 
					  // review status
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const markAllItemsAsReviewed = useCallback(
 | 
				
			||||||
 | 
					    async (currentItems: ReviewSegment[]) => {
 | 
				
			||||||
 | 
					      if (currentItems.length == 0) {
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const severity = currentItems[0].severity;
 | 
				
			||||||
 | 
					      updateSegments(
 | 
				
			||||||
 | 
					        (data: ReviewSegment[] | undefined) => {
 | 
				
			||||||
 | 
					          if (!data) {
 | 
				
			||||||
 | 
					            return data;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          const newData = [...data];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          newData.forEach((seg) => {
 | 
				
			||||||
 | 
					            if (seg.severity == severity) {
 | 
				
			||||||
 | 
					              seg.has_been_reviewed = true;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          return newData;
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        { revalidate: false, populateCache: true },
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      await axios.post(`reviews/viewed`, {
 | 
				
			||||||
 | 
					        ids: currentItems?.map((seg) => seg.id),
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      reloadData();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    [reloadData, updateSegments],
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const markItemAsReviewed = useCallback(
 | 
					  const markItemAsReviewed = useCallback(
 | 
				
			||||||
    async (review: ReviewSegment) => {
 | 
					    async (review: ReviewSegment) => {
 | 
				
			||||||
      const resp = await axios.post(`reviews/viewed`, { ids: [review.id] });
 | 
					      const resp = await axios.post(`reviews/viewed`, { ids: [review.id] });
 | 
				
			||||||
@ -299,6 +333,7 @@ export default function Events() {
 | 
				
			|||||||
        startTime={startTime}
 | 
					        startTime={startTime}
 | 
				
			||||||
        setSeverity={setSeverity}
 | 
					        setSeverity={setSeverity}
 | 
				
			||||||
        markItemAsReviewed={markItemAsReviewed}
 | 
					        markItemAsReviewed={markItemAsReviewed}
 | 
				
			||||||
 | 
					        markAllItemsAsReviewed={markAllItemsAsReviewed}
 | 
				
			||||||
        onOpenReview={setSelectedReviewId}
 | 
					        onOpenReview={setSelectedReviewId}
 | 
				
			||||||
        pullLatestData={reloadData}
 | 
					        pullLatestData={reloadData}
 | 
				
			||||||
        updateFilter={onUpdateFilter}
 | 
					        updateFilter={onUpdateFilter}
 | 
				
			||||||
 | 
				
			|||||||
@ -47,6 +47,7 @@ type EventViewProps = {
 | 
				
			|||||||
  startTime?: number;
 | 
					  startTime?: number;
 | 
				
			||||||
  setSeverity: (severity: ReviewSeverity) => void;
 | 
					  setSeverity: (severity: ReviewSeverity) => void;
 | 
				
			||||||
  markItemAsReviewed: (review: ReviewSegment) => void;
 | 
					  markItemAsReviewed: (review: ReviewSegment) => void;
 | 
				
			||||||
 | 
					  markAllItemsAsReviewed: (currentItems: ReviewSegment[]) => void;
 | 
				
			||||||
  onOpenReview: (reviewId: string) => void;
 | 
					  onOpenReview: (reviewId: string) => void;
 | 
				
			||||||
  pullLatestData: () => void;
 | 
					  pullLatestData: () => void;
 | 
				
			||||||
  updateFilter: (filter: ReviewFilter) => void;
 | 
					  updateFilter: (filter: ReviewFilter) => void;
 | 
				
			||||||
@ -61,6 +62,7 @@ export default function EventView({
 | 
				
			|||||||
  startTime,
 | 
					  startTime,
 | 
				
			||||||
  setSeverity,
 | 
					  setSeverity,
 | 
				
			||||||
  markItemAsReviewed,
 | 
					  markItemAsReviewed,
 | 
				
			||||||
 | 
					  markAllItemsAsReviewed,
 | 
				
			||||||
  onOpenReview,
 | 
					  onOpenReview,
 | 
				
			||||||
  pullLatestData,
 | 
					  pullLatestData,
 | 
				
			||||||
  updateFilter,
 | 
					  updateFilter,
 | 
				
			||||||
@ -265,6 +267,7 @@ export default function EventView({
 | 
				
			|||||||
            filter={filter}
 | 
					            filter={filter}
 | 
				
			||||||
            timeRange={timeRange}
 | 
					            timeRange={timeRange}
 | 
				
			||||||
            markItemAsReviewed={markItemAsReviewed}
 | 
					            markItemAsReviewed={markItemAsReviewed}
 | 
				
			||||||
 | 
					            markAllItemsAsReviewed={markAllItemsAsReviewed}
 | 
				
			||||||
            onSelectReview={onSelectReview}
 | 
					            onSelectReview={onSelectReview}
 | 
				
			||||||
            pullLatestData={pullLatestData}
 | 
					            pullLatestData={pullLatestData}
 | 
				
			||||||
          />
 | 
					          />
 | 
				
			||||||
@ -301,6 +304,7 @@ type DetectionReviewProps = {
 | 
				
			|||||||
  filter?: ReviewFilter;
 | 
					  filter?: ReviewFilter;
 | 
				
			||||||
  timeRange: { before: number; after: number };
 | 
					  timeRange: { before: number; after: number };
 | 
				
			||||||
  markItemAsReviewed: (review: ReviewSegment) => void;
 | 
					  markItemAsReviewed: (review: ReviewSegment) => void;
 | 
				
			||||||
 | 
					  markAllItemsAsReviewed: (currentItems: ReviewSegment[]) => void;
 | 
				
			||||||
  onSelectReview: (id: string, ctrl: boolean) => void;
 | 
					  onSelectReview: (id: string, ctrl: boolean) => void;
 | 
				
			||||||
  pullLatestData: () => void;
 | 
					  pullLatestData: () => void;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@ -314,6 +318,7 @@ function DetectionReview({
 | 
				
			|||||||
  filter,
 | 
					  filter,
 | 
				
			||||||
  timeRange,
 | 
					  timeRange,
 | 
				
			||||||
  markItemAsReviewed,
 | 
					  markItemAsReviewed,
 | 
				
			||||||
 | 
					  markAllItemsAsReviewed,
 | 
				
			||||||
  onSelectReview,
 | 
					  onSelectReview,
 | 
				
			||||||
  pullLatestData,
 | 
					  pullLatestData,
 | 
				
			||||||
}: DetectionReviewProps) {
 | 
					}: DetectionReviewProps) {
 | 
				
			||||||
@ -348,18 +353,6 @@ function DetectionReview({
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  const [hasUpdate, setHasUpdate] = useState(false);
 | 
					  const [hasUpdate, setHasUpdate] = useState(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const markAllReviewed = useCallback(async () => {
 | 
					 | 
				
			||||||
    if (!currentItems) {
 | 
					 | 
				
			||||||
      return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    await axios.post(`reviews/viewed`, {
 | 
					 | 
				
			||||||
      ids: currentItems?.map((seg) => seg.id),
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
    setHasUpdate(false);
 | 
					 | 
				
			||||||
    pullLatestData();
 | 
					 | 
				
			||||||
  }, [currentItems, pullLatestData]);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // timeline interaction
 | 
					  // timeline interaction
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const { alignStartDateToTimeline } = useEventUtils(
 | 
					  const { alignStartDateToTimeline } = useEventUtils(
 | 
				
			||||||
@ -505,7 +498,10 @@ function DetectionReview({
 | 
				
			|||||||
              <Button
 | 
					              <Button
 | 
				
			||||||
                className="text-white"
 | 
					                className="text-white"
 | 
				
			||||||
                variant="select"
 | 
					                variant="select"
 | 
				
			||||||
                onClick={markAllReviewed}
 | 
					                onClick={() => {
 | 
				
			||||||
 | 
					                  setHasUpdate(false);
 | 
				
			||||||
 | 
					                  markAllItemsAsReviewed(currentItems ?? []);
 | 
				
			||||||
 | 
					                }}
 | 
				
			||||||
              >
 | 
					              >
 | 
				
			||||||
                Mark these items as reviewed
 | 
					                Mark these items as reviewed
 | 
				
			||||||
              </Button>
 | 
					              </Button>
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user