Coder Social home page Coder Social logo

codingcodymiller / requote Goto Github PK

View Code? Open in Web Editor NEW
2.0 2.0 0.0 15.36 MB

A personal library to collect and share your favorite quotes from your favorite books.

Home Page: https://requote-app.com

Shell 0.43% JavaScript 23.67% HTML 0.66% CSS 0.25% Procfile 0.03% TypeScript 70.23% SCSS 4.74%

requote's Introduction

requote's People

Contributors

codingcodymiller avatar

Stargazers

 avatar

Watchers

 avatar

requote's Issues

Feature: User can make quotes private.

โœ… Task List

โ˜๏ธ Server

  • Update server/index.js to allow for isPrivate to be passed when a user saves a new quote
  • Update server/index.js to allow for isPrivate to be updated when a user edits a quote
  • Update endpoint to get shared quotes to only send quotes that are not private
  • Test with HTTPie
  • Handle all errors and respond to the client

โšก Client

  • Update the component to save a quote to include a checkbox with the label Make Public that is checked by default.
    • Include a Balloon tooltip explaining what "Public" means with regard to quotes
    • Add state to keep track of if the quote isPrivate (default false since the checkbox is checked by default).
    • When checkbox is unchecked, update state to make isPrivate true
    • Send isPrivate with data sent to save the quote
  • Update the component to edit a quote to include a checkbox with the label Make Public that is checked by default.
    • Include a Balloon tooltip explaining what "Public" means with regard to quotes
    • Add state to keep track of if the quote isPrivate (default is whatever the current state is for the quote based on data received from the backend).
    • When checkbox is unchecked, update state to make isPrivate true
    • Send isPrivate with data sent to save the quote

๐Ÿง‘โ€โš•๏ธ Clean Up

  • Make sure that no React state objects are being mutated.
  • Make sure that no event listeners are manipulating the DOM directly.
  • Make sure that click targets are either <a> or <button> elements.
  • Make sure that all click targets show a cursor: pointer when hovered with the mouse.
  • Remove all buttons and placeholders that do not serve the functionality of the feature.
  • Remove all console logs.
  • Remove all commented out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.
  • Create GIFs of the feature being used on both mobile and desktop screen sizes for inclusion in Pull Request.

Feature 4: User can sort quotes

โš™๏ธ Feature

User can sort quotes in quote list by date created, page number, or quote length.

๐Ÿ“ Functionality

User can choose a type of sort (Date Added is default), and can also invert direction of sort.

๐Ÿ–ผ๏ธ Wireframes

Mobile

image

Desktop

image

โœ… Task List

Commit checklist for tasks needed to complete the feature.

โ˜๏ธ Server

  • Update endpoint to get quotes in creation order
    • Use a parameter to determine ascending or descending
    • utilize template literal to inject sort order into query
  • Create an endpoint to get quotes in order of page number
    • Use a parameter to determine ascending or descending
    • utilize template literal to inject sort order into query
  • Create an endpoint to get quotes in order of quote length
    • Use a parameter to determine ascending or descending
    • utilize template literal to inject sort order into query
  • Test with HTTPie
  • Handle all errors and respond to the client

โšก Client

  • Update QuoteDashboard to encapsulate the search bar, sort controls, and quote list
    • sortType (default "date")
    • isReversed (default false)
    • method getQuotes
      • Format query based on current values for sort and display direction in Context
    • method updateSortType
      • Update context value for sortType or isReversed
  • Create a component for quote sorting
    • Include a modal for selecting the sort order

๐Ÿง‘โ€โš•๏ธ Clean Up

  • Make sure that no React state objects are being mutated.
  • Make sure that no event listeners are manipulating the DOM directly.
  • Make sure that click targets are either <a> or <button> elements.
  • Make sure that all click targets show a cursor: pointer when hovered with the mouse.
  • Remove all buttons and placeholders that do not serve the functionality of the feature.
  • Remove all console logs.
  • Remove all commented out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.
  • Create GIFs of the feature being used on both mobile and desktop screen sizes for inclusion in Pull Request.

Feature: User can upload custom book

โš™๏ธ Feature

If a user is unable to find their intended book using the integrated API, they can upload their own custom book. They must provide all the fields that would be received from the API, such as an image, ISBN, Title, Author(s), etc.

๐Ÿ“ Functionality

The page where a user chooses the book to save a quote for will now include a button to redirect to a page where the user can upload their own book to save a quote for. Submitting a book through that page will redirect to the form to save a quote.

๐Ÿ–ผ๏ธ Wireframes

Wireframe screenshot(s) of what the app should look like when it is complete.

โœ… Task List

