Home

Awesome

PocketBase React SDK

Npm package version

Unofficial React SDK (React, React Native, Expo) for interacting with the PocketBase JS SDK.

Installation

React, React Native or Expo

# Using npm
npm install pocketbase-react  --save

#Using yarn
yarn add pocketbase-react
import { Pocketbase } from 'pocketbase-react';

🔧 React Native / Expo doesn't have native EventSource implementation, so in order to use the realtime service you'll need to load a EventSource polyfill. I recommend EventSource/eventsource

# Using npm
npm install eventsource --save

# Using yarn
yarn add eventsource
// EventSource.ts
var Source = require('event-source');
global.EventSource = Source;

Usage

// App.tsx
import { Pocketbase } from 'pocketbase-react';

const serverURL = "YOUR_SERVER_URL"
const collections = ['COLLECTION_NAME_01', 'COLLECTION_NAME_02']
const webRedirectURL = "http://..."
const mobileRedirectURL = "expo://..." // for example

<Pocketbase
      serverURL={serverURL}
      initialCollections={collections}
      webRedirectURL={webRedirectURL}
      mobileRedirectURL={mobileRedirectURL}
      openURL={async (url) => {
        // for example expo WebBrowser
        await WebBrowser.openBrowserAsync(url);
      }}>
    <APP />
</Pocketbase>

Caveats

import { useAppContent, useAuth } from 'pocketbase-react';

Records

Reading the records value directly accesses the Redux Store.

The value will be changed automatically by the following actions:

Without Initial Fetch

// Corresponds to the stored Redux value, simply reads without making further PocketBase requests
const { records } = useAppContent('COLLECTION_NAME_01');

With Initial Fetch <a name="initialfetch"></a>

// When initializing, the desired table is queried once and updated in Redux, records corresponds to the stored Redux value
const { records } = useAppContent('COLLECTION_NAME_01', true);

Actions

const { actions } = useAppContent('COLLECTION_NAME_01');

All following actions are performed on the desired table, in this case -> COLLECTION_NAME_01

⚠️ All actions will not return anything, they will just modify the Redux value according to their intention

Subscribe <a name="subscribe"></a>

actions.subscribe();

Unsubscribe

actions.unsubscribe();

Refetch <a name="refetch"></a>

actions.refetch();

Create

const object = {};
actions.create(object);

Update

const id = 'SOME_ID';
const object = {};
actions.update(id, object);

DELETE

const id = 'SOME_ID';
actions.delete(id);

Auth

const { actions } = useAuth();

Register with Email <a name="subscribe"></a>

await actions.registerWithEmail(email: string, password: string);

Sign-In with Email

await actions.signInWithEmail(email: string, password: string);

Sign-In with Provider

await actions.signInWithProvider(provider: string);

Submit Provider Result

await actions.submitProviderResult(url: string);

Sign-Out

actions.signOut();

Send password reset email

await actions.sendPasswordResetEmail(email: string);

Send email verification

await actions.sendEmailVerification(email: string);

Update profile

await actions.updateProfile(id: string, record: {});

Update profile

await actions.updateEmail(email: string);

Delete user

await actions.deleteUser(id: string);