@react-native-kakao/share 1.0.3 → 1.1.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.
@@ -8,67 +8,206 @@ import com.facebook.react.bridge.ReadableMap
8
8
  import com.kakao.sdk.common.util.KakaoCustomTabsClient
9
9
  import com.kakao.sdk.share.ShareClient
10
10
  import com.kakao.sdk.share.WebSharerClient
11
+ import com.kakao.sdk.share.model.SharingResult
12
+ import com.kakao.sdk.template.model.DefaultTemplate
13
+ import net.mjstudio.rnkakao.core.util.onMain
11
14
  import net.mjstudio.rnkakao.core.util.rejectWith
15
+ import net.mjstudio.rnkakao.core.util.toStringMap
12
16
 
13
17
  class RNCKakaoShareModule internal constructor(context: ReactApplicationContext) :
14
- KakaoShareSpec(context) {
15
-
18
+ KakaoShareSpec(context) {
16
19
  override fun getName(): String {
17
- return NAME
20
+ return NAME
18
21
  }
19
22
 
20
23
  @ReactMethod
21
24
  override fun shareCustom(
22
- templateId: Double,
23
- useWebBrowserIfKakaoTalkNotAvailable: Boolean,
24
- templateArgs: ReadableMap?,
25
- serverCallbackArgs: ReadableMap?,
26
- promise: Promise,
27
- ) {
28
- val context = currentActivity
29
- if (context == null) {
30
- promise.rejectWith(ActivityNotFoundException())
31
- return
32
- }
33
- if (ShareClient.instance.isKakaoTalkSharingAvailable(context)) {
34
- ShareClient.instance.shareCustom(context, templateId.toLong()) { sharingResult, error ->
35
- if (error != null) {
36
- promise.rejectWith(error)
37
- } else if (sharingResult != null) {
38
- context.startActivity(sharingResult.intent)
39
- promise.resolve(42)
40
- }
41
- }
42
- } else if (useWebBrowserIfKakaoTalkNotAvailable) {
43
- val sharerUrl = WebSharerClient.instance.makeCustomUrl(templateId.toLong())
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
+ }
44
39
 
45
- // CustomTabs으로 웹 브라우저 열기
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
+ }
46
54
 
47
- // 1. CustomTabsServiceConnection 지원 브라우저 열기
48
- // ex) Chrome, 삼성 인터넷, FireFox, 웨일 등
49
- try {
50
- KakaoCustomTabsClient.openWithDefault(context, sharerUrl)
51
- promise.resolve(42)
52
- return
53
- } catch (e: UnsupportedOperationException) { // CustomTabsServiceConnection 지원 브라우저가 없을 때 예외처리
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
+ }
55
69
 
56
- // 2. CustomTabsServiceConnection 미지원 브라우저 열기
57
- // ex) 다음, 네이버 등
58
- try {
59
- KakaoCustomTabsClient.open(context, sharerUrl)
60
- promise.resolve(42)
61
- return
62
- } catch (e: ActivityNotFoundException) { // 디바이스에 설치된 인터넷 브라우저가 없을 때 예외처리
63
- }
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,
106
+ ) = onMain {
107
+ runShare(
108
+ defaultTemplate = RNCKakaoShareTemplates.createTextTemplate(value),
109
+ useWebBrowserIfKakaoTalkNotAvailable = useWebBrowserIfKakaoTalkNotAvailable,
110
+ serverCallbackArgs = serverCallbackArgs,
111
+ promise = promise,
112
+ )
113
+ }
64
114
 
65
- promise.rejectWith("web url open failed $sharerUrl")
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
+ }
129
+
130
+ private fun runShare(
131
+ templateId: Double? = null,
132
+ defaultTemplate: DefaultTemplate? = null,
133
+ useWebBrowserIfKakaoTalkNotAvailable: Boolean,
134
+ templateArgs: ReadableMap? = null,
135
+ serverCallbackArgs: ReadableMap? = null,
136
+ promise: Promise,
137
+ ) {
138
+ val context = currentActivity
139
+ if (context == null) {
140
+ promise.rejectWith(ActivityNotFoundException())
141
+ return
142
+ }
143
+
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)
66
150
  } else {
67
- promise.rejectWith("kakaotalk not available")
151
+ promise.resolve(42)
152
+ }
153
+ }
154
+
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
+ )
68
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
189
+ }
190
+ }
191
+ try {
192
+ KakaoCustomTabsClient.openWithDefault(context, sharerUrl)
193
+ promise.resolve(42)
194
+ return
195
+ } catch (_: UnsupportedOperationException) {
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
+ }
69
208
  }
70
209
 
71
210
  companion object {
72
- const val NAME = "RNCKakaoShare"
211
+ const val NAME = "RNCKakaoShare"
73
212
  }
74
- }
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.module.model.ReactModuleInfoProvider
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(name: String, reactContext: ReactApplicationContext): NativeModule? {
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] = ReactModuleInfo(
24
- RNCKakaoShareModule.NAME,
25
- RNCKakaoShareModule.NAME,
26
- false, // canOverrideExistingModule
27
- false, // needsEagerInit
28
- true, // hasConstants
29
- false, // isCxxModule
30
- isTurboModule // isTurboModule
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
  }
@@ -0,0 +1,140 @@
1
+ package net.mjstudio.rnkakao.share
2
+
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
- ReactContextBaseJavaModule(context) {
9
+ ReactContextBaseJavaModule(context) {
10
10
  abstract fun shareCustom(
11
- templateId: Double,
12
- useWebBrowserIfKakaoTalkNotAvailable: Boolean,
13
- templateArgs: ReadableMap?,
14
- serverCallbackArgs: ReadableMap?,
15
- promise: Promise,
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
+ }
@@ -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 {
@@ -10,7 +25,7 @@
10
25
  RCT_EXPORT_MODULE()
11
26
 
12
27
  RCT_EXPORT_METHOD(shareCustom
13
- : (double)templateId useWebBrwoserIfKakaoTalkNotAvailable
28
+ : (double)templateId useWebBrowserIfKakaoTalkNotAvailable
14
29
  : (BOOL)useWebBrowserIfKakaoTalkNotAvailable templateArgs
15
30
  : (NSDictionary*)templateArgs serverCallbackArgs
16
31
  : (NSDictionary*)serverCallbackArgs resolve
@@ -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: