jellyflood/Swiftfin/Components/SettingsBarButton.swift

50 lines
1.4 KiB
Swift

//
// Swiftfin is subject to the terms of the Mozilla Public
// License, v2.0. If a copy of the MPL was not distributed with this
// file, you can obtain one at https://mozilla.org/MPL/2.0/.
//
// Copyright (c) 2024 Jellyfin & Jellyfin Contributors
//
import Factory
import SwiftUI
// Want the default navigation bar `Image(systemName:)` styling
// but using within `ImageView.placeholder/failure` ruins it.
// Need to do manual checking of image loading.
struct SettingsBarButton: View {
@State
private var isUserImage = false
let server: ServerState
let user: UserState
let action: () -> Void
var body: some View {
Button {
action()
} label: {
Image(systemName: "gearshape.fill")
.visible(!isUserImage)
.overlay {
ZStack {
Color.clear
UserProfileImage(
userID: user.id,
source: user.profileImageSource(
client: server.client,
maxWidth: 120
),
pipeline: .Swiftfin.local
) {
Color.clear
}
}
}
}
.accessibilityLabel(L10n.settings)
}
}