Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
336fb95b07 | ||
|
|
c7e29828b4 |
@@ -276,7 +276,7 @@
|
|||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 16;
|
CURRENT_PROJECT_VERSION = 18;
|
||||||
DEVELOPMENT_ASSET_PATHS = "\"meetingnotes/Preview Content\"";
|
DEVELOPMENT_ASSET_PATHS = "\"meetingnotes/Preview Content\"";
|
||||||
DEVELOPMENT_TEAM = G9LVHZAJNX;
|
DEVELOPMENT_TEAM = G9LVHZAJNX;
|
||||||
ENABLE_HARDENED_RUNTIME = YES;
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
@@ -290,7 +290,7 @@
|
|||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 15.0;
|
MACOSX_DEPLOYMENT_TARGET = 15.0;
|
||||||
MARKETING_VERSION = 1.1.4;
|
MARKETING_VERSION = 1.1.6;
|
||||||
ONLY_ACTIVE_ARCH = NO;
|
ONLY_ACTIVE_ARCH = NO;
|
||||||
OTHER_SWIFT_FLAGS = "$(inherited) -D ENABLE_TCC_SPI";
|
OTHER_SWIFT_FLAGS = "$(inherited) -D ENABLE_TCC_SPI";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.jamesbone.meetingnotes;
|
PRODUCT_BUNDLE_IDENTIFIER = net.jamesbone.meetingnotes;
|
||||||
@@ -312,7 +312,7 @@
|
|||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 16;
|
CURRENT_PROJECT_VERSION = 18;
|
||||||
DEVELOPMENT_ASSET_PATHS = "\"meetingnotes/Preview Content\"";
|
DEVELOPMENT_ASSET_PATHS = "\"meetingnotes/Preview Content\"";
|
||||||
DEVELOPMENT_TEAM = G9LVHZAJNX;
|
DEVELOPMENT_TEAM = G9LVHZAJNX;
|
||||||
ENABLE_HARDENED_RUNTIME = YES;
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
@@ -326,7 +326,7 @@
|
|||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 15.0;
|
MACOSX_DEPLOYMENT_TARGET = 15.0;
|
||||||
MARKETING_VERSION = 1.1.4;
|
MARKETING_VERSION = 1.1.6;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
OTHER_SWIFT_FLAGS = "$(inherited) -D ENABLE_TCC_SPI";
|
OTHER_SWIFT_FLAGS = "$(inherited) -D ENABLE_TCC_SPI";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.jamesbone.meetingnotes;
|
PRODUCT_BUNDLE_IDENTIFIER = net.jamesbone.meetingnotes;
|
||||||
|
|||||||
@@ -33,9 +33,16 @@ struct TemplateEditView: View {
|
|||||||
.font(.caption)
|
.font(.caption)
|
||||||
.foregroundColor(.secondary)
|
.foregroundColor(.secondary)
|
||||||
|
|
||||||
TextField("Meeting Context", text: $template.context, axis: .vertical)
|
TextEditor(text: $template.context)
|
||||||
.textFieldStyle(.roundedBorder)
|
.scrollContentBackground(.hidden)
|
||||||
.lineLimit(4...10)
|
.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
|
// Sections
|
||||||
@@ -75,9 +82,16 @@ struct TemplateEditView: View {
|
|||||||
TextField("Section Title", text: $section.title)
|
TextField("Section Title", text: $section.title)
|
||||||
.textFieldStyle(.roundedBorder)
|
.textFieldStyle(.roundedBorder)
|
||||||
|
|
||||||
TextField("Section Description", text: $section.description, axis: .vertical)
|
TextEditor(text: $section.description)
|
||||||
.textFieldStyle(.roundedBorder)
|
.scrollContentBackground(.hidden)
|
||||||
.lineLimit(3...8)
|
.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 {
|
Button {
|
||||||
@@ -113,12 +127,19 @@ struct TemplateEditView: View {
|
|||||||
}
|
}
|
||||||
.buttonStyle(.plain)
|
.buttonStyle(.plain)
|
||||||
.padding(.top)
|
.padding(.top)
|
||||||
.disabled(template.title.isEmpty || template.sections.isEmpty)
|
.disabled(!canSave)
|
||||||
}
|
}
|
||||||
.padding(24)
|
.padding(24)
|
||||||
}
|
}
|
||||||
.navigationTitle("Edit Template")
|
.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 {
|
#Preview {
|
||||||
|
|||||||
@@ -2,15 +2,15 @@ import SwiftUI
|
|||||||
|
|
||||||
struct TemplateListView: View {
|
struct TemplateListView: View {
|
||||||
@StateObject private var viewModel = TemplatesViewModel()
|
@StateObject private var viewModel = TemplatesViewModel()
|
||||||
@Environment(\.dismiss) private var dismiss
|
@State private var editingTemplate: NoteTemplate?
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
List {
|
List {
|
||||||
ForEach(viewModel.templates) { template in
|
ForEach(viewModel.templates) { template in
|
||||||
HStack {
|
HStack {
|
||||||
NavigationLink(destination: TemplateEditView(template: template) { updatedTemplate in
|
Button {
|
||||||
viewModel.saveTemplate(updatedTemplate)
|
presentEditor(for: template)
|
||||||
}) {
|
} label: {
|
||||||
VStack(alignment: .leading, spacing: 4) {
|
VStack(alignment: .leading, spacing: 4) {
|
||||||
HStack {
|
HStack {
|
||||||
Text(template.title)
|
Text(template.title)
|
||||||
@@ -36,6 +36,7 @@ struct TemplateListView: View {
|
|||||||
}
|
}
|
||||||
.padding(.vertical, 4)
|
.padding(.vertical, 4)
|
||||||
}
|
}
|
||||||
|
.buttonStyle(.plain)
|
||||||
|
|
||||||
Spacer()
|
Spacer()
|
||||||
|
|
||||||
@@ -87,9 +88,9 @@ struct TemplateListView: View {
|
|||||||
.navigationTitle("Note Templates")
|
.navigationTitle("Note Templates")
|
||||||
.toolbar {
|
.toolbar {
|
||||||
ToolbarItem(placement: .primaryAction) {
|
ToolbarItem(placement: .primaryAction) {
|
||||||
NavigationLink(destination: TemplateEditView(template: viewModel.createNewTemplate()) { updatedTemplate in
|
Button {
|
||||||
viewModel.saveTemplate(updatedTemplate)
|
presentEditor(for: viewModel.createNewTemplate())
|
||||||
}) {
|
} label: {
|
||||||
Image(systemName: "plus")
|
Image(systemName: "plus")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -106,6 +107,19 @@ struct TemplateListView: View {
|
|||||||
} message: {
|
} message: {
|
||||||
Text(viewModel.errorMessage ?? "")
|
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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user