@mirohq/websdk-react-hooks
v0.0.3
Published
Collection of React Hooks wrappers for Miro WebSDK
Downloads
26
Maintainers
Keywords
Readme
miro-websdk-react-hooks
Collection of React hooks to interact with Miro Platform WebSDK.
Add a bit of :sparkles:reactivity:sparkles: to your Miro app.
Use it!
$ npm install @mirohq/websdk-react-hooks
// or
$ yarn add @mirohq/websdk-react-hooks
Inject Miro instance
Wrap your components with MiroProvider and inject the global instance of Miro WebSDK.
import { MiroProvider } from "@mirohq/websdk-react-hooks";
const App: React.FC = ({ children }) => <MiroProvider>{children}</MiroProvider>;
/*
You can also optional inject the global Miro WebSDK instance
const App: React.FC = ({ children }) => <MiroProvider miro={window.miro}>{children}</MiroProvider>;
*/
Make sure you have a Miro application configured to use it. The hooks in this library will only work within Miro boards and in a well-configured app.
Isomorphic or not?
The Miro WebSDK is NOT isomorphic, meaning that you cannot use it in both server and client environments. This also applies to this library, it won't work wehn you are rendereing your React components in the server.
What if I am using Nextjs?
Using app router
Just make sure that the component that uses the hooks is only rendered on the client by using the use client
directive on top of your component.
'use client'
import { useCurrentUser } from "@mirohq/websdk-react-hooks";
// Your component
Using pages router
Wrap your component in a dynamic code block that will defer the component rendering to only execute in the client-side:
import dynamic from "next/dynamic";
import React from "react";
import { useCurrentUser } from "@mirohq/websdk-react-hooks";
const NoSsr: React.FC<React.PropsWithChildren> = (props) => (
<React.Fragment>{props.children}</React.Fragment>
);
const NoSSRWrapper = dynamic(() => Promise.resolve(NoSsr), {
ssr: false,
});
// And in your Nextjs page
const Component: React.FC = () => {
const { status, result, error } = useCurrentUser();
if (status === "success") {
return <p>The current user is "{result?.name}"</p>;
}
}
export default function OnlyInTheClient() {
return (
<NoSSRWrapper>
<Group />
</NoSSRWrapper>
);
}
Built with
- Miro Platform WebSDK
- React
- Typescript
- React Hookz Web
- Jest
- React testing library
- React Hooks Testing Library
This library is heavily inspired on https://github.com/react-hookz/web. Pure :sparkling_heart: awesomeness :sparkling_heart:.
Contributing
Please refer to the CONTRIBUTING.md guide to get started.
Hooks
- useMiro - Access Miro SDK reference from React Context.
- useCurrentUser - Get current Miro user.
- useInfo - Get Miro board info.
- useOnlineUsers - Get online users in a Miro board.
- useSelectedItems - List selected items with possible predicate filter.
- useSession - Interact with Miro session.
- useStorage - Interact with Miro storage.
- useViewport - Interact with Miro viewport.