diff --git a/config/routes/api.js b/config/routes/api.js index cb97296..2e38c42 100644 --- a/config/routes/api.js +++ b/config/routes/api.js @@ -2,28 +2,34 @@ const fs = require('fs'); module.exports = function(server, db) { server.get('/api/items', async (req, res) => { - const items = await db.collection('items').find({}).toArray(), - sortBy = req.query.sorting; + if (req.query.q) { + const items = await db.collection('items').find({title: {$regex: req.query.q, $options: "i"}}, {limit: 5}).toArray(); + res.json(items); + } else { + const items = await db.collection('items').find({}).toArray(), + sortBy = req.query.sorting; - if (items.length > 0) { - switch (sortBy) { - case 'ascending': - res.json(items.sort((a, b) => a.price - b.price)); - break; - case 'descending': - res.json(items.sort((a, b) => b.price - a.price)); - break; - case 'newer': - res.json(items.sort((a, b) => b.date - a.date)); - break; - case 'older': - res.json(items.sort((a, b) => a.date - b.date)); - break; - default: - res.json(items); - break; - } - } else res.send({error: 'Товаров в магазине пока что нет.'}); + if (items.length > 0) { + switch (sortBy) { + case 'ascending': + res.json(items.sort((a, b) => a.price - b.price)); + break; + case 'descending': + res.json(items.sort((a, b) => b.price - a.price)); + break; + case 'newer': + res.json(items.sort((a, b) => b.date - a.date)); + break; + case 'older': + res.json(items.sort((a, b) => a.date - b.date)); + break; + default: + res.json(items); + break; + } + } else res.send({error: 'Товаров в магазине пока что нет.'}); + } + }); server.get('/api/items/page/:page', async (req, res) => { @@ -36,6 +42,11 @@ module.exports = function(server, db) { res.render('main/404'); } }); + + server.get('/api/items/search/:query', (req, res) => { + const query = req.query.q; + console.log(query); + }) server.get('/api/items/:category', async (req, res) => { const items = await db.collection('items').find({category: req.params.category}).toArray(), diff --git a/dist/views/admin/items.pug b/dist/views/admin/items.pug index d7b6c75..ef1deaa 100644 --- a/dist/views/admin/items.pug +++ b/dist/views/admin/items.pug @@ -13,8 +13,8 @@ body.has-fixed-sidenav .search-field .nav-wrapper .input-field - input#search(type="search" required placeholder="Введите название товара") - label.label-icon(for="search") + input#search(type="search" required placeholder="Введите название товара и нажмите enter") + label.label-icon(for="search" style="cursor: pointer;") i.material-icons search i.material-icons close #edit.table-items.table diff --git a/src/admin/components/items.component.js b/src/admin/components/items.component.js index 9695bcf..fdb90dd 100644 --- a/src/admin/components/items.component.js +++ b/src/admin/components/items.component.js @@ -3,16 +3,24 @@ import { apiService } from "../services/api.service"; import { renderItems } from "../templates/items.template"; export class ItemsComponent extends Component { - constructor(id, {pagination}) { + constructor(id, {pagination}, {search}) { super(id); this.pagination = pagination; + this.search = search; } async init() { const items = await apiService.getItems(); this.$table = this.$el.querySelector('table tbody'); + this.search.initialize(this.$table, this.getItemsByText); this.pagination.initialize(items.length, this.$table, this.getItemsByPage); } + + async getItemsByText(text) { + const items = await apiService.getItemsQuery(text), + categories = await apiService.getCategories(); + return renderItems(items, categories); + } async getItemsByPage(page) { const items = await apiService.getItemsOffset(page), diff --git a/src/admin/components/pagination.component.js b/src/admin/components/pagination.component.js index 1ba9aa7..b477cc5 100644 --- a/src/admin/components/pagination.component.js +++ b/src/admin/components/pagination.component.js @@ -90,4 +90,8 @@ export class PaginationComponent extends Component { html += '