Skip to content

Commit 7dc73c2

Browse files
Merge pull request #8 from intercom/feature/help-center-collections
Feature/help center collections
2 parents 9a9f91f + 637be06 commit 7dc73c2

File tree

211 files changed

+6149
-616
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

211 files changed

+6149
-616
lines changed

README.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -668,6 +668,35 @@ Open up your apps help center
668668

669669
`Promise<boolean>`
670670

671+
___
672+
### `Intercom.displayHelpCenterCollections()`
673+
674+
Present the help center with specific collections only .
675+
676+
###### Note: If the requested collections cannot be found, the full help center will be shown instead.
677+
### Options
678+
679+
| Type | Type | Required |
680+
| ------- | -------- | -------- |
681+
| collections| string[] |no |
682+
683+
### Returns
684+
685+
`Promise<boolean>`
686+
687+
___
688+
### `Intercom.displayArticle(articleId)`
689+
690+
Displays article with given id.
691+
692+
| Type | Type | Required |
693+
| ------- | -------- | -------- |
694+
| articleId| string |yes |
695+
696+
### Returns
697+
698+
`Promise<boolean>`
699+
671700
___
672701

673702
### `Intercom.displayCarousel(carouselId)`

android/build.gradle

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
def packageJsonFile = file('../package.json')
2+
def packageJson = new groovy.json.JsonSlurper().parseText(packageJsonFile.text)
3+
4+
15
buildscript {
26
if (project == rootProject) {
37
repositories {
@@ -24,7 +28,7 @@ android {
2428
minSdkVersion safeExtGet('IntercomReactNative_minSdkVersion', 21)
2529
targetSdkVersion safeExtGet('IntercomReactNative_targetSdkVersion', 29)
2630
versionCode 1
27-
versionName "1.0"
31+
versionName packageJson.version
2832

2933
}
3034

@@ -55,5 +59,5 @@ repositories {
5559
dependencies {
5660
//noinspection GradleDynamicVersion
5761
implementation "com.facebook.react:react-native:+" // From node_modules
58-
implementation 'io.intercom.android:intercom-sdk:9.+'
62+
implementation 'io.intercom.android:intercom-sdk:10.+'
5963
}

android/src/main/java/com/intercom/reactnative/IntercomErrorCodes.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@ public class IntercomErrorCodes {
1414
public static final String DISPLAY_CAROUSEL = "203";
1515
public static final String DISPLAY_HELP_CENTER = "204";
1616
public static final String SET_IN_APP_MESSAGE_VISIBILITY = "205";
17-
public static final String HIDE_MESSENGER = "206";
17+
public static final String HIDE_INTERCOM = "206";
1818
public static final String DISPLAY_ARTICLE = "207";
1919
public static final String SET_LAUNCHER_VISIBILITY = "208";
2020
public static final String SET_BOTTOM_PADDING = "209";
21+
public static final String DISPLAY_HELP_CENTER_COLLECTIONS = "210";
2122
public static final String HANDLE_PUSH_MESSAGE = "301";
2223
public static final String SEND_TOKEN_TO_INTERCOM = "302";
2324
}

android/src/main/java/com/intercom/reactnative/IntercomHelpers.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,19 @@ public static List<Object> recursivelyDeconstructReadableArray(ReadableArray rea
153153
return deconstructedList;
154154
}
155155

156+
public static List<String> readableArrayToStringList(ReadableArray readableArray) {
157+
List<String> deconstructedList = new ArrayList<>();
158+
for (int i = 0; i < readableArray.size(); i++) {
159+
ReadableType indexType = readableArray.getType(i);
160+
switch (indexType) {
161+
case String:
162+
deconstructedList.add(i, readableArray.getString(i));
163+
break;
164+
}
165+
}
166+
return deconstructedList;
167+
}
168+
156169
public static UserAttributes buildUserAttributes(ReadableMap readableMap) {
157170
UserAttributes.Builder builder = new UserAttributes.Builder();
158171
ReadableMapKeySetIterator iterator = readableMap.keySetIterator();

android/src/main/java/com/intercom/reactnative/IntercomModule.java

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,17 @@
1111
import com.facebook.react.bridge.ReactApplicationContext;
1212
import com.facebook.react.bridge.ReactContextBaseJavaModule;
1313
import com.facebook.react.bridge.ReactMethod;
14+
import com.facebook.react.bridge.ReadableArray;
1415
import com.facebook.react.bridge.ReadableMap;
1516
import com.facebook.react.module.annotations.ReactModule;
1617
import com.google.firebase.messaging.RemoteMessage;
1718

19+
import java.util.List;
1820
import java.util.Map;
1921

2022
import io.intercom.android.sdk.Intercom;
2123
import io.intercom.android.sdk.UserAttributes;
24+
import io.intercom.android.sdk.api.ReactNativeHeaderInterceptor;
2225
import io.intercom.android.sdk.identity.Registration;
2326
import io.intercom.android.sdk.push.IntercomPushClient;
2427

@@ -272,6 +275,20 @@ public void displayHelpCenter(Promise promise) {
272275
}
273276
}
274277

278+
@ReactMethod
279+
public void displayHelpCenterCollections(ReadableArray collectionsId, Promise promise) {
280+
try {
281+
List<String> list = IntercomHelpers.readableArrayToStringList(collectionsId);
282+
Intercom.client().displayHelpCenterCollections(list);
283+
Log.d(NAME, "displayHelpCenterCollections");
284+
promise.resolve(true);
285+
} catch (Exception err) {
286+
Log.e(NAME, "displayHelpCenterCollections error:");
287+
Log.e(NAME, err.toString());
288+
promise.reject(IntercomErrorCodes.DISPLAY_HELP_CENTER_COLLECTIONS, err.toString());
289+
}
290+
}
291+
275292
@ReactMethod
276293
public void displayCarousel(String carouselId, Promise promise) {
277294
try {
@@ -284,6 +301,7 @@ public void displayCarousel(String carouselId, Promise promise) {
284301
promise.reject(IntercomErrorCodes.DISPLAY_CAROUSEL, err.toString());
285302
}
286303
}
304+
287305
@ReactMethod
288306
public void displayArticle(String articleId, Promise promise) {
289307
try {
@@ -311,15 +329,15 @@ public void setInAppMessageVisibility(String visibility, Promise promise) {
311329
}
312330

313331
@ReactMethod
314-
public void hideMessenger(Promise promise) {
332+
public void hideIntercom(Promise promise) {
315333
try {
316-
Intercom.client().hideMessenger();
317-
Log.d(NAME, "hideMessenger");
334+
Intercom.client().hideIntercom();
335+
Log.d(NAME, "hideIntercom");
318336
promise.resolve(true);
319337
} catch (Exception err) {
320-
Log.e(NAME, "hideMessenger error:");
338+
Log.e(NAME, "hideIntercom error:");
321339
Log.e(NAME, err.toString());
322-
promise.reject(IntercomErrorCodes.HIDE_MESSENGER, err.toString());
340+
promise.reject(IntercomErrorCodes.HIDE_INTERCOM, err.toString());
323341
}
324342
}
325343

@@ -350,6 +368,8 @@ public void setBottomPadding(int paddingBottom, Promise promise) {
350368
}
351369

352370
public static synchronized void initialize(Application application, String apiKey, String appId) {
371+
String sdkVersion = BuildConfig.VERSION_NAME;
372+
ReactNativeHeaderInterceptor.setReactNativeVersion(application.getApplicationContext(), sdkVersion);
353373
Intercom.initialize(application, apiKey, appId);
354374
}
355375

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package io.intercom.android.sdk.api;
2+
3+
import android.content.Context;
4+
import android.util.Log;
5+
6+
public class ReactNativeHeaderInterceptor {
7+
public static void setReactNativeVersion(Context context, String rnVersion) {
8+
HeaderInterceptor.setReactNativeVersion(context, rnVersion);
9+
Log.d("ReactNativeHeader", "Registered RN Header");
10+
Log.d("ReactNativeHeader", rnVersion);
11+
}
12+
}

example/e2e/helpers.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,28 @@ const closeOverlay = async () => {
4747
};
4848
browser.addCommand('closeOverlay', closeOverlay);
4949

50-
const closeHelpCenterOverlay = async () => {
50+
const closeArticleOverlay = async () => {
5151
if (browser.isAndroid) {
52-
await closeOverlay();
52+
const closeButton = await $(
53+
`/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.widget.ImageButton`
54+
);
55+
await closeButton.waitForDisplayed({ timeout: 22000 });
56+
await closeButton.click();
5357
} else {
54-
const closeButton = await $(`~intercom help center close button`);
58+
await closeOverlay();
59+
}
60+
};
61+
browser.addCommand('closeArticleOverlay', closeArticleOverlay);
62+
63+
const closeHelpCenterOverlay = async () => {
64+
if (browser.isAndroid) {
65+
const closeButton = await $(
66+
`/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.widget.ImageButton`
67+
);
5568
await closeButton.waitForDisplayed({ timeout: 22000 });
5669
await closeButton.click();
70+
} else {
71+
await closeOverlay();
5772
}
5873
};
5974
browser.addCommand('closeHelpCenterOverlay', closeHelpCenterOverlay);
Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ describe('Intercom E2E', () => {
2020

2121
it('Should display article', async () => {
2222
await (await $('~display-article')).click();
23-
await driver.closeOverlay();
23+
await driver.closeArticleOverlay();
2424
});
2525

2626
it('Should message composer', async () => {
@@ -37,6 +37,14 @@ describe('Intercom E2E', () => {
3737
await driver.closeHelpCenterOverlay();
3838
});
3939

40+
it('Should display help center collections', async () => {
41+
await driver.scrollToElementByAccessibilityLabel(
42+
'display-help-center-collections'
43+
);
44+
await (await $('~display-help-center-collections')).click();
45+
await driver.closeHelpCenterOverlay();
46+
});
47+
4048
it('Should display carousel', async () => {
4149
await driver.scrollToElementByAccessibilityLabel('display-carousel');
4250
await (await $('~display-carousel')).click();
@@ -63,10 +71,10 @@ describe('Intercom E2E', () => {
6371
);
6472
await driver.clickWithDelay('~toggle-launcher-visibility', 12000);
6573

66-
const laincherId = driver.isAndroid
74+
const launcherId = driver.isAndroid
6775
? '~Intercom launcher'
6876
: '~intercom launcher';
69-
await (await $(laincherId)).waitForDisplayed({ timeout: 12000 });
77+
await (await $(launcherId)).waitForDisplayed({ timeout: 12000 });
7078
await driver.clickWithDelay('~toggle-launcher-visibility', 12000);
7179
});
7280

example/e2e/types/wido.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ declare global {
77
wait: (milis: number) => Promise<void>;
88
clickWithDelay: (element: string, milis: number) => Promise<void>;
99
closeHelpCenterOverlay: () => Promise<void>;
10+
closeArticleOverlay: () => Promise<void>;
1011
closeOverlay: () => Promise<void>;
1112
closeAlert: () => Promise<void>;
1213
}

example/ios/IntercomReactNativeExample.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,10 +533,12 @@
533533
inputPaths = (
534534
"${PODS_ROOT}/Target Support Files/Pods-IntercomReactNativeExampleUI/Pods-IntercomReactNativeExampleUI-resources.sh",
535535
"${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle",
536+
"${PODS_CONFIGURATION_BUILD_DIR}/intercom-react-native/IntercomFramework.bundle",
536537
);
537538
name = "[CP] Copy Pods Resources";
538539
outputPaths = (
539540
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle",
541+
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/IntercomFramework.bundle",
540542
);
541543
runOnlyForDeploymentPostprocessing = 0;
542544
shellPath = /bin/sh;
@@ -551,10 +553,12 @@
551553
inputPaths = (
552554
"${PODS_ROOT}/Target Support Files/Pods-IntercomReactNativeExample/Pods-IntercomReactNativeExample-resources.sh",
553555
"${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle",
556+
"${PODS_CONFIGURATION_BUILD_DIR}/intercom-react-native/IntercomFramework.bundle",
554557
);
555558
name = "[CP] Copy Pods Resources";
556559
outputPaths = (
557560
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle",
561+
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/IntercomFramework.bundle",
558562
);
559563
runOnlyForDeploymentPostprocessing = 0;
560564
shellPath = /bin/sh;

0 commit comments

Comments
 (0)