Start working on adding items to shelves from search
This commit is contained in:
parent
1509cf9d43
commit
a4d6fc9913
|
@ -101,15 +101,28 @@ export class SearchController extends ViewController {
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
async showShelves () {
|
showShelves () {
|
||||||
const shelfController = new ShelvesController(this.appState, this.i18n);
|
const shelfController = new ShelvesController(this.appState, this.i18n);
|
||||||
if (!this.hasFetchedShelves) {
|
let shelvesPromise;
|
||||||
|
if (shelfController.state.myShelves.length < 1) {
|
||||||
console.log('getting');
|
console.log('getting');
|
||||||
await shelfController.getUserShelves();
|
shelvesPromise = shelfController.getUserShelves();
|
||||||
console.log('got');
|
} else {
|
||||||
|
shelvesPromise = Promise.resolve();
|
||||||
}
|
}
|
||||||
console.log(shelfController.myShelves);
|
shelvesPromise.then(() => {
|
||||||
this.showShelves = true;
|
console.log(shelfController.state.myShelves);
|
||||||
this.emit('render');
|
this.showShelves = true;
|
||||||
|
this.emit('render');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
addToShelf(bookData, shelfId) {
|
||||||
|
const shelfController = new ShelvesController(this.appState, this.i18n);
|
||||||
|
shelfController.addItemToShelf(bookData, shelfId).then(result => {
|
||||||
|
console.log(result);
|
||||||
|
this.showShelves = false;
|
||||||
|
this.emit('render');
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -91,7 +91,11 @@ export const resultDetails = (searchController, result, emit = () => {}) => {
|
||||||
</button>
|
</button>
|
||||||
</p>
|
</p>
|
||||||
${!searchController.showShelves ? null : html`<ul>${searchController.shelves.map(shelf => {
|
${!searchController.showShelves ? null : html`<ul>${searchController.shelves.map(shelf => {
|
||||||
return html`<li><a href="javascript:void(0)">${shelf.name}</a></li>`;
|
return html`<li>
|
||||||
|
<button class="pseudo" onclick=${() => searchController.addToShelf({source: 'inventaire', uri: result.uri}, shelf.id)}>
|
||||||
|
${shelf.name}
|
||||||
|
</button>
|
||||||
|
</li>`;
|
||||||
})}</ul>`}
|
})}</ul>`}
|
||||||
<p>
|
<p>
|
||||||
<a class="small button" href=${result.link} target="_blank">
|
<a class="small button" href=${result.link} target="_blank">
|
||||||
|
|
|
@ -42,4 +42,37 @@ export class ShelvesController extends ViewController {
|
||||||
this.state.loadedShelves[this.targetShelf] = shelf;
|
this.state.loadedShelves[this.targetShelf] = shelf;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async addItemToShelf (book, shelfId) {
|
||||||
|
let bookId;
|
||||||
|
if (typeof book.source !== 'undefined' && typeof book.uri !== 'undefined') {
|
||||||
|
const bookSearchResult = await fetch('/api/books/getId', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
body: JSON.stringify(book),
|
||||||
|
}).then(response => response.json());
|
||||||
|
|
||||||
|
if (typeof bookSearchResult.error !== 'undefined') {
|
||||||
|
console.error(bookSearchResult);
|
||||||
|
return bookSearchResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
bookId = bookSearchResult;
|
||||||
|
} else {
|
||||||
|
bookId = book.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
return fetch('/api/shelf/addItem', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
shelfId,
|
||||||
|
bookId,
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -93,6 +93,27 @@ class BooksController {
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async createBookReference (bookReferencesModel, source, uri) {
|
||||||
|
const inventaire = new Inventaire(this.language);
|
||||||
|
const bookData = await inventaire.getBookData(uri);
|
||||||
|
return await bookReferencesModel.create({
|
||||||
|
values: {
|
||||||
|
name: bookData.name,
|
||||||
|
description: bookData.description,
|
||||||
|
sources: {
|
||||||
|
[source]: uri,
|
||||||
|
},
|
||||||
|
covers: bookData.covers.map(cover => {
|
||||||
|
return {
|
||||||
|
sourceId: uri,
|
||||||
|
url: cover.url,
|
||||||
|
};
|
||||||
|
}),
|
||||||
|
locale: this.language,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = BooksController;
|
module.exports = BooksController;
|
|
@ -1,4 +1,5 @@
|
||||||
const BooksController = require('../controllers/bookData');
|
const BooksController = require('../controllers/bookData');
|
||||||
|
const SearchController = require('../controllers/search');
|
||||||
|
|
||||||
async function routes(fastify, options) {
|
async function routes(fastify, options) {
|
||||||
fastify.get('/api/books', async (request, reply) => {
|
fastify.get('/api/books', async (request, reply) => {
|
||||||
|
@ -16,6 +17,33 @@ async function routes(fastify, options) {
|
||||||
|
|
||||||
return await books.getInventaireCovers();
|
return await books.getInventaireCovers();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
fastify.post('/api/books/getId', async (request, reply) => {
|
||||||
|
if (typeof request.body.source === 'undefined') {
|
||||||
|
return reply.code(400).send({
|
||||||
|
error: true,
|
||||||
|
message: 'api.shelf.getId.missing_source',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof request.body.uri === 'undefined') {
|
||||||
|
return reply.code(400).send({
|
||||||
|
error: true,
|
||||||
|
message: 'api.shelf.getId.missing_uri',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const search = new SearchController(fastify.models);
|
||||||
|
const existingBookReferences = await search.searchReferencesBySourceCodes(request.body.source, [request.body.uri]);
|
||||||
|
if (existingBookReferences.length > 0) {
|
||||||
|
return existingBookReferences[0].id;
|
||||||
|
}
|
||||||
|
|
||||||
|
const books = new BooksController(request.body.source, request.body.uri, request.language);
|
||||||
|
const newBookReference = await books.createBookReference(request.body.source, request.body.uri);
|
||||||
|
console.log('created new bookreference', newBookReference);
|
||||||
|
return newBookReference.id;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = routes
|
module.exports = routes
|
Loading…
Reference in New Issue