mirror of
https://github.com/ahmadk953/tasko.git
synced 2025-05-04 04:33:10 +00:00
Updated Liveblocks to Latest Version
This commit is contained in:
parent
2e7c38503f
commit
c667889c04
3 changed files with 75 additions and 162 deletions
|
@ -1,152 +1,49 @@
|
|||
import { createClient } from '@liveblocks/client';
|
||||
import { createRoomContext, createLiveblocksContext } from '@liveblocks/react';
|
||||
// Define Liveblocks types for your application
|
||||
// https://liveblocks.io/docs/api-reference/liveblocks-react#Typing-your-data
|
||||
declare global {
|
||||
interface Liveblocks {
|
||||
// Each user's Presence, for useMyPresence, useOthers, etc.
|
||||
Presence: {
|
||||
// Example, real-time cursor coordinates
|
||||
// cursor: { x: number; y: number };
|
||||
};
|
||||
|
||||
const client = createClient({
|
||||
publicApiKey: process.env.NEXT_PUBLIC_LIVEBLOCKS_PUBLIC_KEY!,
|
||||
// authEndpoint: "/api/liveblocks-auth",
|
||||
throttle: 16,
|
||||
async resolveUsers({ userIds }) {
|
||||
// Used only for Comments and Notifications. Return a list of user information
|
||||
// retrieved from `userIds`. This info is used in comments, mentions etc.
|
||||
// The Storage tree for the room, for useMutation, useStorage, etc.
|
||||
Storage: {
|
||||
// Example, a conflict-free list
|
||||
// animals: LiveList<string>;
|
||||
};
|
||||
|
||||
// const usersData = await __fetchUsersFromDB__(userIds);
|
||||
//
|
||||
// return usersData.map((userData) => ({
|
||||
// name: userData.name,
|
||||
// avatar: userData.avatar.src,
|
||||
// }));
|
||||
// Custom user info set when authenticating with a secret key
|
||||
UserMeta: {
|
||||
id: string;
|
||||
info: {
|
||||
// Example properties, for useSelf, useUser, useOthers, etc.
|
||||
// name: string;
|
||||
// avatar: string;
|
||||
};
|
||||
};
|
||||
|
||||
return [];
|
||||
},
|
||||
async resolveMentionSuggestions({ text }) {
|
||||
// Used only for Comments. Return a list of userIds that match `text`.
|
||||
// These userIds are used to create a mention list when typing in the
|
||||
// composer.
|
||||
//
|
||||
// For example when you type "@jo", `text` will be `"jo"`, and
|
||||
// you should to return an array with John and Joanna's userIds:
|
||||
// ["john@example.com", "joanna@example.com"]
|
||||
// Custom events, for useBroadcastEvent, useEventListener
|
||||
RoomEvent: {};
|
||||
// Example has two events, using a union
|
||||
// | { type: "PLAY" }
|
||||
// | { type: "REACTION"; emoji: "🔥" };
|
||||
|
||||
// const users = await getUsers({ search: text });
|
||||
// return users.map((user) => user.id);
|
||||
// Custom metadata set on threads, for useThreads, useCreateThread, etc.
|
||||
ThreadMetadata: {
|
||||
// Example, attaching coordinates to a thread
|
||||
// x: number;
|
||||
// y: number;
|
||||
};
|
||||
|
||||
return [];
|
||||
},
|
||||
async resolveRoomsInfo({ roomIds }) {
|
||||
// Used only for Comments and Notifications. Return a list of room information
|
||||
// retrieved from `roomIds`.
|
||||
// Custom room info set with resolveRoomsInfo, for useRoomInfo
|
||||
RoomInfo: {
|
||||
// Example, rooms with a title and url
|
||||
// title: string;
|
||||
// url: string;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// const roomsData = await __fetchRoomsFromDB__(roomIds);
|
||||
//
|
||||
// return roomsData.map((roomData) => ({
|
||||
// name: roomData.name,
|
||||
// url: roomData.url,
|
||||
// }));
|
||||
|
||||
return [];
|
||||
},
|
||||
});
|
||||
|
||||
// Presence represents the properties that exist on every user in the Room
|
||||
// and that will automatically be kept in sync. Accessible through the
|
||||
// `user.presence` property. Must be JSON-serializable.
|
||||
type Presence = {
|
||||
cursor: { x: number; y: number } | null;
|
||||
};
|
||||
|
||||
// Optionally, Storage represents the shared document that persists in the
|
||||
// Room, even after all users leave. Fields under Storage typically are
|
||||
// LiveList, LiveMap, LiveObject instances, for which updates are
|
||||
// automatically persisted and synced to all connected clients.
|
||||
type Storage = {
|
||||
// author: LiveObject<{ firstName: string, lastName: string }>,
|
||||
// ...
|
||||
};
|
||||
|
||||
// Optionally, UserMeta represents static/readonly metadata on each user, as
|
||||
// provided by your own custom auth back end (if used). Useful for data that
|
||||
// will not change during a session, like a user's name or avatar.
|
||||
type UserMeta = {
|
||||
// id?: string, // Accessible through `user.id`
|
||||
// info?: Json, // Accessible through `user.info`
|
||||
};
|
||||
|
||||
// Optionally, the type of custom events broadcast and listened to in this
|
||||
// room. Use a union for multiple events. Must be JSON-serializable.
|
||||
type RoomEvent = {
|
||||
// type: "NOTIFICATION",
|
||||
// ...
|
||||
};
|
||||
|
||||
// Optionally, when using Comments, ThreadMetadata represents metadata on
|
||||
// each thread. Can only contain booleans, strings, and numbers.
|
||||
export type ThreadMetadata = {
|
||||
// resolved: boolean;
|
||||
// quote: string;
|
||||
// time: number;
|
||||
};
|
||||
|
||||
// Room-level hooks, use inside `RoomProvider`
|
||||
export const {
|
||||
suspense: {
|
||||
RoomProvider,
|
||||
useRoom,
|
||||
useMyPresence,
|
||||
useUpdateMyPresence,
|
||||
useSelf,
|
||||
useOthers,
|
||||
useOthersMapped,
|
||||
useOthersListener,
|
||||
useOthersConnectionIds,
|
||||
useOther,
|
||||
useBroadcastEvent,
|
||||
useEventListener,
|
||||
useErrorListener,
|
||||
useStorage,
|
||||
useObject,
|
||||
useMap,
|
||||
useList,
|
||||
useBatch,
|
||||
useHistory,
|
||||
useUndo,
|
||||
useRedo,
|
||||
useCanUndo,
|
||||
useCanRedo,
|
||||
useMutation,
|
||||
useStatus,
|
||||
useLostConnectionListener,
|
||||
useThreads,
|
||||
useCreateThread,
|
||||
useEditThreadMetadata,
|
||||
useCreateComment,
|
||||
useEditComment,
|
||||
useDeleteComment,
|
||||
useAddReaction,
|
||||
useRemoveReaction,
|
||||
useThreadSubscription,
|
||||
useMarkThreadAsRead,
|
||||
useRoomNotificationSettings,
|
||||
useUpdateRoomNotificationSettings,
|
||||
|
||||
// These hooks can be exported from either context
|
||||
// useUser,
|
||||
// useRoomInfo
|
||||
},
|
||||
} = createRoomContext<Presence, Storage, UserMeta, RoomEvent, ThreadMetadata>(
|
||||
client
|
||||
);
|
||||
|
||||
// Project-level hooks, use inside `LiveblocksProvider`
|
||||
export const {
|
||||
suspense: {
|
||||
LiveblocksProvider,
|
||||
useMarkInboxNotificationAsRead,
|
||||
useMarkAllInboxNotificationsAsRead,
|
||||
useInboxNotifications,
|
||||
useUnreadInboxNotificationsCount,
|
||||
|
||||
// These hooks can be exported from either context
|
||||
useUser,
|
||||
useRoomInfo,
|
||||
},
|
||||
} = createLiveblocksContext<UserMeta, ThreadMetadata>(client);
|
||||
export {};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue