Skip to content

Latest commit

 

History

History
78 lines (59 loc) · 1.61 KB

README.md

File metadata and controls

78 lines (59 loc) · 1.61 KB

BusyIndicator

BusyIndicator is a lightweight service implementation for SwiftUI that allows you to register any view and set it as busy.

Installation

You can install this package using Swift Package Manager. Add the following dependency to your Package.swift file:

.package(url: "https://github.com/jasonjrr/BusyIndicator.git", from: "1.0.0")

Then add the package as a dependency for your target:

.target(
    name: "YourTarget",
    dependencies: [
        "BusyIndicator",
    ]
),

Usage

First you need to add the BusyIndicator to your SwiftUI environment:

import SwiftUI
import BusyIndicator

// Add this to your favorite dependency injection container or pattern.
private let busyIndicatorService: BusyIndicatorServiceProtocol = BusyIndicatorService()

@main
struct SwiftUIApp: App {
  var body: some Scene {
    WindowGroup {
      AppRootView()
        .busyIndicator(busyIndicatorService.busyIndicator)
    }
  }
}

Then just add the busyOverlay modifier to any SwiftUI View:

import BusyIndicator

// ...

Button {
  // action code goes here
} label: {
  Text("Action")
}
.busyOverlay()
.clipShape(RoundedRectangle(cornerRadius: 16.0, style: .continuous))

Finally, trigger the BusyIndicator through the BusyIndicatorService:

import BusyIndicator

// ...

private let busyService: BusyIndicatorServiceProtocol

// ...

func doSomethingAsynchronous() async {
  let busySubject = busyService.enqueue()
  await someAsyncTask()
  busySubject.dequeue()
}

License

This project is licensed under the [License Name] - see the LICENSE.md file for details.