{"id":15690224,"url":"https://github.com/laudep/react-project-bookshelf","last_synced_at":"2026-01-08T21:03:59.680Z","repository":{"id":39485670,"uuid":"162897897","full_name":"laudep/react-project-bookshelf","owner":"laudep","description":"Simple Bookshelp app in React","archived":false,"fork":false,"pushed_at":"2023-01-06T02:00:47.000Z","size":6135,"stargazers_count":0,"open_issues_count":36,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-03-30T12:16:24.003Z","etag":null,"topics":["react","react-router"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/laudep.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-12-23T14:30:28.000Z","updated_at":"2020-08-24T08:51:06.000Z","dependencies_parsed_at":"2023-02-05T02:16:52.629Z","dependency_job_id":null,"html_url":"https://github.com/laudep/react-project-bookshelf","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/laudep/react-project-bookshelf","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/laudep%2Freact-project-bookshelf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/laudep%2Freact-project-bookshelf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/laudep%2Freact-project-bookshelf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/laudep%2Freact-project-bookshelf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/laudep","download_url":"https://codeload.github.com/laudep/react-project-bookshelf/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/laudep%2Freact-project-bookshelf/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28248955,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2026-01-08T02:00:06.591Z","response_time":241,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["react","react-router"],"created_at":"2024-10-03T18:08:21.949Z","updated_at":"2026-01-08T21:03:59.666Z","avatar_url":"https://github.com/laudep.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# React Bookshelf\n\nThis project is a bookshelf app that allows users to catalogize books they've\nread, are currently reading, or want to read.  \nThe frontend is written in React and the utilizes a demo backend server run by\nUdacity.\n\n## Table of Contents\n\n- [Demo](#demo)\n- [Installation](#running-the-application)\n- [Usage](#using-the-application)\n  - [Shelves](#shelves)\n  - [Adding books](#adding-books)\n  - [Multiple selection](#multiple-selection)\n- [Backend server and BooksAPI](#backend-server)\n  - [`getAll`](#getall)\n  - [`update`](#update)\n  - [`search`](#search)\n- [Search terms](#search-terms)\n- [Create React App](#create-react-app)\n\n## Demo\n\n[![Build Status](https://travis-ci.org/laudep/react-project-bookshelf.svg?branch=master)](https://travis-ci.org/laudep/react-project-bookshelf)\n\nAn online demo can be found here: [react-bookshelf.surge.sh](https://react-bookshelf.surge.sh/)\n\n## Running the application\n\nMake sure to have [Node.js](https://nodejs.org/en/) installed.  \nClone the project, install the dependencies and run the development server:\n\n```\ngit clone https://github.com/laudep/react-project-bookshelf.git\nnpm install\nnpm start\n```\n\nA new browser window will open automatically.  \nBy default, the app runs in [http://localhost:3000/](http://localhost:3000/).\n\n![MyReads screenshot](screenshots/bookshelf_overview.png \"App sceenshot\")\n\n## Using the application\n\n### Shelves\n\n- Books are sorted into different categories, each of which are displayed on a different 'shelf'.\n\n- Click on the button on the book cover to change a book's category or remove a book from the list.  \n  ![Change shelf screenshot](screenshots/change_shelf.png \"Change shelf sceenshot\")\n\n### Adding books\n\nTo add new books click the button on the bottom right of the page.  \nEnter a search term. Found books can be added using the buttons on the book covers.\n![Search results screenshot](screenshots/search_results.png \"Search results sceenshot\")\n\n### Multiple selection\n\nClick on a book cover to select it. A frame appears around the book.  \nAfter selecting one or more books the change multiple button appears at the bottom right.  \nUsing this button multiple books can be changed at once.  \n![Selected books](screenshots/selected_books.png \"Two selected books and an unselected book (right)\")\n\n![Multi selection button](screenshots/button_multi_selection.png \"Multi selection button\")\n\nNote: The backend API is limited to a particular set of [search terms](SEARCH_TERMS.md)\n(see [below](#search-terms) for more information).\n\n## Backend Server\n\nThis project utilizes a backend server provided by Udacity.  \nThe file [`BooksAPI.js`](src/BooksAPI.js) contains the methods needed to\nperform necessary backend operations\n\n- [`getAll`](#getall)\n- [`update`](#update)\n- [`search`](#search)\n\n### `getAll`\n\nMethod Signature:\n\n```js\ngetAll();\n```\n\n- Returns a Promise which resolves to a JSON object containing a collection of book objects.\n- This collection represents the books currently in the bookshelves in your app.\n\n### `update`\n\nMethod Signature:\n\n```js\nupdate(book, shelf);\n```\n\n- book: `\u003cObject\u003e` containing at minimum an `id` attribute\n- shelf: `\u003cString\u003e` contains one of [\"wantToRead\", \"currentlyReading\", \"read\"]\n- Returns a Promise which resolves to a JSON object containing the response data of the POST request\n\n### `search`\n\nMethod Signature:\n\n```js\nsearch(query);\n```\n\n- query: `\u003cString\u003e`\n- Returns a Promise which resolves to a JSON object containing a collection of a maximum of 20 book objects.\n- These books do not know which shelf they are on. They are raw results only. You'll need to make sure that books have the correct state while on the search page.\n\n## Search terms\n\nThe backend API uses a fixed set of cached search results and is limited to a\nparticular set of search terms, which can be found in\n[SEARCH_TERMS.md](SEARCH_TERMS.md). That list of terms are the _only_ terms\nthat will work with the backend, so don't be surprised if your searches for\nBasket Weaving or Bubble Wrap don't come back with any results.\n\n## Create React App\n\nThis project was bootstrapped with [Create React App](https://github.com/facebookincubator/create-react-app). You can find more\ninformation on how to perform common tasks [here](https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/template/README.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flaudep%2Freact-project-bookshelf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flaudep%2Freact-project-bookshelf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flaudep%2Freact-project-bookshelf/lists"}