0.0.1-alpha.0 โ€ข Published 5 months ago

react-native-zendesk-unified v0.0.1-alpha.0

Weekly downloads
-
License
MIT
Repository
github
Last release
5 months ago

Library Under Construction โ€“ย Do Not Use Yet ๐Ÿšง

I'm currently working on this library, even though it is already working, it's not yet fully usable as there will be breaking changes coming soon. If you want to help, feel free to open a PR! Testing the alpha version is also very welcome.

See the Supported Zendesk SDKs and Methods section for more information of what is currently supported and what is coming soon.

It is part of my journey to learn how to create native modules for React Native. So it might take a while to get it to a stable state (or maybe I'll never get there, who knows ๐Ÿคทโ€โ™‚๏ธ).

react-native-zendesk-unified

React Native wrapper for the iOS and Android Zendesk SDKs (Chat, Support & Answer Bot)

Installation

npm install react-native-zendesk-unified

iOS

Install the pods:

cd ios && pod install

Android

Add the following to your android/app/build.gradle file:

repositories {
  maven {
    url 'https://zendesk.jfrog.io/zendesk/repo'
  }
}

Usage

import { useEffect } from 'react';
import { Button, Text } from 'react-native';
import {
  useZendesk,
  ZendeskProvider,
  ZendeskConfig,
} from 'react-native-zendesk-unified';

const zendeskConfig: ZendeskConfig = {
  appId: 'YOUR_ZENDESK_APP_ID',
  clientId: 'YOUR_ZENDESK_CLIENT_ID',
  zendeskUrl: 'YOUR_ZENDESK_URL',
};

export function App() {
  return (
    <ZendeskProvider zendeskConfig={zendeskConfig}>
      <MyComponent />
    </ZendeskProvider>
  );
}

function MyComponent() {
  const zendesk = useZendesk();

  const openHelpCenter = async () => {
    try {
      await zendesk.openHelpCenter({
        labels: ['test'],
        groupType: 'section',
        groupIds: [15138052595485],
      });
    } catch (error) {
      console.log(error);
    }
  };

  useEffect(() => {
    zendesk.changeTheme('#3f2b96');
    zendesk.setAnonymousIdentity({
      email: 'info@mateoguzman.net',
      name: 'Mateo Guzmรกn',
    });
  }, []);

  return (
    <>
      <Text>{zendesk.healthCheck()}</Text>

      <Button onPress={openHelpCenter} title="Open Help Center" />
    </>
  );
}

If you are not using React hooks, or you need to instantiate the Zendesk class in a different way (for example in a utility function or another context outside React), you can do so like this:

import { useEffect } from 'react';
import { Button, Text } from 'react-native';
import { Zendesk, ZendeskConfig } from 'react-native-zendesk-unified';

const zendeskConfig: ZendeskConfig = {
  appId: 'YOUR_ZENDESK_APP_ID',
  clientId: 'YOUR_ZENDESK_CLIENT_ID',
  zendeskUrl: 'YOUR_ZENDESK_URL',
};
const zendesk = new Zendesk(zendeskConfig);

export function App() {
  const openHelpCenter = async () => {
    try {
      await zendesk.openHelpCenter({
        labels: ['test'],
        groupType: 'section',
        groupIds: [15138052595485],
      });
    } catch (error) {
      console.log(error);
    }
  };

  useEffect(() => {
    zendesk.changeTheme('#3f2b96');
    zendesk.setAnonymousIdentity({
      email: 'info@mateoguzman.net',
      name: 'Mateo Guzmรกn',
    });
  }, []);

  return (
    <>
      <Text>{zendesk.healthCheck()}</Text>

      <Button onPress={openHelpCenter} title="Open Help Center" />
    </>
  );
}

API Documentation

All the methods are documented in the API documentation.

The naming convention is very similar to the official Zendesk SDKs, so you can check the iOS and Android documentation for more information.

There are some things that are not possible to do using only React Native, so you might need to do some native coding to achieve them. For example, to change the theme colors on Android, you need to create a custom theme in your native Android project.

Another example is the localization, which can be overridden by setting the localizable strings for both iOS and Android in your native projects.

Supported Zendesk SDKs and Methods

SDKFeatureiOSAndroid
CoreInitialize SDKโœ…โœ…
Health Checkโœ…โœ…
Anonymous Identityโœ…โœ…
Identityโœ…โœ…
Change Theme (Primary color)โœ…โŒ
SupportShow the help centerโœ…โœ…
Show a single articleโœ…โœ…
Filter articles by categoryโœ…โœ…
Filter articles by sectionโœ…โœ…
Filter articles by labelโœ…โœ…
Open a new ticketโœ…โœ…
Show an existing ticketโœ…โœ…
Show the user's ticketsโœ…โœ…
Locale Overrideโœ…โœ…
Show contact optionsโœ…โœ…
Custom Fields๐Ÿ› ๏ธโœ…
ChatInitialize SDKโœ…โœ…
Start a chatโœ…โœ…
Agent availability Enabledโœ…โœ…
Transcript Enabledโœ…โœ…
Offline Form Enabledโœ…โœ…
Chat Menu Items (out of scope for now)โŒโŒ
Pre-Chat Form Enabledโœ…โœ…
Pre-Chat Form Name Field Statusโœ…โœ…
Pre-Chat Form Email Field Statusโœ…โœ…
Pre-Chat Form Phone Field Statusโœ…โœ…
Pre-Chat Form Department Field Statusโœ…โœ…
Multi-line Response Enabledโœ…โœ…
Push Notifications (out of scope for now)โŒโŒ
Answer BotInitialize SDKโœ…โœ…
Start Answer Botโœ…โœ…
UnifiedComing up next๐Ÿ› ๏ธ๐Ÿ› ๏ธ

Any questions about any specific implemention? Feel free to open an issue!

Demo App

You can check the Zendesk demo app to see how to use the library in a real app.

Contributing

See the contributing guide to learn how to contribute to the repository and the development workflow.

License

MIT


Made with create-react-native-library