โ˜๏ธ Server

  • Update server/index.js to ...
  • Test with HTTPie
  • Handle all errors and respond to the client

โšก Client

  • Create a component to ...
  • Update component to ...

๐Ÿง‘โ€โš•๏ธ Clean Up

  • Make sure that no React state objects are being mutated.
  • Make sure that no event listeners are manipulating the DOM directly.
  • Make sure that click targets are either <a> or <button> elements.
  • Make sure that all click targets show a cursor: pointer when hovered with the mouse.
  • Remove all buttons and placeholders that do not serve the functionality of the feature.
  • Remove all console logs.
  • Remove all commented out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.
  • Create GIFs of the feature being used on both mobile and desktop screen sizes for inclusion in Pull Request.

Feature: User can see whether a quote is public or private in their personal quote list

โš™๏ธ Feature

What capability will users have when this feature is merged?

๐Ÿ“ Functionality

A description of how the application will work from the perspective of the user.

๐Ÿ–ผ๏ธ Wireframes

Wireframe screenshot(s) of what the app should look like when it is complete.

โœ… Task List

Commit checklist for tasks needed to complete the feature.

๐Ÿ˜ Database

  • Update schema.sql to ...
  • Update data.sql to ...

โ˜๏ธ Server

  • Update server/index.js to ...
  • Test with HTTPie
  • Handle all errors and respond to the client

โšก Client

  • Create a component to ...
  • Update component to ...

๐Ÿง‘โ€โš•๏ธ Clean Up

  • ...
  • ...
  • Make sure that no React state objects are being mutated.
  • Make sure that no event listeners are manipulating the DOM directly.
  • Make sure that click targets are either <a> or <button> elements.
  • Make sure that all click targets show a cursor: pointer when hovered with the mouse.
  • Remove all buttons and placeholders that do not serve the functionality of the feature.
  • Remove all console logs.
  • Remove all commented out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.
  • Create GIFs of the feature being used on both mobile and desktop screen sizes for inclusion in Pull Request.

Feature: User can view quotes from other users using their username

โš™๏ธ Feature

User can view quotes from other users using their username

๐Ÿ“ Functionality

User will be able to view quotes from another user using a URL with the username as a query paramter.

โœ… Task List

โ˜๏ธ Server

  • Update server/index.js to include an endpoint to get all quotes for a single user.
  • Test with HTTPie
  • Handle all errors and respond to the client

โšก Client

  • Add a Route to the App component for the QuotesDashboard with another user's quotes.
    • No login necessary to view.
  • Update QuoteDashboard component to check for URL parameter, and if present, send a request for that user's quotes.

๐Ÿง‘โ€โš•๏ธ Clean Up

  • Make sure that no React state objects are being mutated.
  • Make sure that no event listeners are manipulating the DOM directly.
  • Make sure that click targets are either <a> or <button> elements.
  • Make sure that all click targets show a cursor: pointer when hovered with the mouse.
  • Remove all buttons and placeholders that do not serve the functionality of the feature.
  • Remove all console logs.
  • Remove all commented out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.
  • Create GIFs of the feature being used on both mobile and desktop screen sizes for inclusion in Pull Request.

Add Unit Testing with Jest and React Testing Library

โš™๏ธ Feature

All existing React components should now have tests written in Jest and React Testing Library to verify that they are working as intended.

โœ… Task List


Components


ChangeUsernameForm

  • When a user types into the form control, their value is visible in the input.
  • No message is shown when the form first loads and the form is clean.
  • Message is shown to indicate that the username is available if it is available.
  • Message is shown to indicate that the username is unavailable if it is unavailable.
  • When the form is submitted, a success message is shown if the username is updated successfully.
  • When the form is submitted, a failure message is shown if the username is not updated successfully.
  • When the form is submitted, the form control is cleared after the response message is shown.
  • When the form is submitted, there is no message visible anymore after the response message is shown.

DropdownSearchBar

  • When a user clicks the dropdown button, a dropdown menu is visible.
  • When a user clicks an option in the dropdown menu, the dropdown button shows the selected option as its text content.
  • When a user types into the input, the value the user typed is visible in the input.

EditQuoteForm

  • Form controls are automatically filled with existing values for the quote being edited.
  • Tooltip should be visible when the info icon for making a quote public is clicked.
  • While the quote field is empty, the Submit button is disabled.

QuoteControls

  • Should show icons to filter, reverse, and share quotes if viewing a personal feed.
  • Should not show the Share icon if viewing a shared feed.
  • Should show the modal containing filter options when the filter icon is clicked.

