GithubHelp home page GithubHelp logo

jackwatters45 / notionish Goto Github PK

View Code? Open in Web Editor NEW
2.0 1.0 1.0 3.83 MB

Notion inspired Kanban

Home Page: https://todo-list.jackwatters.dev/

License: MIT License

CSS 1.66% JavaScript 97.90% HTML 0.44%
portfolio

notionish's Introduction

Notion Task Manager App

Overview

This project is a simple task management application that allows users to manage their tasks with customizable properties and views. It is a copy of the way in which I use Notion.io to manage my own personal tasks. Users can create, edit, and delete tasks, as well as sort and filter them based on various properties.

Live Project

https://todo-list.jackwatters.dev/

Preview

Screenshot 2023-04-08 at 6 39 30 PM

Local Install

git clone https://github.com/jackwatters45/todo-list-react.git

npm install

npm run start

Contribute

Support

If you are having issues, please let me know at: [email protected]

License

The project is licensed under the MIT license.

Key Components

  • App: The main component that handles user authentication, database setup, and routing.
  • RootLayout: The layout component that manages the views and properties for each view, as well as the sidebar for individual task details.
  • Database: The component responsible for rendering the tasks as specified by the view and properties.
  • Sidebar: The component that displays the details of a selected task and allows the user to edit properties and add notes.

Usage

  • Authentication: Users can sign in or sign up using their Google, Github, or Facebook login if they wish to save their data, or continue without logging in to use the app without saving their data.
  • Views: The user is provided with two 'views', which allow them to view their dbItems in different formats (currently table and board). Views also allow them to sort and filter their tasks in different ways. The user can create their own views by clicking the 'Add view' button in the navigation bar.
  • Task Management: The user can create new tasks which can be edited inline in the table view or in the sidebar in either view. Tasks can be deleted by clicking the 'Done?' checkbox. Properties can be added, edited, or removed by clicking the '+' button next to the property name in the table header or the sidebar.
  • Notes: The user can add notes to a task in the notes section which can be found in the sidebar

Dependencies

  • React
  • React Router
  • Firebase Authentication
  • Firebase Firestore
  • styled-components
  • react-dnd

Learning Takeaways

  • Separated backend and frontend data changes: Wanted all changes to be rendered quickly but also saved immediately. To do this I separated the data changes into two parts: the frontend and the backend. The frontend changes are rendered immediately, and the backend changes are saved to the database. This allows the user to see their changes immediately, but also ensures that their data is saved in case of a crash or other error.
  • React Router: Got a lot more comfortable using React Router to handle navigation of views and tasks.
  • React Hooks: Became much more comfortable with some of the more intermediate hooks ( useRef , useCallback, useMemo, useLayoutEffect).
  • react-dnd: First time using a drag and drop library
  • Working with a large app: This was the first time I worked on a project of this size, and I learned a lot about how to organize my code and components to make it easier to work with.
  • Working with modals/dropdowns/popups: This was the first time I seriously worked with modals, dropdowns, and popups, and I learned a lot about how to implement them and how to make them work with the rest of the app.
  • Content Editable Divs: Notion uses content editable divs to allow text wrapping. I had never used them before and learned how to use them. Implemented a custom hook for each of my different property types that used them.

notionish's People

Contributors

jackwatters45 avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Forkers

ckellgren

notionish's Issues

Select Improvements

rn selects only work for project (Shouldn't be too hard to change but I do not want to spend the time on it now -> each property should hold an array of all of the possibilities)

Decided against empty name -> removing todo

This allows users to create a bunch of empty todos but I guess that is fine.

const handleBlurNameInput = () => {
if (!todo.name) {
handleRemoveTodoAndSidebar(todo.id);}
};

  onBlur={handleBlurNameInput}

If prop is disabled -> no hover

(ex. ${(props) => props.disabled && hoverStyle}) only problem is rn the style is on an external div not the actual component

Properties saved as is

Property is upper case (not guaranteed) and is being converted to lowercase in the custom hooks. Probably a bad way to do this

Dropping disabled when sort is active

Instead of giving the user the option to remove sort when they try to drop on a sorted list -> just forbid it. May make sense to add later but for now not worth the time.

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.