Change editing style

release
Laurent 3 years ago
parent 93bd515236
commit ce8426dbf0
  1. 12
      LeCountdown/Views/ContentView.swift
  2. 48
      LeCountdown/Views/DialView.swift

@ -29,6 +29,8 @@ struct ContentView<T : AbstractTimer>: View {
animation: .default) animation: .default)
private var timers: FetchedResults<T> private var timers: FetchedResults<T>
@State private var isEditing: Bool = false
fileprivate let itemSpacing: CGFloat = 10.0 fileprivate let itemSpacing: CGFloat = 10.0
private let columns: [GridItem] = [ private let columns: [GridItem] = [
@ -57,7 +59,7 @@ struct ContentView<T : AbstractTimer>: View {
ReorderableForEach(items: timersArray) { timer in ReorderableForEach(items: timersArray) { timer in
DialView(timer: timer, frameSize: width) .environment(\.managedObjectContext, viewContext) DialView(timer: timer, isEditingBinding: self.$isEditing, frameSize: width) .environment(\.managedObjectContext, viewContext)
.environmentObject(Conductor.maestro) .environmentObject(Conductor.maestro)
.environmentObject(boringContext) .environmentObject(boringContext)
@ -103,7 +105,13 @@ struct ContentView<T : AbstractTimer>: View {
} }
} }
ToolbarItem(placement: .navigationBarLeading) { ToolbarItem(placement: .navigationBarLeading) {
EditButton() Button {
withAnimation {
self.isEditing.toggle()
}
} label: {
Text(self.isEditing ? "Done" : "Edit")
}
} }
} }
.onAppear { .onAppear {

@ -15,40 +15,47 @@ struct DialView: View {
@EnvironmentObject var conductor: Conductor @EnvironmentObject var conductor: Conductor
@State var timer: AbstractTimer @State var timer: AbstractTimer
var isEditingBinding: Binding<Bool>
var frameSize: CGFloat var frameSize: CGFloat
var body: some View { var body: some View {
ZStack(alignment: .topLeading) { ZStack {
Image(timer.imageName).resizable() Image(timer.imageName).resizable()
Button { switch self.isEditingBinding.wrappedValue {
self._launchTimer(timer) case false:
} label: { Button {
self._dialView(timer: timer).padding() self._launchTimer()
}
HStack {
Spacer()
NavigationLink {
self._editView(timer: timer, isPresented: $boringContext.isShowingNewData)
} label: { } label: {
Image(systemName: "gearshape.fill") self._dialView().padding()
.font(.system(size: 24, weight: .light)) }
.padding() case true:
.foregroundColor(Color.white) self._dialView().padding()
VStack {
Spacer()
NavigationLink {
self._editView(timer: timer, isPresented: $boringContext.isShowingNewData)
} label: {
Image(systemName: "gearshape.fill")
.font(.system(size: 50.0))
.padding(30.0)
.foregroundColor(Color.white)
}
} }
} }
} }
.frame(width: frameSize, height: frameSize) .frame(width: frameSize, height: frameSize)
.cornerRadius(40.0) .cornerRadius(40.0)
} }
@ViewBuilder @ViewBuilder
fileprivate func _dialView(timer: AbstractTimer) -> some View { fileprivate func _dialView() -> some View {
Group { Group {
switch timer { switch self.timer {
case let countdown as Countdown: case let countdown as Countdown:
CountdownDialView(countdown: countdown) CountdownDialView(countdown: countdown)
.environmentObject(Conductor.maestro) .environmentObject(Conductor.maestro)
@ -81,9 +88,9 @@ struct DialView: View {
} }
} }
fileprivate func _launchTimer(_ timer: AbstractTimer) { fileprivate func _launchTimer() {
TimerRouter.performAction(timer: timer) { result in TimerRouter.performAction(timer: self.timer) { result in
switch result { switch result {
case .success: case .success:
break break
@ -107,10 +114,9 @@ struct DialView_Previews: PreviewProvider {
DialView( DialView(
timer: Countdown.fake(context: PersistenceController.preview.container.viewContext), timer: Countdown.fake(context: PersistenceController.preview.container.viewContext),
frameSize: 150.0) isEditingBinding: .constant(false), frameSize: 150.0)
.environmentObject(Conductor.maestro) .environmentObject(Conductor.maestro)
.environmentObject(BoringContext()) .environmentObject(BoringContext())
} }
} }

Loading…
Cancel
Save