QuoteListItem

  • Should show if a quote is public or private.
  • Should show the quoted text.
  • Should show the author and name of the book the quote is from.
  • Should show a page number if one is provided.
  • Should show the Cancel and Confirm icons if the Delete icon is clicked.
  • Should hide the Cancel and Confirm icons if the Cancel icon is clicked.
  • Should hide the Cancel and Confirm icons if the Delete icon is clicked again.

SaveQuoteForm

  • Tooltip should be visible when the info icon for making a quote public is clicked.
  • While the quote field is empty, the Submit button is disabled.

SearchBar

  • Should show the text a user types as the value of the search bar
  • Should submit the form if the magnifying glass icon is clicked
    • Use jest.fn() as the submit event handler, and test if it was called

Pages


BookDetails

  • Should show loading spinner while book data is retrieved
  • Should show book title, image, author, and description once data is retrieved successfully.

QuoteDashboard

  • Should show edit and delete icons if the user is viewing their personal feed.
  • Should not show edit and delete icons if the user is not viewing their personal feed.

Feature 2: User can view all saved quotes

โš™๏ธ Feature

Users can see a list of all saved quotes from all books.

๐Ÿ“ Functionality

User will be able to navigate to the Quotes view and see a list of cards, one for each quote. Users can also search for quotes in the list using the search bar.

๐Ÿ–ผ๏ธ Wireframes

image

image

โ˜๏ธ Server

  • Create an endpoint to get quotes in creation order
  • Test with HTTPie
  • Handle all errors and respond to the client

โšก Client

  • Create a Page Quotes component that will encapsulate quote list
    • displayList (quotes to be displayed)
    • method getQuotes
      • Gets all quotes saved by the user
  • Create a component for a single quote in the list
    • Quote data received as props from the quote list component
  • Create a component for the quote list
    • Pull quote list from Context
  • Update SaveQuoteForm component to redirect to the quotes list on successful submission

๐Ÿง‘โ€โš•๏ธ Clean Up

  • Make sure that no React state objects are being mutated.
  • Make sure that no event listeners are manipulating the DOM directly.
  • Make sure that click targets are either <a> or <button> elements.
  • Make sure that all click targets show a cursor: pointer when hovered with the mouse.
  • Remove all buttons and placeholders that do not serve the functionality of the feature.
  • Remove all console logs.
  • Remove all commented out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.

Refactor: Update OAuth scopes to remove Google Books API

โœ… Task List

Check list items that need to be done in order to complete the refactor.
  • ...
  • ...
  • Remove all console logs.
  • Remove all commented out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.

Refactor: Update Auth to not be horrible ๐Ÿ˜ข

โœ… Task List

Check list items that need to be done in order to complete the refactor.
  • ...
  • ...
  • Remove all console logs.
  • Remove all commented out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.

Feature: User can dictate quotes verbally

โš™๏ธ Feature

What capability will users have when this feature is merged?

๐Ÿ“ Functionality

A description of how the application will work from the perspective of the user.

๐Ÿ–ผ๏ธ Wireframes

Wireframe screenshot(s) of what the app should look like when it is complete.

โœ… Task List

Commit checklist for tasks needed to complete the feature.

๐Ÿ˜ Database

  • Update schema.sql to ...
  • Update data.sql to ...

โ˜๏ธ Server

  • Update server/index.js to ...
  • Test with HTTPie
  • Handle all errors and respond to the client

โšก Client

  • Create a component to ...
  • Update component to ...

๐Ÿง‘โ€โš•๏ธ Clean Up

  • ...
  • ...
  • Make sure that no React state objects are being mutated.
  • Make sure that no event listeners are manipulating the DOM directly.
  • Make sure that click targets are either <a> or <button> elements.
  • Make sure that all click targets show a cursor: pointer when hovered with the mouse.
  • Remove all buttons and placeholders that do not serve the functionality of the feature.
  • Remove all console logs.
  • Remove all commented out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.
  • Create GIFs of the feature being used on both mobile and desktop screen sizes for inclusion in Pull Request.

Design Update: Add loading spinners for all network requests

โš™๏ธ Feature

Which feature is affected by this update?

๐Ÿ“ Plan

Summary of the technical approach to be taken.

๐Ÿ–ผ๏ธ Wireframes

Updated wireframe(s) of what the app should look like when the updates are ready.

โœ… Task List

Commit checklist for tasks needed to complete the feature.
  • ...
  • ...
  • Make sure that click targets are either <a> or <button> elements.
  • Make sure that all click targets show a cursor: pointer when hovered with the mouse.
  • Clean Up
    • Remove all buttons and placeholders that don't do anything.
    • Remove all console logs.
    • Remove all commented out code.
    • Remove all CSS properties that have no effect.
    • Check all code for proper formatting and indentation.
    • Confirm that there are no errors in the console while using the application.
    • Confirm that all previous functionality still works without errors.
    • Confirm that the user interface looks natural on both mobile and desktop screens.
    • Create GIFs of the feature being used on both mobile and desktop screen sizes for inclusion in the Pull Request.

