mirror of
https://github.com/pointfreeco/swift-composable-architecture.git
synced 2025-12-14 20:35:56 +01:00
* updated binding docs
* adding docs
* clean up
* wip
* wip
* wip
* clean up
* clean up
* clean up
* wip;
* lots of fixes
* update more docs
* fix
* wip
* wip
* Remove ObservationRegistrarWrapper. (#2634)
* Remove ObservationRegistrarWrapper.
* Delete Sources/ComposableArchitecture/Internal/ObservationRegistrarWrapper.swift
---------
Co-authored-by: Stephen Celis <stephen@stephencelis.com>
* more docs
* update docs
* a few more tests
* fix
* wip
* wip
* wip
* Cache data in store collections (#2635)
* fix tutorial highlighting
* wip
* wip
* wip
* wip
* tests for observation of special domain types
* another test
* fix
* wip
* Implement memoization for perception checks (#2630)
* Implement memoization for isInSwiftUIBody
* tidy up
* Perception caching updates (#2649)
* Small updates to perception caching.
* wip
* debug
* some more macro tests
* syncups tutorial beginnings
* wip
* wip
* wip
* wip
* wip
* merge fixes
* wip
* update tests
* fix
* fix
* fix perception checking in store
* rename task local
* delete old test
* deprecate test using old apis
* fix test
* perception tests for store
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* Opt out of key path for Store.ifLet
* sync ups
* lots more sync up tutorial
* more sync ups tutorial
* wip
* wip
* wio
* wip
* wip
* wip
* updated references of 1.6 to 1.7
* wip
* no need to force unwrap here
* fixed crash in ForEach with bindings
* more sync ups tutorial
* more sync ups tutorial
* wip
* more sync ups
* wip
* wip
* Better support for observing copies of values (#2650)
* Explore using _modify
* wip
* wip
* wip
* wip
* wip
* wip
* more tests
* wip
* get another failing test for an edge case
* wip
* tests all passing
* flag for determining when new state was created
* wip
* clean up
* wip
* wip
* wip;
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* New test that currently fails.
* wip
* wip
* Update Sources/ComposableArchitectureMacros/PresentsMacro.swift
* wip
* remove redundant attached member attribute
* storage
* cleanup
* more benchmarks and tests
* wip
* wip
* wip
* wip
* update tests
* wip
* wip
---------
Co-authored-by: Brandon Williams <mbrandonw@hey.com>
* wip
* wip
* wip
* swift-format
* fix
* wip
* wip
* wip
* wip
* Perception
* wip
* wip
* clean up shared state
* fix shared state tests
* wip
* add alert test
* wip
* wip
* wip
* wip
* Use transaction in binding
* wip
* wip
* wip
* wip
* wip
* wip
* uikit
* keep references to controllers when presenting so that we can properly dismiss
* change order of features in shared state demo
* wip
* cleanup
* cleanup
* wip
* wip
* wip
* Fix perception checking for effect actions.
* wip
* wip
* wip
* Fix perception checking for effect actions.
* wip
* wip
* remove sync ups tutorial
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* @Reducer macro will insert protocol requirements if missing
* wip
* fixes
* fix
* wip
* wip
* wip
* docs for observe function for uikit
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* Add cancellation to observation'
* re-record integration test snapshots
* fixed some todos
* update test
* remove 5.9.2 checks
* wip
* wip
* improve docs
* update docs
* updates
* lots of fixes
* more docs
* remove unneeded file;
* wip
* wip
* wip
* update readme and getting started
* wip
* wip
* simplify
* migration stuff
* wip
* Update Models.swift
* wip
* wip
* wip
* Update Bindings.md
* wip
* wip
* wip
* wip
* fix
* wip
* wip
* wip
* wip
* wip
Co-authored-by: Kabir Oberai <oberai.kabir@gmail.com>
* lots of docs and some fixes
* more docs
* more docs
* wip
* upate integration tests to use enum destination macro
* re-org migration guide
* wip
* wip
* docs for other enum reducer macros
* update ephemeral state docs
* wip
* move docs for reducer protocol and macro into single article
* mention observable state
* wip
* updated docs and some macro tests
* wip
* wip
* cleanup
* wip
* wip
* wip
* revert 16
* wip
* clean up
* Revert "clean up"
This reverts commit 49e73081ac.
* Availability fixes
* comment out tests crashing the compiler
* wip
* fix ttt tests
* wip
---------
Co-authored-by: Brandon Williams <mbrandonw@hey.com>
Co-authored-by: Brandon Williams <135203+mbrandonw@users.noreply.github.com>
Co-authored-by: George Scott <gscott@gekkoto.com>
Co-authored-by: Kabir Oberai <oberai.kabir@gmail.com>
62 lines
1.6 KiB
Swift
62 lines
1.6 KiB
Swift
import AppCore
|
|
import AppSwiftUI
|
|
import AppUIKit
|
|
import AuthenticationClientLive
|
|
import ComposableArchitecture
|
|
import SwiftUI
|
|
|
|
private let readMe = """
|
|
This application demonstrates how to build a moderately complex application in the Composable \
|
|
Architecture.
|
|
|
|
It includes a login with two-factor authentication, navigation flows, side effects, game logic, \
|
|
and a full test suite.
|
|
|
|
This application is super-modularized to demonstrate that it's possible. The core business logic \
|
|
for each screen is put into its own module, and each view is put into its own module.
|
|
|
|
Further, the app has been built in both SwiftUI and UIKit to demonstrate how the patterns \
|
|
translate for each platform. The core business logic is only written a single time, and both \
|
|
SwiftUI and UIKit are run from those modules by adapting their domain to the domain that makes \
|
|
most sense for each platform.
|
|
"""
|
|
|
|
enum GameType: Identifiable {
|
|
case swiftui
|
|
case uikit
|
|
var id: Self { self }
|
|
}
|
|
|
|
struct RootView: View {
|
|
let store = Store(initialState: TicTacToe.State.login(.init())) {
|
|
TicTacToe.body._printChanges()
|
|
}
|
|
|
|
@State var showGame: GameType?
|
|
|
|
var body: some View {
|
|
NavigationStack {
|
|
Form {
|
|
Text(readMe)
|
|
|
|
Section {
|
|
Button("SwiftUI version") { showGame = .swiftui }
|
|
Button("UIKit version") { showGame = .uikit }
|
|
}
|
|
}
|
|
.sheet(item: $showGame) { gameType in
|
|
if gameType == .swiftui {
|
|
AppView(store: store)
|
|
} else {
|
|
UIKitAppView(store: store)
|
|
}
|
|
}
|
|
.navigationTitle("Tic-Tac-Toe")
|
|
}
|
|
}
|
|
}
|
|
|
|
#Preview {
|
|
RootView()
|
|
}
|