diff --git a/client/src/app/actions/actiontype.js b/client/src/app/actions/actiontype.js index 8086955..7abf9d8 100644 --- a/client/src/app/actions/actiontype.js +++ b/client/src/app/actions/actiontype.js @@ -5,8 +5,6 @@ export const USER_LOG_IN_FAILURE = 'USER_LOG_IN_FAILURE'; export const USER_LOGGED_OUT = 'USER_LOGGED_OUT'; -export const FETCHING_BOOKS = 'FETCHING_BOOKS'; - export const SIGN_UP_USER_FAILURE = 'SIGN_UP_USER_FAILURE'; export const SIGNUP_USER_SUCCESS = 'SIGNUP_USER_SUCCESS'; @@ -27,6 +25,10 @@ export const UPLOAD_TO_CLOUD_IMAGE_SUCCESS = 'UPLOAD_TO_CLOUD_IMAGE_SUCCESS'; export const UPLOAD_TO_CLOUD_IMAGE_FAILURE = 'UPLOAD_TO_CLOUD_IMAGE_FAILURE'; +export const SEARCH_BOOKS_SUCCESS = 'SEARCH_BOOKS_SUCCESS'; + +export const SEARCH_BOOKS_FAILURE = 'SEARCH_BOOKS_FAILURE'; + export const CLOUDINARY_UPLOAD_PRESET = 'yn0wpv0n'; export const CLOUDINARY_UPLOAD_URL = 'https://api.cloudinary.com/v1_1/digpnxufx/upload'; diff --git a/client/src/app/actions/api.js b/client/src/app/actions/api.js index b056f19..4568921 100644 --- a/client/src/app/actions/api.js +++ b/client/src/app/actions/api.js @@ -25,6 +25,9 @@ export default { .then(res => res.data), loanhistory: (offset, limit) => axios .get(`api/v1/users/getloanhistory?offset=${offset}&limit=${limit}`) + .then(res => res.data), + searchBooks: value => axios + .get(`api/v1/books/search?searchTerm=${value}`) .then(res => res.data) } }; diff --git a/client/src/app/actions/fetchbooks.js b/client/src/app/actions/fetchbooks.js index 381473f..bb8caba 100644 --- a/client/src/app/actions/fetchbooks.js +++ b/client/src/app/actions/fetchbooks.js @@ -4,7 +4,7 @@ import { FETCH_ALL_BOOKS, FETCH_BOOKS_REJECTED, FETCH_BOOKS_BY_USER_ID, - FETCHING_BOOKS, + FETCH_ALL_OVERDUE_BOOKS } from './actiontype'; import api from './api'; @@ -13,7 +13,6 @@ export const fetchBooksRejected = error => ({ type: FETCH_BOOKS_REJECTED, error export const fetchRecentBooks = books => ({ type: FETCH_ALL_RECENT_BOOKS, books }); export const fetchBooks = books => ({ type: FETCH_ALL_BOOKS, books }); export const fetchBooksByUserId = books => ({ type: FETCH_BOOKS_BY_USER_ID, books }); -export const fetchingBooks = state => ({ type: FETCHING_BOOKS, state }); export const fetchOverdueBooks = books => ({ type: FETCH_ALL_OVERDUE_BOOKS, books }); /** @@ -28,13 +27,11 @@ export const fetchAllBooks = (offset, limit) => dispatch => api .fetch(offset, limit) .then((response) => { dispatch(fetchBooks(response)); - dispatch(fetchingBooks(false)); return response; }) .catch((error) => { dispatch(showErrorNotification({ error })); dispatch(fetchBooksRejected({ error })); - dispatch(fetchingBooks(false)); }); /** @@ -69,13 +66,11 @@ export const fetchAllRecentBooks = (offset, limit) => dispatch => api .fetchRecentBooks(offset, limit) .then((response) => { dispatch(fetchRecentBooks(response)); - dispatch(fetchingBooks(false)); return response; }) .catch((error) => { dispatch(showErrorNotification({ error })); dispatch(fetchBooksRejected({ error })); - dispatch(fetchingBooks(false)); }); /** diff --git a/client/src/app/actions/searchbooks.js b/client/src/app/actions/searchbooks.js new file mode 100644 index 0000000..81a5543 --- /dev/null +++ b/client/src/app/actions/searchbooks.js @@ -0,0 +1,29 @@ +import { showErrorNotification } from './notifications'; +import { + SEARCH_BOOKS_SUCCESS, + SEARCH_BOOKS_FAILURE +} from './actiontype'; +import api from './api'; + +export const SearchBookSuccess = books => ({ type: SEARCH_BOOKS_SUCCESS, books }); +export const SearchBookFailure = error => ({ type: SEARCH_BOOKS_FAILURE, error }); + + +/** + * async helper function: search Books + * @function SearchBooks + * @param {object} value + * @returns {function} asynchronous action + */ +export const searchAllBooks = value => dispatch => api + .book + .searchBooks(value) + .then((response) => { + dispatch(SearchBookSuccess(response.booksFound)); + return (response); + }) + .catch((error) => { + dispatch(showErrorNotification({ error })); + dispatch(SearchBookFailure({ error })); + return error; + }); diff --git a/client/src/app/components/container/booklist/DisplayAllBooks.jsx b/client/src/app/components/container/booklist/DisplayAllBooks.jsx index 4f329cc..e370e3b 100644 --- a/client/src/app/components/container/booklist/DisplayAllBooks.jsx +++ b/client/src/app/components/container/booklist/DisplayAllBooks.jsx @@ -5,6 +5,7 @@ import { Row, Preloader, Col } from 'react-materialize'; import Book from '../../presentation/common/book/DisplayBook.jsx'; import { fetchAllBooks } from '../../../actions/fetchbooks'; import PaginationWrapper from '../common/Pagination.jsx'; +import SearchBooks from '../../presentation/common/book/SearchBooks.jsx'; /** * @description Component for Display Books on the Landing page for all users @@ -65,6 +66,9 @@ this.props.allBooksList.books.map(book => ( }; return (