import { View } from "./view"; import { ViewSlot } from "./view-slot"; function remove(viewSlot: ViewSlot, previous: View) { return Array.isArray(previous) ? viewSlot.removeMany(previous, true) : viewSlot.remove(previous, true); } export const SwapStrategies = { // animate the next view in before removing the current view; before(viewSlot: ViewSlot, previous: View, callback) { return (previous === undefined) ? callback() : callback().then(() => remove(viewSlot, previous)); }, // animate the next view at the same time the current view is removed with(viewSlot: ViewSlot, previous: View, callback) { return (previous === undefined) ? callback() : Promise.all([remove(viewSlot, previous), callback()]); }, // animate the next view in after the current view has been removed after(viewSlot: ViewSlot, previous: View, callback) { return Promise.resolve(viewSlot.removeAll(true)).then(callback); } };