Rank 1: Thread
Hi everyone,
I'm new to Appwrite and currently working on building a Todo web app with user functionality. My goal is to enable real-time updates in the dashboard whenever a user creates a new todo item in their bucket list. Additionally, I want these updates to be reflected across all the devices where the user is logged in.
To achieve this, I'm utilizing the Appwrite real-time subscription feature. Whenever a new document is added to the collection, I subscribe to that specific collection and receive the new data as a payload.
However, I'm encountering a problem where the subscription is triggered for all users whenever a user creates a new document. This means that other users can see the data of the user who created the new document in their logged-in sessions.
Here's the code snippet I'm currently using for the subscription:
const subscribe = useEffect(() => {
const unSubscribe = client.subscribe(
"databases.6471bb9750ced865202e.collections.6471e836bd0fed2289ea.documents",
function (response) {
console.log("real-time data");
console.log(response);
console.log("real-time data");
const updatedTodo = response.payload;
const eventTypeList = Array.isArray(response.events)
? response.events
: [response.events];
if (
eventTypeList.includes("databases.*.collections.*.documents.*.create") &&
updatedTodo.userID === user.$id
) {
setTodos((prevTodos) => [...prevTodos, updatedTodo]);
}
if (
eventTypeList.includes("databases.*.collections.*.documents.*.delete") &&
updatedTodo.userID === user.$id
) {
setTodos((prevTodos) =>
prevTodos.filter((todo) => todo.$id !== updatedTodo.$id)
);
}
}
);
return () => {
unSubscribe();
};
}, []);