Skip to content

Commit 6d088b7

Browse files
David Skuzadskuza
David Skuza
authored andcommitted
refactor: move character direction into environment
1 parent d87d0fc commit 6d088b7

File tree

7 files changed

+25
-26
lines changed

7 files changed

+25
-26
lines changed

PocketKit/Sources/PocketKit/Article/TextContentView.swift

+9-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ struct TextContentView: View {
1414
@Environment(\.layoutDirection)
1515
private var layoutDirection: LayoutDirection
1616

17+
@Environment(\.characterDirection)
18+
private var characterDirection: LayoutDirection
19+
1720
@EnvironmentObject
1821
private var settings: ReaderSettings
1922

@@ -46,20 +49,24 @@ struct TextContentView: View {
4649

4750
extension TextContentView {
4851
private var alignment: Alignment {
49-
switch settings.languageDirection {
52+
switch characterDirection {
5053
case .leftToRight:
5154
return layoutDirection == .leftToRight ? .leading : .trailing
5255
case .rightToLeft:
5356
return layoutDirection == .rightToLeft ? .leading : .trailing
57+
@unknown default:
58+
return .leading
5459
}
5560
}
5661

5762
private var textAlignment: TextAlignment {
58-
switch settings.languageDirection {
63+
switch characterDirection {
5964
case .leftToRight:
6065
return layoutDirection == .leftToRight ? .leading : .trailing
6166
case .rightToLeft:
6267
return layoutDirection == .rightToLeft ? .leading : .trailing
68+
@unknown default:
69+
return .leading
6370
}
6471
}
6572
}

PocketKit/Sources/PocketKit/Environment.swift

+10-1
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,14 @@ private struct AuthorizationClientKey: EnvironmentKey {
1414
static var defaultValue: AuthorizationClient = Services.shared.authClient
1515
}
1616

17-
struct SourceKey: EnvironmentKey {
17+
private struct SourceKey: EnvironmentKey {
1818
static var defaultValue = Services.shared.source
1919
}
2020

21+
private struct CharacterDirectionKey: EnvironmentKey {
22+
static var defaultValue: LayoutDirection = .leftToRight
23+
}
24+
2125
extension EnvironmentValues {
2226
var accessTokenStore: AccessTokenStore {
2327
get { self[AccessTokenStoreKey.self] }
@@ -33,4 +37,9 @@ extension EnvironmentValues {
3337
get { self[SourceKey.self] }
3438
set { self[SourceKey.self] = newValue }
3539
}
40+
41+
var characterDirection: LayoutDirection {
42+
get { self[CharacterDirectionKey.self] }
43+
set { self[CharacterDirectionKey.self] = newValue }
44+
}
3645
}

PocketKit/Sources/PocketKit/Item/Item+Extensions.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55
import Foundation
66
import Textile
77
import Sync
8+
import SwiftUI
89

910
public extension Item {
10-
var languageDirection: LanguageDirection {
11+
var characterDirection: LayoutDirection {
1112
let language = language ?? "en"
1213
let direction = Locale.characterDirection(forLanguage: language)
1314
return direction == .rightToLeft ? .rightToLeft : .leftToRight

PocketKit/Sources/PocketKit/Item/ItemDestinationView.swift

+4-6
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@ struct ItemDestinationView: View {
2222
private var isPresentingOverflow = false
2323

2424
@StateObject
25-
private var settings: ReaderSettings
25+
private var settings = ReaderSettings()
2626

2727
@ViewBuilder
2828
private var destinationView: some View {
2929
if let article = article {
30-
ArticleView(article: article).navigationBarHidden(true)
30+
ArticleView(article: article)
31+
.navigationBarHidden(true)
32+
.environment(\.characterDirection, item.characterDirection)
3133
} else {
3234
// TODO: Implement a view for when an article for the item doesn't exist.
3335
EmptyView()
@@ -36,10 +38,6 @@ struct ItemDestinationView: View {
3638

3739
init(item: Item) {
3840
self.item = item
39-
40-
let settings = ReaderSettings()
41-
settings.languageDirection = item.languageDirection
42-
_settings = StateObject(wrappedValue: settings)
4341
}
4442

4543
var body: some View {

PocketKit/Sources/PocketKit/Item/ItemPresenter.swift

-4
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,6 @@ class ItemPresenter: ItemRow {
1919
public var title: String {
2020
item.title ?? item.thumbnailURL?.absoluteString ?? "Missing Title"
2121
}
22-
23-
public var languageDirection: LanguageDirection {
24-
item.languageDirection
25-
}
2622

2723
public var domain: String {
2824
item.domainMetadata?.name ?? item.domain ?? ""

PocketKit/Sources/PocketKit/Reader/ReaderSettings.swift

-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ class ReaderSettings: ObservableObject {
1212

1313
@AppStorage("readerFontFamily")
1414
var fontFamily: FontDescriptor.Family = .graphik
15-
16-
var languageDirection: LanguageDirection = .leftToRight
1715
}
1816

1917
extension FontDescriptor.Family: RawRepresentable {

PocketKit/Sources/Textile/Views/ItemRow.swift

-10
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,14 @@ private extension Style {
1616
static let detail: Style = .header.sansSerif.p4.with(color: .ui.grey4)
1717
}
1818

19-
public enum LanguageDirection {
20-
case leftToRight
21-
case rightToLeft
22-
}
23-
2419
public protocol ItemRow: ObservableObject {
2520
var title: String { get }
26-
var languageDirection: LanguageDirection { get }
2721
var domain: String { get }
2822
var timeToRead: String? { get }
2923
var thumbnailURL: URL? { get }
3024
}
3125

3226
public struct ItemRowView<Model: ItemRow>: View {
33-
@Environment(\.layoutDirection)
34-
private var layoutDirection
35-
3627
private var model: Model
3728

3829
public init(model: Model) {
@@ -89,7 +80,6 @@ struct ItemRow_Previews: PreviewProvider {
8980
nascetur ridiculus mus. Donec sed odio dui.
9081
"""
9182

92-
var languageDirection: LanguageDirection = .leftToRight
9383
var domain: String = "Etiam Sem Magna Parturient Bibendum"
9484
var timeToRead: String? = "5 min"
9585
var thumbnailURL: URL? = URL(string: "http://placekitten.com/200/300")!

0 commit comments

Comments
 (0)