Feature: User can view live updated list of all quotes by all users

โš™๏ธ Feature

What capability will users have when this feature is merged?

๐Ÿ“ Functionality

A description of how the application will work from the perspective of the user.

๐Ÿ–ผ๏ธ Wireframes

Wireframe screenshot(s) of what the app should look like when it is complete.

โœ… Task List

Commit checklist for tasks needed to complete the feature.

๐Ÿ˜ Database

  • Update schema.sql to ...
  • Update data.sql to ...

โ˜๏ธ Server

  • Update server/index.js to ...
  • Test with HTTPie
  • Handle all errors and respond to the client

โšก Client

  • Create a component to ...
  • Update component to ...

๐Ÿง‘โ€โš•๏ธ Clean Up

  • ...
  • ...
  • Make sure that no React state objects are being mutated.
  • Make sure that no event listeners are manipulating the DOM directly.
  • Make sure that click targets are either <a> or <button> elements.
  • Make sure that all click targets show a cursor: pointer when hovered with the mouse.
  • Remove all buttons and placeholders that do not serve the functionality of the feature.
  • Remove all console logs.
  • Remove all commented out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.
  • Create GIFs of the feature being used on both mobile and desktop screen sizes for inclusion in Pull Request.

Feature: User can login and logout

โš™๏ธ Feature

Currently, users can only login during the process of submitting a new quote. There should be a button in the nav bar to allow for login and logout any time.

๐Ÿ“ Functionality

A description of how the application will work from the perspective of the user.

The user will click the button to log in and will get redirected to Google for OAuth. If the user clicks logout, they will be logged out.

โœ… Task List

Commit checklist for tasks needed to complete the feature.

๐Ÿ˜ Database

  • Update schema.sql to ...
  • Update data.sql to ...

โ˜๏ธ Server

  • Update server/index.js to ...
  • Test with HTTPie
  • Handle all errors and respond to the client

โšก Client

  • Create a component to ...
  • Update component to ...

๐Ÿง‘โ€โš•๏ธ Clean Up

  • ...
  • ...
  • Make sure that no React state objects are being mutated.
  • Make sure that no event listeners are manipulating the DOM directly.
  • Make sure that click targets are either <a> or <button> elements.
  • Make sure that all click targets show a cursor: pointer when hovered with the mouse.
  • Remove all buttons and placeholders that do not serve the functionality of the feature.
  • Remove all console logs.
  • Remove all commented out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.
  • Create GIFs of the feature being used on both mobile and desktop screen sizes for inclusion in Pull Request.

Feature 1: User can save quote

โš™๏ธ Feature

User can save a quote for a specific book.

๐Ÿ“ Functionality

Users will be able to search for a book using the Google Books API and save a quote from that book.

๐Ÿ–ผ๏ธ Wireframes

Mobile

image

Desktop

image
image

โœ… Task List

๐Ÿ˜ Database

  • Generate tables in pgweb
    • quotes
    • books
    • users
  • Export schema.sql

โ˜๏ธ Server

  • Set up Express server
  • Create endpoints for OAuth authorization
    • Redirect endpoint to request token for user
    • endpoint to save token after it is retrieved
  • Write endpoint to retrieve lists of books for search term
  • Write endpoint to save a quote for a single user
  • Test with HTTPie
  • Handle all errors and respond to the client

โšก Client

  • Create a component to act as the primary App component
    • Implement React Router with the following views:
      • Homepage
      • Book Search
      • Save Quote Form
    • Set up Context for shared information across components
      • Current book that quote will be saved to
  • Create a component for the Homepage
  • Create a component for the Book Search view
    • State:
      • Search term
      • Current list of results
    • Methods:
      • searchBooks(searchTerm)
      • bookSelected(book)
        • Saves book to React Context
        • Redirects to Save Quote Form
  • Create a component for the Save Quote Form view
    • State:
      • pageNumber
      • quote
    • Methods:
      • handleInputChange
      • submitQuote
  • Write CSS for each view
    • Use Bootstrap for Layout Classes (look into version of Bootstrap that just offers layout classes)
    • Ensure that layout is mobile responsive
    • Research how to animate using React for transition between homepage and search page

