meta/Sources/Model/User Interface/View/WidgetData.swift

44 lines
1.3 KiB
Swift

//
// WidgetData.swift
// Meta
//
// Created by david-swift on 15.08.24.
//
/// Data passed to widgets when initializing or updating the container.
public struct WidgetData: Sendable {
/// The view modifiers.
public var modifiers: [@Sendable (AnyView) -> AnyView] = []
/// The scene storage of the parent scene element.
public var sceneStorage: SceneStorage
/// The app storage of the parent app.
public var appStorage: any AppStorage
/// Fields for custom data.
public var fields: [String: Sendable] = [:]
/// Modify the data so that there are no modifiers.
public var noModifiers: Self {
modify { $0.modifiers = [] }
}
/// Initialize widget data.
/// - Parameters:
/// - sceneStorage: The storage of the parent scene element.
/// - appStorage: The storage of the parent app.
public init(sceneStorage: SceneStorage, appStorage: any AppStorage) {
self.sceneStorage = sceneStorage
self.appStorage = appStorage
}
/// Modify the widget data.
/// - Parameter action: The modification action.
/// - Returns: The data.
public func modify(action: (inout Self) -> Void) -> Self {
var newSelf = self
action(&newSelf)
return newSelf
}
}