@croquet/react
Version:
React bindings for Croquet
62 lines (60 loc) • 2.5 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { Session } from '@croquet/croquet';
import { CroquetReactView } from './CroquetReactView';
/** When Croquet is used in a component that is a part of a bigger application,
* it is sometimes better to establish the Croquet session instance outside,
* and then pass it in to the Croquet-powered part.
* ```
* const [croquetSession, setCroquetSession] = useState(null)
* const [croquetView, setCroquetView] = useState(null)
* const calledOnce = useRef(false)
* useEffect(() => {
* if (!calledOnce.current) {
* calledOnce.current = true
* const sessionParams = {
* name: projectId,
* apiKey: import.meta.env.VITE_CROQUET_API_KEY,
* tps: 0.5,
* appId: import.meta.env.VITE_CROQUET_APP_ID,
* password: 'abc',
* model: MyCroquetModel,
* eventRateLimit: import.meta.env.EVENT_RATE_LIMIT || 60,
* }
* createCroquetSession(sessionParams as any).then((session) => {
* console.log(`session created`)
* setCroquetSession(session)
* setCroquetView(session.view)
* setSyncedCallback((flag) => {
* console.log(`synced`, flag)
* if (flag) {
* setCroquetView((old) => session.view)
* }
* session.view.detachCallback = (e) => {
* console.log(`detached`)
* setCroquetView(null)
* }
* })
* })
* }
* }, [])
* return (
* <CroquetRoot croquetView={croquetView}>
* <MyCroquetComponent/>
* </CroquetRoot>
* )
```
*/
export function createCroquetSession(params) {
return __awaiter(this, void 0, void 0, function* () {
const sessionParams = Object.assign(Object.assign({}, params), { view: (CroquetReactView) });
return Session.join(sessionParams);
});
}