mirror of
https://github.com/sudosylabs/vnidrop.git
synced 2026-08-05 02:29:55 +02:00
refactor(apple): tidy the receive-folder preference row
The "Save received transfers to" section was a gray folder label that read like a disabled field, stacked above two full-width buttons. Replace it with the standard macOS "label · value · inline action" row: a folder icon + the current folder name with a trailing "Choose folder" button, long names truncated in the middle. "Use default" now shows only when a custom folder is actually set (hidden when already on the default, where it'd be a no-op).
This commit is contained in:
@@ -168,6 +168,15 @@ final class SettingsModel: ObservableObject {
|
||||
func onReceiveFolderPickFailed(_ reason: String) { messages.error(InvitationError.message(reason)) }
|
||||
func resetReceiveFolder() { preferences.resetReceiveFolder() }
|
||||
|
||||
/// Whether the current receive folder is the platform default (so the reset
|
||||
/// action can be hidden when it would be a no-op). Compared by location, not
|
||||
/// display name, which can differ once resolved.
|
||||
var isUsingDefaultReceiveFolder: Bool {
|
||||
guard let folder = state.receiveFolder else { return true }
|
||||
let fallback = fileSystemService.defaultReceiveFolder()
|
||||
return folder.kind == fallback.kind && folder.value == fallback.value
|
||||
}
|
||||
|
||||
/// Ask the OS for notification permission. This is the only time the app can
|
||||
/// grant it; disabling or fine-tuning afterwards happens in the Settings app.
|
||||
func requestNotifications() {
|
||||
|
||||
@@ -14,10 +14,20 @@ struct PreferencesSettings: View {
|
||||
}
|
||||
if model.state.supportsCustomReceiveFolders {
|
||||
Section(String(localized: L10n.Preferences.receiveFolderTitle)) {
|
||||
Text(model.state.receiveFolder?.displayName ?? String(localized: L10n.Value.unavailable))
|
||||
.foregroundStyle(.secondary)
|
||||
Button(String(localized: L10n.Button.chooseFolder), action: model.chooseReceiveFolder)
|
||||
Button(String(localized: L10n.Button.resetDefault), action: model.resetReceiveFolder)
|
||||
LabeledContent {
|
||||
Button(String(localized: L10n.Button.chooseFolder), action: model.chooseReceiveFolder)
|
||||
} label: {
|
||||
Label {
|
||||
Text(model.state.receiveFolder?.displayName ?? String(localized: L10n.Value.unavailable))
|
||||
.lineLimit(1)
|
||||
.truncationMode(.middle)
|
||||
} icon: {
|
||||
Image(systemSymbol: .folder)
|
||||
}
|
||||
}
|
||||
if !model.isUsingDefaultReceiveFolder {
|
||||
Button(String(localized: L10n.Button.resetDefault), role: .cancel, action: model.resetReceiveFolder)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user