@youversion/platform-react-native 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.releaserc.json +104 -0
- package/CHANGELOG.md +29 -0
- package/CONTRIBUTING.md +319 -0
- package/LICENSE +201 -0
- package/README.md +562 -0
- package/RELEASING.md +85 -0
- package/android/build.gradle +43 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/assets/github-reactNative-sdk-banner.png +0 -0
- package/build/api/bible.d.ts +26 -0
- package/build/api/bible.d.ts.map +1 -0
- package/build/api/bible.js +32 -0
- package/build/api/bible.js.map +1 -0
- package/build/api/highlights.d.ts +109 -0
- package/build/api/highlights.d.ts.map +1 -0
- package/build/api/highlights.js +49 -0
- package/build/api/highlights.js.map +1 -0
- package/build/api/index.d.ts +27 -0
- package/build/api/index.d.ts.map +1 -0
- package/build/api/index.js +13 -0
- package/build/api/index.js.map +1 -0
- package/build/api/languages.d.ts +11 -0
- package/build/api/languages.d.ts.map +1 -0
- package/build/api/languages.js +13 -0
- package/build/api/languages.js.map +1 -0
- package/build/api/users.d.ts +20 -0
- package/build/api/users.d.ts.map +1 -0
- package/build/api/users.js +26 -0
- package/build/api/users.js.map +1 -0
- package/build/api/votd.d.ts +15 -0
- package/build/api/votd.d.ts.map +1 -0
- package/build/api/votd.js +13 -0
- package/build/api/votd.js.map +1 -0
- package/build/components/BibleReaderView.d.ts +22 -0
- package/build/components/BibleReaderView.d.ts.map +1 -0
- package/build/components/BibleReaderView.js +18 -0
- package/build/components/BibleReaderView.js.map +1 -0
- package/build/components/BibleTextView.d.ts +18 -0
- package/build/components/BibleTextView.d.ts.map +1 -0
- package/build/components/BibleTextView.js +25 -0
- package/build/components/BibleTextView.js.map +1 -0
- package/build/components/BibleWidgetView.d.ts +23 -0
- package/build/components/BibleWidgetView.d.ts.map +1 -0
- package/build/components/BibleWidgetView.js +17 -0
- package/build/components/BibleWidgetView.js.map +1 -0
- package/build/components/SignInWithYouVersionButton.d.ts +37 -0
- package/build/components/SignInWithYouVersionButton.d.ts.map +1 -0
- package/build/components/SignInWithYouVersionButton.js +12 -0
- package/build/components/SignInWithYouVersionButton.js.map +1 -0
- package/build/components/VotdView.d.ts +11 -0
- package/build/components/VotdView.d.ts.map +1 -0
- package/build/components/VotdView.js +12 -0
- package/build/components/VotdView.js.map +1 -0
- package/build/components/index.d.ts +6 -0
- package/build/components/index.d.ts.map +1 -0
- package/build/components/index.js +6 -0
- package/build/components/index.js.map +1 -0
- package/build/index.d.ts +5 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +6 -0
- package/build/index.js.map +1 -0
- package/build/native.d.ts +22 -0
- package/build/native.d.ts.map +1 -0
- package/build/native.js +3 -0
- package/build/native.js.map +1 -0
- package/build/platform.d.ts +21 -0
- package/build/platform.d.ts.map +1 -0
- package/build/platform.js +28 -0
- package/build/platform.js.map +1 -0
- package/build/types.d.ts +320 -0
- package/build/types.d.ts.map +1 -0
- package/build/types.js +2 -0
- package/build/types.js.map +1 -0
- package/commitlint.config.js +23 -0
- package/dist/youversion-platform-react-native-0.7.2.tgz +0 -0
- package/eslint.config.js +4 -0
- package/expo-module.config.json +17 -0
- package/ios/APIs/YVPBibleAPI.swift +197 -0
- package/ios/APIs/YVPHighlightsAPI.swift +105 -0
- package/ios/APIs/YVPLanguagesAPI.swift +70 -0
- package/ios/RNBibleReaderViewModule.swift +9 -0
- package/ios/RNBibleTextViewModule.swift +9 -0
- package/ios/RNBibleWidgetViewModule.swift +9 -0
- package/ios/RNSignInWithYouVersionButtonModule.swift +9 -0
- package/ios/RNVotdViewModule.swift +9 -0
- package/ios/RNYouVersionPlatformModule.swift +79 -0
- package/ios/Views/YVPBibleReaderView.swift +57 -0
- package/ios/Views/YVPBibleTextView.swift +114 -0
- package/ios/Views/YVPBibleWidgetView.swift +64 -0
- package/ios/Views/YVPSignInWithYouVersionButton.swift +52 -0
- package/ios/Views/YVPVotdView.swift +35 -0
- package/ios/YVPAuthAPI.swift +77 -0
- package/ios/YVPVotdAPI.swift +20 -0
- package/ios/YVPlatform.swift +17 -0
- package/ios/YouVersionReactNative.podspec +33 -0
- package/mocks/RNYouVersionPlatform.ts +146 -0
- package/package.json +58 -0
- package/scripts/release-local.sh +224 -0
- package/scripts/sync-android-version.js +75 -0
- package/src/api/bible.ts +35 -0
- package/src/api/highlights.ts +145 -0
- package/src/api/index.ts +13 -0
- package/src/api/languages.ts +14 -0
- package/src/api/users.ts +35 -0
- package/src/api/votd.ts +20 -0
- package/src/components/BibleReaderView.tsx +52 -0
- package/src/components/BibleTextView.tsx +63 -0
- package/src/components/BibleWidgetView.tsx +45 -0
- package/src/components/SignInWithYouVersionButton.tsx +70 -0
- package/src/components/VotdView.tsx +36 -0
- package/src/components/index.ts +5 -0
- package/src/index.ts +5 -0
- package/src/native.ts +58 -0
- package/src/platform.ts +30 -0
- package/src/types.ts +382 -0
- package/tsconfig.json +9 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"platforms": ["apple", "android"],
|
|
3
|
+
"features": ["swiftui"],
|
|
4
|
+
"apple": {
|
|
5
|
+
"modules": [
|
|
6
|
+
"RNYouVersionPlatformModule",
|
|
7
|
+
"RNSignInWithYouVersionButtonModule",
|
|
8
|
+
"RNBibleTextViewModule",
|
|
9
|
+
"RNVotdViewModule",
|
|
10
|
+
"RNBibleReaderViewModule",
|
|
11
|
+
"RNBibleWidgetViewModule"
|
|
12
|
+
]
|
|
13
|
+
},
|
|
14
|
+
"android": {
|
|
15
|
+
"modules": ["com.youversion.reactnativesdk.RNYouVersionPlatformModule"]
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import ExpoModulesCore
|
|
2
|
+
import YouVersionPlatform
|
|
3
|
+
|
|
4
|
+
struct YVPBibleAPI {
|
|
5
|
+
static func versions(languageTag: String?, promise: Promise) {
|
|
6
|
+
Task {
|
|
7
|
+
do {
|
|
8
|
+
let response = try await YouVersionAPI.Bible.versions(forLanguageTag: languageTag)
|
|
9
|
+
let records = response.map(BibleVersionRecord.init)
|
|
10
|
+
|
|
11
|
+
promise.resolve(records)
|
|
12
|
+
} catch {
|
|
13
|
+
promise.reject(error)
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
static func version(versionId: Int, promise: Promise) {
|
|
19
|
+
Task {
|
|
20
|
+
do {
|
|
21
|
+
let response = try await YouVersionAPI.Bible.version(versionId: versionId)
|
|
22
|
+
let record = BibleVersionRecord.init(bibleVersion: response)
|
|
23
|
+
|
|
24
|
+
promise.resolve(record)
|
|
25
|
+
} catch {
|
|
26
|
+
promise.reject(error)
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
static func chapter(bibleReference record: BibleReferenceRecord, promise: Promise) {
|
|
32
|
+
Task {
|
|
33
|
+
do {
|
|
34
|
+
let response = try await YouVersionAPI.Bible.chapter(reference: self.bibleReference(record))
|
|
35
|
+
|
|
36
|
+
promise.resolve(response)
|
|
37
|
+
} catch {
|
|
38
|
+
promise.reject(error)
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
static func bibleReference(_ record: BibleReferenceRecord) -> BibleReference {
|
|
44
|
+
if let start = record.verseStart, let end = record.verseEnd {
|
|
45
|
+
return BibleReference(
|
|
46
|
+
versionId: record.versionId,
|
|
47
|
+
bookUSFM: record.bookUSFM,
|
|
48
|
+
chapter: record.chapter,
|
|
49
|
+
verseStart: start,
|
|
50
|
+
verseEnd: end
|
|
51
|
+
)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return BibleReference(
|
|
55
|
+
versionId: record.versionId,
|
|
56
|
+
bookUSFM: record.bookUSFM,
|
|
57
|
+
chapter: record.chapter,
|
|
58
|
+
verse: record.verse
|
|
59
|
+
)
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
internal struct BibleVersionRecord: Record {
|
|
64
|
+
@Field
|
|
65
|
+
var id: Int
|
|
66
|
+
|
|
67
|
+
@Field
|
|
68
|
+
var abbreviation: String?
|
|
69
|
+
|
|
70
|
+
@Field
|
|
71
|
+
var copyrightLong: String?
|
|
72
|
+
|
|
73
|
+
@Field
|
|
74
|
+
var copyrightShort: String?
|
|
75
|
+
|
|
76
|
+
@Field
|
|
77
|
+
var languageTag: String?
|
|
78
|
+
|
|
79
|
+
@Field
|
|
80
|
+
var localizedAbbreviation: String?
|
|
81
|
+
|
|
82
|
+
@Field
|
|
83
|
+
var localizedTitle: String?
|
|
84
|
+
|
|
85
|
+
@Field
|
|
86
|
+
var readerFooter: String?
|
|
87
|
+
|
|
88
|
+
@Field
|
|
89
|
+
var readerFooterUrl: String?
|
|
90
|
+
|
|
91
|
+
@Field
|
|
92
|
+
var title: String?
|
|
93
|
+
|
|
94
|
+
@Field
|
|
95
|
+
var bookCodes: [String]?
|
|
96
|
+
|
|
97
|
+
@Field
|
|
98
|
+
var books: [BibleBookRecord]?
|
|
99
|
+
|
|
100
|
+
@Field
|
|
101
|
+
var textDirection: String?
|
|
102
|
+
|
|
103
|
+
init() { }
|
|
104
|
+
|
|
105
|
+
init(bibleVersion: BibleVersion) {
|
|
106
|
+
self.id = bibleVersion.id
|
|
107
|
+
self.abbreviation = bibleVersion.abbreviation
|
|
108
|
+
self.copyrightLong = bibleVersion.copyrightLong
|
|
109
|
+
self.copyrightShort = bibleVersion.copyrightShort
|
|
110
|
+
self.languageTag = bibleVersion.languageTag
|
|
111
|
+
self.localizedAbbreviation = bibleVersion.localizedAbbreviation
|
|
112
|
+
self.localizedTitle = bibleVersion.localizedTitle
|
|
113
|
+
self.readerFooter = bibleVersion.readerFooter
|
|
114
|
+
self.readerFooterUrl = bibleVersion.readerFooterUrl
|
|
115
|
+
self.title = bibleVersion.title
|
|
116
|
+
self.bookCodes = bibleVersion.bookCodes
|
|
117
|
+
|
|
118
|
+
if let bibleVersionBooks = bibleVersion.books {
|
|
119
|
+
self.books = bibleVersionBooks.map(BibleBookRecord.init)
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
self.textDirection = bibleVersion.textDirection
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
internal struct BibleBookRecord: Record {
|
|
127
|
+
@Field
|
|
128
|
+
var usfm: String?
|
|
129
|
+
|
|
130
|
+
@Field
|
|
131
|
+
var abbreviation: String?
|
|
132
|
+
|
|
133
|
+
@Field
|
|
134
|
+
var title: String?
|
|
135
|
+
|
|
136
|
+
@Field
|
|
137
|
+
var titleLong: String?
|
|
138
|
+
|
|
139
|
+
@Field
|
|
140
|
+
var chapters: [BibleChapterRecord]?
|
|
141
|
+
|
|
142
|
+
init() { }
|
|
143
|
+
|
|
144
|
+
init(bibleBook: BibleBook) {
|
|
145
|
+
self.usfm = bibleBook.usfm
|
|
146
|
+
self.abbreviation = bibleBook.abbreviation
|
|
147
|
+
self.title = bibleBook.title
|
|
148
|
+
self.titleLong = bibleBook.titleLong
|
|
149
|
+
|
|
150
|
+
if let bibleBookChapters = bibleBook.chapters {
|
|
151
|
+
self.chapters = bibleBookChapters.map(BibleChapterRecord.init)
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
internal struct BibleChapterRecord: Record {
|
|
157
|
+
@Field
|
|
158
|
+
var bookUSFM: String?
|
|
159
|
+
|
|
160
|
+
@Field
|
|
161
|
+
var isCanonical: Bool?
|
|
162
|
+
|
|
163
|
+
@Field
|
|
164
|
+
var passageId: String?
|
|
165
|
+
|
|
166
|
+
@Field
|
|
167
|
+
var title: String?
|
|
168
|
+
|
|
169
|
+
init() { }
|
|
170
|
+
|
|
171
|
+
init(bibleChapter: BibleChapter) {
|
|
172
|
+
self.bookUSFM = bibleChapter.bookUSFM
|
|
173
|
+
self.isCanonical = bibleChapter.isCanonical
|
|
174
|
+
self.passageId = bibleChapter.passageId
|
|
175
|
+
self.title = bibleChapter.title
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
internal struct BibleReferenceRecord: Record {
|
|
180
|
+
@Field
|
|
181
|
+
var versionId: Int
|
|
182
|
+
|
|
183
|
+
@Field
|
|
184
|
+
var bookUSFM: String
|
|
185
|
+
|
|
186
|
+
@Field
|
|
187
|
+
var chapter: Int
|
|
188
|
+
|
|
189
|
+
@Field
|
|
190
|
+
var verseStart: Int?
|
|
191
|
+
|
|
192
|
+
@Field
|
|
193
|
+
var verseEnd: Int?
|
|
194
|
+
|
|
195
|
+
@Field
|
|
196
|
+
var verse: Int?
|
|
197
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import ExpoModulesCore
|
|
2
|
+
import YouVersionPlatform
|
|
3
|
+
|
|
4
|
+
struct YVPHighlightsAPI {
|
|
5
|
+
|
|
6
|
+
static func createHighlight(bibleId: Int, passageId: String, color: String, promise: Promise) {
|
|
7
|
+
Task {
|
|
8
|
+
do {
|
|
9
|
+
let response = try await YouVersionAPI.Highlights.createHighlight(
|
|
10
|
+
bibleId: bibleId,
|
|
11
|
+
passageId: passageId,
|
|
12
|
+
color: color
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
promise.resolve(response)
|
|
16
|
+
} catch {
|
|
17
|
+
promise.reject(error)
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
static func getHighlights(bibleId: Int, passageId: String, promise: Promise) {
|
|
23
|
+
Task {
|
|
24
|
+
do {
|
|
25
|
+
let response = try await YouVersionAPI.Highlights.getHighlights(
|
|
26
|
+
bibleId: bibleId,
|
|
27
|
+
passageId: passageId
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
let records = response.map(HighlightRecord.init)
|
|
31
|
+
|
|
32
|
+
promise.resolve(records)
|
|
33
|
+
} catch {
|
|
34
|
+
promise.reject(error)
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
static func updateHighlight(bibleId: Int, passageId: String, color: String, promise: Promise) {
|
|
40
|
+
Task {
|
|
41
|
+
do {
|
|
42
|
+
let response = try await YouVersionAPI.Highlights.updateHighlight(
|
|
43
|
+
bibleId: bibleId,
|
|
44
|
+
passageId: passageId,
|
|
45
|
+
color: color
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
promise.resolve(response)
|
|
49
|
+
} catch {
|
|
50
|
+
promise.reject(error)
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
static func deleteHighlight(bibleId: Int, passageId: String, promise: Promise) {
|
|
56
|
+
Task {
|
|
57
|
+
do {
|
|
58
|
+
let response = try await YouVersionAPI.Highlights.deleteHighlight(
|
|
59
|
+
bibleId: bibleId,
|
|
60
|
+
passageId: passageId
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
promise.resolve(response)
|
|
64
|
+
} catch {
|
|
65
|
+
promise.reject(error)
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
internal struct HighlightRecord: Record {
|
|
73
|
+
init() { }
|
|
74
|
+
|
|
75
|
+
@Field
|
|
76
|
+
var id: String?
|
|
77
|
+
|
|
78
|
+
@Field
|
|
79
|
+
var bibleId: Int
|
|
80
|
+
|
|
81
|
+
@Field
|
|
82
|
+
var passageId: String
|
|
83
|
+
|
|
84
|
+
@Field
|
|
85
|
+
var color: String
|
|
86
|
+
|
|
87
|
+
@Field
|
|
88
|
+
var userId: String?
|
|
89
|
+
|
|
90
|
+
@Field
|
|
91
|
+
var createTime: String?
|
|
92
|
+
|
|
93
|
+
@Field
|
|
94
|
+
var updateTime: String?
|
|
95
|
+
|
|
96
|
+
init(_ response: HighlightResponse) {
|
|
97
|
+
self.id = response.id
|
|
98
|
+
self.bibleId = response.bibleId
|
|
99
|
+
self.passageId = response.passageId
|
|
100
|
+
self.color = response.color
|
|
101
|
+
self.userId = response.userId
|
|
102
|
+
self.createTime = response.createTime
|
|
103
|
+
self.updateTime = response.updateTime
|
|
104
|
+
}
|
|
105
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import ExpoModulesCore
|
|
2
|
+
import YouVersionPlatform
|
|
3
|
+
|
|
4
|
+
struct YVPLanguagesAPI {
|
|
5
|
+
static func languages(country: String?, promise: Promise) {
|
|
6
|
+
Task {
|
|
7
|
+
do {
|
|
8
|
+
let response = try await YouVersionAPI.Languages.languages(country: country)
|
|
9
|
+
let records = response.map(LanguageRecord.init)
|
|
10
|
+
|
|
11
|
+
promise.resolve(records)
|
|
12
|
+
} catch {
|
|
13
|
+
promise.reject(error)
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
internal struct LanguageRecord: Record {
|
|
22
|
+
init() { }
|
|
23
|
+
|
|
24
|
+
@Field
|
|
25
|
+
var id: String
|
|
26
|
+
|
|
27
|
+
@Field
|
|
28
|
+
var language: String
|
|
29
|
+
|
|
30
|
+
@Field
|
|
31
|
+
var script: String?
|
|
32
|
+
|
|
33
|
+
@Field
|
|
34
|
+
var scriptName: String?
|
|
35
|
+
|
|
36
|
+
@Field
|
|
37
|
+
var aliases: [String]
|
|
38
|
+
|
|
39
|
+
@Field
|
|
40
|
+
var displayNames: [String: String]
|
|
41
|
+
|
|
42
|
+
@Field
|
|
43
|
+
var scripts: [String]
|
|
44
|
+
|
|
45
|
+
@Field
|
|
46
|
+
var variants: [String]
|
|
47
|
+
|
|
48
|
+
@Field
|
|
49
|
+
var countries: [String]
|
|
50
|
+
|
|
51
|
+
@Field
|
|
52
|
+
var textDirection: String
|
|
53
|
+
|
|
54
|
+
@Field
|
|
55
|
+
var defaultBibleVersionId: Int?
|
|
56
|
+
|
|
57
|
+
init(_ response: LanguageOverview) {
|
|
58
|
+
self.id = response.id
|
|
59
|
+
self.language = response.language
|
|
60
|
+
self.script = response.script
|
|
61
|
+
self.scriptName = response.scriptName
|
|
62
|
+
self.aliases = response.aliases
|
|
63
|
+
self.displayNames = response.displayNames
|
|
64
|
+
self.scripts = response.scripts
|
|
65
|
+
self.variants = response.variants
|
|
66
|
+
self.countries = response.countries
|
|
67
|
+
self.textDirection = response.textDirection
|
|
68
|
+
self.defaultBibleVersionId = response.defaultBibleVersionId
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import ExpoModulesCore
|
|
2
|
+
|
|
3
|
+
public class RNYouVersionPlatformModule: Module {
|
|
4
|
+
public func definition() -> ModuleDefinition {
|
|
5
|
+
Name("RNYouVersionPlatform")
|
|
6
|
+
|
|
7
|
+
AsyncFunction("configure") { (appKey: String) async -> Void in
|
|
8
|
+
await YVPlatform.configure(appKey: appKey)
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
AsyncFunction("setApiHost") { (apiHost: String) async -> Void in
|
|
12
|
+
YVPlatform.setApiHost(apiHost: apiHost)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
Function("getAccessToken") { () -> String? in
|
|
16
|
+
return YVPlatform.getAccessToken()
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
AsyncFunction("signIn") { (
|
|
20
|
+
permissions: [String],
|
|
21
|
+
promise: Promise
|
|
22
|
+
) in
|
|
23
|
+
YVPAuthAPI.signIn(
|
|
24
|
+
permissions: permissions,
|
|
25
|
+
promise: promise
|
|
26
|
+
)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
AsyncFunction("signOut") { () async -> Void in
|
|
30
|
+
await YVPAuthAPI.signOut()
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
AsyncFunction("userInfo") { (
|
|
34
|
+
accessToken: String?,
|
|
35
|
+
promise: Promise
|
|
36
|
+
) in
|
|
37
|
+
YVPAuthAPI.userInfo(accessToken: accessToken, promise: promise)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
AsyncFunction("verseOfTheDay") { (
|
|
41
|
+
dayOfYear: Int,
|
|
42
|
+
promise: Promise
|
|
43
|
+
) in
|
|
44
|
+
YVPVotdAPI.verseOfTheDay(dayOfYear: dayOfYear, promise: promise)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
AsyncFunction("createHighlight") { (bibleId: Int, passageId: String, color: String, promise: Promise) in
|
|
48
|
+
YVPHighlightsAPI.createHighlight(bibleId: bibleId, passageId: passageId, color: color, promise: promise)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
AsyncFunction("getHighlights") { (bibleId: Int, passageId: String, promise: Promise) in
|
|
52
|
+
YVPHighlightsAPI.getHighlights(bibleId: bibleId, passageId: passageId, promise: promise)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
AsyncFunction("updateHighlight") { (bibleId: Int, passageId: String, color: String, promise: Promise) in
|
|
56
|
+
YVPHighlightsAPI.updateHighlight(bibleId: bibleId, passageId: passageId, color: color, promise: promise)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
AsyncFunction("deleteHighlight") { (bibleId: Int, passageId: String, promise: Promise) in
|
|
60
|
+
YVPHighlightsAPI.deleteHighlight(bibleId: bibleId, passageId: passageId, promise: promise)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
AsyncFunction("languages") { (country: String?, promise: Promise) in
|
|
64
|
+
YVPLanguagesAPI.languages(country: country, promise: promise)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
AsyncFunction("versions") { (languageTag: String?, promise: Promise) in
|
|
68
|
+
YVPBibleAPI.versions(languageTag: languageTag, promise: promise)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
AsyncFunction("version") { (versionId: Int, promise: Promise) in
|
|
72
|
+
YVPBibleAPI.version(versionId: versionId, promise: promise)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
AsyncFunction("chapter") { (bibleReference: BibleReferenceRecord, promise: Promise) in
|
|
76
|
+
YVPBibleAPI.chapter(bibleReference: bibleReference, promise: promise)
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
|
|
2
|
+
import ExpoModulesCore
|
|
3
|
+
import YouVersionPlatform
|
|
4
|
+
import SwiftUI
|
|
5
|
+
|
|
6
|
+
class BibleReaderViewProps: ExpoSwiftUI.ViewProps {
|
|
7
|
+
// Bible reference
|
|
8
|
+
@Field var versionId: Int
|
|
9
|
+
@Field var bookUSFM: String
|
|
10
|
+
@Field var chapter: Int
|
|
11
|
+
@Field var verse: Int?
|
|
12
|
+
@Field var verseStart: Int?
|
|
13
|
+
@Field var verseEnd: Int?
|
|
14
|
+
|
|
15
|
+
@Field var appName: String
|
|
16
|
+
@Field var signInMessage: String
|
|
17
|
+
@Field var hasReference: Bool
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
struct YVPBibleReaderView: ExpoSwiftUI.View, ExpoSwiftUI.WithHostingView {
|
|
21
|
+
@ObservedObject var props: BibleReaderViewProps
|
|
22
|
+
|
|
23
|
+
init(props: BibleReaderViewProps) {
|
|
24
|
+
self.props = props
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
var body: some View {
|
|
28
|
+
BibleReaderView(
|
|
29
|
+
reference: bibleReference(),
|
|
30
|
+
appName: props.appName,
|
|
31
|
+
signInMessage: props.signInMessage
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
func bibleReference() -> BibleReference? {
|
|
36
|
+
if let start = props.verseStart, let end = props.verseEnd {
|
|
37
|
+
return BibleReference(
|
|
38
|
+
versionId: props.versionId,
|
|
39
|
+
bookUSFM: props.bookUSFM,
|
|
40
|
+
chapter: props.chapter,
|
|
41
|
+
verseStart: start,
|
|
42
|
+
verseEnd: end
|
|
43
|
+
)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if props.hasReference {
|
|
47
|
+
return BibleReference(
|
|
48
|
+
versionId: props.versionId,
|
|
49
|
+
bookUSFM: props.bookUSFM,
|
|
50
|
+
chapter: props.chapter,
|
|
51
|
+
verse: props.verse
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return nil
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
|
|
2
|
+
import ExpoModulesCore
|
|
3
|
+
import YouVersionPlatform
|
|
4
|
+
import SwiftUI
|
|
5
|
+
|
|
6
|
+
class BibleTextViewProps: ExpoSwiftUI.ViewProps {
|
|
7
|
+
// Styling
|
|
8
|
+
@Field var fontFamily: String?
|
|
9
|
+
@Field var fontSize: CGFloat?
|
|
10
|
+
@Field var lineSpacing: CGFloat?
|
|
11
|
+
@Field var paragraphSpacing: CGFloat?
|
|
12
|
+
@Field var textColor: UIColor?
|
|
13
|
+
@Field var wocColor: UIColor?
|
|
14
|
+
@Field var footnoteMode: String?
|
|
15
|
+
@Field var renderVerseNumbers: Bool? = true
|
|
16
|
+
|
|
17
|
+
// Bible reference
|
|
18
|
+
@Field var versionId: Int
|
|
19
|
+
@Field var bookUSFM: String
|
|
20
|
+
@Field var chapter: Int
|
|
21
|
+
@Field var verse: Int?
|
|
22
|
+
@Field var verseStart: Int?
|
|
23
|
+
@Field var verseEnd: Int?
|
|
24
|
+
|
|
25
|
+
var onTap = EventDispatcher()
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
struct YVPBibleTextView: ExpoSwiftUI.View, ExpoSwiftUI.WithHostingView {
|
|
29
|
+
@ObservedObject var props: BibleTextViewProps
|
|
30
|
+
@EnvironmentObject var shadowNodeProxy: ExpoSwiftUI.ShadowNodeProxy
|
|
31
|
+
|
|
32
|
+
init(props: BibleTextViewProps) {
|
|
33
|
+
self.props = props
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
var body: some View {
|
|
37
|
+
ExpoSwiftUI.AutoSizingStack(shadowNodeProxy: shadowNodeProxy, axis: .vertical) {
|
|
38
|
+
BibleTextView(
|
|
39
|
+
bibleReference(),
|
|
40
|
+
textOptions: textOptions(),
|
|
41
|
+
onVerseTap: { bibleRef, point in
|
|
42
|
+
props.onTap([
|
|
43
|
+
"bibleReference": toJsBibleReference(bibleRef),
|
|
44
|
+
"point": toJsPoint(point)
|
|
45
|
+
])
|
|
46
|
+
}
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
func toJsBibleReference(_ bibleRef: BibleReference) -> [String: Any] {
|
|
52
|
+
[
|
|
53
|
+
"versionId": bibleRef.versionId,
|
|
54
|
+
"bookUSFM": bibleRef.bookUSFM,
|
|
55
|
+
"chapter": bibleRef.chapter,
|
|
56
|
+
"verse": bibleRef.verseStart,
|
|
57
|
+
"type": "verse"
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
func toJsPoint(_ point: CGPoint) -> [String: CGFloat] {
|
|
62
|
+
["x": point.x, "y": point.y]
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
func bibleReference() -> BibleReference {
|
|
66
|
+
if let start = props.verseStart, let end = props.verseEnd {
|
|
67
|
+
return BibleReference(
|
|
68
|
+
versionId: props.versionId,
|
|
69
|
+
bookUSFM: props.bookUSFM,
|
|
70
|
+
chapter: props.chapter,
|
|
71
|
+
verseStart: start,
|
|
72
|
+
verseEnd: end
|
|
73
|
+
)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return BibleReference(
|
|
77
|
+
versionId: props.versionId,
|
|
78
|
+
bookUSFM: props.bookUSFM,
|
|
79
|
+
chapter: props.chapter,
|
|
80
|
+
verse: props.verse
|
|
81
|
+
)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
func textOptions() -> BibleTextOptions {
|
|
85
|
+
BibleTextOptions(
|
|
86
|
+
fontFamily: props.fontFamily ?? "Times New Roman",
|
|
87
|
+
fontSize: props.fontSize ?? 16,
|
|
88
|
+
lineSpacing: props.lineSpacing,
|
|
89
|
+
paragraphSpacing: props.paragraphSpacing,
|
|
90
|
+
textColor: textColor(),
|
|
91
|
+
wocColor: wocColor(),
|
|
92
|
+
renderVerseNumbers: props.renderVerseNumbers ?? true,
|
|
93
|
+
footnoteMode: footnoteMode()
|
|
94
|
+
)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
func textColor() -> Color? {
|
|
98
|
+
props.textColor == nil ? nil : Color(uiColor: props.textColor!)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
func wocColor() -> Color {
|
|
102
|
+
// If there's no wocColor provided, use the YouVersion red as default
|
|
103
|
+
props.wocColor == nil ? Color(red: 1, green: 0x3d / 255.0, blue: 0x4d / 255.0) : Color(uiColor: props.wocColor!)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
func footnoteMode() -> BibleTextFootnoteMode {
|
|
107
|
+
switch(props.footnoteMode) {
|
|
108
|
+
case "none": .none
|
|
109
|
+
case "inline": .inline
|
|
110
|
+
case "marker": .marker
|
|
111
|
+
default: .none
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|