import { SyncResponse } from "./sync.response"; type SyncStatus = "Started" | "Completed"; type SyncEventArgsBase = { status: T; }; type SyncCompletedEventArgsBase = SyncEventArgsBase<"Completed"> & { successfully: T; }; type SyncSuccessfullyCompletedEventArgs = SyncCompletedEventArgsBase & { data: SyncResponse; }; export type SyncEventArgs = | SyncSuccessfullyCompletedEventArgs | SyncCompletedEventArgsBase | SyncEventArgsBase<"Started">; /** * Helper function to filter only on successfully completed syncs * @returns a function that can be used in a `.pipe(filter(...))` from an observable * @example * ``` * of({ status: "Completed", successfully: true, data: new SyncResponse() }) * .pipe(filter(isSuccessfullyCompleted)) * .subscribe(event => { * console.log(event.data); * }); * ``` */ export function isSuccessfullyCompleted( syncEvent: SyncEventArgs, ): syncEvent is SyncSuccessfullyCompletedEventArgs { return syncEvent.status === "Completed" && syncEvent.successfully; }