๐Ÿง‘โ€โš•๏ธ Clean Up

  • Make sure that no React state objects are being mutated.
  • Make sure that no event listeners are manipulating the DOM directly.
  • Make sure that click targets are either <a> or <button> elements.
  • Make sure that all click targets show a cursor: pointer when hovered with the mouse.
  • Remove all buttons and placeholders that do not serve the functionality of the feature.
  • Remove all console logs.
  • Remove all commented out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.

Refactor: Switch all usage of Google Books API to ISBNdb API

โœ… Task List

Check list items that need to be done in order to complete the refactor.
  • ...
  • ...
  • Remove all console logs.
  • Remove all commented out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.

Feature: User can delete quotes

โš™๏ธ Feature

Users will be able to delete quotes they have created.

๐Ÿ“ Functionality

A delete icon will be added to each quote. When the delete icon is clicked, a menu will with an X and checkmark icon to either confirm or cancel.

โœ… Task List

  • Update schema.sql to include isDeleted for each quote.
    • Its value will be a Boolean

โ˜๏ธ Server

  • Update server/index.js to include a PATCH endpoint for deletion
    • front end will send quote id
    • update the quote's row in the database to have the isDeleted column set to true
    • send 204 response ("No Content") to inform the front end that deletion was successful.
  • Update GET endpoint to get all quotes to only select quotes from the database where isDeleted is false
  • Test with HTTPie
  • Handle all errors and respond to the client

โšก Client

  • Update QuoteListItem component to include a delete icon
    • When clicked, it should open a slide menu from the side with a red X icon and a green checkmark icon to either confirm or cancel quote deletion
      • Clicking the cancel icon closes the menu
      • Clicking the delete icon again while the menu is open closes the menu
      • clicking the checkmark sends a PATCH request to the delete endpoint.
      • ensure that the list is updated when a successful delete 204 response is received.

๐Ÿง‘โ€โš•๏ธ Clean Up

  • Make sure that no React state objects are being mutated.
  • Make sure that no event listeners are manipulating the DOM directly.
  • Make sure that click targets are either <a> or <button> elements.
  • Make sure that all click targets show a cursor: pointer when hovered with the mouse.
  • Remove all buttons and placeholders that do not serve the functionality of the feature.
  • Remove all console logs.
  • Remove all commented out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.
  • Create GIFs of the feature being used on both mobile and desktop screen sizes for inclusion in Pull Request.

Feature: User can change username

โš™๏ธ Feature

Users will now be able to change their auto-generated username based on their Google email address.

๐Ÿ“ Functionality

When a user is logged in, rather than a "Logout" button replacing the Login button, there will now be a button with an icon for the first letter of their username, and the text will be the user's username. When a user clicks this button, they will be redirected to the Profile page, where they will be able to change their username or log out.

โœ… Task List

โ˜๏ธ Server

  • Create an endpoint to check if a user already exists for a username, and return a boolean to determine if the username requested is available.
  • Create an endpoint to change a user's username.
    • Will make use of the above endpoint to check if the username is available before saving.
    • If the username isn't available, send a 403 Forbidden response along with json with the message "Username already exists"
    • If the username was updated successfully, send a 204 response
  • Test with HTTPie
  • Handle all errors and respond to the client

โšก Client

  • Update the LoginButton component to only be a login button.
  • Create a LogoutButton component that has the ability to log the user out.
  • Create a UserProfileButton that shows a button with an icon for the first name of the user's username, and the user's username within it.
    • Actual content is a React Router Link to navigate to the UserProfile page
  • Create a LoginOrProfile component that returns either a LoginButton or UserProfileButton component depending on if there is a
  • Create an InfoMessage component that will display a message to the user
    • Two props:
      • color - defaults to black
      • message - a string
      • Display provided message in provided color within a p tag.
  • Create a ChangeUsernameForm component that contains a form to update a user's username.
    • Event Handlers:
      • isUsernameAvailable - used as the event handler for input event
        • if the response is true
          • update message and color
          • "That username is available." - green
        • if the response is false
          • update message and color
          • "That username is already taken." - red
      • changeUsername - used as the event handler for submit event
        • if the response has a 403 status code
          • update message and color
          • "The username that was submitted is already taken, please try a different username." - red
        • If the response has a 204 status code
          • update message and color
          • "Your username has been updated!" - green
    • State:
      • username - a string containing the current username typed by the user
      • message - message to be displayed to the user
      • color - the color of the current message to be displayed to the user
    • input to supply a new username
      • input event listener to send a request to the endpoint to determine if the username is available.
        • Update username value
        • debounce by 300ms
          • Create a piece of state to keep track of the current value
          • Use setTimeout and useEffect.
          • Clear the timeout on cleanup
          • use the current value as a dependency for the effect.
    • button for submitting the form
      • submit event listener to send a request to the endpoint to attempt username replacement.
  • Create a UserProfile page component
    • gets the user's current username from cookies.
      • if there is no username in cookies, return Redirect component from React Router to redirect to /
    • Returns the following:
      • A ChangeUsernameForm component
      • A LogoutButton component.

