ads tracking

This commit is contained in:
Stefan Lange-Hegermann
2025-11-05 11:13:40 +01:00
parent 5fcc33529a
commit ced06f9eb6
198 changed files with 21205 additions and 262 deletions

View File

@@ -1,4 +1,5 @@
import SwiftUI
import PostHog
struct SystemsOnboardingView: View {
@State private var systemName: String = String(localized: "default.system.name", comment: "Default placeholder name for a system")
@@ -92,6 +93,9 @@ struct SystemsOnboardingView: View {
.background(Color(.systemGroupedBackground))
.onAppear(perform: resetState)
.onReceive(timer) { _ in advanceCarousel() }
.task {
PostHogSDK.shared.capture("Launched")
}
}
private func resetState() {
@@ -102,6 +106,7 @@ struct SystemsOnboardingView: View {
private func createSystem() {
isFieldFocused = false
let trimmed = systemName.trimmingCharacters(in: .whitespacesAndNewlines)
PostHogSDK.shared.capture("System Created", properties: ["name": trimmed])
guard !trimmed.isEmpty else { return }
onCreate(trimmed)
}

View File

@@ -8,6 +8,7 @@
import SwiftUI
import SwiftData
import PostHog
struct SystemsView: View {
@Environment(\.modelContext) private var modelContext
@@ -107,6 +108,17 @@ struct SystemsView: View {
}
.padding(.vertical, 4)
}
.simultaneousGesture(
TapGesture().onEnded {
PostHogSDK.shared.capture(
"System Opened",
properties: [
"name": system.name,
"source": "list"
]
)
}
)
}
.onDelete(perform: deleteSystems)
}
@@ -117,7 +129,7 @@ struct SystemsView: View {
.toolbar {
ToolbarItem(placement: .navigationBarLeading) {
Button {
showingSettings = true
openSettings()
} label: {
Image(systemName: "gearshape")
}
@@ -125,6 +137,7 @@ struct SystemsView: View {
ToolbarItem(placement: .navigationBarTrailing) {
HStack {
Button(action: {
PostHogSDK.shared.capture("System Create Navigation")
createNewSystem()
}) {
Image(systemName: "plus")
@@ -160,15 +173,44 @@ struct SystemsView: View {
createOnboardingSystem(named: name)
}
}
private func openSettings() {
PostHogSDK.shared.capture("Settings Opened")
showingSettings = true
}
private func createNewSystem() {
let system = makeSystem()
navigateToSystem(system, presentSystemEditor: true, loadToOpen: nil)
PostHogSDK.shared.capture(
"System Created",
properties: [
"name": system.name,
"source": "toolbar"
]
)
navigateToSystem(
system,
presentSystemEditor: true,
loadToOpen: nil,
source: "created"
)
}
private func createNewSystem(named name: String) {
let system = makeSystem(preferredName: name)
navigateToSystem(system, presentSystemEditor: true, loadToOpen: nil)
PostHogSDK.shared.capture(
"System Created",
properties: [
"name": system.name,
"source": "named"
]
)
navigateToSystem(
system,
presentSystemEditor: true,
loadToOpen: nil,
source: "created-named"
)
}
private func createOnboardingSystem(named name: String) {
@@ -176,10 +218,29 @@ struct SystemsView: View {
preferredName: name,
colorName: randomSystemColorName()
)
navigateToSystem(system, presentSystemEditor: false, loadToOpen: nil)
navigateToSystem(
system,
presentSystemEditor: false,
loadToOpen: nil,
source: "onboarding"
)
}
private func navigateToSystem(_ system: ElectricalSystem, presentSystemEditor: Bool, loadToOpen: SavedLoad?, animated: Bool = true) {
private func navigateToSystem(
_ system: ElectricalSystem,
presentSystemEditor: Bool,
loadToOpen: SavedLoad?,
animated: Bool = true,
source: String = "programmatic"
) {
PostHogSDK.shared.capture(
"System Opened",
properties: [
"name": system.name,
"source": source,
"loads": loads(for: system).count
]
)
let target = SystemNavigationTarget(
system: system,
presentSystemEditor: presentSystemEditor,
@@ -228,13 +289,40 @@ struct SystemsView: View {
hasPerformedInitialAutoNavigation = true
guard systems.count == 1, let system = systems.first else { return }
navigateToSystem(system, presentSystemEditor: false, loadToOpen: nil, animated: false)
navigateToSystem(
system,
presentSystemEditor: false,
loadToOpen: nil,
animated: false,
source: "auto"
)
}
private func addComponentFromLibrary(_ item: ComponentLibraryItem) {
let system = makeSystem()
PostHogSDK.shared.capture(
"System Created",
properties: [
"name": system.name,
"source": "library"
]
)
let load = createLoad(from: item, in: system)
navigateToSystem(system, presentSystemEditor: false, loadToOpen: load, animated: false)
PostHogSDK.shared.capture(
"Library Load Added",
properties: [
"id": item.id,
"name": item.localizedName,
"system": system.name
]
)
navigateToSystem(
system,
presentSystemEditor: false,
loadToOpen: load,
animated: false,
source: "library"
)
}
private func createLoad(from item: ComponentLibraryItem, in system: ElectricalSystem) -> SavedLoad {
@@ -306,9 +394,16 @@ struct SystemsView: View {
}
private func deleteSystems(offsets: IndexSet) {
let systemsToDelete = offsets.map { systems[$0] }
withAnimation {
for index in offsets {
let system = systems[index]
for system in systemsToDelete {
PostHogSDK.shared.capture(
"System Deleted",
properties: [
"name": system.name,
"loads": loads(for: system).count
]
)
deleteLoads(for: system)
modelContext.delete(system)
}
@@ -319,6 +414,14 @@ struct SystemsView: View {
let descriptor = FetchDescriptor<SavedLoad>()
if let loads = try? modelContext.fetch(descriptor) {
for load in loads where load.system == system {
PostHogSDK.shared.capture(
"Load Deleted",
properties: [
"name": load.name,
"system": system.name,
"source": "system-delete"
]
)
modelContext.delete(load)
}
}