samimwebdev

sample file

Mar 9th, 2022 (edited)
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. <!--- Navbar ---!>
  3. <Navbar bg='light' expand='lg' className='mb-3'>
  4.       <Container className='d-flex flex-row'>
  5.         <Navbar.Brand href='#home' className='issue-brand me-auto'>
  6.           Issue Tracker
  7.         </Navbar.Brand>
  8.         <Navbar.Toggle aria-controls='basic-navbar-nav' />
  9.         <Navbar.Collapse id='basic-navbar-nav'>
  10.           <Nav className='d-flex flex-row'>
  11.             <Nav.Link href='#home'>Home</Nav.Link>
  12.             <Nav.Link href='#addIssue'>Add Issue</Nav.Link>
  13.           </Nav>
  14.         </Navbar.Collapse>
  15.       </Container>
  16.     </Navbar>
  17.  
  18.  
  19.  
  20. <!-- Issue Bar -->
  21. const IssueBar = ({ progressCount, total, newCount, completedCount }) => {
  22.   return (
  23.     <>
  24.       <Row className='mt-4'>
  25.         <Col>
  26.           {' '}
  27.           <span>Total: </span> {total}
  28.         </Col>
  29.         <Col>
  30.           <span className='text-primary'>New: </span>
  31.           {newCount}
  32.         </Col>
  33.         <Col>
  34.           {' '}
  35.           <span className='text-info'>In Progress: </span>
  36.           {progressCount}
  37.         </Col>
  38.         <Col>
  39.           {' '}
  40.           <span className='text-success'>Completed: </span>
  41.           {completedCount}
  42.         </Col>
  43.       </Row>
  44.     </>
  45.   )
  46. }
  47.  
  48. export default IssueBar
  49.  
  50. !-- Add Issue -->
  51. import { useState, useRef } from 'react'
  52. import { v4 as uuid } from 'uuid'
  53. import { Col, Form, Button, Row } from 'react-bootstrap'
  54.  
  55. const generateCurrentDate = () => {
  56.   const date = new Date()
  57.   const year = date.getFullYear()
  58.   let month = date.getMonth() + 1
  59.   let day = date.getUTCDate()
  60.   if (month < 10) {
  61.     month = '0' + month
  62.   }
  63.  
  64.   if (day < 10) {
  65.     day = '0' + day
  66.   }
  67.   console.log(year, month, day)
  68.   return `${year}-${day}-${month}`
  69. }
  70.  
  71. const issue = {
  72.   title: '',
  73.   subTitle: '',
  74.   assignedTo: '',
  75.   start: generateCurrentDate(),
  76.   end: '',
  77.   priority: 'low',
  78.   status: 'new',
  79.   completedPercentage: 0,
  80. }
  81.  
  82. const AddIssue = ({ addIssue }) => {
  83.   const [issueInfo, setIssueInfo] = useState(issue)
  84.  
  85.   const [errorInfo, setErrorInfo] = useState({
  86.     title: '',
  87.     subTitle: '',
  88.     assignedTo: '',
  89.     start: '',
  90.     end: '',
  91.     completedPercentage: '',
  92.   })
  93.  
  94.   const handleChange = (evt) => {
  95.     setIssueInfo({
  96.       ...issueInfo,
  97.       [evt.target.name]: evt.target.value,
  98.     })
  99.  
  100.     setErrorInfo({
  101.       ...errorInfo,
  102.       [evt.target.name]: '',
  103.     })
  104.   }
  105.  
  106.   const handleSubmit = (evt) => {
  107.     const { title, subTitle, assignedTo, start, end } = issueInfo
  108.     evt.preventDefault()
  109.     console.log(start)
  110.  
  111.     //validation part
  112.     if (title === '') {
  113.       setErrorInfo((prevState) => {
  114.         return {
  115.           ...prevState,
  116.           title: 'Title is Required',
  117.         }
  118.       })
  119.     }
  120.  
  121.     if (subTitle === '') {
  122.       setErrorInfo((prevState) => {
  123.         return {
  124.           ...prevState,
  125.           subTitle: 'SubTitle is Required',
  126.         }
  127.       })
  128.     }
  129.  
  130.     if (start === '') {
  131.       setErrorInfo((prevState) => {
  132.         return {
  133.           ...prevState,
  134.           start: 'Please provide start Date',
  135.         }
  136.       })
  137.     }
  138.     if (end === '') {
  139.       setErrorInfo((prevState) => {
  140.         return {
  141.           ...prevState,
  142.           end: 'Please provide end Date',
  143.         }
  144.       })
  145.     }
  146.  
  147.     if (assignedTo === '') {
  148.       setErrorInfo((prevState) => {
  149.         return {
  150.           ...prevState,
  151.           assignedTo: 'Please provide assigned user name',
  152.         }
  153.       })
  154.     }
  155.  
  156.     //check every field (value) of userInfo obj , if every filed is true result will be true(valid) otherwise false(if any values is false)
  157.     const isValid = Object.values(issueInfo).every((elm) => elm)
  158.     console.log('There is a error')
  159.     //incase valid is true  form will be submitted
  160.     if (isValid) {
  161.       // if(errorInfo.values())
  162.       console.log('submitting')
  163.       addIssue({
  164.         id: uuid(),
  165.         ...issueInfo,
  166.       })
  167.       //reset user Info
  168.       setIssueInfo(issue)
  169.     }
  170.   }
  171.  
  172.   const {
  173.     title,
  174.     subTitle,
  175.     assignedTo,
  176.     start,
  177.     end,
  178.     priority,
  179.     status,
  180.     completedPercentage,
  181.   } = issueInfo
  182.   return (
  183.     <>
  184.       <h1 className='mb-4 mt-4'>Add Issue</h1>
  185.       <Form onSubmit={handleSubmit} noValidate>
  186.         <Form.Group as={Row} className='mb-3'>
  187.           <Col xs={3}>
  188.             <Form.Label htmlFor='title' column>
  189.               Title{' '}
  190.             </Form.Label>
  191.           </Col>
  192.           <Col xs={9}>
  193.             <Form.Control
  194.               type='text'
  195.               onChange={handleChange}
  196.               name='title'
  197.               value={title}
  198.               isInvalid={errorInfo.title}
  199.               placeholder='Enter your task name'
  200.             />
  201.             <Form.Control.Feedback type='invalid' className='d-block'>
  202.               {errorInfo?.title && errorInfo?.title}
  203.             </Form.Control.Feedback>
  204.           </Col>
  205.         </Form.Group>
  206.         <Form.Group className='mb-3' as={Row}>
  207.           <Col xs={3}>
  208.             <Form.Label htmlFor='subTitle' column>
  209.               Sub Title{' '}
  210.             </Form.Label>
  211.           </Col>
  212.           <Col xs={9}>
  213.             <Form.Control
  214.               as='textarea'
  215.               rows={2}
  216.               onChange={handleChange}
  217.               name='subTitle'
  218.               value={subTitle}
  219.               isInvalid={errorInfo.subTitle}
  220.               placeholder='Enter your Task details'
  221.             />
  222.             <Form.Control.Feedback type='invalid' className='d-block'>
  223.               {errorInfo?.subTitle}
  224.             </Form.Control.Feedback>
  225.           </Col>
  226.         </Form.Group>
  227.         <Form.Group as={Row} className='mb-3'>
  228.           <Col xs={3}>
  229.             <Form.Label htmlFor='title' column>
  230.               Assigned To{' '}
  231.             </Form.Label>
  232.           </Col>
  233.           <Col xs={9}>
  234.             <Form.Control
  235.               type='text'
  236.               onChange={handleChange}
  237.               name='assignedTo'
  238.               value={assignedTo}
  239.               isInvalid={errorInfo.assignedTo}
  240.               placeholder='Enter name whom you have assigned to'
  241.             />
  242.             <Form.Control.Feedback type='invalid' className='d-block'>
  243.               {errorInfo?.assignedTo && errorInfo?.assignedTo}
  244.             </Form.Control.Feedback>
  245.           </Col>
  246.         </Form.Group>
  247.         <Form.Group as={Row} className='mb-3'>
  248.           <Col xs={3}>
  249.             <Form.Label htmlFor='start' column>
  250.               Start{' '}
  251.             </Form.Label>
  252.           </Col>
  253.           <Col xs={3}>
  254.             <Form.Control
  255.               type='date'
  256.               onChange={handleChange}
  257.               name='start'
  258.               value={start}
  259.               isInvalid={errorInfo.start}
  260.               placeholder='Enter Start date'
  261.             />
  262.             <Form.Control.Feedback type='invalid' className='d-block'>
  263.               {errorInfo?.start && errorInfo?.start}
  264.             </Form.Control.Feedback>
  265.           </Col>
  266.           <Col xs={6}>
  267.             <Row>
  268.               <Col xs={2}>
  269.                 <Form.Label htmlFor='end' column>
  270.                   End{' '}
  271.                 </Form.Label>
  272.               </Col>
  273.               <Col xs={10}>
  274.                 <Form.Control
  275.                   type='date'
  276.                   onChange={handleChange}
  277.                   name='end'
  278.                   value={end}
  279.                   isInvalid={errorInfo.end}
  280.                   placeholder='Enter End Date'
  281.                 />
  282.                 <Form.Control.Feedback type='invalid' className='d-block'>
  283.                   {errorInfo?.end && errorInfo?.end}
  284.                 </Form.Control.Feedback>
  285.               </Col>
  286.             </Row>
  287.           </Col>
  288.         </Form.Group>
  289.         <Form.Group className='mb-3'>
  290.           <Row>
  291.             <Col xs={3}>
  292.               <Form.Label htmlFor='priority' column>
  293.                 priority{' '}
  294.               </Form.Label>
  295.             </Col>
  296.  
  297.             <Col xs='auto'>
  298.               <Form.Check
  299.                 type='radio'
  300.                 onChange={handleChange}
  301.                 name='priority'
  302.                 value='high'
  303.                 label='High'
  304.                 checked={priority === 'high'}
  305.               />
  306.             </Col>
  307.             <Col xs='auto'>
  308.               <Form.Check
  309.                 type='radio'
  310.                 onChange={handleChange}
  311.                 name='priority'
  312.                 label='Medium'
  313.                 value='medium'
  314.                 checked={priority === 'medium'}
  315.               />
  316.             </Col>
  317.             <Col xs='auto'>
  318.               <Form.Check
  319.                 type='radio'
  320.                 onChange={handleChange}
  321.                 name='priority'
  322.                 label='Low'
  323.                 value='low'
  324.                 checked={priority === 'low'}
  325.               />
  326.             </Col>
  327.             <Form.Text className='muted'></Form.Text>
  328.           </Row>
  329.         </Form.Group>
  330.         <Form.Group className='mb-3'>
  331.           <Row>
  332.             <Col xs={3}>
  333.               <Form.Label htmlFor='status' column>
  334.                 Status{' '}
  335.               </Form.Label>
  336.             </Col>
  337.  
  338.             <Col xs='auto'>
  339.               <Form.Check
  340.                 type='radio'
  341.                 onChange={handleChange}
  342.                 name='status'
  343.                 label='New'
  344.                 value='new'
  345.                 checked={status === 'new'}
  346.               />
  347.             </Col>
  348.             <Col xs='auto'>
  349.               <Form.Check
  350.                 type='radio'
  351.                 onChange={handleChange}
  352.                 name='status'
  353.                 label='In Progress'
  354.                 value='inProgress'
  355.                 checked={status === 'inProgress'}
  356.               />
  357.             </Col>
  358.             <Col xs='auto'>
  359.               <Form.Check
  360.                 type='radio'
  361.                 onChange={handleChange}
  362.                 name='status'
  363.                 label='Completed'
  364.                 value='completed'
  365.                 checked={status === 'completed'}
  366.               />
  367.             </Col>
  368.             <Form.Text className='muted'></Form.Text>
  369.           </Row>
  370.         </Form.Group>
  371.         <Form.Group>
  372.           <Row>
  373.             <Col xs={3}>
  374.               <Form.Label htmlFor='title' column>
  375.                 Completed In percentage{' '}
  376.               </Form.Label>
  377.             </Col>
  378.             <Col xs='4'>
  379.               <Form.Range
  380.                 value={completedPercentage}
  381.                 name='completedPercentage'
  382.                 onChange={handleChange}
  383.               />
  384.             </Col>
  385.             <Col xs={1}>{completedPercentage}</Col>
  386.             <Form.Text className='muted'></Form.Text>
  387.           </Row>
  388.         </Form.Group>
  389.         <Button variant='primary' size='md' type='submit'>
  390.           Submit Issue
  391.         </Button>
  392.       </Form>
  393.     </>
  394.   )
  395. }
  396.  
  397. export default AddIssue
  398.  
  399. <!-- css-->
  400.  
  401. @import url('https://fonts.googleapis.com/css2?family=Lobster&family=Recursive:wght@300;400;500&display=swap');
  402.  
  403. body {
  404.   font-family: 'Recursive', sans-serif !important;
  405. }
  406.  
  407. form label {
  408.   font-style: italic;
  409. }
  410.  
  411. .issue-brand {
  412.   font-family: 'Lobster', cursive;
  413.   font-size: 1.5rem !important;
  414.   margin-right: auto !important;
  415. }
  416.  
  417.  
  418.  
  419. import { useState } from 'react'
  420. import IssueBar from './IssueBar'
  421. import IssueNav from './IssueNav'
  422. import AddIssue from './AddIssue'
  423. import Issues from './Issues'
  424. import './index.css'
  425. import { Col, Row, Container } from 'react-bootstrap'
  426.  
  427. //uncontrolled component
  428. <!-- App JS--?
  429.  
  430. function App() {
  431.   const [issues, setIssues] = useState([
  432.     {
  433.       id: 'e83fa1e5-9941-4258-9e31-8fadced461ad',
  434.       title: 'Sample Task Title',
  435.       subTitle: 'Sample Task Description',
  436.       assignedTo: 'samim',
  437.       start: '2022-09-03',
  438.       end: '2022-03-16',
  439.       priority: 'medium',
  440.       status: 'completed',
  441.       completedPercentage: 10,
  442.     },
  443.   ])
  444.   const [total, setTotal] = useState(0)
  445.   const [newCount, setNewCount] = useState(0)
  446.   const [progressCount, setProgressCount] = useState(0)
  447.   const [completedCount, setCompletedCount] = useState(0)
  448.  
  449.   const addIssue = (issue) => {
  450.     setIssues([...issues, issue])
  451.     setTotal((prevTotal) => {
  452.       return prevTotal + 1
  453.     })
  454.     if (issue.status === 'new') {
  455.       setNewCount((prevCount) => prevCount + 1)
  456.     }
  457.  
  458.     if (issue.status === 'inProgress') {
  459.       setProgressCount((prevCount) => prevCount + 1)
  460.     }
  461.     if (issue.status === 'completed') {
  462.       setCompletedCount((prevCount) => prevCount + 1)
  463.     }
  464.   }
  465.  
  466.   return (
  467.     <Row>
  468.       <IssueNav />
  469.       <Col xs={{ span: 10, offset: 2 }}>
  470.         <Container>
  471.           <AddIssue addIssue={addIssue} />
  472.           <IssueBar
  473.             completedCount={completedCount}
  474.             total={total}
  475.             progressCount={progressCount}
  476.             newCount={newCount}
  477.           />
  478.           <Issues issues={issues} />
  479.         </Container>
  480.       </Col>
  481.     </Row>
  482.   )
  483. }
  484.  
  485. export default App
  486.  
  487.  
  488.  
  489.  
Add Comment
Please, Sign In to add comment