@moran-frumer Sorry Moran this got way over my head ![]()
Here is my full code, Front end and Backend
I highlighted the spot I am stuck on pulling besides that it is done. I used the code you gave me to sort.
import { getBookings } from 'backend/bookings.jsw';
import wixUsers from 'wix-users';
$w.onReady(function () {
initElements();
});
function initElements() {
$w('#submitButton').onClick(() => loadBookings());
$w('#statusCheckbox').options = [
{ "value": "CONFIRMED", "label": "CONFIRMED" },
{ "value": "CANCELED", "label": "CANCELED" },
{ "value": "PENDING", "label": "PENDING" },
{ "value": "PENDING_CHECKOUT", "label": "PENDING CHECKOUT" },
{ "value": "PENDING_APPROVAL", "label": "PENDING APPROVAL" },
{ "value": "DECLINED", "label": "DECLINED" }
];
$w('#statusCheckbox').value = ["CONFIRMED"];
$w('#dateStart').value = new Date();
$w('#dateEnd').value = new Date();
$w('#sessionsRepeater').onItemReady(($item, data) => {
$item('#sessionDateText').text = data.bookedEntity.singleSession.start.toLocaleString();
$item('#sessionServiceText').text = data.bookedEntity.title;
$item('#sessionStatusText').text = data.status;
$item('#totalAttendees').text = data.participantCount
});
$w('#sessionsRepeater').data = [];
}
async function loadBookings() {
$w('#errorText').hide();
if (!($w('#dateStart').valid && $w('#dateEnd').valid && $w('#statusCheckbox').valid)) {
$w('#errorText').show();
$w('#errorText').text = "Error in form fields";
return;
}
// Remove the comment to limit access only to Admin members (recommended for security best practices)
/* if(!await isUserAdmin()) {
$w('#errorText').show();
$w('#errorText').text = "This data is accessible to admin members only";
return;
} */
$w('#submitButton').disable();
const dateStart = $w('#dateStart').value;
const dateEndTemp = $w('#dateEnd').value;
const dateEnd = new Date(dateEndTemp.getTime() + 60 * 60 * 24 * 1000); // adding one day to the end date so bookings on that date also pass the filter
const statuses = $w('#statusCheckbox').value;
getBookings(dateStart, dateEnd, statuses).then((results) => {
$w('#sessionsRepeater').data = results;
if (results.length == 0) {
$w('#errorText').show();
$w('#errorText').text = "No bookings found";
} else {
$w('#titles').show()
}
}).catch((error) => {
console.error('loadBookings error - ' + error.message);
}).finally(() => {
$w('#submitButton').enable();
});
}
async function isUserAdmin() {
try {
let user = wixUsers.currentUser;
if (!user.loggedIn) {
console.log('Member is not logged in');
return false;
}
let roles = await user.getRoles();
if (roles.find(role => role.name == "Admin")) {
return true;
} else {
console.log('Member is not an Admin');
return false;
}
} catch (error) {
console.error('isUserAdmin error - ' + error.message);
return false;
}
}
Here is the back end
import { bookings } from "wix-bookings-backend";
import wixUsers from 'wix-users-backend';
let options = {
suppressAuth: true
}
async function isUserAdmin() {
try {
let user = wixUsers.currentUser;
if (!user.loggedIn) {
return false;
}
let roles = await user.getRoles();
if (roles.find(role => role.name == 'Admin')) {
return true;
} else {
return false;
}
} catch (error) {
console.error('bookings.jsw > isUserAdmin - ' + error.message);
return false;
}
}
export async function getBookings(dateStart, dateEnd, statuses) {
// Remove the comment to limit access only to Admin members (recommended for security best practices)
/* if(!await isUserAdmin()) {
console.log('bookings.jsw > getBookings - Non-admin member is not allowed to run this function');
return [];
} */
return bookings
.queryBookings()
.hasSome("status", statuses)
.ge("startTime", dateStart)
.le("endTime", dateEnd)
.ascending("startTime")
.find(options)
.then((queryResult) => {
return queryResult.items;
})
.catch((error) => {
Promise.reject(
new Error('booking.jsw > getBookings error - details -' + error.message));
});
}
Not sure what I am missing sorry!