๐Ÿง‘โ€โš•๏ธ Clean Up

  • Make sure that no React state objects are being mutated.
  • Make sure that no event listeners are manipulating the DOM directly.
  • Make sure that click targets are either <a> or <button> elements.
  • Make sure that all click targets show a cursor: pointer when hovered with the mouse.
  • Remove all buttons and placeholders that do not serve the functionality of the feature.
  • Remove all console logs.
  • Remove all commented out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.
  • Create GIFs of the feature being used on both mobile and desktop screen sizes for inclusion in Pull Request.

Feature: User can edit quotes

โš™๏ธ Feature

Users will be able to edit existing quotes.

๐Ÿ“ Functionality

Users can click on an icon on each quote in their quote list to be redirected to the SaveQuoteForm again with the existing values for the quote already filled in.

โœ… Task List

  • shift all ids to UUID
  • Create a new PATCH endpoint to edit an existing quote.
    • front end will need to send quote id with data.
    • may require adjusting data sent in quotes endpoint to include id.
  • Test with HTTPie
  • Handle all errors and respond to the client

โšก Client

  • Adjust QuoteListItem to include an edit icon
    • add a click event listener to redirect to the edit page
  • create EditPage, which uses SaveQuoteForm but with values provided as props.
    • will need to send quote id with data to the back-end
    • sends a request to the edit endpoint
    • redirect to quote list
      • scroll to quote on redirect
      • create an id on each quote, which is their UUID

๐Ÿง‘โ€โš•๏ธ Clean Up

  • Make sure that no React state objects are being mutated.
  • Make sure that no event listeners are manipulating the DOM directly.
  • Make sure that click targets are either <a> or <button> elements.
  • Make sure that all click targets show a cursor: pointer when hovered with the mouse.
  • Remove all buttons and placeholders that do not serve the functionality of the feature.
  • Remove all console logs.
  • Remove all commented-out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.
  • Create GIFs of the feature being used on both mobile and desktop screen sizes for inclusion in Pull Request.

Feature 5: User can view saved quotes in library

โš™๏ธ Feature

Users can see the quotes that they have saved.

๐Ÿ“ Functionality

Users will be able to view a dashboard of the books they have saved quotes for and click on the book cover for a book to see all the saved quotes for that book.

๐Ÿ–ผ๏ธ Wireframes

Mobile

image

Desktop

image

๐Ÿ˜ Database

  • Update book table to include a row for larger image

โ˜๏ธ Server

  • Update endpoint to save quote to include large image URL
  • write endpoint to get a list of all books for a single user
    • sends the larger image, book id, and book name (for alt text)
  • revise endpoint to get quotes to include the ability to get quotes for a single book

โšก Client

  • Update quote storage to also include a larger image of the book cover
    • Review Google Books data to determine name of property to access the larger image URL
  • Create a component for a single book cover
    • uses the larger book image
    • should navigate to quotes for just that book when clicked
  • Create a component for the book cover list
  • Update QuoteDashboard to include the ability to show results for only a single book
    • Add bookId to state, with default null to account for all books
      • Not sure how to pass id to quotes view...maybe URL parameter?

๐Ÿง‘โ€โš•๏ธ Clean Up

  • Make sure that no React state objects are being mutated.
  • Make sure that no event listeners are manipulating the DOM directly.
  • Make sure that click targets are either <a> or <button> elements.
  • Make sure that all click targets show a cursor: pointer when hovered with the mouse.
  • Remove all buttons and placeholders that do not serve the functionality of the feature.
  • Remove all console logs.
  • Remove all commented out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.

Feature 7: User can view details of a single book

โš™๏ธ Feature

User will be able to view a detail view for a single book to verify if it is the book they want to save a quote for.

๐Ÿ“ Functionality

While searching for books, a user will be able to click an "โ“˜" icon to see details for that book. They can also return to the search they had in progress from that page.

๐Ÿ–ผ๏ธ Wireframes

Mobile

image

Desktop

image

โœ… Task List

Commit checklist for tasks needed to complete the feature.

โ˜๏ธ Server

  • Create an endpoint to get details for a single book
  • Check if the book already exists in the database
    • If so, get book details and send them as a response
    • If not, get book details from ISBNdb and send them as a response
  • Test with HTTPie
  • Handle all errors and respond to the client

