Code Monkey home page Code Monkey logo

ignite-timer's Introduction

Ignite Timer

Projeto desenvolvido durante estudos sobre construções de SPAs (Single Page Application) no ReactJs com a Rocketseat utilizando diversos hooks como useState, useEffect, useReducer e useContext. Ignite Timer é uma aplicação de pomodoro onde o usuário pode criar uma atividade e colocar o tempo a ser realizado com ela. Além disso, pode acessar uma segunda página onde mostra o histórico de atividades criadas.


Página Home:

Alt text


Página History:

Alt text


🚀Tecnologias usadas

  • ReactJs
  • TypeScript
  • Styled-components
  • React-hook-form
  • zod
  • React-router-dom
  • date-fns
  • immer
  • Vite
  • Git e Github

👉 Features

  • Criar roteamento de páginas
  • Estilização das páginas
  • Validação de formulário com zod e useForm
  • Criando Coutdown
  • Reduzindo Countdown
  • Interrompendo o ciclo
  • Marcar o ciclo como concluído
  • Guardando o estado dos ciclos no localStorage
  • Formatar datas com Date-fns

👨‍💻 React-router-dom

React Router é uma biblioteca de roteamento de páginas para o React. Sua utilização na aplicação foi importante para criação de rotas entre as páginas de Home e History e também a criação de um layout único para a aplicação.

Documentação: Docs-React-Router

Uso do React-Router-dom na aplicação:

import { Route, Routes } from 'react-router-dom'

export function Router() {
  return (
    <Routes>
      <Route path="/" element={<DefaultLayout />}>
        <Route path="/" element={<Home />} />
        <Route path="/history" element={<History />} />
      </Route>
    </Routes>
  )
}

👨‍💻 Styled-components

Styled Components é uma biblioteca de estilização CSS-in-JS, isso quer dizer que a estilização da aplicação não é mais criada em arquivos CSS e sim em JS. A forma de aplicar ela é como se fosse componentes, como o próprio nome já diz, e lembra muito o pré-processador SASS.

Documentação: Docs-Styled-Components

Uso do Styled-Components na aplicação:

// Arquivo DefaultLayout/styles.ts

import styled from 'styled-components'

export const LayoutContainer = styled.div`
  max-width: 74rem;
  height: calc(100vh - 10rem);
  margin: 5rem auto;
  border-radius: 8px;
  padding: 2.5rem;
  background-color: ${(props) => props.theme['gray-700']};
`

//Arquivo DefaultLayout/index.ts

 return (
    <LayoutContainer>
      <Header />
      <Outlet />
    </LayoutContainer>
  )

👨‍💻 React-hook-form

React-hook-form é uma biblioteca React onde busca utilizar da ideia controlled e uncontrolled do formulário, visando melhor desempenho e tendo o valor dos inputs em tempo real. Ela foi muito importante na aplicação para a validação juntamente com o zod e recebimento dos dados após um submit.

Documentação: Docs-React-hook-form

Uso do React-hook-form na aplicação:

import { FormProvider, useForm } from 'react-hook-form'
import { zodResolver } from '@hookform/resolvers/zod'
import * as zod from 'zod'

const newCycleFormValidationSchema = zod.object({
  task: zod.string().min(1, 'É importante dizer o nome da tarefa'),
  minutesAmount: zod.number().min(5).max(60),
})

// Criando uma interface baseada no schema que criamos acima

type newCycleFormData = zod.infer<typeof newCycleFormValidationSchema>

export function Home() {
  const { interruptedCurrentCycle, createNewCycle, activeCycle } =
    useContext(CycleContext)
  const newCycleForm = useForm<newCycleFormData>({
    resolver: zodResolver(newCycleFormValidationSchema),
    defaultValues: {
      task: '',
      minutesAmount: 0,
    },
  })
  
  //Resto do código...
}

  const { handleSubmit, watch, reset } = newCycleForm

ignite-timer's People

Contributors

lukasrib15 avatar

Watchers

 avatar

ignite-timer's Issues

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.