Add Footer component to Landing page
This commit is contained in:
parent
e25a6d3be9
commit
ba3331efe8
5 changed files with 239 additions and 45 deletions
|
@ -3,15 +3,19 @@ import {
|
||||||
CancelScheduleSend,
|
CancelScheduleSend,
|
||||||
Check,
|
Check,
|
||||||
Checklist,
|
Checklist,
|
||||||
|
Edit,
|
||||||
|
History,
|
||||||
Note,
|
Note,
|
||||||
PeopleAlt,
|
PeopleAlt,
|
||||||
Person,
|
Person,
|
||||||
|
Timelapse,
|
||||||
} from '@mui/icons-material'
|
} from '@mui/icons-material'
|
||||||
import {
|
import {
|
||||||
Box,
|
Box,
|
||||||
Button,
|
Button,
|
||||||
Card,
|
Card,
|
||||||
Checkbox,
|
Checkbox,
|
||||||
|
Chip,
|
||||||
Container,
|
Container,
|
||||||
FormControl,
|
FormControl,
|
||||||
Grid,
|
Grid,
|
||||||
|
@ -84,21 +88,24 @@ const ChoreView = () => {
|
||||||
|
|
||||||
const generateInfoCards = chore => {
|
const generateInfoCards = chore => {
|
||||||
const cards = [
|
const cards = [
|
||||||
|
// {
|
||||||
|
// size: 6,
|
||||||
|
// icon: <CalendarMonth />,
|
||||||
|
// text: 'Due Date',
|
||||||
|
// subtext: moment(chore.nextDueDate).format('MM/DD/YYYY hh:mm A'),
|
||||||
|
// },
|
||||||
{
|
{
|
||||||
icon: <CalendarMonth />,
|
size: 6,
|
||||||
text: 'Due Date',
|
|
||||||
subtext: moment(chore.nextDueDate).format('MM/DD/YYYY hh:mm A'),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: <PeopleAlt />,
|
icon: <PeopleAlt />,
|
||||||
text: 'Assigned To',
|
text: 'Assigned To',
|
||||||
subtext: performers.find(p => p.id === chore.assignedTo)?.displayName,
|
subtext: performers.find(p => p.id === chore.assignedTo)?.displayName,
|
||||||
},
|
},
|
||||||
{
|
// {
|
||||||
icon: <Person />,
|
// size: 6,
|
||||||
text: 'Created By',
|
// icon: <Person />,
|
||||||
subtext: performers.find(p => p.id === chore.createdBy)?.displayName,
|
// text: 'Created By',
|
||||||
},
|
// subtext: performers.find(p => p.id === chore.createdBy)?.displayName,
|
||||||
|
// },
|
||||||
// {
|
// {
|
||||||
// icon: <TextFields />,
|
// icon: <TextFields />,
|
||||||
// text: 'Frequency',
|
// text: 'Frequency',
|
||||||
|
@ -107,20 +114,23 @@ const ChoreView = () => {
|
||||||
// chore.frequencyType.slice(1),
|
// chore.frequencyType.slice(1),
|
||||||
// },
|
// },
|
||||||
{
|
{
|
||||||
|
size: 6,
|
||||||
icon: <Checklist />,
|
icon: <Checklist />,
|
||||||
text: 'Total Completed',
|
text: 'Completed',
|
||||||
subtext: `${chore.totalCompletedCount}`,
|
subtext: `${chore.totalCompletedCount} times`,
|
||||||
},
|
},
|
||||||
// {
|
|
||||||
// icon: <Timelapse />,
|
|
||||||
// text: 'Last Completed',
|
|
||||||
// subtext:
|
|
||||||
// chore.lastCompletedDate &&
|
|
||||||
// moment(chore.lastCompletedDate).format('MM/DD/YYYY hh:mm A'),
|
|
||||||
// },
|
|
||||||
{
|
{
|
||||||
|
size: 6,
|
||||||
|
icon: <Timelapse />,
|
||||||
|
text: 'Last time',
|
||||||
|
subtext:
|
||||||
|
chore.lastCompletedDate &&
|
||||||
|
moment(chore.lastCompletedDate).format('MM/DD/YYYY hh:mm A'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
size: 6,
|
||||||
icon: <Person />,
|
icon: <Person />,
|
||||||
text: 'Last Completed',
|
text: 'Last',
|
||||||
subtext: chore.lastCompletedDate
|
subtext: chore.lastCompletedDate
|
||||||
? `${
|
? `${
|
||||||
chore.lastCompletedDate &&
|
chore.lastCompletedDate &&
|
||||||
|
@ -132,6 +142,7 @@ const ChoreView = () => {
|
||||||
: 'Never',
|
: 'Never',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
size: 12,
|
||||||
icon: <Note />,
|
icon: <Note />,
|
||||||
text: 'Recent Note',
|
text: 'Recent Note',
|
||||||
subtext: chore.notes || '--',
|
subtext: chore.notes || '--',
|
||||||
|
@ -195,22 +206,43 @@ const ChoreView = () => {
|
||||||
justifyContent: 'space-between',
|
justifyContent: 'space-between',
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Box>
|
<Box
|
||||||
|
sx={{
|
||||||
|
display: 'flex',
|
||||||
|
flexDirection: 'column',
|
||||||
|
justifyContent: 'center',
|
||||||
|
alignItems: 'center',
|
||||||
|
textAlign: 'center',
|
||||||
|
}}
|
||||||
|
>
|
||||||
<Typography
|
<Typography
|
||||||
level='h3'
|
level='h3'
|
||||||
textAlign={'center'}
|
// textAlign={'center'}
|
||||||
sx={{
|
sx={{
|
||||||
mt: 2,
|
mt: 2,
|
||||||
mb: 4,
|
mb: 1,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{chore.name}
|
{chore.name}
|
||||||
</Typography>
|
</Typography>
|
||||||
|
<Chip startDecorator={<CalendarMonth />} size='lg' sx={{ mb: 4 }}>
|
||||||
|
{chore.nextDueDate
|
||||||
|
? `Due at ${moment(chore.nextDueDate).format('MM/DD/YYYY hh:mm A')}`
|
||||||
|
: 'N/A'}
|
||||||
|
</Chip>
|
||||||
|
</Box>
|
||||||
|
<Box>
|
||||||
<Grid container spacing={1}>
|
<Grid container spacing={1}>
|
||||||
{infoCards.map((info, index) => (
|
{infoCards.map((info, index) => (
|
||||||
<Grid key={index} item xs={12} sm={6}>
|
<Grid key={index} item xs={info.size} sm={info.size}>
|
||||||
<Sheet sx={{ mb: 1, borderRadius: 'md', p: 1, boxShadow: 'sm' }}>
|
<Sheet
|
||||||
|
sx={{
|
||||||
|
mb: 1,
|
||||||
|
borderRadius: 'lg',
|
||||||
|
p: 1,
|
||||||
|
boxShadow: 'sm',
|
||||||
|
}}
|
||||||
|
>
|
||||||
<ListItem>
|
<ListItem>
|
||||||
<ListItemDecorator>
|
<ListItemDecorator>
|
||||||
<IconCard>{info.icon}</IconCard>
|
<IconCard>{info.icon}</IconCard>
|
||||||
|
@ -227,6 +259,28 @@ const ChoreView = () => {
|
||||||
</Sheet>
|
</Sheet>
|
||||||
</Grid>
|
</Grid>
|
||||||
))}
|
))}
|
||||||
|
<Grid item xs={6}>
|
||||||
|
<Button
|
||||||
|
startDecorator={<History />}
|
||||||
|
size='lg'
|
||||||
|
color='success'
|
||||||
|
variant='outlined'
|
||||||
|
fullWidth
|
||||||
|
>
|
||||||
|
History
|
||||||
|
</Button>
|
||||||
|
</Grid>
|
||||||
|
<Grid item xs={6}>
|
||||||
|
<Button
|
||||||
|
startDecorator={<Edit />}
|
||||||
|
size='lg'
|
||||||
|
color='success'
|
||||||
|
variant='outlined'
|
||||||
|
fullWidth
|
||||||
|
>
|
||||||
|
Edit
|
||||||
|
</Button>
|
||||||
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Box>
|
</Box>
|
||||||
{/* <Divider
|
{/* <Divider
|
||||||
|
|
|
@ -25,44 +25,39 @@ const FeatureIcon = styled('div')({
|
||||||
const CardData = [
|
const CardData = [
|
||||||
{
|
{
|
||||||
title: 'Open Source & Transparent',
|
title: 'Open Source & Transparent',
|
||||||
headline: 'Built for the Community',
|
|
||||||
description:
|
description:
|
||||||
'Donetick is a community-driven, open-source project. Contribute, customize, and make task management truly yours.',
|
'Donetick is open source software. You can view, modify, and contribute to the code on GitHub.',
|
||||||
icon: CodeRounded,
|
icon: CodeRounded,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Circles: Your Task Hub',
|
title: 'Circles: Your Task Hub',
|
||||||
headline: 'Share & Conquer Together',
|
|
||||||
description:
|
description:
|
||||||
'Create circles for your family, friends, or team. Easily share tasks and track progress within each group.',
|
'build with sharing in mind. invite other to the circle and you can assign tasks to each other. and only see the tasks the should be shared',
|
||||||
icon: GroupRounded,
|
icon: GroupRounded,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Track Your Progress',
|
title: 'Track Your Progress',
|
||||||
headline: "See Who's Done What",
|
|
||||||
description:
|
description:
|
||||||
'View a history of task completion for each member of your circles. Celebrate successes and stay on top of your goals.',
|
'View a history of completed tasks. or use things to track simply things!',
|
||||||
icon: HistoryRounded,
|
icon: HistoryRounded,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Automated Chore Scheduling',
|
title: 'Automated Task Scheduling',
|
||||||
headline: 'Fully Customizable Recurring Tasks',
|
|
||||||
description:
|
description:
|
||||||
'Set up chores to repeat daily, weekly, or monthly. Donetick will automatically assign and track each task for you.',
|
'Set up Tasks to repeat daily, weekly, or monthly, or maybe specifc day in specifc months? Donetick have a flexible scheduling system',
|
||||||
icon: AutoAwesomeMosaicOutlined,
|
icon: AutoAwesomeMosaicOutlined,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Automated Task Assignment',
|
title: 'Automated Task Assignment',
|
||||||
headline: 'Share Responsibilities Equally',
|
|
||||||
description:
|
description:
|
||||||
'can automatically assigns tasks to each member of your circle. Randomly or based on past completion.',
|
'For shared tasks, Donetick can randomly rotate assignments or choose based on last completion or least assigned.',
|
||||||
icon: AutoAwesomeRounded,
|
icon: AutoAwesomeRounded,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Integrations & Webhooks',
|
title: 'Integrations & Webhooks',
|
||||||
headline: 'API & 3rd Party Integrations',
|
|
||||||
description:
|
description:
|
||||||
'Connect Donetick with your favorite apps and services. Trigger tasks based on events from other platforms.',
|
'Donetick can update things programmatically with API call. you can update things from other services like IFTTT, Homeassistant or even your own service',
|
||||||
icon: Webhook,
|
icon: Webhook,
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
@ -80,7 +75,7 @@ function Feature2({ icon: Icon, title, headline, description, index }) {
|
||||||
<FeatureIcon>
|
<FeatureIcon>
|
||||||
<Icon
|
<Icon
|
||||||
color='primary'
|
color='primary'
|
||||||
style={{ Width: '30px', height: '30px' }}
|
style={{ Width: '30px', height: '30px', fontSize: '30px' }}
|
||||||
stroke={1.5}
|
stroke={1.5}
|
||||||
/>
|
/>
|
||||||
</FeatureIcon>
|
</FeatureIcon>
|
||||||
|
@ -106,7 +101,7 @@ function FeaturesSection() {
|
||||||
<Feature2
|
<Feature2
|
||||||
icon={feature.icon}
|
icon={feature.icon}
|
||||||
title={feature.title}
|
title={feature.title}
|
||||||
headline={feature.headline}
|
// headline={feature.headline}
|
||||||
description={feature.description}
|
description={feature.description}
|
||||||
index={index}
|
index={index}
|
||||||
key={index}
|
key={index}
|
||||||
|
@ -128,7 +123,7 @@ function FeaturesSection() {
|
||||||
</Container>
|
</Container>
|
||||||
|
|
||||||
<Typography level='h4' mt={2} mb={4}>
|
<Typography level='h4' mt={2} mb={4}>
|
||||||
Features Overview
|
Why Donetick?
|
||||||
</Typography>
|
</Typography>
|
||||||
|
|
||||||
<Container maxWidth={'lg'} sx={{ mb: 8 }}></Container>
|
<Container maxWidth={'lg'} sx={{ mb: 8 }}></Container>
|
||||||
|
|
127
src/views/Landing/Footer.jsx
Normal file
127
src/views/Landing/Footer.jsx
Normal file
|
@ -0,0 +1,127 @@
|
||||||
|
import LogoSVG from '@/assets/logo.svg'
|
||||||
|
import { Card, Grid } from '@mui/joy'
|
||||||
|
import Box from '@mui/joy/Box'
|
||||||
|
import Link from '@mui/joy/Link'
|
||||||
|
import Typography from '@mui/joy/Typography'
|
||||||
|
import * as React from 'react'
|
||||||
|
|
||||||
|
function Footer() {
|
||||||
|
return (
|
||||||
|
<Card
|
||||||
|
data-aos-landing-footer
|
||||||
|
data-aos-delay={200}
|
||||||
|
data-aos-anchor='[data-aos-landing-footer]'
|
||||||
|
data-aos='zoom-in-up'
|
||||||
|
>
|
||||||
|
<Grid
|
||||||
|
container
|
||||||
|
component='footer'
|
||||||
|
sx={{
|
||||||
|
display: 'flex',
|
||||||
|
justifyContent: 'space-around',
|
||||||
|
p: 4,
|
||||||
|
// borderTop: '1px solid',
|
||||||
|
bottom: 0,
|
||||||
|
width: '100%',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Box sx={{ display: 'flex', alignItems: 'center' }}>
|
||||||
|
<div className='logo'>
|
||||||
|
<img src={LogoSVG} alt='logo' width='64px' height='64px' />
|
||||||
|
</div>
|
||||||
|
<Box className='flex items-center gap-2'>
|
||||||
|
<Typography
|
||||||
|
level='title-lg'
|
||||||
|
sx={{
|
||||||
|
fontWeight: 700,
|
||||||
|
fontSize: 24,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Done
|
||||||
|
<span
|
||||||
|
style={{
|
||||||
|
color: '#06b6d4',
|
||||||
|
fontWeight: 600,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
tick✓
|
||||||
|
</span>
|
||||||
|
</Typography>
|
||||||
|
<span
|
||||||
|
style={{
|
||||||
|
fontSize: 12,
|
||||||
|
fontWeight: 700,
|
||||||
|
position: 'relative',
|
||||||
|
top: 12,
|
||||||
|
right: 45,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Beta
|
||||||
|
</span>
|
||||||
|
</Box>
|
||||||
|
</Box>
|
||||||
|
<Box>
|
||||||
|
<Typography level='body2' fontWeight='bold' mb={1}>
|
||||||
|
Github
|
||||||
|
</Typography>
|
||||||
|
<Link
|
||||||
|
href='https://github.com/donetick/core'
|
||||||
|
level='body2'
|
||||||
|
sx={{ display: 'block' }}
|
||||||
|
>
|
||||||
|
Core(Backend)
|
||||||
|
</Link>
|
||||||
|
<Link
|
||||||
|
href='https://github.com/donetick/frontend'
|
||||||
|
level='body2'
|
||||||
|
sx={{ display: 'block' }}
|
||||||
|
>
|
||||||
|
Frontend
|
||||||
|
</Link>
|
||||||
|
<Link
|
||||||
|
href='https://github.com/donetick/hassio-addons'
|
||||||
|
level='body2'
|
||||||
|
sx={{ display: 'block' }}
|
||||||
|
>
|
||||||
|
Home Assistant Addon
|
||||||
|
</Link>
|
||||||
|
<Link
|
||||||
|
href='https://github.com/orgs/Donetick/packages'
|
||||||
|
level='body2'
|
||||||
|
sx={{ display: 'block' }}
|
||||||
|
>
|
||||||
|
Packages
|
||||||
|
</Link>
|
||||||
|
</Box>
|
||||||
|
<Box>
|
||||||
|
<Typography level='body2' fontWeight='bold' mb={1}>
|
||||||
|
Links
|
||||||
|
</Typography>
|
||||||
|
|
||||||
|
<Link disabled={true} level='body2' sx={{ display: 'block' }}>
|
||||||
|
Roadmap(soon)
|
||||||
|
</Link>
|
||||||
|
<Link disabled={true} level='body2' sx={{ display: 'block' }}>
|
||||||
|
Documentation(soon)
|
||||||
|
</Link>
|
||||||
|
<Link disabled={true} level='body2' sx={{ display: 'block' }}>
|
||||||
|
Changelog(soon)
|
||||||
|
</Link>
|
||||||
|
</Box>
|
||||||
|
{/* <Box>
|
||||||
|
<Typography level='body2' fontWeight='bold' mb={1}>
|
||||||
|
Others
|
||||||
|
</Typography>
|
||||||
|
<Link href='#' level='body2' sx={{ display: 'block' }}>
|
||||||
|
Telegram Integration
|
||||||
|
</Link>
|
||||||
|
<Link href='#' level='body2' sx={{ display: 'block' }}>
|
||||||
|
Slash Commands
|
||||||
|
</Link>
|
||||||
|
</Box> */}
|
||||||
|
</Grid>
|
||||||
|
</Card>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Footer
|
|
@ -1,4 +1,4 @@
|
||||||
import { Container, Grid } from '@mui/joy'
|
import { Box, Container, Grid } from '@mui/joy'
|
||||||
import AOS from 'aos'
|
import AOS from 'aos'
|
||||||
import 'aos/dist/aos.css'
|
import 'aos/dist/aos.css'
|
||||||
import { useEffect } from 'react'
|
import { useEffect } from 'react'
|
||||||
|
@ -8,6 +8,7 @@ import DemoHistory from './DemoHistory'
|
||||||
import DemoMyChore from './DemoMyChore'
|
import DemoMyChore from './DemoMyChore'
|
||||||
import DemoScheduler from './DemoScheduler'
|
import DemoScheduler from './DemoScheduler'
|
||||||
import FeaturesSection from './FeaturesSection'
|
import FeaturesSection from './FeaturesSection'
|
||||||
|
import Footer from './Footer'
|
||||||
import HomeHero from './HomeHero'
|
import HomeHero from './HomeHero'
|
||||||
const Landing = () => {
|
const Landing = () => {
|
||||||
const Navigate = useNavigate()
|
const Navigate = useNavigate()
|
||||||
|
@ -39,6 +40,17 @@ const Landing = () => {
|
||||||
</Grid>
|
</Grid>
|
||||||
<FeaturesSection />
|
<FeaturesSection />
|
||||||
{/* <PricingSection /> */}
|
{/* <PricingSection /> */}
|
||||||
|
<Box
|
||||||
|
sx={{
|
||||||
|
display: 'flex',
|
||||||
|
justifyContent: 'center',
|
||||||
|
alignItems: 'center',
|
||||||
|
mt: 5,
|
||||||
|
mb: 5,
|
||||||
|
}}
|
||||||
|
></Box>
|
||||||
|
|
||||||
|
<Footer />
|
||||||
</Container>
|
</Container>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ import {
|
||||||
Typography,
|
Typography,
|
||||||
} from '@mui/joy'
|
} from '@mui/joy'
|
||||||
import { useState } from 'react'
|
import { useState } from 'react'
|
||||||
import { useLocation } from 'react-router-dom'
|
import { useLocation, useNavigate } from 'react-router-dom'
|
||||||
import { version } from '../../../package.json'
|
import { version } from '../../../package.json'
|
||||||
import NavBarLink from './NavBarLink'
|
import NavBarLink from './NavBarLink'
|
||||||
const links = [
|
const links = [
|
||||||
|
@ -63,6 +63,7 @@ const links = [
|
||||||
]
|
]
|
||||||
|
|
||||||
const NavBar = () => {
|
const NavBar = () => {
|
||||||
|
const navigate = useNavigate()
|
||||||
const [drawerOpen, setDrawerOpen] = useState(false)
|
const [drawerOpen, setDrawerOpen] = useState(false)
|
||||||
const [openDrawer, closeDrawer] = [
|
const [openDrawer, closeDrawer] = [
|
||||||
() => setDrawerOpen(true),
|
() => setDrawerOpen(true),
|
||||||
|
@ -89,7 +90,12 @@ const NavBar = () => {
|
||||||
<IconButton size='sm' variant='plain' onClick={() => setDrawerOpen(true)}>
|
<IconButton size='sm' variant='plain' onClick={() => setDrawerOpen(true)}>
|
||||||
<MenuRounded />
|
<MenuRounded />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
<Box className='flex items-center gap-2'>
|
<Box
|
||||||
|
className='flex items-center gap-2'
|
||||||
|
onClick={() => {
|
||||||
|
navigate('/my/chores')
|
||||||
|
}}
|
||||||
|
>
|
||||||
<img component='img' src={Logo} width='34' />
|
<img component='img' src={Logo} width='34' />
|
||||||
<Typography
|
<Typography
|
||||||
level='title-lg'
|
level='title-lg'
|
||||||
|
|
Loading…
Add table
Reference in a new issue