โšก Client

  • Create a BookDetails component to show the details of a single book
    • Add a back button to show the previous view using React Router
    • Create a function named sanitizeSynopsis to sanitize synopsis using DOMPurify and return object with __html property holding that sanitized value
    • Assign sanitized content using dangerouslySetInnerHTML React prop
    • Ensure that it matches the Figma
  • Update BookListItem component to include information icon to navigate to book details view
  • Update BookCover component to include information icon to navigate to book details view

๐Ÿง‘โ€โš•๏ธ Clean Up

  • Make sure that no React state objects are being mutated.
  • Make sure that no event listeners are manipulating the DOM directly.
  • Make sure that click targets are either <a> or <button> elements.
  • Make sure that all click targets show a cursor: pointer when hovered with the mouse.
  • Remove all buttons and placeholders that do not serve the functionality of the feature.
  • Remove all console logs.
  • Remove all commented out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.
  • Create GIFs of the feature being used on both mobile and desktop screen sizes for inclusion in Pull Request.

Feature 3: User can filter quotes by search term

โš™๏ธ Feature

User can type in a search term to see only quotes containing that search term in the quote body.

๐Ÿ“ Functionality

User will type into a search bar and the quote list will live update will quotes that match the search term.

๐Ÿ–ผ๏ธ Wireframes

Mobile

image

Desktop

image

โœ… Task List

Commit checklist for tasks needed to complete the feature.

โ˜๏ธ Server

  • Create an endpoint to search for term in quotes
  • Test with HTTPie
  • Handle all errors and respond to the client

โšก Client

  • Update QuoteDashboard component that will encapsulate the search bar and quote list
    • searchTerm (default null)
    • create method searchQuotes
      • Send request to get all quotes that match search term, then update quote list
  • Create a component for the quote search bar
    • quoteSearch
      • Debounce before request is sent
      • Component is passed callback as prop (searchQuotes)

๐Ÿง‘โ€โš•๏ธ Clean Up

  • Make sure that no React state objects are being mutated.
  • Make sure that no event listeners are manipulating the DOM directly.
  • Make sure that click targets are either <a> or <button> elements.
  • Make sure that all click targets show a cursor: pointer when hovered with the mouse.
  • Remove all buttons and placeholders that do not serve the functionality of the feature.
  • Remove all console logs.
  • Remove all commented out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.
  • Create GIFs of the feature being used on both mobile and desktop screen sizes for inclusion in Pull Request.

Feature: User can set their account's preference for quotes to be private or public by default

โš™๏ธ Feature

What capability will users have when this feature is merged?

๐Ÿ“ Functionality

A description of how the application will work from the perspective of the user.

๐Ÿ–ผ๏ธ Wireframes

Wireframe screenshot(s) of what the app should look like when it is complete.

โœ… Task List

Commit checklist for tasks needed to complete the feature.

๐Ÿ˜ Database

  • Update schema.sql to ...
  • Update data.sql to ...

โ˜๏ธ Server

  • Update server/index.js to ...
  • Test with HTTPie
  • Handle all errors and respond to the client

โšก Client

  • Create a component to ...
  • Update component to ...

๐Ÿง‘โ€โš•๏ธ Clean Up

  • ...
  • ...
  • Make sure that no React state objects are being mutated.
  • Make sure that no event listeners are manipulating the DOM directly.
  • Make sure that click targets are either <a> or <button> elements.
  • Make sure that all click targets show a cursor: pointer when hovered with the mouse.
  • Remove all buttons and placeholders that do not serve the functionality of the feature.
  • Remove all console logs.
  • Remove all commented out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.
  • Create GIFs of the feature being used on both mobile and desktop screen sizes for inclusion in Pull Request.

Design Update: Make Privacy Policy link visible on home screen and create Footer which includes a link to the privacy policy, GitHub, and LinkedIn

โš™๏ธ Feature

Which feature is affected by this update?

๐Ÿ“ Plan

Summary of the technical approach to be taken.

๐Ÿ–ผ๏ธ Wireframes

Updated wireframe(s) of what the app should look like when the updates are ready.

โœ… Task List

Commit checklist for tasks needed to complete the feature.
  • ...
  • ...
  • Make sure that click targets are either <a> or <button> elements.
  • Make sure that all click targets show a cursor: pointer when hovered with the mouse.
  • Clean Up
    • Remove all buttons and placeholders that don't do anything.
    • Remove all console logs.
    • Remove all commented out code.
    • Remove all CSS properties that have no effect.
    • Check all code for proper formatting and indentation.
    • Confirm that there are no errors in the console while using the application.
    • Confirm that all previous functionality still works without errors.
    • Confirm that the user interface looks natural on both mobile and desktop screens.
    • Create GIFs of the feature being used on both mobile and desktop screen sizes for inclusion in the Pull Request.

