From fa5f782968ebe82c45268c7ff6f18f2c59d6f2ad Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Tue, 21 Jan 2025 13:21:20 -0600 Subject: [PATCH] updated animation Signed-off-by: Matt Bruce --- .../EmployeesViewController.swift | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/EmployeeDirectory/ViewControllers/EmployeesViewController.swift b/EmployeeDirectory/ViewControllers/EmployeesViewController.swift index cf0026a..56baaed 100644 --- a/EmployeeDirectory/ViewControllers/EmployeesViewController.swift +++ b/EmployeeDirectory/ViewControllers/EmployeesViewController.swift @@ -109,9 +109,14 @@ class EmployeesViewController: UIViewController { private func bindViewModel() { viewModel.$employees .receive(on: RunLoop.main) - .sink { [weak self] _ in - self?.updateFooter() - self?.tableView.reloadData() + .sink { [weak self] newEmployees in + guard let self = self else { return } + + let oldEmployees = self.viewModel.oldEmployees // Keep track of the previous state + self.animateEmployeeChanges(from: oldEmployees, to: newEmployees) + + // Update footer and other UI elements as needed + self.updateFooter() } .store(in: &cancellables) @@ -135,6 +140,26 @@ class EmployeesViewController: UIViewController { .store(in: &cancellables) } + private func animateEmployeeChanges(from oldEmployees: [Employee], to newEmployees: [Employee]) { + let oldCount = oldEmployees.count + let newCount = newEmployees.count + + // Case: Removing all employees + if oldCount > 0 && newCount == 0 { + let indexPaths = (0.. 0 { + tableView.reloadData() + return + } + } + /// Show state in specific use-cases for the EmployeesViewModel private func updateFooter() { var footerMessage: String?