Issue
Am Using algolia as a full-text search for my firebase app and I was able to create and delete indexes via firebase-cloud-functions but to updated I’ve tried and did not succeed here are the functions:
//* am using Typescript
const env = functions.config()
const client = algoliasearch(env.algolia.app_id, env.algolia.admin_api_key)
const index = client.initIndex('Products')
//the function to create index
export const onProductCreated = functions.firestore
.document('Products/{productId}')
.onCreate((snap, ctx) => {
return index.saveObject({
objectID: snap.id,
...snap.data(),
})
})
//the function to delete index
export const onProductDeleted = functions.firestore
.document('Products/{productId}')
.onDelete((snap, ctx) => {
return index.deleteObject(snap.id)
})
then to update it I tried this functions
export const onProductCreated = functions.firestore
.document('Products/{productsId}')
.onUpdate((snap, ctx) => {
return index.partialUpdateObject({
objectID: snap.id,
...snap.data(),
})
})
But it didn’t work, It gave an this error when I deployed the functions "Property ‘id’ does not exist on type ‘Change< QueryDocumentSnapshot >’."
Solution
The error is not related to Algolia. It is thrown by TypeScript because you are trying to access snap.id
in the onUpdate
firestore trigger.
Looking at the API reference (https://firebase.google.com/docs/reference/functions/providers_firestore.documentbuilder.html#onupdate) you can see that the first argument passed to the callback function is of type Change<DocumentQuerySnapshot>
. Change uses the generic type (in this case DocumentQuerySnapshot
) for its before
and after
properties. The Change
type itself does not have a property id
.
Therefore try accessing it like so: snap.after.id
.
Answered By – aside
Answer Checked By – David Marino (BugsFixing Volunteer)