Feature: User can share quotes via hyperlink

โš™๏ธ Feature

What capability will users have when this feature is merged?

๐Ÿ“ Functionality

A description of how the application will work from the perspective of the user.

๐Ÿ–ผ๏ธ Wireframes

Wireframe screenshot(s) of what the app should look like when it is complete.

โœ… Task List

Commit checklist for tasks needed to complete the feature.

๐Ÿ˜ Database

  • Update schema.sql to ...
  • Update data.sql to ...

โ˜๏ธ Server

  • Update server/index.js to ...
  • Test with HTTPie
  • Handle all errors and respond to the client

โšก Client

  • Create a component to ...
  • Update component to ...

๐Ÿง‘โ€โš•๏ธ Clean Up

  • ...
  • ...
  • Make sure that no React state objects are being mutated.
  • Make sure that no event listeners are manipulating the DOM directly.
  • Make sure that click targets are either <a> or <button> elements.
  • Make sure that all click targets show a cursor: pointer when hovered with the mouse.
  • Remove all buttons and placeholders that do not serve the functionality of the feature.
  • Remove all console logs.
  • Remove all commented out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.
  • Create GIFs of the feature being used on both mobile and desktop screen sizes for inclusion in Pull Request.

Feature 6: User can transcribe quote from image using OCR

โš™๏ธ Feature

User will be able to upload an image and transcribe the text from it in order to save the quote.

๐Ÿ“ Functionality

User can upload an image by either clicking on the image upload area or drag and drop the image onto the page, then the image will be interpreted and any text in it will be auto-inserted into the quote field in the form to save a quote.

๐Ÿ–ผ๏ธ Wireframes

Mobile

image

Desktop

image

โœ… Task List

Commit checklist for tasks needed to complete the feature.

โšก Client

  • Create a component to act as a file dropzone using react-dropzone
  • Update component to save a quote to include dropzone component
  • Have files dropped in dropzone send files to tessaract.js to get text
  • Save text returned from tesseract.js as new state for textarea component

๐Ÿง‘โ€โš•๏ธ Clean Up

  • ...
  • ...
  • Make sure that no React state objects are being mutated.
  • Make sure that no event listeners are manipulating the DOM directly.
  • Make sure that click targets are either <a> or <button> elements.
  • Make sure that all click targets show a cursor: pointer when hovered with the mouse.
  • Remove all buttons and placeholders that do not serve the functionality of the feature.
  • Remove all console logs.
  • Remove all commented out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.
  • Create GIFs of the feature being used on both mobile and desktop screen sizes for inclusion in Pull Request.

Feature: User can search for a book using ISBN

โš™๏ธ Feature

What capability will users have when this feature is merged?

๐Ÿ“ Functionality

A description of how the application will work from the perspective of the user.

๐Ÿ–ผ๏ธ Wireframes

Wireframe screenshot(s) of what the app should look like when it is complete.

โœ… Task List

Commit checklist for tasks needed to complete the feature.

๐Ÿ˜ Database

  • Update schema.sql to ...
  • Update data.sql to ...

โ˜๏ธ Server

  • Update server/index.js to ...
  • Test with HTTPie
  • Handle all errors and respond to the client

โšก Client

  • Create a component to ...
  • Update component to ...

๐Ÿง‘โ€โš•๏ธ Clean Up

  • ...
  • ...
  • Make sure that no React state objects are being mutated.
  • Make sure that no event listeners are manipulating the DOM directly.
  • Make sure that click targets are either <a> or <button> elements.
  • Make sure that all click targets show a cursor: pointer when hovered with the mouse.
  • Remove all buttons and placeholders that do not serve the functionality of the feature.
  • Remove all console logs.
  • Remove all commented out code.
  • Remove all CSS properties that have no effect.
  • Check all code for proper formatting and indentation.
  • Confirm that there are no errors in the console while using the application.
  • Confirm that all previous functionality still works without errors.
  • Confirm that the user interface looks natural on both mobile and desktop screens.
  • Create GIFs of the feature being used on both mobile and desktop screen sizes for inclusion in Pull Request.

Polish: Update endpoint to save book image to seek cover images from all possible locations, and save the largest one

โœ… Task List

  • Update endpoint to save a book to do the following:
    • Check the dimensions of the image to see if the innate width is above 300px (use image-size package, relatively small import cost).
      • If so, save using the default image path from ISBNdb
      • If not, start a background search for all possible images of the cover from Google Books, New York Times, etc. Once all images have been received, determine the largest image and update the book listing in the database to use the largest image as its book cover
  • Maybe update to store in S3 to avoid images being deleted in the future.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.