initial
This commit is contained in:
@@ -0,0 +1,149 @@
|
||||
async function fetch_reservations_to_confirm(object_id) {
|
||||
const url = `/wordpress/wp-json/reservations/v1/object/${object_id}/timetable/reservation/unconfirmed`;
|
||||
return await fetch(url, {
|
||||
method: 'GET'
|
||||
}).then(x => x.json());
|
||||
}
|
||||
|
||||
async function confirm_reservation(confirmation_code) {
|
||||
const url = `/wordpress/wp-json/reservations/v1/accept/${confirmation_code}`;
|
||||
const x = await fetch(url, {
|
||||
method: 'GET'
|
||||
});
|
||||
}
|
||||
|
||||
async function refuse_reservation(confirmation_code) {
|
||||
const url = `/wordpress/wp-json/reservations/v1/refuse/${confirmation_code}`;
|
||||
const x = await fetch(url, {
|
||||
method: 'GET'
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
async function render_unconfirmed_reservations_table(self) {
|
||||
const reservations = await fetch_reservations_to_confirm(self.object_id);
|
||||
const rows = reservations.map(reservation => {
|
||||
const row = document.createElement('tr');
|
||||
row.innerHTML = `
|
||||
<td>${reservation.date}</td>
|
||||
<td>${get_format_time(new Date(`${reservation.date}T${reservation.start}`))}</td>
|
||||
<td>${get_format_time(add_minutes(new Date(`${reservation.date}T${reservation.start}`), parseInt(reservation.num_minutes)))}</td>
|
||||
<td>${reservation.num_minutes} min</td>
|
||||
<td>${reservation.email}</td>
|
||||
`;
|
||||
|
||||
let td = document.createElement('td');
|
||||
let confirm_button = document.createElement('button');
|
||||
confirm_button.classList.add('button');
|
||||
confirm_button.classList.add('button-primary');
|
||||
confirm_button.onclick = function() {
|
||||
confirm_reservation(reservation.confirmation_code)
|
||||
.then(x => self.refresh());
|
||||
};
|
||||
confirm_button.innerText = "Confirm";
|
||||
td.appendChild(confirm_button);
|
||||
|
||||
let refuse_button = document.createElement('button');
|
||||
refuse_button.classList.add('button');
|
||||
refuse_button.classList.add('button-secondary');
|
||||
refuse_button.onclick = function() {
|
||||
confirm_reservation(reservation.confirmation_code)
|
||||
.then(x => self.refresh());
|
||||
};
|
||||
refuse_button.innerText = "Refuse";
|
||||
td.appendChild(refuse_button);
|
||||
row.appendChild(td);
|
||||
|
||||
return row;
|
||||
});
|
||||
self.body.replaceChildren(...rows);
|
||||
}
|
||||
|
||||
function create_unconfirmed_reservations(object_id, container) {
|
||||
let table = document.createElement('table');
|
||||
table.classList.add('widefat');
|
||||
|
||||
let header = document.createElement('thead');
|
||||
header.innerHTML = `
|
||||
<tr>
|
||||
<th>Date</th>
|
||||
<th>From</th>
|
||||
<th>To</th>
|
||||
<th>Length</th>
|
||||
<th>Email</th>
|
||||
<th>Actions</th>
|
||||
</tr>
|
||||
`;
|
||||
|
||||
table.appendChild(header);
|
||||
let body = document.createElement('tbody');
|
||||
|
||||
table.appendChild(body);
|
||||
|
||||
container.appendChild(table);
|
||||
|
||||
return {
|
||||
object_id: object_id,
|
||||
container: container,
|
||||
body: body,
|
||||
refresh() {
|
||||
render_unconfirmed_reservations_table(this);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function create_notice(id, type, mesg) {
|
||||
let container = document.createElement('div');
|
||||
container.id = id;
|
||||
container.classList.add('notice', `notice-${type}`, 'settings-error', 'is-dismissible');
|
||||
container.innerHTML = `<p><strong>${mesg}</strong></p>`;
|
||||
return container;
|
||||
}
|
||||
|
||||
function show_notice(target, type, mesg) {
|
||||
target.querySelectorAll('.notice').forEach(x => x.remove());
|
||||
const notice = create_notice('test', type, mesg);
|
||||
target.prepend(notice);
|
||||
}
|
||||
|
||||
async function error_handler(error) {
|
||||
if(error.body != null && error.body.message != null) {
|
||||
show_notice(error.target, 'error', error.body.message);
|
||||
}
|
||||
console.error(error);
|
||||
}
|
||||
|
||||
|
||||
async function delete_action(id) {
|
||||
return await fetch(get_rest_url(`action/${id}`), {
|
||||
method: 'DELETE'
|
||||
});
|
||||
}
|
||||
|
||||
function collect_selected_actions(target) {
|
||||
return Array.from(target.querySelectorAll('input[type="checkbox"].action-selector:checked')).map(x =>
|
||||
x.value
|
||||
);
|
||||
}
|
||||
|
||||
async function delete_object(id) {
|
||||
return await fetch(get_rest_url(`object/${id}`), {
|
||||
method: 'DELETE'
|
||||
});
|
||||
}
|
||||
|
||||
async function set_object_actions(id, actions) {
|
||||
return await fetch(get_rest_url(`object/${id}/action`), {
|
||||
method: 'PATCH',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(actions)
|
||||
});
|
||||
}
|
||||
|
||||
function inline_edit_row() {
|
||||
let row = document.createElement('tr');
|
||||
row.classList.add('iedit author-self level-0 post-1 type-post status-publish format-standard hentry category-uncategorized');
|
||||
return row;
|
||||
}
|
||||
Reference in New Issue
Block a user