From 2e2a9f5f1425bb1cf62509f6f8d0bca547a6fe30 Mon Sep 17 00:00:00 2001 From: Thomas Ricouard Date: Tue, 28 Nov 2023 09:18:52 +0100 Subject: [PATCH] Add more lists setttings --- IceCubesApp/App/AppRegistry.swift | 3 + .../App/Tabs/Timeline/TimelineTab.swift | 5 + .../Localization/Localizable.xcstrings | 1534 ++++++++++++++++- .../Sources/Account/AccountDetailView.swift | 21 +- Packages/Env/Sources/Env/CurrentAccount.swift | 10 +- Packages/Env/Sources/Env/Router.swift | 3 + .../AddAccounts/ListAddAccountView.swift | 24 - .../Sources/Lists/Create/ListCreateView.swift | 65 + .../Sources/Lists/Edit/ListEditView.swift | 27 +- .../Lists/Edit/ListEditViewModel.swift | 47 +- Packages/Models/Sources/Models/List.swift | 11 +- .../Sources/Network/Endpoint/Lists.swift | 13 +- 12 files changed, 1665 insertions(+), 98 deletions(-) create mode 100644 Packages/Lists/Sources/Lists/Create/ListCreateView.swift diff --git a/IceCubesApp/App/AppRegistry.swift b/IceCubesApp/App/AppRegistry.swift index e7af1bfa..737b9a0f 100644 --- a/IceCubesApp/App/AppRegistry.swift +++ b/IceCubesApp/App/AppRegistry.swift @@ -82,6 +82,9 @@ extension View { case let .mentionStatusEditor(account, visibility): StatusEditorView(mode: .mention(account: account, visibility: visibility)) .withEnvironments() + case .listCreate: + ListCreateView() + .withEnvironments() case let .listEdit(list): ListEditView(list: list) .withEnvironments() diff --git a/IceCubesApp/App/Tabs/Timeline/TimelineTab.swift b/IceCubesApp/App/Tabs/Timeline/TimelineTab.swift index 1cc10f77..05379a85 100644 --- a/IceCubesApp/App/Tabs/Timeline/TimelineTab.swift +++ b/IceCubesApp/App/Tabs/Timeline/TimelineTab.swift @@ -143,6 +143,11 @@ struct TimelineTab: View { Label(list.title, systemImage: "list.bullet") } } + Button { + routerPath.presentedSheet = .listCreate + } label: { + Label("account.list.create", systemImage: "plus") + } } } diff --git a/IceCubesApp/Resources/Localization/Localizable.xcstrings b/IceCubesApp/Resources/Localization/Localizable.xcstrings index 65300309..2c1206d7 100644 --- a/IceCubesApp/Resources/Localization/Localizable.xcstrings +++ b/IceCubesApp/Resources/Localization/Localizable.xcstrings @@ -3,24 +3,72 @@ "strings" : { " ⸱ " : { "localizations" : { + "be" : { + "stringUnit" : { + "state" : "translated", + "value" : " ⸱ " + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : " ⸱ " + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : " ⸱ " + } + }, "en-GB" : { "stringUnit" : { "state" : "translated", "value" : " ⸱ " } }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : " ⸱ " + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : " ⸱ " + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : " ⸱ " + } + }, "it" : { "stringUnit" : { "state" : "translated", "value" : " ⸱ " } }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : " ⸱ " + } + }, "ko" : { "stringUnit" : { "state" : "translated", "value" : " ⸱ " } }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : " ⸱ " + } + }, "nl" : { "stringUnit" : { "state" : "translated", @@ -33,6 +81,24 @@ "value" : " ⸱ " } }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : " ⸱ " + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : " ⸱ " + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : " ⸱ " + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -61,18 +127,60 @@ "value" : "#%@" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "#%@" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "#%@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "#%@" + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : "#%@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "#%@" + } + }, "it" : { "stringUnit" : { "state" : "translated", "value" : "#%@" } }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "#%@" + } + }, "ko" : { "stringUnit" : { "state" : "translated", "value" : "#%@" } }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "#%@" + } + }, "nl" : { "stringUnit" : { "state" : "translated", @@ -85,6 +193,24 @@ "value" : "#%@" } }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "#%@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "#%@" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "#%@" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -107,18 +233,66 @@ "value" : "%@©2023 Thomas Ricouard" } }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@©2023 Thomas Ricouard" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@©2023 Thomas Ricouard" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@©2023 Thomas Ricouard" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@©2023 Thomas Ricouard" + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@©2023 Thomas Ricouard" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@©2023 Thomas Ricouard" + } + }, "it" : { "stringUnit" : { "state" : "translated", "value" : "%@©2023 Thomas Ricouard" } }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@©2023 Thomas Ricouard" + } + }, "ko" : { "stringUnit" : { "state" : "translated", "value" : "%@©2023 Thomas Ricouard" } }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@©2023 Thomas Ricouard" + } + }, "nl" : { "stringUnit" : { "state" : "translated", @@ -131,6 +305,24 @@ "value" : "%@©2023 Thomas Ricouard" } }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@©2023 Thomas Ricouard" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@©2023 Thomas Ricouard" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@©2023 Thomas Ricouard" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -147,18 +339,72 @@ }, "• [EmojiText](https://github.com/divadretlaw/EmojiText)\n\n• [HTML2Markdown](https://gitlab.com/mflint/HTML2Markdown)\n\n• [KeychainSwift](https://github.com/evgenyneu/keychain-swift)\n\n• [LRUCache](https://github.com/nicklockwood/LRUCache)\n\n• [Bodega](https://github.com/mergesort/Bodega)\n\n• [Nuke](https://github.com/kean/Nuke)\n\n• [SwiftSoup](https://github.com/scinfu/SwiftSoup.git)\n\n• [Atkinson Hyperlegible](https://github.com/googlefonts/atkinson-hyperlegible)\n\n• [OpenDyslexic](http://opendyslexic.org)\n\n• [SwiftUI-Introspect](https://github.com/siteline/SwiftUI-Introspect)\n\n• [RevenueCat](https://github.com/RevenueCat/purchases-ios)\n\n• [SFSafeSymbols](https://github.com/SFSafeSymbols/SFSafeSymbols)" : { "localizations" : { + "be" : { + "stringUnit" : { + "state" : "translated", + "value" : "• [EmojiText](https://github.com/divadretlaw/EmojiText)\n\n• [HTML2Markdown](https://gitlab.com/mflint/HTML2Markdown)\n\n• [KeychainSwift](https://github.com/evgenyneu/keychain-swift)\n\n• [LRUCache](https://github.com/nicklockwood/LRUCache)\n\n• [Bodega](https://github.com/mergesort/Bodega)\n\n• [Nuke](https://github.com/kean/Nuke)\n\n• [SwiftSoup](https://github.com/scinfu/SwiftSoup.git)\n\n• [Atkinson Hyperlegible](https://github.com/googlefonts/atkinson-hyperlegible)\n\n• [OpenDyslexic](http://opendyslexic.org)\n\n• [SwiftUI-Introspect](https://github.com/siteline/SwiftUI-Introspect)\n\n• [RevenueCat](https://github.com/RevenueCat/purchases-ios)\n\n• [SFSafeSymbols](https://github.com/SFSafeSymbols/SFSafeSymbols)" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "• [EmojiText](https://github.com/divadretlaw/EmojiText)\n\n• [HTML2Markdown](https://gitlab.com/mflint/HTML2Markdown)\n\n• [KeychainSwift](https://github.com/evgenyneu/keychain-swift)\n\n• [LRUCache](https://github.com/nicklockwood/LRUCache)\n\n• [Bodega](https://github.com/mergesort/Bodega)\n\n• [Nuke](https://github.com/kean/Nuke)\n\n• [SwiftSoup](https://github.com/scinfu/SwiftSoup.git)\n\n• [Atkinson Hyperlegible](https://github.com/googlefonts/atkinson-hyperlegible)\n\n• [OpenDyslexic](http://opendyslexic.org)\n\n• [SwiftUI-Introspect](https://github.com/siteline/SwiftUI-Introspect)\n\n• [RevenueCat](https://github.com/RevenueCat/purchases-ios)\n\n• [SFSafeSymbols](https://github.com/SFSafeSymbols/SFSafeSymbols)" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "• [EmojiText](https://github.com/divadretlaw/EmojiText)\n\n• [HTML2Markdown](https://gitlab.com/mflint/HTML2Markdown)\n\n• [KeychainSwift](https://github.com/evgenyneu/keychain-swift)\n\n• [LRUCache](https://github.com/nicklockwood/LRUCache)\n\n• [Bodega](https://github.com/mergesort/Bodega)\n\n• [Nuke](https://github.com/kean/Nuke)\n\n• [SwiftSoup](https://github.com/scinfu/SwiftSoup.git)\n\n• [Atkinson Hyperlegible](https://github.com/googlefonts/atkinson-hyperlegible)\n\n• [OpenDyslexic](http://opendyslexic.org)\n\n• [SwiftUI-Introspect](https://github.com/siteline/SwiftUI-Introspect)\n\n• [RevenueCat](https://github.com/RevenueCat/purchases-ios)\n\n• [SFSafeSymbols](https://github.com/SFSafeSymbols/SFSafeSymbols)" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "• [EmojiText](https://github.com/divadretlaw/EmojiText)\n\n• [HTML2Markdown](https://gitlab.com/mflint/HTML2Markdown)\n\n• [KeychainSwift](https://github.com/evgenyneu/keychain-swift)\n\n• [LRUCache](https://github.com/nicklockwood/LRUCache)\n\n• [Bodega](https://github.com/mergesort/Bodega)\n\n• [Nuke](https://github.com/kean/Nuke)\n\n• [SwiftSoup](https://github.com/scinfu/SwiftSoup.git)\n\n• [Atkinson Hyperlegible](https://github.com/googlefonts/atkinson-hyperlegible)\n\n• [OpenDyslexic](http://opendyslexic.org)\n\n• [SwiftUI-Introspect](https://github.com/siteline/SwiftUI-Introspect)\n\n• [RevenueCat](https://github.com/RevenueCat/purchases-ios)\n\n• [SFSafeSymbols](https://github.com/SFSafeSymbols/SFSafeSymbols)" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "• [EmojiText](https://github.com/divadretlaw/EmojiText)\n\n• [HTML2Markdown](https://gitlab.com/mflint/HTML2Markdown)\n\n• [KeychainSwift](https://github.com/evgenyneu/keychain-swift)\n\n• [LRUCache](https://github.com/nicklockwood/LRUCache)\n\n• [Bodega](https://github.com/mergesort/Bodega)\n\n• [Nuke](https://github.com/kean/Nuke)\n\n• [SwiftSoup](https://github.com/scinfu/SwiftSoup.git)\n\n• [Atkinson Hyperlegible](https://github.com/googlefonts/atkinson-hyperlegible)\n\n• [OpenDyslexic](http://opendyslexic.org)\n\n• [SwiftUI-Introspect](https://github.com/siteline/SwiftUI-Introspect)\n\n• [RevenueCat](https://github.com/RevenueCat/purchases-ios)\n\n• [SFSafeSymbols](https://github.com/SFSafeSymbols/SFSafeSymbols)" + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : "• [EmojiText](https://github.com/divadretlaw/EmojiText)\n\n• [HTML2Markdown](https://gitlab.com/mflint/HTML2Markdown)\n\n• [KeychainSwift](https://github.com/evgenyneu/keychain-swift)\n\n• [LRUCache](https://github.com/nicklockwood/LRUCache)\n\n• [Bodega](https://github.com/mergesort/Bodega)\n\n• [Nuke](https://github.com/kean/Nuke)\n\n• [SwiftSoup](https://github.com/scinfu/SwiftSoup.git)\n\n• [Atkinson Hyperlegible](https://github.com/googlefonts/atkinson-hyperlegible)\n\n• [OpenDyslexic](http://opendyslexic.org)\n\n• [SwiftUI-Introspect](https://github.com/siteline/SwiftUI-Introspect)\n\n• [RevenueCat](https://github.com/RevenueCat/purchases-ios)\n\n• [SFSafeSymbols](https://github.com/SFSafeSymbols/SFSafeSymbols)" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "• [EmojiText](https://github.com/divadretlaw/EmojiText)\n\n• [HTML2Markdown](https://gitlab.com/mflint/HTML2Markdown)\n\n• [KeychainSwift](https://github.com/evgenyneu/keychain-swift)\n\n• [LRUCache](https://github.com/nicklockwood/LRUCache)\n\n• [Bodega](https://github.com/mergesort/Bodega)\n\n• [Nuke](https://github.com/kean/Nuke)\n\n• [SwiftSoup](https://github.com/scinfu/SwiftSoup.git)\n\n• [Atkinson Hyperlegible](https://github.com/googlefonts/atkinson-hyperlegible)\n\n• [OpenDyslexic](http://opendyslexic.org)\n\n• [SwiftUI-Introspect](https://github.com/siteline/SwiftUI-Introspect)\n\n• [RevenueCat](https://github.com/RevenueCat/purchases-ios)\n\n• [SFSafeSymbols](https://github.com/SFSafeSymbols/SFSafeSymbols)" + } + }, "it" : { "stringUnit" : { "state" : "translated", "value" : " [EmojiText](https://github.com/divadretlaw/EmojiText)\n\n• [HTML2Markdown](https://gitlab.com/mflint/HTML2Markdown)\n\n• [KeychainSwift](https://github.com/evgenyneu/keychain-swift)\n\n• [LRUCache](https://github.com/nicklockwood/LRUCache)\n\n• [Bodega](https://github.com/mergesort/Bodega)\n\n• [Nuke](https://github.com/kean/Nuke)\n\n• [SwiftSoup](https://github.com/scinfu/SwiftSoup.git)\n\n• [Atkinson Hyperlegible](https://github.com/googlefonts/atkinson-hyperlegible)\n\n• [OpenDyslexic](http://opendyslexic.org)\n\n• [SwiftUI-Introspect](https://github.com/siteline/SwiftUI-Introspect)\n\n• [RevenueCat](https://github.com/RevenueCat/purchases-ios)\n\n• [SFSafeSymbols](https://github.com/SFSafeSymbols/SFSafeSymbols)" } }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "• [EmojiText](https://github.com/divadretlaw/EmojiText)\n\n• [HTML2Markdown](https://gitlab.com/mflint/HTML2Markdown)\n\n• [KeychainSwift](https://github.com/evgenyneu/keychain-swift)\n\n• [LRUCache](https://github.com/nicklockwood/LRUCache)\n\n• [Bodega](https://github.com/mergesort/Bodega)\n\n• [Nuke](https://github.com/kean/Nuke)\n\n• [SwiftSoup](https://github.com/scinfu/SwiftSoup.git)\n\n• [Atkinson Hyperlegible](https://github.com/googlefonts/atkinson-hyperlegible)\n\n• [OpenDyslexic](http://opendyslexic.org)\n\n• [SwiftUI-Introspect](https://github.com/siteline/SwiftUI-Introspect)\n\n• [RevenueCat](https://github.com/RevenueCat/purchases-ios)\n\n• [SFSafeSymbols](https://github.com/SFSafeSymbols/SFSafeSymbols)" + } + }, "ko" : { "stringUnit" : { "state" : "translated", "value" : "• [EmojiText](https://github.com/divadretlaw/EmojiText)\n\n• [HTML2Markdown](https://gitlab.com/mflint/HTML2Markdown)\n\n• [KeychainSwift](https://github.com/evgenyneu/keychain-swift)\n\n• [LRUCache](https://github.com/nicklockwood/LRUCache)\n\n• [Bodega](https://github.com/mergesort/Bodega)\n\n• [Nuke](https://github.com/kean/Nuke)\n\n• [SwiftSoup](https://github.com/scinfu/SwiftSoup.git)\n\n• [Atkinson Hyperlegible](https://github.com/googlefonts/atkinson-hyperlegible)\n\n• [OpenDyslexic](http://opendyslexic.org)\n\n• [SwiftUI-Introspect](https://github.com/siteline/SwiftUI-Introspect)\n\n• [RevenueCat](https://github.com/RevenueCat/purchases-ios)\n\n• [SFSafeSymbols](https://github.com/SFSafeSymbols/SFSafeSymbols)" } }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "• [EmojiText](https://github.com/divadretlaw/EmojiText)\n\n• [HTML2Markdown](https://gitlab.com/mflint/HTML2Markdown)\n\n• [KeychainSwift](https://github.com/evgenyneu/keychain-swift)\n\n• [LRUCache](https://github.com/nicklockwood/LRUCache)\n\n• [Bodega](https://github.com/mergesort/Bodega)\n\n• [Nuke](https://github.com/kean/Nuke)\n\n• [SwiftSoup](https://github.com/scinfu/SwiftSoup.git)\n\n• [Atkinson Hyperlegible](https://github.com/googlefonts/atkinson-hyperlegible)\n\n• [OpenDyslexic](http://opendyslexic.org)\n\n• [SwiftUI-Introspect](https://github.com/siteline/SwiftUI-Introspect)\n\n• [RevenueCat](https://github.com/RevenueCat/purchases-ios)\n\n• [SFSafeSymbols](https://github.com/SFSafeSymbols/SFSafeSymbols)" + } + }, "nl" : { "stringUnit" : { "state" : "translated", @@ -171,6 +417,24 @@ "value" : "• [EmojiText](https://github.com/divadretlaw/EmojiText)\n\n• [HTML2Markdown](https://gitlab.com/mflint/HTML2Markdown)\n\n• [KeychainSwift](https://github.com/evgenyneu/keychain-swift)\n\n• [LRUCache](https://github.com/nicklockwood/LRUCache)\n\n• [Bodega](https://github.com/mergesort/Bodega)\n\n• [Nuke](https://github.com/kean/Nuke)\n\n• [SwiftSoup](https://github.com/scinfu/SwiftSoup.git)\n\n• [Atkinson Hyperlegible](https://github.com/googlefonts/atkinson-hyperlegible)\n\n• [OpenDyslexic](http://opendyslexic.org)\n\n• [SwiftUI-Introspect](https://github.com/siteline/SwiftUI-Introspect)\n\n• [RevenueCat](https://github.com/RevenueCat/purchases-ios)\n\n• [SFSafeSymbols](https://github.com/SFSafeSymbols/SFSafeSymbols)" } }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "• [EmojiText](https://github.com/divadretlaw/EmojiText)\n\n• [HTML2Markdown](https://gitlab.com/mflint/HTML2Markdown)\n\n• [KeychainSwift](https://github.com/evgenyneu/keychain-swift)\n\n• [LRUCache](https://github.com/nicklockwood/LRUCache)\n\n• [Bodega](https://github.com/mergesort/Bodega)\n\n• [Nuke](https://github.com/kean/Nuke)\n\n• [SwiftSoup](https://github.com/scinfu/SwiftSoup.git)\n\n• [Atkinson Hyperlegible](https://github.com/googlefonts/atkinson-hyperlegible)\n\n• [OpenDyslexic](http://opendyslexic.org)\n\n• [SwiftUI-Introspect](https://github.com/siteline/SwiftUI-Introspect)\n\n• [RevenueCat](https://github.com/RevenueCat/purchases-ios)\n\n• [SFSafeSymbols](https://github.com/SFSafeSymbols/SFSafeSymbols)" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "• [EmojiText](https://github.com/divadretlaw/EmojiText)\n\n• [HTML2Markdown](https://gitlab.com/mflint/HTML2Markdown)\n\n• [KeychainSwift](https://github.com/evgenyneu/keychain-swift)\n\n• [LRUCache](https://github.com/nicklockwood/LRUCache)\n\n• [Bodega](https://github.com/mergesort/Bodega)\n\n• [Nuke](https://github.com/kean/Nuke)\n\n• [SwiftSoup](https://github.com/scinfu/SwiftSoup.git)\n\n• [Atkinson Hyperlegible](https://github.com/googlefonts/atkinson-hyperlegible)\n\n• [OpenDyslexic](http://opendyslexic.org)\n\n• [SwiftUI-Introspect](https://github.com/siteline/SwiftUI-Introspect)\n\n• [RevenueCat](https://github.com/RevenueCat/purchases-ios)\n\n• [SFSafeSymbols](https://github.com/SFSafeSymbols/SFSafeSymbols)" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "• [EmojiText](https://github.com/divadretlaw/EmojiText)\n\n• [HTML2Markdown](https://gitlab.com/mflint/HTML2Markdown)\n\n• [KeychainSwift](https://github.com/evgenyneu/keychain-swift)\n\n• [LRUCache](https://github.com/nicklockwood/LRUCache)\n\n• [Bodega](https://github.com/mergesort/Bodega)\n\n• [Nuke](https://github.com/kean/Nuke)\n\n• [SwiftSoup](https://github.com/scinfu/SwiftSoup.git)\n\n• [Atkinson Hyperlegible](https://github.com/googlefonts/atkinson-hyperlegible)\n\n• [OpenDyslexic](http://opendyslexic.org)\n\n• [SwiftUI-Introspect](https://github.com/siteline/SwiftUI-Introspect)\n\n• [RevenueCat](https://github.com/RevenueCat/purchases-ios)\n\n• [SFSafeSymbols](https://github.com/SFSafeSymbols/SFSafeSymbols)" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -8176,13 +8440,13 @@ "localizations" : { "be" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Block %@" } }, "ca" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Block %@" } }, @@ -8206,7 +8470,7 @@ }, "es" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Block %@" } }, @@ -8218,7 +8482,7 @@ }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Block %@" } }, @@ -8230,7 +8494,7 @@ }, "ja" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Block %@" } }, @@ -8242,13 +8506,13 @@ }, "nb" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Block %@" } }, "nl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Block %@" } }, @@ -8260,19 +8524,19 @@ }, "pt-BR" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Block %@" } }, "tr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Block %@" } }, "uk" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Block %@" } }, @@ -8295,13 +8559,13 @@ "localizations" : { "be" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Do you want to block this user?" } }, "ca" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Do you want to block this user?" } }, @@ -8325,7 +8589,7 @@ }, "es" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Do you want to block this user?" } }, @@ -8337,7 +8601,7 @@ }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Do you want to block this user?" } }, @@ -8349,7 +8613,7 @@ }, "ja" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Do you want to block this user?" } }, @@ -8361,13 +8625,13 @@ }, "nb" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Do you want to block this user?" } }, "nl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Do you want to block this user?" } }, @@ -8379,19 +8643,19 @@ }, "pt-BR" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Do you want to block this user?" } }, "tr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Do you want to block this user?" } }, "uk" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Do you want to block this user?" } }, @@ -13459,6 +13723,12 @@ "value" : "Aceito" } }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Accept" + } + }, "uk" : { "stringUnit" : { "state" : "translated", @@ -13572,6 +13842,12 @@ "value" : "Rejeitado" } }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reject" + } + }, "uk" : { "stringUnit" : { "state" : "translated", @@ -13804,6 +14080,12 @@ "value" : "Pedidos pendentes" } }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pending requests" + } + }, "uk" : { "stringUnit" : { "state" : "translated", @@ -19447,24 +19729,60 @@ "value" : "DeepL API Free" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "DeepL API Free" + } + }, "en-GB" : { "stringUnit" : { "state" : "translated", "value" : "DeepL API Free" } }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "DeepL API Free" + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : "DeepL API Free" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "DeepL API Free" + } + }, "it" : { "stringUnit" : { "state" : "translated", "value" : "DeepL API Free" } }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "DeepL API Free" + } + }, "ko" : { "stringUnit" : { "state" : "translated", "value" : "DeepL API Free" } }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "DeepL API Free" + } + }, "nl" : { "stringUnit" : { "state" : "translated", @@ -19477,6 +19795,24 @@ "value" : "DeepL API Free" } }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "DeepL API Free" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "DeepL API Free" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "DeepL API Free" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -19505,24 +19841,60 @@ "value" : "DeepL API Pro" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "DeepL API Pro" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "DeepL API Pro" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "DeepL API Pro" + } + }, "eu" : { "stringUnit" : { "state" : "translated", "value" : "DeepL API Pro" } }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "DeepL API Pro" + } + }, "it" : { "stringUnit" : { "state" : "translated", "value" : "DeepL API Pro" } }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "DeepL API Pro" + } + }, "ko" : { "stringUnit" : { "state" : "translated", "value" : "DeepL API Pro" } }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "DeepL API Pro" + } + }, "nl" : { "stringUnit" : { "state" : "translated", @@ -19535,6 +19907,24 @@ "value" : "DeepL API Pro" } }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "DeepL API Pro" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "DeepL API Pro" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "DeepL API Pro" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -29085,24 +29475,60 @@ "value" : "iPad" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPad" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPad" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPad" + } + }, "eu" : { "stringUnit" : { "state" : "translated", "value" : "iPad" } }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPad" + } + }, "it" : { "stringUnit" : { "state" : "translated", "value" : "iPad" } }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPad" + } + }, "ko" : { "stringUnit" : { "state" : "translated", "value" : "iPad" } }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPad" + } + }, "nl" : { "stringUnit" : { "state" : "translated", @@ -29115,6 +29541,24 @@ "value" : "iPad" } }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPad" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPad" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPad" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -29143,18 +29587,60 @@ "value" : "iPhone" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPhone" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPhone" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPhone" + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPhone" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPhone" + } + }, "it" : { "stringUnit" : { "state" : "translated", "value" : "iPhone" } }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPhone" + } + }, "ko" : { "stringUnit" : { "state" : "translated", "value" : "iPhone" } }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPhone" + } + }, "nl" : { "stringUnit" : { "state" : "translated", @@ -29167,6 +29653,24 @@ "value" : "iPhone" } }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPhone" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPhone" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPhone" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -29181,6 +29685,720 @@ } } }, + "list.edit.isExclusive" : { + "extractionState" : "manual", + "localizations" : { + "be" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide these posts from home" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide these posts from home" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide these posts from home" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide these posts from home" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide these posts from home" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide these posts from home" + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide these posts from home" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide these posts from home" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide these posts from home" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide these posts from home" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide these posts from home" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide these posts from home" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide these posts from home" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide these posts from home" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide these posts from home" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide these posts from home" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide these posts from home" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide these posts from home" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide these posts from home" + } + } + } + }, + "list.edit.repliesPolicy" : { + "extractionState" : "manual", + "localizations" : { + "be" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show replies to" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show replies to" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show replies to" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show replies to" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show replies to" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show replies to" + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show replies to" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show replies to" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show replies to" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show replies to" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show replies to" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show replies to" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show replies to" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show replies to" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show replies to" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show replies to" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show replies to" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show replies to" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show replies to" + } + } + } + }, + "list.edit.title" : { + "extractionState" : "manual", + "localizations" : { + "be" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + } + } + }, + "list.repliesPolicy.followed" : { + "extractionState" : "manual", + "localizations" : { + "be" : { + "stringUnit" : { + "state" : "translated", + "value" : "Any followed user" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Any followed user" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Any followed user" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Any followed user" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Any followed user" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Any followed user" + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Any followed user" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Any followed user" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Any followed user" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Any followed user" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Any followed user" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Any followed user" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Any followed user" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Any followed user" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Any followed user" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Any followed user" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Any followed user" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Any followed user" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Any followed user" + } + } + } + }, + "list.repliesPolicy.list" : { + "extractionState" : "manual", + "localizations" : { + "be" : { + "stringUnit" : { + "state" : "translated", + "value" : "Members of the list" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Members of the list" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Members of the list" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Members of the list" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Members of the list" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Members of the list" + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Members of the list" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Members of the list" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Members of the list" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Members of the list" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Members of the list" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Members of the list" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Members of the list" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Members of the list" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Members of the list" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Members of the list" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Members of the list" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Members of the list" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Members of the list" + } + } + } + }, + "list.repliesPolicy.none" : { + "extractionState" : "manual", + "localizations" : { + "be" : { + "stringUnit" : { + "state" : "translated", + "value" : "No one" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "No one" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "No one" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No one" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "No one" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No one" + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : "No one" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "No one" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "No one" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "No one" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "No one" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "No one" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "No one" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "No one" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "No one" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "No one" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "No one" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "No one" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "No one" + } + } + } + }, "lists.add-remove-%@" : { "comment" : "MARK: Package: Lists", "extractionState" : "manual", @@ -29539,6 +30757,125 @@ } } }, + "lists.edit.settings" : { + "extractionState" : "manual", + "localizations" : { + "be" : { + "stringUnit" : { + "state" : "translated", + "value" : "List settings" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "List settings" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "List settings" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "List settings" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "List settings" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "List settings" + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : "List settings" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "List settings" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "List settings" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "List settings" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "List settings" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "List settings" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "List settings" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "List settings" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "List settings" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "List settings" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "List settings" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "List settings" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "List settings" + } + } + } + }, "lists.edit.users-in-list" : { "extractionState" : "manual", "localizations" : { @@ -30255,19 +31592,19 @@ "localizations" : { "be" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Новы допіс" } }, "ca" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Publicació nova" } }, "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Neuer Beitrag" } }, @@ -30279,25 +31616,25 @@ }, "en-GB" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "New Post" } }, "es" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Publicación nueva" } }, "eu" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Bidalketa berria" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Nouvelle publication" } }, @@ -30309,7 +31646,7 @@ }, "ja" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "新しい投稿" } }, @@ -30321,13 +31658,13 @@ }, "nb" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Nytt innlegg" } }, "nl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Nieuwe post" } }, @@ -30339,19 +31676,19 @@ }, "pt-BR" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Nova postagem" } }, "tr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "New post" } }, "uk" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Новий допис" } }, @@ -34736,7 +36073,116 @@ } }, "parent view for EditTagGroupView" : { - + "localizations" : { + "be" : { + "stringUnit" : { + "state" : "translated", + "value" : "parent view for EditTagGroupView" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "parent view for EditTagGroupView" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "parent view for EditTagGroupView" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "parent view for EditTagGroupView" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "parent view for EditTagGroupView" + } + }, + "eu" : { + "stringUnit" : { + "state" : "translated", + "value" : "parent view for EditTagGroupView" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "parent view for EditTagGroupView" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "parent view for EditTagGroupView" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "parent view for EditTagGroupView" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "parent view for EditTagGroupView" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "parent view for EditTagGroupView" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "parent view for EditTagGroupView" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "parent view for EditTagGroupView" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "parent view for EditTagGroupView" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "parent view for EditTagGroupView" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "parent view for EditTagGroupView" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "parent view for EditTagGroupView" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "parent view for EditTagGroupView" + } + } + } }, "placeholder.loading.long" : { "localizations" : { @@ -40784,7 +42230,7 @@ }, "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Ungelesene-Button am linken Rand anzeigen" } }, @@ -40836,6 +42282,12 @@ "value" : "읽지 않은 글 수를 왼쪽에 표시" } }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show Pending Button on the Left" + } + }, "nl" : { "stringUnit" : { "state" : "translated", @@ -56638,6 +58090,12 @@ "value" : "Copy this link" } }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copy this link" + } + }, "es" : { "stringUnit" : { "state" : "translated", @@ -57852,6 +59310,12 @@ "value" : "Scatta una foto" } }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Take Photo" + } + }, "ko" : { "stringUnit" : { "state" : "translated", diff --git a/Packages/Account/Sources/Account/AccountDetailView.swift b/Packages/Account/Sources/Account/AccountDetailView.swift index 2bb0f19c..2cc516ea 100644 --- a/Packages/Account/Sources/Account/AccountDetailView.swift +++ b/Packages/Account/Sources/Account/AccountDetailView.swift @@ -22,8 +22,6 @@ public struct AccountDetailView: View { @State private var viewModel: AccountDetailViewModel @State private var isCurrentUser: Bool = false - @State private var isCreateListAlertPresented: Bool = false - @State private var createListTitle: String = "" @State private var showBlockConfirmation: Bool = false @State private var isEditingAccount: Bool = false @@ -262,7 +260,7 @@ public struct AccountDetailView: View { } } Button("account.list.create") { - isCreateListAlertPresented = true + routerPath.presentedSheet = .listCreate } .tint(theme.tintColor) .buttonStyle(.borderless) @@ -271,23 +269,6 @@ public struct AccountDetailView: View { .task { await currentAccount.fetchLists() } - .alert("account.list.create", isPresented: $isCreateListAlertPresented) { - TextField("account.list.name", text: $createListTitle) - Button("action.cancel") { - isCreateListAlertPresented = false - createListTitle = "" - } - Button("account.list.create.confirm") { - guard !createListTitle.isEmpty else { return } - isCreateListAlertPresented = false - Task { - await currentAccount.createList(title: createListTitle) - createListTitle = "" - } - } - } message: { - Text("account.list.create.description") - } } @ViewBuilder diff --git a/Packages/Env/Sources/Env/CurrentAccount.swift b/Packages/Env/Sources/Env/CurrentAccount.swift index 15ea373b..a8635203 100644 --- a/Packages/Env/Sources/Env/CurrentAccount.swift +++ b/Packages/Env/Sources/Env/CurrentAccount.swift @@ -87,15 +87,7 @@ import Observation tags = [] } } - - public func createList(title: String) async { - guard let client else { return } - do { - let list: Models.List = try await client.post(endpoint: Lists.createList(title: title)) - lists.append(list) - } catch {} - } - + public func deleteList(list: Models.List) async { guard let client else { return } lists.removeAll(where: { $0.id == list.id }) diff --git a/Packages/Env/Sources/Env/Router.swift b/Packages/Env/Sources/Env/Router.swift index 28fd3ca8..2d2ea49b 100644 --- a/Packages/Env/Sources/Env/Router.swift +++ b/Packages/Env/Sources/Env/Router.swift @@ -42,6 +42,7 @@ public enum SheetDestination: Identifiable { case replyToStatusEditor(status: Status) case quoteStatusEditor(status: Status) case mentionStatusEditor(account: Account, visibility: Models.Visibility) + case listCreate case listEdit(list: Models.List) case listAddAccount(account: Account) case addAccount @@ -59,6 +60,8 @@ public enum SheetDestination: Identifiable { case .editStatusEditor, .newStatusEditor, .replyToStatusEditor, .quoteStatusEditor, .mentionStatusEditor, .settings, .accountPushNotficationsSettings: "statusEditor" + case .listCreate: + "listCreate" case .listEdit: "listEdit" case .listAddAccount: diff --git a/Packages/Lists/Sources/Lists/AddAccounts/ListAddAccountView.swift b/Packages/Lists/Sources/Lists/AddAccounts/ListAddAccountView.swift index fdcd180d..522689eb 100644 --- a/Packages/Lists/Sources/Lists/AddAccounts/ListAddAccountView.swift +++ b/Packages/Lists/Sources/Lists/AddAccounts/ListAddAccountView.swift @@ -12,9 +12,6 @@ public struct ListAddAccountView: View { @Environment(CurrentAccount.self) private var currentAccount @State private var viewModel: ListAddAccountViewModel - @State private var isCreateListAlertPresented: Bool = false - @State private var createListTitle: String = "" - public init(account: Account) { _viewModel = .init(initialValue: .init(account: account)) } @@ -40,10 +37,6 @@ public struct ListAddAccountView: View { } .listRowBackground(theme.primaryBackgroundColor) } - Button("lists.create") { - isCreateListAlertPresented = true - } - .listRowBackground(theme.primaryBackgroundColor) } .scrollContentBackground(.hidden) .background(theme.secondaryBackgroundColor) @@ -56,23 +49,6 @@ public struct ListAddAccountView: View { } } } - .alert("lists.create", isPresented: $isCreateListAlertPresented) { - TextField("lists.name", text: $createListTitle) - Button("action.cancel") { - isCreateListAlertPresented = false - createListTitle = "" - } - Button("lists.create.confirm") { - guard !createListTitle.isEmpty else { return } - isCreateListAlertPresented = false - Task { - await currentAccount.createList(title: createListTitle) - createListTitle = "" - } - } - } message: { - Text("lists.name.message") - } } .task { viewModel.client = client diff --git a/Packages/Lists/Sources/Lists/Create/ListCreateView.swift b/Packages/Lists/Sources/Lists/Create/ListCreateView.swift new file mode 100644 index 00000000..f5b854d5 --- /dev/null +++ b/Packages/Lists/Sources/Lists/Create/ListCreateView.swift @@ -0,0 +1,65 @@ +import DesignSystem +import EmojiText +import Models +import Network +import SwiftUI +import Env + +@MainActor +public struct ListCreateView: View { + @Environment(\.dismiss) private var dismiss + @Environment(Theme.self) private var theme + @Environment(Client.self) private var client + @Environment(CurrentAccount.self) private var currentAccount + + @State private var title = "" + @State private var repliesPolicy: Models.List.RepliesPolicy = .list + @State private var isExclusive: Bool = false + @State private var isSaving: Bool = false + + public init() { } + + public var body: some View { + NavigationStack { + Form { + Section("lists.edit.settings") { + TextField("list.edit.title", text: $title) + Picker("list.edit.repliesPolicy", + selection: $repliesPolicy) { + ForEach(Models.List.RepliesPolicy.allCases) { policy in + Text(policy.title) + .tag(policy) + } + } + Toggle("list.edit.isExclusive", isOn: $isExclusive) + } + .listRowBackground(theme.primaryBackgroundColor) + } + .scrollContentBackground(.hidden) + .background(theme.secondaryBackgroundColor) + .toolbar { + ToolbarItem { + Button { + Task { + isSaving = true + let _: Models.List = try await client.post(endpoint: Lists.createList(title: title, + repliesPolicy: repliesPolicy, + exclusive: isExclusive )) + await currentAccount.fetchLists() + isSaving = false + dismiss() + } + } label: { + if isSaving { + ProgressView() + } else { + Text("lists.create.confirm") + } + } + } + } + .navigationTitle(title) + .navigationBarTitleDisplayMode(.inline) + } + } +} diff --git a/Packages/Lists/Sources/Lists/Edit/ListEditView.swift b/Packages/Lists/Sources/Lists/Edit/ListEditView.swift index 1854b0cb..45205e36 100644 --- a/Packages/Lists/Sources/Lists/Edit/ListEditView.swift +++ b/Packages/Lists/Sources/Lists/Edit/ListEditView.swift @@ -18,7 +18,29 @@ public struct ListEditView: View { public var body: some View { NavigationStack { - List { + Form { + Section("lists.edit.settings") { + TextField("list.edit.title", text: $viewModel.title) { + Task { await viewModel.update() } + } + Picker("list.edit.repliesPolicy", + selection: $viewModel.repliesPolicy) { + ForEach(Models.List.RepliesPolicy.allCases) { policy in + Text(policy.title) + .tag(policy) + } + } + Toggle("list.edit.isExclusive", isOn: $viewModel.isExclusive) + } + .listRowBackground(theme.primaryBackgroundColor) + .disabled(viewModel.isUpdating) + .onChange(of: viewModel.repliesPolicy) { _, _ in + Task { await viewModel.update() } + } + .onChange(of: viewModel.isExclusive) { _, _ in + Task { await viewModel.update() } + } + Section("lists.edit.users-in-list") { if viewModel.isLoadingAccounts { HStack { @@ -26,7 +48,6 @@ public struct ListEditView: View { ProgressView() Spacer() } - .listRowBackground(theme.primaryBackgroundColor) } else { ForEach(viewModel.accounts) { account in HStack { @@ -41,7 +62,6 @@ public struct ListEditView: View { .font(.scaledFootnote) } } - .listRowBackground(theme.primaryBackgroundColor) }.onDelete { indexes in if let index = indexes.first { Task { @@ -52,6 +72,7 @@ public struct ListEditView: View { } } } + .listRowBackground(theme.primaryBackgroundColor) } .scrollContentBackground(.hidden) .background(theme.secondaryBackgroundColor) diff --git a/Packages/Lists/Sources/Lists/Edit/ListEditViewModel.swift b/Packages/Lists/Sources/Lists/Edit/ListEditViewModel.swift index 6198a2d3..b518c969 100644 --- a/Packages/Lists/Sources/Lists/Edit/ListEditViewModel.swift +++ b/Packages/Lists/Sources/Lists/Edit/ListEditViewModel.swift @@ -3,18 +3,28 @@ import Models import Network import Observation import SwiftUI +import Env @MainActor @Observable public class ListEditViewModel { - let list: Models.List + var list: Models.List var client: Client? var isLoadingAccounts: Bool = true var accounts: [Account] = [] + + var title: String + var repliesPolicy: Models.List.RepliesPolicy + var isExclusive: Bool + + var isUpdating: Bool = false init(list: Models.List) { self.list = list + self.title = list.title + self.repliesPolicy = list.repliesPolicy + self.isExclusive = list.exclusive } func fetchAccounts() async { @@ -27,7 +37,27 @@ import SwiftUI isLoadingAccounts = false } } - + + func update() async { + guard let client else { return } + do { + isUpdating = true + let list: Models.List = try await client.put(endpoint: + Lists.updateList(id: list.id, + title: title, + repliesPolicy: repliesPolicy, + exclusive: isExclusive )) + self.list = list + self.title = list.title + self.repliesPolicy = list.repliesPolicy + self.isExclusive = list.exclusive + self.isUpdating = false + await CurrentAccount.shared.fetchLists() + } catch { + isUpdating = false + } + } + func delete(account: Account) async { guard let client else { return } do { @@ -38,3 +68,16 @@ import SwiftUI } catch {} } } + +extension Models.List.RepliesPolicy { + var title: LocalizedStringKey { + switch self { + case .followed: + return "list.repliesPolicy.followed" + case .list: + return "list.repliesPolicy.list" + case .none: + return "list.repliesPolicy.none" + } + } +} diff --git a/Packages/Models/Sources/Models/List.swift b/Packages/Models/Sources/Models/List.swift index 052697b0..9da8dfcf 100644 --- a/Packages/Models/Sources/Models/List.swift +++ b/Packages/Models/Sources/Models/List.swift @@ -3,7 +3,16 @@ import Foundation public struct List: Codable, Identifiable, Equatable, Hashable { public let id: String public let title: String - public let repliesPolicy: String + public let repliesPolicy: RepliesPolicy + public let exclusive: Bool + + public enum RepliesPolicy: String, Sendable, Codable, CaseIterable, Identifiable { + public var id: String { + rawValue + } + + case followed, list, `none` + } } extension List: Sendable {} diff --git a/Packages/Network/Sources/Network/Endpoint/Lists.swift b/Packages/Network/Sources/Network/Endpoint/Lists.swift index 24bb2f47..d87e326f 100644 --- a/Packages/Network/Sources/Network/Endpoint/Lists.swift +++ b/Packages/Network/Sources/Network/Endpoint/Lists.swift @@ -1,9 +1,11 @@ import Foundation +import Models public enum Lists: Endpoint { case lists case list(id: String) - case createList(title: String) + case createList(title: String, repliesPolicy: List.RepliesPolicy, exclusive: Bool) + case updateList(id: String, title: String, repliesPolicy: List.RepliesPolicy, exclusive: Bool) case accounts(listId: String) case updateAccounts(listId: String, accounts: [String]) @@ -11,7 +13,7 @@ public enum Lists: Endpoint { switch self { case .lists, .createList: "lists" - case let .list(id): + case let .list(id), let .updateList(id, _, _, _): "lists/\(id)" case let .accounts(listId): "lists/\(listId)/accounts" @@ -24,8 +26,11 @@ public enum Lists: Endpoint { switch self { case .accounts: return [.init(name: "limit", value: String(0))] - case let .createList(title): - return [.init(name: "title", value: title)] + case let .createList(title, repliesPolicy, exclusive), + let .updateList(_, title, repliesPolicy, exclusive): + return [.init(name: "title", value: title), + .init(name: "replies_policy", value: repliesPolicy.rawValue), + .init(name: "exclusive", value: exclusive ? "true" : "false")] case let .updateAccounts(_, accounts): var params: [URLQueryItem] = [] for account in accounts {