Minor timeline UX improvements.
This commit is contained in:
@@ -400,7 +400,10 @@ export class FrigateCardTimelineCore extends LitElement {
|
|||||||
!this.view ||
|
!this.view ||
|
||||||
!this.hass ||
|
!this.hass ||
|
||||||
!this.cameraManager ||
|
!this.cameraManager ||
|
||||||
!this.cameraManager
|
!this.cameraManager ||
|
||||||
|
// Skip range changes that do not have hammerjs pan directions associated
|
||||||
|
// with them, as these outliers cause media matching issues below.
|
||||||
|
!properties.event.additionalEvent
|
||||||
) {
|
) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -433,7 +436,7 @@ export class FrigateCardTimelineCore extends LitElement {
|
|||||||
}) // Whether or not to set the timeline window.
|
}) // Whether or not to set the timeline window.
|
||||||
.mergeInContext({
|
.mergeInContext({
|
||||||
...this._generateTimelineContext({ noSetWindow: true }),
|
...this._generateTimelineContext({ noSetWindow: true }),
|
||||||
...(canSeek && { mediaViewer: { seek: targetTime }})
|
...(canSeek && { mediaViewer: { seek: targetTime } }),
|
||||||
})
|
})
|
||||||
.dispatchChangeEvent(this);
|
.dispatchChangeEvent(this);
|
||||||
}
|
}
|
||||||
@@ -521,9 +524,7 @@ export class FrigateCardTimelineCore extends LitElement {
|
|||||||
// Specifically ensure there are _some_ results before dispatching the
|
// Specifically ensure there are _some_ results before dispatching the
|
||||||
// view change.
|
// view change.
|
||||||
if (eventView && results && results.length) {
|
if (eventView && results && results.length) {
|
||||||
eventView.mergeInContext(
|
eventView.mergeInContext({ mediaViewer: { seek: properties.time } });
|
||||||
{mediaViewer: {seek: properties.time}}
|
|
||||||
);
|
|
||||||
view = eventView;
|
view = eventView;
|
||||||
}
|
}
|
||||||
} else if (
|
} else if (
|
||||||
@@ -662,6 +663,15 @@ export class FrigateCardTimelineCore extends LitElement {
|
|||||||
view.queryResults?.selectResultIfFound(
|
view.queryResults?.selectResultIfFound(
|
||||||
(media) => !!this.cameras && media.getID() === options.selectedItem,
|
(media) => !!this.cameras && media.getID() === options.selectedItem,
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
// If not asked to select a new item, persist the currently selected item
|
||||||
|
// if possible.
|
||||||
|
const currentlySelectedResult = this.view.queryResults?.getSelectedResult();
|
||||||
|
if (currentlySelectedResult) {
|
||||||
|
view.queryResults?.selectResultIfFound(
|
||||||
|
(media) => media.getID() === currentlySelectedResult.getID(),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -200,16 +200,15 @@ export const findClosestMediaIndex = (
|
|||||||
}
|
}
|
||||||
| undefined;
|
| undefined;
|
||||||
|
|
||||||
for (let i = 0; i < mediaArray.length; ++i) {
|
for (const [i, media] of mediaArray.entries()) {
|
||||||
const media = mediaArray[i];
|
if (!cameraIDs.has(media.getCameraID())) {
|
||||||
const start = media.getStartTime();
|
|
||||||
const end = media.getEndTime();
|
|
||||||
if (!cameraIDs.has(media.getCameraID()) || !start || !end) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (start <= targetTime && end >= targetTime) {
|
if (media.includesTime(targetTime)) {
|
||||||
if (!refPoint) {
|
const start = media.getStartTime();
|
||||||
|
const end = media.getEndTime();
|
||||||
|
if (!refPoint || !start || !end) {
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
const delta =
|
const delta =
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import add from 'date-fns/add';
|
|||||||
import sub from 'date-fns/sub';
|
import sub from 'date-fns/sub';
|
||||||
import { DataSet } from 'vis-data';
|
import { DataSet } from 'vis-data';
|
||||||
import { IdType, TimelineItem, TimelineWindow } from 'vis-timeline/esnext';
|
import { IdType, TimelineItem, TimelineWindow } from 'vis-timeline/esnext';
|
||||||
import { CameraConfig, ClipsOrSnapshotsOrAll, RecordingSegment } from '../types';
|
import { ClipsOrSnapshotsOrAll, RecordingSegment } from '../types';
|
||||||
import { CameraManager } from '../camera/manager';
|
import { CameraManager } from '../camera/manager';
|
||||||
import { EventQuery } from '../camera/types';
|
import { EventQuery } from '../camera/types';
|
||||||
import { capEndDate, convertRangeToCacheFriendlyTimes } from '../camera/util';
|
import { capEndDate, convertRangeToCacheFriendlyTimes } from '../camera/util';
|
||||||
|
|||||||
Reference in New Issue
Block a user