integrate visibility to particles
This commit is contained in:
+4
-1
@@ -127,7 +127,10 @@ const ParticleBaseSchema = z.object({
|
|||||||
id: z.string(),
|
id: z.string(),
|
||||||
created_at: z.coerce.date(),
|
created_at: z.coerce.date(),
|
||||||
created_by_email: z.string().email(),
|
created_by_email: z.string().email(),
|
||||||
updated_at: z.coerce.date().optional()
|
updated_at: z.coerce.date().optional(),
|
||||||
|
// e.g. ["human:[email protected]", "human:[email protected]"] - visible only to Aron and John
|
||||||
|
// e.g. ["network:123"] - visible to everyone in the network
|
||||||
|
visible_to: z.array(z.string())
|
||||||
});
|
});
|
||||||
|
|
||||||
export const ParticleSchema = z.discriminatedUnion("type", [
|
export const ParticleSchema = z.discriminatedUnion("type", [
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ interface CreateParticleParams<T extends ParticleType = ParticleType> {
|
|||||||
type: T;
|
type: T;
|
||||||
properties: ParticlePropertiesMap[T];
|
properties: ParticlePropertiesMap[T];
|
||||||
createdByEmail: string;
|
createdByEmail: string;
|
||||||
|
visibleTo: string[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export function useCreateParticle() {
|
export function useCreateParticle() {
|
||||||
@@ -17,6 +18,7 @@ export function useCreateParticle() {
|
|||||||
params.type,
|
params.type,
|
||||||
params.properties,
|
params.properties,
|
||||||
params.createdByEmail,
|
params.createdByEmail,
|
||||||
|
params.visibleTo,
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ const particleConverter: FirestoreDataConverter<Particle> = {
|
|||||||
created_at: (raw.created_at as Timestamp).toDate(),
|
created_at: (raw.created_at as Timestamp).toDate(),
|
||||||
created_by_email: raw.created_by_email,
|
created_by_email: raw.created_by_email,
|
||||||
updated_at: raw.updated_at ? (raw.updated_at as Timestamp).toDate() : undefined,
|
updated_at: raw.updated_at ? (raw.updated_at as Timestamp).toDate() : undefined,
|
||||||
|
visible_to: raw.visible_to,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@@ -91,6 +92,7 @@ export async function createParticle<T extends ParticleType>(
|
|||||||
type: T,
|
type: T,
|
||||||
properties: ParticlePropertiesMap[T],
|
properties: ParticlePropertiesMap[T],
|
||||||
createdByEmail: string,
|
createdByEmail: string,
|
||||||
|
visibleTo: string[],
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const particle: Particle = ParticleSchema.parse({
|
const particle: Particle = ParticleSchema.parse({
|
||||||
id: "", // ignored by toFirestore, but needed to satisfy the type
|
id: "", // ignored by toFirestore, but needed to satisfy the type
|
||||||
@@ -99,6 +101,7 @@ export async function createParticle<T extends ParticleType>(
|
|||||||
created_at: new Date(),
|
created_at: new Date(),
|
||||||
created_by_email: createdByEmail,
|
created_by_email: createdByEmail,
|
||||||
updated_at: null,
|
updated_at: null,
|
||||||
|
visible_to: visibleTo,
|
||||||
});
|
});
|
||||||
const ref = await addDoc(typedCollection(collectionPath), particle);
|
const ref = await addDoc(typedCollection(collectionPath), particle);
|
||||||
return ref.id;
|
return ref.id;
|
||||||
@@ -108,6 +111,7 @@ export async function createParticle<T extends ParticleType>(
|
|||||||
export async function updateParticle<T extends ParticleType>(
|
export async function updateParticle<T extends ParticleType>(
|
||||||
docPath: string,
|
docPath: string,
|
||||||
properties: Partial<ParticlePropertiesMap[T]>,
|
properties: Partial<ParticlePropertiesMap[T]>,
|
||||||
|
visibleTo?: string[],
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
const particleRef = typedDoc(docPath);
|
const particleRef = typedDoc(docPath);
|
||||||
// Take the partial and create a new object with dot notation
|
// Take the partial and create a new object with dot notation
|
||||||
@@ -119,5 +123,6 @@ export async function updateParticle<T extends ParticleType>(
|
|||||||
await updateDoc(particleRef, {
|
await updateDoc(particleRef, {
|
||||||
...updatedProperties,
|
...updatedProperties,
|
||||||
updated_at: serverTimestamp(),
|
updated_at: serverTimestamp(),
|
||||||
|
...(visibleTo ? { visible_to: visibleTo } : {}),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user