81 lines
2.4 KiB
Swift
81 lines
2.4 KiB
Swift
//
|
|
// SearchWidgetLiveActivity.swift
|
|
// SearchWidget
|
|
//
|
|
// Created by Johann Villegas on 9/04/25.
|
|
//
|
|
|
|
import ActivityKit
|
|
import WidgetKit
|
|
import SwiftUI
|
|
|
|
struct SearchWidgetAttributes: ActivityAttributes {
|
|
public typealias LiveDeliveryData = ContentState
|
|
|
|
public struct ContentState: Codable, Hashable {
|
|
var title: String
|
|
var body: String
|
|
var searchTerm: String
|
|
var totalResults: Int
|
|
var timestamp: Int64
|
|
}
|
|
|
|
var id = UUID()
|
|
}
|
|
|
|
struct SearchWidgetLiveActivity: Widget {
|
|
var body: some WidgetConfiguration {
|
|
ActivityConfiguration(for: SearchWidgetAttributes.self) { context in
|
|
// Lock Screen/Banner UI
|
|
VStack {
|
|
HStack {
|
|
Text(context.state.title)
|
|
.font(.headline)
|
|
Spacer()
|
|
Text("\(context.state.totalResults)")
|
|
.font(.caption)
|
|
}
|
|
Text(context.state.body)
|
|
.font(.subheadline)
|
|
if !context.state.searchTerm.isEmpty {
|
|
Text("Search: \(context.state.searchTerm)")
|
|
.font(.caption)
|
|
}
|
|
}
|
|
.padding()
|
|
} dynamicIsland: { context in
|
|
// Dynamic Island UI
|
|
DynamicIsland {
|
|
// Expanded UI
|
|
DynamicIslandExpandedRegion(.leading) {
|
|
Text(context.state.title)
|
|
.font(.headline)
|
|
}
|
|
|
|
DynamicIslandExpandedRegion(.trailing) {
|
|
Text("\(context.state.totalResults)")
|
|
.font(.caption)
|
|
}
|
|
|
|
DynamicIslandExpandedRegion(.bottom) {
|
|
Text(context.state.body)
|
|
.font(.subheadline)
|
|
if !context.state.searchTerm.isEmpty {
|
|
Text("Search: \(context.state.searchTerm)")
|
|
.font(.caption)
|
|
}
|
|
}
|
|
} compactLeading: {
|
|
// Compact Leading
|
|
Text("\(context.state.totalResults)")
|
|
} compactTrailing: {
|
|
// Compact Trailing
|
|
Image(systemName: "magnifyingglass")
|
|
} minimal: {
|
|
// Minimal UI
|
|
Image(systemName: "magnifyingglass")
|
|
}
|
|
}
|
|
}
|
|
}
|