Thank all! I’ve figured out where my function was failing:
- use of
doc.owner.includes
is not supported by sync gateway javascript interpreter - also the check
doc.owner.indexOf("_")
was throwing error when doc had noowner
property
This is my final working function:
function (doc, oldDoc) {
if (doc.owner !== undefined && doc.owner !== null) {
// console.log("Task sync on doc.owner: " + doc.owner );
if (Array.isArray(doc.owner)){
var limit = doc.owner.length;
var channels = [];
// console.log("Limit is " + limit);
for(var i = 0; i < limit; i++){
// console.log("Testing element " + i + " value " + doc.owner[i]);
channels.push(doc.owner[i]);
var constainsTenant = (doc.owner[i].indexOf("_") > - 1);
// console.log("Contains tenanat? " + constainsTenant);
if (constainsTenant) {
var tenant = doc.owner[i].substring(0,doc.owner[i].indexOf("_")).toLowerCase();
// console.log("Tenant: " + tenant);
var indexOfTenant = doc.owner.indexOf(tenant);
// console.log("Tenant index: " + indexOfTenant);
var tenantIsOwner = indexOfTenant == -1? false:true;
// console.log("Tenant is owner? " + tenantIsOwner);
if (!tenantIsOwner){
// console.log("Pushing tentant " + tenant);
channels.push(tenant);
// console.log("Push tentant ");
// console.log("owners: " + doc.owner);
}
}
}
// console.log("Add channels doc.owner: " + doc.owner );
channel(channels);
} else {
if (doc.owner.indexOf("_") > - 1) {
channel([doc.owner.substring(0,doc.owner.indexOf("_")).toLowerCase(), doc.owner]);
} else {
channel(doc.owner);
}
}
} else {
console.log("Tour sync skipped");
}
}