import { Notify } from 'quasar' var config = { //"api_root": "http://localhost:3000", "api_root": "https://postgrest.marks.kitchen", "username": "mark", "password": "bon@ppetit", } function get_headers(){ let headers = new Headers(); headers.set('Authorization', 'Basic ' + btoa(config.username + ":" + config.password)); headers.set('Content-Type', 'application/json'); return headers } async function get_forms(){ let res = await fetch(`${config.api_root}/form?order=id.asc`, { headers: get_headers(), } ) return await res.json() } async function get_books(completed=false){ if(completed){ let res = await fetch(`${config.api_root}/book?order=completed.desc`, { headers: get_headers(), } ) return await res.json() } else { let res = await fetch(`${config.api_root}/book?completed=eq.false`, { headers: get_headers(), } ) return await res.json() } } async function insert(datatype, key, value){ let data = { "datatype": datatype, "key": key, "value": value, "created": new Date().toISOString(), } const response = await fetch(`${config.api_root}/datapoint`, { method: "POST", headers: get_headers(), body: JSON.stringify(data), }) if(!response.ok){ Notify.create({ "type": "negative", "message": `Issue submitting ${datatype}` }) } } async function submit_data(forms, form_data){ console.log(Notify) forms.forEach(form => { if(form_data[form.prompt_id]?.length || form.type === "range"){ if(form.type === "multiple_select"){ // One row per item selected form_data[form.prompt_id].forEach(o => { insert(form.prompt_id, o, true) }) } else { // No key for numeric or text inputs insert(form.prompt_id, undefined, form_data[form.prompt_id]) } } }) Notify.create({ "type": "positive", "message": `Submitted sucessfully.` }) } async function edit_book(book_data){ let data = { "title": book_data.title, "in_library": book_data.in_library, "lcc": book_data.lcc } const response = await fetch(`${config.api_root}/book?id=eq.${book_data.id}`, { method: "PATCH", headers: get_headers(), body: JSON.stringify(data), }) Notify.create({ "type": "positive", "message": `Submitted sucessfully.` }) } async function submit_book_data(book_form_data){ Object.keys(book_form_data).forEach( key => { let obj = book_form_data[key] if(obj.completed){ complete_book(key) } if(obj.progress.length > 0){ create_book_datapoint(key, obj.progress) } }) Notify.create({ "type": "positive", "message": `Submitted books sucessfully.` }) } async function create_option(form, value){ let data = { "extra": form.extra.map( (o) => {return { "id": o.id, "display": o.display, }}) } data["extra"].push({ "id": value, "display": value, }) const response = await fetch( `${config.api_root}/form?id=eq.${form.id}`, { method: "PATCH", headers: get_headers(), body: JSON.stringify(data), }) } async function create_book_datapoint(book_id, pages){ const response = await fetch( `${config.api_root}/book_datapoint`, { method: "POST", headers: get_headers(), body: JSON.stringify({ "created": new Date().toISOString(), "book_id": book_id, "pages": pages, }), }) } async function complete_book(book_id){ const response = await fetch( `${config.api_root}/book?id=eq.${book_id}`, { method: "PATCH", headers: get_headers(), body: JSON.stringify({ "completed": true, }), }) } async function create_book(name){ const response = await fetch( `${config.api_root}/book`, { method: "POST", headers: get_headers(), body: JSON.stringify({ "title": name, "completed": false }), }) Notify.create({ "type": "positive", "message": `Created book.` }) } async function get_book_datapoint(){ let res = await fetch(`${config.api_root}/book_datapoint`, { headers: get_headers(), } ) return await res.json() } async function create_form(data){ const response = await fetch( `${config.api_root}/form`, { method: "POST", headers: get_headers(), body: JSON.stringify(data), }) Notify.create({ "type": "positive", "message": `Created form.` }) } export { get_forms, submit_data, submit_book_data, create_option, get_books, get_book_datapoint, complete_book, create_book_datapoint, create_book, create_form, edit_book, }