0.17.3 • Published 20 days ago

@pluv/react v0.17.3

Weekly downloads
-
License
MIT
Repository
github
Last release
20 days ago

Disclaimer: This package is currently in preview and may have breaking changes between versions. Please wait for a v1.0.0 stable release before using this in production.

@pluv/react

React.js bindings for @pluv/client.

👉 See full documentation on pluv.io. 👈

Installation

# npm
npm install @pluv/react @pluv/crdt-yjs yjs zod

# yarn
yarn add @pluv/react @pluv/crdt-yjs yjs zod

# pnpm
pnpm add @pluv/react @pluv/crdt-yjs yjs zod

Basic Example

import { yjs } from "@pluv/crdt-yjs";
import { createBundle, createClient } from "@pluv/react";
import { z } from "zod";
// Import the PluvIO instance as a type from your server file
import { type io } from "./server";

// Initialize the @pluv/client client
const client = createClient<typeof io>({
    authEndpoint: (room) => {
        return `https://localhost:3000/api/authorize?room=${room}`;
    },
    wsEndpoint: (room) => {
        return `ws://localhost:3000/api/room/${room}`;
    },
});

export const {
    // factories
    createRoomBundle,

    // components
    PluvProvider,

    // hooks
    useClient,
} = createBundle(client);

export const {
    // components
    PluvRoomProvider,

    // hooks
    useBroadcast,
    useConnection,
    useEvent,
    useMyPresence,
    useMyself,
    useOther,
    useOthers,
    useRoom,
    useStorage,
} = createRoomBundle({
    initialStorage: yjs.doc(() => ({
        messages: yjs.array([
            yjs.object({
                message: "Hello World!",
                name: "johnathan_doe",
            }),
        ]),
    })),
    presence: z.object({
        cursor: z.nullable(
            z.object({
                x: z.number(),
                y: z.number(),
            })
        ),
    }),
});

import { FC } from "react";

export const MyPage: FC<Record<string, never>> = () => {
    return (
        <PluvProvider>
            <MyRoom />
        </PluvProvider>
    );
};

export const MyRoom: FC<Record<string, never>> = () => {
    const broadcast = useBroadcast();

    useEvent("RECEIVE_MESSAGE", ({ data }) => {
        // data is typed as { message: string }
        console.log(data.message);
    });

    return (
        <button
            onClick={() => {
                broadcast("SEND_MESSAGE", {
                    // TypeScript will require that message is typed as string
                    message: "Hello world!",
                });
            }}
            type="button"
        >
            Send Message
        </button>
    );
};

Reference

Check us out on GitHub for more information on how to use @pluv/io.

0.17.3

20 days ago

0.17.2

21 days ago

0.17.1

21 days ago

0.17.0

2 months ago

0.16.3

3 months ago

0.16.2

3 months ago

0.16.0

3 months ago

0.16.1

3 months ago

0.15.0

5 months ago

0.14.1

5 months ago

0.14.0

5 months ago

0.13.0

5 months ago

0.11.0

8 months ago

0.10.1

9 months ago

0.12.0

7 months ago

0.11.1

8 months ago

0.10.2

9 months ago

0.12.1

7 months ago

0.10.3

9 months ago

0.12.2

5 months ago

0.12.3

5 months ago

0.10.0

9 months ago

0.6.2

10 months ago

0.6.1

10 months ago

0.5.10

12 months ago

0.5.11

12 months ago

0.5.9

1 year ago

0.6.0

11 months ago

0.5.8

1 year ago

0.5.7

1 year ago

0.5.4

1 year ago

0.5.3

1 year ago

0.5.6

1 year ago

0.5.5

1 year ago

0.5.0

1 year ago

0.5.2

1 year ago

0.5.1

1 year ago

0.3.0

1 year ago

0.4.0

1 year ago

0.2.0

1 year ago

0.1.3

1 year ago

0.1.2

1 year ago

0.1.1

1 year ago

0.1.0

1 year ago

0.0.0

1 year ago