feat: order streams by last child creation

This commit is contained in:
talksik
2026-03-19 10:46:19 -07:00
parent 0723afc412
commit 71dd0149bc
7 changed files with 76 additions and 35 deletions
+28 -1
View File
@@ -58,6 +58,7 @@ const particleConverter: FirestoreDataConverter<Particle> = {
]),
)
: undefined,
last_child_created_at: raw.last_child_created_at ? (raw.last_child_created_at as Timestamp).toDate() : undefined,
});
case "folder":
return ParticleSchema.parse({
@@ -127,8 +128,10 @@ export function subscribeToParticleChildren(
collectionPath: string,
onData: (children: Particle[]) => void,
onError: (error: Error) => void,
orderByField: string = "created_at",
orderDirection: "asc" | "desc" = "desc",
): Unsubscribe {
const q = query(typedCollection(collectionPath), orderBy("created_at"));
const q = query(typedCollection(collectionPath), orderBy(orderByField, orderDirection));
return onSnapshot(
q,
(snap) => {
@@ -222,3 +225,27 @@ export async function updateParticleVisibleTo(
updated_at: serverTimestamp(),
});
}
// CAUTION: use the other type safe update functions in most cases
// There is no checking whether this field actually exists on the particle type, so it can lead to inconsistent data if used incorrectly
export async function updateParticle(
docPath: string,
fieldName: string,
value: any,
): Promise<void> {
const particleRef = typedDoc(docPath);
await updateDoc(particleRef, {
[fieldName]: value,
updated_at: serverTimestamp(),
});
}
export async function updateStreamParticleLastChildParticle(
docPath: string,
): Promise<void> {
const particleRef = typedDoc(docPath);
await updateDoc(particleRef, {
last_child_created_at: serverTimestamp(),
updated_at: serverTimestamp(),
});
}