@react-native-kakao/share 1.0.4 → 1.2.0
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/android/src/main/java/net/mjstudio/rnkakao/share/RNCKakaoShareModule.kt +177 -90
- package/android/src/main/java/net/mjstudio/rnkakao/share/RNCKakaoSharePackage.kt +16 -12
- package/android/src/main/java/net/mjstudio/rnkakao/share/RNCKakaoShareTemplates.kt +138 -9
- package/android/src/oldarch/KakaoShareSpec.kt +49 -7
- package/ios/RNCKakaoShare.mm +22 -0
- package/ios/RNCKakaoShareManager.swift +127 -22
- package/lib/commonjs/index.js +48 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/spec/NativeKakaoShare.js +113 -0
- package/lib/commonjs/spec/NativeKakaoShare.js.map +1 -1
- package/lib/module/index.js +42 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/spec/NativeKakaoShare.js +127 -0
- package/lib/module/spec/NativeKakaoShare.js.map +1 -1
- package/lib/typescript/src/index.d.ts +32 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/spec/NativeKakaoShare.d.ts +228 -1
- package/lib/typescript/src/spec/NativeKakaoShare.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/index.tsx +127 -1
- package/src/spec/NativeKakaoShare.ts +252 -2
|
@@ -15,112 +15,199 @@ import net.mjstudio.rnkakao.core.util.rejectWith
|
|
|
15
15
|
import net.mjstudio.rnkakao.core.util.toStringMap
|
|
16
16
|
|
|
17
17
|
class RNCKakaoShareModule internal constructor(context: ReactApplicationContext) :
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
KakaoShareSpec(context) {
|
|
20
19
|
override fun getName(): String {
|
|
21
|
-
|
|
20
|
+
return NAME
|
|
22
21
|
}
|
|
23
22
|
|
|
24
23
|
@ReactMethod
|
|
25
24
|
override fun shareCustom(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
templateId: Double,
|
|
26
|
+
useWebBrowserIfKakaoTalkNotAvailable: Boolean,
|
|
27
|
+
templateArgs: ReadableMap?,
|
|
28
|
+
serverCallbackArgs: ReadableMap?,
|
|
29
|
+
promise: Promise,
|
|
30
|
+
) = onMain {
|
|
31
|
+
runShare(
|
|
32
|
+
templateId = templateId,
|
|
33
|
+
useWebBrowserIfKakaoTalkNotAvailable = useWebBrowserIfKakaoTalkNotAvailable,
|
|
34
|
+
templateArgs = templateArgs,
|
|
35
|
+
serverCallbackArgs = serverCallbackArgs,
|
|
36
|
+
promise = promise,
|
|
37
|
+
)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@ReactMethod
|
|
41
|
+
override fun shareFeedTemplate(
|
|
42
|
+
value: ReadableMap,
|
|
43
|
+
useWebBrowserIfKakaoTalkNotAvailable: Boolean,
|
|
44
|
+
serverCallbackArgs: ReadableMap?,
|
|
45
|
+
promise: Promise,
|
|
46
|
+
) = onMain {
|
|
47
|
+
runShare(
|
|
48
|
+
defaultTemplate = RNCKakaoShareTemplates.createFeedTemplate(value),
|
|
49
|
+
useWebBrowserIfKakaoTalkNotAvailable = useWebBrowserIfKakaoTalkNotAvailable,
|
|
50
|
+
serverCallbackArgs = serverCallbackArgs,
|
|
51
|
+
promise = promise,
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@ReactMethod
|
|
56
|
+
override fun shareListTemplate(
|
|
57
|
+
value: ReadableMap,
|
|
58
|
+
useWebBrowserIfKakaoTalkNotAvailable: Boolean,
|
|
59
|
+
serverCallbackArgs: ReadableMap?,
|
|
60
|
+
promise: Promise,
|
|
61
|
+
) = onMain {
|
|
62
|
+
runShare(
|
|
63
|
+
defaultTemplate = RNCKakaoShareTemplates.createListTemplate(value),
|
|
64
|
+
useWebBrowserIfKakaoTalkNotAvailable = useWebBrowserIfKakaoTalkNotAvailable,
|
|
65
|
+
serverCallbackArgs = serverCallbackArgs,
|
|
66
|
+
promise = promise,
|
|
67
|
+
)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
@ReactMethod
|
|
71
|
+
override fun shareLocationTemplate(
|
|
72
|
+
value: ReadableMap,
|
|
73
|
+
useWebBrowserIfKakaoTalkNotAvailable: Boolean,
|
|
74
|
+
serverCallbackArgs: ReadableMap?,
|
|
75
|
+
promise: Promise,
|
|
76
|
+
) = onMain {
|
|
77
|
+
runShare(
|
|
78
|
+
defaultTemplate = RNCKakaoShareTemplates.createLocationTemplate(value),
|
|
79
|
+
useWebBrowserIfKakaoTalkNotAvailable = useWebBrowserIfKakaoTalkNotAvailable,
|
|
80
|
+
serverCallbackArgs = serverCallbackArgs,
|
|
81
|
+
promise = promise,
|
|
82
|
+
)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@ReactMethod
|
|
86
|
+
override fun shareCommerceTemplate(
|
|
87
|
+
value: ReadableMap,
|
|
88
|
+
useWebBrowserIfKakaoTalkNotAvailable: Boolean,
|
|
89
|
+
serverCallbackArgs: ReadableMap?,
|
|
90
|
+
promise: Promise,
|
|
91
|
+
) = onMain {
|
|
92
|
+
runShare(
|
|
93
|
+
defaultTemplate = RNCKakaoShareTemplates.createCommerceTemplate(value),
|
|
94
|
+
useWebBrowserIfKakaoTalkNotAvailable = useWebBrowserIfKakaoTalkNotAvailable,
|
|
95
|
+
serverCallbackArgs = serverCallbackArgs,
|
|
96
|
+
promise = promise,
|
|
97
|
+
)
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
@ReactMethod
|
|
101
|
+
override fun shareTextTemplate(
|
|
102
|
+
value: ReadableMap,
|
|
103
|
+
useWebBrowserIfKakaoTalkNotAvailable: Boolean,
|
|
104
|
+
serverCallbackArgs: ReadableMap?,
|
|
105
|
+
promise: Promise,
|
|
31
106
|
) = onMain {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
)
|
|
107
|
+
runShare(
|
|
108
|
+
defaultTemplate = RNCKakaoShareTemplates.createTextTemplate(value),
|
|
109
|
+
useWebBrowserIfKakaoTalkNotAvailable = useWebBrowserIfKakaoTalkNotAvailable,
|
|
110
|
+
serverCallbackArgs = serverCallbackArgs,
|
|
111
|
+
promise = promise,
|
|
112
|
+
)
|
|
39
113
|
}
|
|
40
114
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
115
|
+
@ReactMethod
|
|
116
|
+
override fun shareCalendarTemplate(
|
|
117
|
+
value: ReadableMap,
|
|
118
|
+
useWebBrowserIfKakaoTalkNotAvailable: Boolean,
|
|
119
|
+
serverCallbackArgs: ReadableMap?,
|
|
120
|
+
promise: Promise,
|
|
121
|
+
) = onMain {
|
|
122
|
+
runShare(
|
|
123
|
+
defaultTemplate = RNCKakaoShareTemplates.createCalendarTemplate(value),
|
|
124
|
+
useWebBrowserIfKakaoTalkNotAvailable = useWebBrowserIfKakaoTalkNotAvailable,
|
|
125
|
+
serverCallbackArgs = serverCallbackArgs,
|
|
126
|
+
promise = promise,
|
|
127
|
+
)
|
|
128
|
+
}
|
|
52
129
|
|
|
53
130
|
private fun runShare(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
131
|
+
templateId: Double? = null,
|
|
132
|
+
defaultTemplate: DefaultTemplate? = null,
|
|
133
|
+
useWebBrowserIfKakaoTalkNotAvailable: Boolean,
|
|
134
|
+
templateArgs: ReadableMap? = null,
|
|
135
|
+
serverCallbackArgs: ReadableMap? = null,
|
|
136
|
+
promise: Promise,
|
|
60
137
|
) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
138
|
+
val context = currentActivity
|
|
139
|
+
if (context == null) {
|
|
140
|
+
promise.rejectWith(ActivityNotFoundException())
|
|
141
|
+
return
|
|
142
|
+
}
|
|
66
143
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
144
|
+
val callback = { sharingResult: SharingResult?, error: Throwable? ->
|
|
145
|
+
if (error != null) {
|
|
146
|
+
promise.rejectWith(error)
|
|
147
|
+
} else if (sharingResult != null) {
|
|
148
|
+
context.startActivity(sharingResult.intent)
|
|
149
|
+
promise.resolve(42)
|
|
150
|
+
} else {
|
|
151
|
+
promise.resolve(42)
|
|
152
|
+
}
|
|
153
|
+
}
|
|
76
154
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
KakaoCustomTabsClient.open(context, sharerUrl)
|
|
112
|
-
promise.resolve(42)
|
|
113
|
-
return
|
|
114
|
-
} catch (_: ActivityNotFoundException) {
|
|
155
|
+
if (ShareClient.instance.isKakaoTalkSharingAvailable(context)) {
|
|
156
|
+
if (templateId != null) {
|
|
157
|
+
ShareClient.instance.shareCustom(
|
|
158
|
+
context,
|
|
159
|
+
templateId.toLong(),
|
|
160
|
+
templateArgs = templateArgs?.toStringMap(),
|
|
161
|
+
serverCallbackArgs = serverCallbackArgs?.toStringMap(),
|
|
162
|
+
callback = callback,
|
|
163
|
+
)
|
|
164
|
+
} else if (defaultTemplate != null) {
|
|
165
|
+
ShareClient.instance.shareDefault(
|
|
166
|
+
context,
|
|
167
|
+
defaultTemplate,
|
|
168
|
+
serverCallbackArgs = serverCallbackArgs?.toStringMap(),
|
|
169
|
+
callback = callback,
|
|
170
|
+
)
|
|
171
|
+
}
|
|
172
|
+
} else if (useWebBrowserIfKakaoTalkNotAvailable) {
|
|
173
|
+
val sharerUrl =
|
|
174
|
+
if (templateId != null) {
|
|
175
|
+
WebSharerClient.instance.makeCustomUrl(
|
|
176
|
+
templateId.toLong(),
|
|
177
|
+
templateArgs = templateArgs?.toStringMap(),
|
|
178
|
+
serverCallbackArgs = serverCallbackArgs?.toStringMap(),
|
|
179
|
+
)
|
|
180
|
+
} else if (defaultTemplate != null) {
|
|
181
|
+
WebSharerClient.instance.makeDefaultUrl(
|
|
182
|
+
defaultTemplate,
|
|
183
|
+
serverCallbackArgs = serverCallbackArgs?.toStringMap(),
|
|
184
|
+
)
|
|
185
|
+
} else {
|
|
186
|
+
run {
|
|
187
|
+
promise.rejectWith("one of templateId or template shouldn't be null")
|
|
188
|
+
return
|
|
115
189
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
190
|
+
}
|
|
191
|
+
try {
|
|
192
|
+
KakaoCustomTabsClient.openWithDefault(context, sharerUrl)
|
|
193
|
+
promise.resolve(42)
|
|
194
|
+
return
|
|
195
|
+
} catch (_: UnsupportedOperationException) {
|
|
120
196
|
}
|
|
197
|
+
try {
|
|
198
|
+
KakaoCustomTabsClient.open(context, sharerUrl)
|
|
199
|
+
promise.resolve(42)
|
|
200
|
+
return
|
|
201
|
+
} catch (_: ActivityNotFoundException) {
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
promise.rejectWith("web url open failed $sharerUrl")
|
|
205
|
+
} else {
|
|
206
|
+
promise.rejectWith("kakaotalk not available")
|
|
207
|
+
}
|
|
121
208
|
}
|
|
122
209
|
|
|
123
210
|
companion object {
|
|
124
|
-
|
|
211
|
+
const val NAME = "RNCKakaoShare"
|
|
125
212
|
}
|
|
126
|
-
}
|
|
213
|
+
}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
package net.mjstudio.rnkakao.share
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.TurboReactPackage
|
|
4
|
-
import com.facebook.react.bridge.ReactApplicationContext
|
|
5
4
|
import com.facebook.react.bridge.NativeModule
|
|
6
|
-
import com.facebook.react.
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
7
6
|
import com.facebook.react.module.model.ReactModuleInfo
|
|
7
|
+
import com.facebook.react.module.model.ReactModuleInfoProvider
|
|
8
8
|
import java.util.HashMap
|
|
9
9
|
|
|
10
10
|
class RNCKakaoSharePackage : TurboReactPackage() {
|
|
11
|
-
override fun getModule(
|
|
11
|
+
override fun getModule(
|
|
12
|
+
name: String,
|
|
13
|
+
reactContext: ReactApplicationContext,
|
|
14
|
+
): NativeModule? {
|
|
12
15
|
return if (name == RNCKakaoShareModule.NAME) {
|
|
13
16
|
RNCKakaoShareModule(reactContext)
|
|
14
17
|
} else {
|
|
@@ -20,15 +23,16 @@ class RNCKakaoSharePackage : TurboReactPackage() {
|
|
|
20
23
|
return ReactModuleInfoProvider {
|
|
21
24
|
val moduleInfos: MutableMap<String, ReactModuleInfo> = HashMap()
|
|
22
25
|
val isTurboModule: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
|
|
23
|
-
moduleInfos[RNCKakaoShareModule.NAME] =
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
26
|
+
moduleInfos[RNCKakaoShareModule.NAME] =
|
|
27
|
+
ReactModuleInfo(
|
|
28
|
+
RNCKakaoShareModule.NAME,
|
|
29
|
+
RNCKakaoShareModule.NAME,
|
|
30
|
+
false, // canOverrideExistingModule
|
|
31
|
+
false, // needsEagerInit
|
|
32
|
+
true, // hasConstants
|
|
33
|
+
false, // isCxxModule
|
|
34
|
+
isTurboModule, // isTurboModule
|
|
35
|
+
)
|
|
32
36
|
moduleInfos
|
|
33
37
|
}
|
|
34
38
|
}
|
|
@@ -1,11 +1,140 @@
|
|
|
1
1
|
package net.mjstudio.rnkakao.share
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
import com.facebook.react.bridge.ReadableMap
|
|
4
|
+
import com.kakao.sdk.template.model.Button
|
|
5
|
+
import com.kakao.sdk.template.model.CalendarTemplate
|
|
6
|
+
import com.kakao.sdk.template.model.Commerce
|
|
7
|
+
import com.kakao.sdk.template.model.CommerceTemplate
|
|
8
|
+
import com.kakao.sdk.template.model.Content
|
|
9
|
+
import com.kakao.sdk.template.model.FeedTemplate
|
|
10
|
+
import com.kakao.sdk.template.model.IdType.CALENDAR
|
|
11
|
+
import com.kakao.sdk.template.model.IdType.EVENT
|
|
12
|
+
import com.kakao.sdk.template.model.ItemContent
|
|
13
|
+
import com.kakao.sdk.template.model.ItemInfo
|
|
14
|
+
import com.kakao.sdk.template.model.Link
|
|
15
|
+
import com.kakao.sdk.template.model.ListTemplate
|
|
16
|
+
import com.kakao.sdk.template.model.LocationTemplate
|
|
17
|
+
import com.kakao.sdk.template.model.Social
|
|
18
|
+
import com.kakao.sdk.template.model.TextTemplate
|
|
19
|
+
import net.mjstudio.rnkakao.core.util.filterIsReadableMap
|
|
20
|
+
import net.mjstudio.rnkakao.core.util.getIntElseNull
|
|
21
|
+
import net.mjstudio.rnkakao.core.util.toStringMap
|
|
22
|
+
|
|
23
|
+
object RNCKakaoShareTemplates {
|
|
24
|
+
private fun ReadableMap.toLink() =
|
|
25
|
+
Link(
|
|
26
|
+
webUrl = getString("webUrl"),
|
|
27
|
+
mobileWebUrl = getString("mobileWebUrl"),
|
|
28
|
+
androidExecutionParams = getMap("androidExecutionParams")?.toStringMap(),
|
|
29
|
+
iosExecutionParams = getMap("iosExecutionParams")?.toStringMap(),
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
private fun ReadableMap.toContent() =
|
|
33
|
+
Content(
|
|
34
|
+
title = getString("title"),
|
|
35
|
+
imageUrl = getString("imageUrl"),
|
|
36
|
+
link = getMap("link")?.toLink() ?: Link(),
|
|
37
|
+
description = getString("description"),
|
|
38
|
+
imageWidth = getIntElseNull("imageWidth"),
|
|
39
|
+
imageHeight = getIntElseNull("imageHeight"),
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
private fun ReadableMap.toItemInfo() =
|
|
43
|
+
ItemInfo(
|
|
44
|
+
item = getString("item") ?: "",
|
|
45
|
+
itemOp = getString("itemOp") ?: "",
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
private fun ReadableMap.toItemContent() =
|
|
49
|
+
ItemContent(
|
|
50
|
+
profileText = getString("profileText"),
|
|
51
|
+
profileImageUrl = getString("profileImageUrl"),
|
|
52
|
+
titleImageText = getString("titleImageText"),
|
|
53
|
+
titleImageUrl = getString("titleImageUrl"),
|
|
54
|
+
titleImageCategory = getString("titleImageCategory"),
|
|
55
|
+
items = getArray("items")?.filterIsReadableMap()?.map { it.toItemInfo() },
|
|
56
|
+
sum = getString("sum"),
|
|
57
|
+
sumOp = getString("sumOp"),
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
private fun ReadableMap.toSocial() =
|
|
61
|
+
Social(
|
|
62
|
+
likeCount = getIntElseNull("likeCount"),
|
|
63
|
+
commentCount = getIntElseNull("commentCount"),
|
|
64
|
+
sharedCount = getIntElseNull("sharedCount"),
|
|
65
|
+
viewCount = getIntElseNull("viewCount"),
|
|
66
|
+
subscriberCount = getIntElseNull("subscriberCount"),
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
private fun ReadableMap.toButton() =
|
|
70
|
+
Button(
|
|
71
|
+
title = getString("title") ?: "",
|
|
72
|
+
link = getMap("link")?.toLink() ?: Link(),
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
private fun ReadableMap.toCommerce() =
|
|
76
|
+
Commerce(
|
|
77
|
+
regularPrice = getIntElseNull("regularPrice") ?: 0,
|
|
78
|
+
discountPrice = getIntElseNull("discountPrice"),
|
|
79
|
+
fixedDiscountPrice = getIntElseNull("fixedDiscountPrice"),
|
|
80
|
+
discountRate = getIntElseNull("discountRate"),
|
|
81
|
+
productName = getString("productName"),
|
|
82
|
+
currencyUnit = getString("currencyUnit"),
|
|
83
|
+
currencyUnitPosition = getIntElseNull("currencyUnitPosition"),
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
fun createFeedTemplate(map: ReadableMap) =
|
|
87
|
+
FeedTemplate(
|
|
88
|
+
content = map.getMap("content")!!.toContent(),
|
|
89
|
+
itemContent = map.getMap("itemContent")?.toItemContent(),
|
|
90
|
+
social = map.getMap("social")?.toSocial(),
|
|
91
|
+
buttons = map.getArray("buttons")?.filterIsReadableMap()?.map { it.toButton() },
|
|
92
|
+
buttonTitle = map.getString("buttonTitle"),
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
fun createListTemplate(map: ReadableMap): ListTemplate {
|
|
96
|
+
return ListTemplate(
|
|
97
|
+
headerTitle = map.getString("headerTitle") ?: "",
|
|
98
|
+
headerLink = map.getMap("headerLink")?.toLink() ?: Link(),
|
|
99
|
+
contents =
|
|
100
|
+
map.getArray("contents")?.filterIsReadableMap()?.map { it.toContent() }
|
|
101
|
+
?: listOf(),
|
|
102
|
+
buttons = map.getArray("buttons")?.filterIsReadableMap()?.map { it.toButton() },
|
|
103
|
+
buttonTitle = map.getString("buttonTitle"),
|
|
104
|
+
)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
fun createLocationTemplate(map: ReadableMap) =
|
|
108
|
+
LocationTemplate(
|
|
109
|
+
address = map.getString("address") ?: "",
|
|
110
|
+
content = map.getMap("content")!!.toContent(),
|
|
111
|
+
addressTitle = map.getString("addressTitle"),
|
|
112
|
+
social = map.getMap("social")?.toSocial(),
|
|
113
|
+
buttons = map.getArray("buttons")?.filterIsReadableMap()?.map { it.toButton() },
|
|
114
|
+
buttonTitle = map.getString("buttonTitle"),
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
fun createCommerceTemplate(map: ReadableMap) =
|
|
118
|
+
CommerceTemplate(
|
|
119
|
+
content = map.getMap("content")!!.toContent(),
|
|
120
|
+
commerce = map.getMap("commerce")!!.toCommerce(),
|
|
121
|
+
buttons = map.getArray("buttons")?.filterIsReadableMap()?.map { it.toButton() },
|
|
122
|
+
buttonTitle = map.getString("buttonTitle"),
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
fun createTextTemplate(map: ReadableMap) =
|
|
126
|
+
TextTemplate(
|
|
127
|
+
text = map.getString("text") ?: "",
|
|
128
|
+
link = map.getMap("link")?.toLink() ?: Link(),
|
|
129
|
+
buttons = map.getArray("buttons")?.filterIsReadableMap()?.map { it.toButton() },
|
|
130
|
+
buttonTitle = map.getString("buttonTitle"),
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
fun createCalendarTemplate(map: ReadableMap) =
|
|
134
|
+
CalendarTemplate(
|
|
135
|
+
id = map.getString("id")!!,
|
|
136
|
+
idType = if (map.getString("id") == "event") EVENT else CALENDAR,
|
|
137
|
+
content = map.getMap("content")!!.toContent(),
|
|
138
|
+
buttons = map.getArray("buttons")?.filterIsReadableMap()?.map { it.toButton() },
|
|
139
|
+
)
|
|
140
|
+
}
|
|
@@ -6,12 +6,54 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule
|
|
|
6
6
|
import com.facebook.react.bridge.ReadableMap
|
|
7
7
|
|
|
8
8
|
abstract class KakaoShareSpec internal constructor(context: ReactApplicationContext) :
|
|
9
|
-
|
|
9
|
+
ReactContextBaseJavaModule(context) {
|
|
10
10
|
abstract fun shareCustom(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
templateId: Double,
|
|
12
|
+
useWebBrowserIfKakaoTalkNotAvailable: Boolean,
|
|
13
|
+
templateArgs: ReadableMap?,
|
|
14
|
+
serverCallbackArgs: ReadableMap?,
|
|
15
|
+
promise: Promise,
|
|
16
16
|
)
|
|
17
|
-
|
|
17
|
+
|
|
18
|
+
abstract fun shareFeedTemplate(
|
|
19
|
+
value: ReadableMap,
|
|
20
|
+
useWebBrowserIfKakaoTalkNotAvailable: Boolean,
|
|
21
|
+
serverCallbackArgs: ReadableMap?,
|
|
22
|
+
promise: Promise,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
abstract fun shareListTemplate(
|
|
26
|
+
value: ReadableMap,
|
|
27
|
+
useWebBrowserIfKakaoTalkNotAvailable: Boolean,
|
|
28
|
+
serverCallbackArgs: ReadableMap?,
|
|
29
|
+
promise: Promise,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
abstract fun shareLocationTemplate(
|
|
33
|
+
value: ReadableMap,
|
|
34
|
+
useWebBrowserIfKakaoTalkNotAvailable: Boolean,
|
|
35
|
+
serverCallbackArgs: ReadableMap?,
|
|
36
|
+
promise: Promise,
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
abstract fun shareCommerceTemplate(
|
|
40
|
+
value: ReadableMap,
|
|
41
|
+
useWebBrowserIfKakaoTalkNotAvailable: Boolean,
|
|
42
|
+
serverCallbackArgs: ReadableMap?,
|
|
43
|
+
promise: Promise,
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
abstract fun shareTextTemplate(
|
|
47
|
+
value: ReadableMap,
|
|
48
|
+
useWebBrowserIfKakaoTalkNotAvailable: Boolean,
|
|
49
|
+
serverCallbackArgs: ReadableMap?,
|
|
50
|
+
promise: Promise,
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
abstract fun shareCalendarTemplate(
|
|
54
|
+
value: ReadableMap,
|
|
55
|
+
useWebBrowserIfKakaoTalkNotAvailable: Boolean,
|
|
56
|
+
serverCallbackArgs: ReadableMap?,
|
|
57
|
+
promise: Promise,
|
|
58
|
+
)
|
|
59
|
+
}
|
package/ios/RNCKakaoShare.mm
CHANGED
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
#import "RNCKakaoShare.h"
|
|
2
2
|
#import "RNCKakaoShare-Swift.h"
|
|
3
3
|
|
|
4
|
+
#define RNC_KAKAO_SHARE_EXPORT_DEFAULT_TEMPLATE(name, type_name) \
|
|
5
|
+
RCT_EXPORT_METHOD(name \
|
|
6
|
+
: (NSDictionary*)value useWebBrowserIfKakaoTalkNotAvailable \
|
|
7
|
+
: (BOOL)useWebBrowserIfKakaoTalkNotAvailable serverCallbackArgs \
|
|
8
|
+
: (NSDictionary*)serverCallbackArgs resolve \
|
|
9
|
+
: (RCTPromiseResolveBlock)resolve reject \
|
|
10
|
+
: (RCTPromiseRejectBlock)reject) { \
|
|
11
|
+
[[self manager] shareDefaultTemplate:value \
|
|
12
|
+
type:@ #type_name \
|
|
13
|
+
useWebBrowserIfKakaoTalkNotAvailable:useWebBrowserIfKakaoTalkNotAvailable \
|
|
14
|
+
serverCallbackArgs:serverCallbackArgs \
|
|
15
|
+
resolve:resolve \
|
|
16
|
+
reject:reject]; \
|
|
17
|
+
}
|
|
18
|
+
|
|
4
19
|
@implementation RNCKakaoShare
|
|
5
20
|
|
|
6
21
|
- (RNCKakaoShareManager*)manager {
|
|
@@ -24,6 +39,13 @@ RCT_EXPORT_METHOD(shareCustom
|
|
|
24
39
|
reject:reject];
|
|
25
40
|
}
|
|
26
41
|
|
|
42
|
+
RNC_KAKAO_SHARE_EXPORT_DEFAULT_TEMPLATE(shareFeedTemplate, feed)
|
|
43
|
+
RNC_KAKAO_SHARE_EXPORT_DEFAULT_TEMPLATE(shareListTemplate, list)
|
|
44
|
+
RNC_KAKAO_SHARE_EXPORT_DEFAULT_TEMPLATE(shareLocationTemplate, location)
|
|
45
|
+
RNC_KAKAO_SHARE_EXPORT_DEFAULT_TEMPLATE(shareCommerceTemplate, commerce)
|
|
46
|
+
RNC_KAKAO_SHARE_EXPORT_DEFAULT_TEMPLATE(shareTextTemplate, text)
|
|
47
|
+
RNC_KAKAO_SHARE_EXPORT_DEFAULT_TEMPLATE(shareCalendarTemplate, calendar)
|
|
48
|
+
|
|
27
49
|
// Don't compile this code when we build for the old architecture.
|
|
28
50
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
29
51
|
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|