Compare commits

...
2 Commits
Author SHA1 Message Date
james 336fb95b07 fix: restore multiline template editors 2026-07-15 23:45:54 +02:00
james c7e29828b4 fix: prevent duplicate template editor navigation 2026-07-15 23:36:33 +02:00
3 changed files with 53 additions and 18 deletions
+4 -4
View File
@@ -276,7 +276,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 16;
CURRENT_PROJECT_VERSION = 18;
DEVELOPMENT_ASSET_PATHS = "\"meetingnotes/Preview Content\"";
DEVELOPMENT_TEAM = G9LVHZAJNX;
ENABLE_HARDENED_RUNTIME = YES;
@@ -290,7 +290,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 15.0;
MARKETING_VERSION = 1.1.4;
MARKETING_VERSION = 1.1.6;
ONLY_ACTIVE_ARCH = NO;
OTHER_SWIFT_FLAGS = "$(inherited) -D ENABLE_TCC_SPI";
PRODUCT_BUNDLE_IDENTIFIER = net.jamesbone.meetingnotes;
@@ -312,7 +312,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 16;
CURRENT_PROJECT_VERSION = 18;
DEVELOPMENT_ASSET_PATHS = "\"meetingnotes/Preview Content\"";
DEVELOPMENT_TEAM = G9LVHZAJNX;
ENABLE_HARDENED_RUNTIME = YES;
@@ -326,7 +326,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 15.0;
MARKETING_VERSION = 1.1.4;
MARKETING_VERSION = 1.1.6;
ONLY_ACTIVE_ARCH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D ENABLE_TCC_SPI";
PRODUCT_BUNDLE_IDENTIFIER = net.jamesbone.meetingnotes;
+28 -7
View File
@@ -33,9 +33,16 @@ struct TemplateEditView: View {
.font(.caption)
.foregroundColor(.secondary)
TextField("Meeting Context", text: $template.context, axis: .vertical)
.textFieldStyle(.roundedBorder)
.lineLimit(4...10)
TextEditor(text: $template.context)
.scrollContentBackground(.hidden)
.padding(8)
.frame(height: 140)
.background(Color.secondary.opacity(0.06))
.overlay {
RoundedRectangle(cornerRadius: 6)
.stroke(Color.secondary.opacity(0.25), lineWidth: 1)
}
.clipShape(RoundedRectangle(cornerRadius: 6))
}
// Sections
@@ -75,9 +82,16 @@ struct TemplateEditView: View {
TextField("Section Title", text: $section.title)
.textFieldStyle(.roundedBorder)
TextField("Section Description", text: $section.description, axis: .vertical)
.textFieldStyle(.roundedBorder)
.lineLimit(3...8)
TextEditor(text: $section.description)
.scrollContentBackground(.hidden)
.padding(8)
.frame(height: 90)
.background(Color.secondary.opacity(0.06))
.overlay {
RoundedRectangle(cornerRadius: 6)
.stroke(Color.secondary.opacity(0.25), lineWidth: 1)
}
.clipShape(RoundedRectangle(cornerRadius: 6))
}
Button {
@@ -113,12 +127,19 @@ struct TemplateEditView: View {
}
.buttonStyle(.plain)
.padding(.top)
.disabled(template.title.isEmpty || template.sections.isEmpty)
.disabled(!canSave)
}
.padding(24)
}
.navigationTitle("Edit Template")
}
private var canSave: Bool {
let hasTitle = !template.title.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
let hasInstructions = !template.context.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
|| !template.sections.isEmpty
return hasTitle && hasInstructions
}
}
#Preview {
+21 -7
View File
@@ -2,15 +2,15 @@ import SwiftUI
struct TemplateListView: View {
@StateObject private var viewModel = TemplatesViewModel()
@Environment(\.dismiss) private var dismiss
@State private var editingTemplate: NoteTemplate?
var body: some View {
List {
ForEach(viewModel.templates) { template in
HStack {
NavigationLink(destination: TemplateEditView(template: template) { updatedTemplate in
viewModel.saveTemplate(updatedTemplate)
}) {
Button {
presentEditor(for: template)
} label: {
VStack(alignment: .leading, spacing: 4) {
HStack {
Text(template.title)
@@ -36,6 +36,7 @@ struct TemplateListView: View {
}
.padding(.vertical, 4)
}
.buttonStyle(.plain)
Spacer()
@@ -87,9 +88,9 @@ struct TemplateListView: View {
.navigationTitle("Note Templates")
.toolbar {
ToolbarItem(placement: .primaryAction) {
NavigationLink(destination: TemplateEditView(template: viewModel.createNewTemplate()) { updatedTemplate in
viewModel.saveTemplate(updatedTemplate)
}) {
Button {
presentEditor(for: viewModel.createNewTemplate())
} label: {
Image(systemName: "plus")
}
}
@@ -106,6 +107,19 @@ struct TemplateListView: View {
} message: {
Text(viewModel.errorMessage ?? "")
}
.sheet(item: $editingTemplate) { template in
NavigationStack {
TemplateEditView(template: template) { updatedTemplate in
viewModel.saveTemplate(updatedTemplate)
}
}
.frame(minWidth: 680, minHeight: 620)
}
}
private func presentEditor(for template: NoteTemplate) {
guard editingTemplate == nil else { return }
editingTemplate = template
}
}