desouky22 / ToDoAPP

A basic TO DO application
https://to-do-app-mocha-six.vercel.app
Other
0 stars 0 forks source link

openstack-ai/update-example-env pull request #8

Open openstack-ai[bot] opened 1 year ago

openstack-ai[bot] commented 1 year ago

UPDATE .example.env

REACT_APP_DEBUG= (true | false) 

CREATE src/AddToDoForm.js

export default function AddToDoForm({
  handleSubmit,
  todoItem,
  handleAdd,
  setTodoItem,
}) {
  return (
    <form onSubmit={handleSubmit}>
      <input
        type="text"
        placeholder="Add Todo"
        value={todoItem}
        onChange={(e) => {
          setTodoItem(e.target.value);
        }}
      />
      <button onClick={handleAdd}>Add</button>
    </form>
  );
}

CREATE src/App.js

import ToDoApp from "./ToDoApp";

export default function App() {
  return <ToDoApp />;
}

CREATE src/ToDoApp.js

import ToDoList from "./ToDoList";
import AddToDoForm from "./AddToDoForm";
import useToDOItemAndList from "./useToDoItemAndList";

export default function ToDoApp() {
  const [
    todoItem,
    todoList,
    { handleSubmit, handleAdd, handleDelete, handleCheck, setTodoItem },
  ] = useToDOItemAndList("", []);

  return (
    <>
      <AddToDoForm
        handleSubmit={handleSubmit}
        todoItem={todoItem}
        handleAdd={handleAdd}
        setTodoItem={setTodoItem}
      />
      <ToDoList
        todoList={todoList}
        handleCheck={handleCheck}
        handleAdd={handleAdd}
        handleDelete={handleDelete}
      />
    </>
  );
}

CREATE src/ToDoList.js

export default function ToDoList({
  todoList,
  handleCheck,
  handleAdd,
  handleDelete,
}) {
  return (
    <ul>
      {todoList.map((item) => {
        return (
          <li key={item.id}>
            {item.done ? (
              <>
                <input
                  type="checkbox"
                  id={item.id}
                  checked
                  onChange={() => handleCheck(item.id)}
                />
                <label htmlFor={item.id}>
                  <del>{item.text}</del>
                </label>
              </>
            ) : (
              <>
                <input
                  type="checkbox"
                  id={item.id}
                  onChange={() => handleCheck(item.id)}
                />
                <label htmlFor={item.id}>{item.text}</label>
              </>
            )}

            <button onClick={() => handleDelete(item.id)}>Delete</button>
          </li>
        );
      })}
    </ul>
  );
}

UPDATE src/index.js

import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

CREATE src/logging.js

const DEBUG_MODE = process.env.REACT_APP_DEBUG;
export default function log(param) {
  if (DEBUG_MODE) console.log(param);
}

CREATE src/useToDoItemAndList.js

import { useState } from "react";
import log from "./logging";

export default function useToDOItemAndList(initialItem, initialList) {
  const [todoItem, setTodoItem] = useState(initialItem);
  const [todoList, setTodoList] = useState(initialList);

  function handleSubmit(e) {
    e.preventDefault();
  }

  function handleAdd() {
    if (todoItem !== "") {
      setTodoList([
        ...todoList,
        { id: crypto.randomUUID(), text: todoItem, done: false },
      ]);
    }

    setTodoItem("");
  }

  function handleDelete(id) {
    const filteredList = todoList.filter((item) => {
      return item.id !== id;
    });

    setTodoList(filteredList);
  }

  function handleCheck(id) {
    log(id);
    const filteredList = todoList.map((todoItem) => {
      if (todoItem.id === id) {
        return { ...todoItem, done: !todoItem.done };
      }
      return todoItem;
    });
    setTodoList([...filteredList]);
  }

  return [
    todoItem,
    todoList,
    {
      handleSubmit,
      handleAdd,
      handleDelete,
      handleCheck,
      setTodoItem,
    },
  ];
}
vercel[bot] commented 1 year ago

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
to-do-app ✅ Ready (Inspect) Visit Preview 💬 Add feedback Aug 16, 2023 8:59pm
netlify[bot] commented 1 year ago

Deploy Preview for fabulous-stardust-b9bca0 ready!

Name Link
Latest commit bdf9ea0f8dcd043d56b53d0b5c7727a84128c3a5
Latest deploy log https://app.netlify.com/sites/fabulous-stardust-b9bca0/deploys/64dd385dd721a00008bdf737
Deploy Preview https://deploy-preview-8--fabulous-stardust-b9bca0.netlify.app
Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.