add new buttons

This commit is contained in:
neon443
2025-06-10 15:09:10 +01:00
parent a7e09692f6
commit 5ce48a4bc2
2 changed files with 110 additions and 92 deletions

View File

@@ -36,7 +36,7 @@ struct NearFutureApp: App {
viewModel: viewModel, viewModel: viewModel,
event: Binding( event: Binding(
get: { get: {
viewModel.events.first(where: {$0.id == eventID})! viewModel.events.first(where: {$0.id == eventID}) ?? viewModel.template
}, },
set: { newValue in set: { newValue in
if let eventIndex = viewModel.events.firstIndex(where: { if let eventIndex = viewModel.events.firstIndex(where: {
@@ -49,6 +49,7 @@ struct NearFutureApp: App {
) )
) )
} }
.restorationBehavior(.disabled)
Window("About Near Future", id: "about") { Window("About Near Future", id: "about") {
AboutView() AboutView()

View File

@@ -40,125 +40,142 @@ struct AddEventView: View {
} }
NavigationStack { NavigationStack {
Form { Form {
Section( LazyVStack {
header: Section(
Text("Event Details") header:
.font(.headline) Text("Event Details")
.foregroundColor(.accentColor) .font(.headline)
) { .foregroundColor(.accentColor)
// name & symbol ) {
HStack(spacing: 5) { // name & symbol
Button() { HStack(spacing: 5) {
isSymbolPickerPresented.toggle() Button() {
} label: { isSymbolPickerPresented.toggle()
Image(systemName: eventSymbol) } label: {
.resizable() Image(systemName: eventSymbol)
.scaledToFit() .resizable()
.frame(width: 20, height: 20) .scaledToFit()
.foregroundStyle(eventColor) .frame(width: 20, height: 20)
} .foregroundStyle(eventColor)
.frame(width: 20) }
.buttonStyle(.borderless) .frame(width: 20)
.sheet(isPresented: $isSymbolPickerPresented) { .buttonStyle(.borderless)
SymbolsPicker( .sheet(isPresented: $isSymbolPickerPresented) {
selection: $eventSymbol, SymbolsPicker(
title: "Choose a Symbol", selection: $eventSymbol,
searchLabel: "Search...", title: "Choose a Symbol",
autoDismiss: true) searchLabel: "Search...",
.presentationDetents([.medium]) autoDismiss: true)
.apply { .presentationDetents([.medium])
if #available(iOS 16.4, *) { .apply {
$0.presentationBackground(.ultraThinMaterial) if #available(iOS 16.4, *) {
$0.presentationBackground(.ultraThinMaterial)
}
} }
} }
ColorPicker("", selection: $eventColor, supportsOpacity: false)
.fixedSize()
ZStack {
TextField("Event Name", text: $eventName)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding(.trailing, eventName.isEmpty ? 0 : 30)
.animation(.spring, value: eventName)
.focused($focusedField, equals: Field.Name)
.submitLabel(.next)
.onSubmit {
focusedField = .Notes
}
// MagicClearButton(text: $eventName)
}
} }
ColorPicker("", selection: $eventColor, supportsOpacity: false)
.fixedSize() // dscription
ZStack { ZStack {
TextField("Event Name", text: $eventName) TextField("Event Notes", text: $eventNotes)
.textFieldStyle(RoundedBorderTextFieldStyle()) .textFieldStyle(RoundedBorderTextFieldStyle())
.padding(.trailing, eventName.isEmpty ? 0 : 30) .padding(.trailing, eventNotes.isEmpty ? 0 : 30)
.animation(.spring, value: eventName) .animation(.spring, value: eventNotes)
.focused($focusedField, equals: Field.Name) .focused($focusedField, equals: Field.Notes)
.submitLabel(.next) .submitLabel(.done)
.onSubmit { .onSubmit {
focusedField = .Notes focusedField = nil
} }
// MagicClearButton(text: $eventName) // MagicClearButton(text: $eventNotes)
} }
}
// dscription // date picker
ZStack { HStack {
TextField("Event Notes", text: $eventNotes) Spacer()
.textFieldStyle(RoundedBorderTextFieldStyle()) DatePicker("", selection: $eventDate, displayedComponents: .date)
.padding(.trailing, eventNotes.isEmpty ? 0 : 30) // .datePickerStyle(datepickersty)
.animation(.spring, value: eventNotes) Spacer()
.focused($focusedField, equals: Field.Notes) Button() {
.submitLabel(.done) eventDate = Date()
.onSubmit { } label: {
focusedField = nil Image(systemName: "arrow.uturn.left")
.resizable()
.scaledToFit()
} }
// MagicClearButton(text: $eventNotes) .buttonStyle(BorderlessButtonStyle())
} .frame(width: 20)
// date picker
HStack {
Spacer()
DatePicker("", selection: $eventDate, displayedComponents: .date)
// .datePickerStyle(datepickersty)
Spacer()
Button() {
eventDate = Date()
} label: {
Image(systemName: "arrow.uturn.left")
.resizable()
.scaledToFit()
} }
.buttonStyle(BorderlessButtonStyle())
.frame(width: 20) DatePicker(
} "",
selection: $eventDate,
DatePicker( displayedComponents: .hourAndMinute
"",
selection: $eventDate,
displayedComponents: .hourAndMinute
)
// re-ocurrence Picker
Picker("Recurrence", selection: $eventRecurrence) {
ForEach(Event.RecurrenceType.allCases, id: \.self) { recurrence in
Text(recurrence.rawValue.capitalized)
}
}
.pickerStyle(SegmentedPickerStyle())
Text(
describeOccurrence(
date: eventDate,
recurrence: eventRecurrence
) )
)
// re-ocurrence Picker
Picker("Recurrence", selection: $eventRecurrence) {
ForEach(Event.RecurrenceType.allCases, id: \.self) { recurrence in
Text(recurrence.rawValue.capitalized)
}
}
.pickerStyle(SegmentedPickerStyle())
Text(
describeOccurrence(
date: eventDate,
recurrence: eventRecurrence
)
)
}
} }
} }
.scrollContentBackground(.hidden) .scrollContentBackground(.hidden)
.navigationTitle("\(adding ? "Add Event" : "")") .navigationTitle("\(adding ? "Add Event" : "")")
// .navigationBarTitleDisplayMode(.inline) // .navigationBarTitleDisplayMode(.inline)
.toolbar { .toolbar {
ToolbarItem(/*placement: .topBarLeading*/) { #if canImport(UIKit)
ToolbarItem(placement: .topBarLeading) {
if adding { if adding {
Button() { Button() {
resetAddEventView() resetAddEventView()
dismiss() dismiss()
} label: { } label: {
Image(systemName: "xmark") Image(systemName: "xmark")
.symbolRenderingMode(.hierarchical)
.resizable() .resizable()
.scaledToFit() .scaledToFit()
.frame(width: 30) .frame(width: 30)
} }
} }
} }
#else
ToolbarItem() {
if adding {
Button() {
resetAddEventView()
dismiss()
} label: {
Image(systemName: "xmark")
.resizable()
.scaledToFit()
.frame(width: 30)
}
}
}
#endif
ToolbarItem/*(placement: .topBarTrailing)*/ { ToolbarItem/*(placement: .topBarTrailing)*/ {
if adding { if adding {
Button { Button {