// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
 * Take the set of active notifications, and filter to only those that are newer than previously dismissed notifications or have never been dismissed.
 *
 * @private
 */
export const filterLatestNotifications = (activeNotifications, trackedNotifications) => {
    const filteredNotifications = activeNotifications.filter(activeNotification => {
        const trackedNotification = trackedNotifications[activeNotification.type];
        return !trackedNotification || !trackedNotification.lastDismissedAt || trackedNotification.lastDismissedAt < trackedNotification.mostRecentlyActive;
    });
    return filteredNotifications;
};
/**
 * Maintain a record of the most recently active notification for each notification type.
 *
 * @private
 */
export const updateTrackedNotificationsWithActiveNotifications = (existingTrackedNotifications, activeNotifications) => {
    var _a, _b;
    const trackedNotifications = {};
    // Only care about active notifications. If notifications are no longer active we do not track that they have been previously dismissed.
    for (const activeNotification of activeNotifications) {
        const existingTrackedNotification = existingTrackedNotifications[activeNotification.type];
        trackedNotifications[activeNotification.type] = {
            mostRecentlyActive: (_b = (_a = activeNotification.timestamp) !== null && _a !== void 0 ? _a : existingTrackedNotification === null || existingTrackedNotification === void 0 ? void 0 : existingTrackedNotification.mostRecentlyActive) !== null && _b !== void 0 ? _b : new Date(Date.now()),
            lastDismissedAt: existingTrackedNotification === null || existingTrackedNotification === void 0 ? void 0 : existingTrackedNotification.lastDismissedAt
        };
    }
    return trackedNotifications;
};
/**
 * Create a record for when the notification was most recently dismissed for tracking dismissed notifications.
 *
 * @private
 */
export const trackNotificationAsDismissed = (notificationType, trackedNotifications) => {
    const now = new Date(Date.now());
    const existingNotification = trackedNotifications[notificationType];
    return Object.assign(Object.assign({}, trackedNotifications), { [notificationType]: Object.assign(Object.assign({}, (existingNotification || {})), { lastDismissedAt: now }) });
};
//# sourceMappingURL=TrackErrors.js.map