aboutsummaryrefslogtreecommitdiffstats
path: root/src/views/History
diff options
context:
space:
mode:
Diffstat (limited to 'src/views/History')
-rw-r--r--src/views/History/ChoreHistory.jsx57
-rw-r--r--src/views/History/HistoryCard.jsx18
2 files changed, 68 insertions, 7 deletions
diff --git a/src/views/History/ChoreHistory.jsx b/src/views/History/ChoreHistory.jsx
index 1db1f06..9419f59 100644
--- a/src/views/History/ChoreHistory.jsx
+++ b/src/views/History/ChoreHistory.jsx
@@ -15,9 +15,14 @@ import moment from 'moment'
import React, { useEffect, useState } from 'react'
import { Link, useParams } from 'react-router-dom'
import { API_URL } from '../../Config'
-import { GetAllCircleMembers } from '../../utils/Fetcher'
+import {
+ DeleteChoreHistory,
+ GetAllCircleMembers,
+ UpdateChoreHistory,
+} from '../../utils/Fetcher'
import { Fetch } from '../../utils/TokenManager'
import LoadingComponent from '../components/Loading'
+import EditHistoryModal from '../Modals/EditHistoryModal'
import HistoryCard from './HistoryCard'
const ChoreHistory = () => {
@@ -28,6 +33,8 @@ const ChoreHistory = () => {
const [isLoading, setIsLoading] = useState(true) // Add loading state
const { choreId } = useParams()
+ const [isEditModalOpen, setIsEditModalOpen] = useState(false)
+ const [editHistory, setEditHistory] = useState({})
useEffect(() => {
setIsLoading(true) // Start loading
@@ -63,12 +70,12 @@ const ChoreHistory = () => {
const averageDelay =
histories.reduce((acc, chore) => {
- if (chore.dueDate) {
+ if (chore.dueDate && chore.completedAt) {
// Only consider chores with a due date
return acc + moment(chore.completedAt).diff(chore.dueDate, 'hours')
}
return acc
- }, 0) / histories.length
+ }, 0) / histories.filter(chore => chore.dueDate).length
const averageDelayMoment = moment.duration(averageDelay, 'hours')
const maximumDelay = histories.reduce((acc, chore) => {
if (chore.dueDate) {
@@ -215,6 +222,10 @@ const ChoreHistory = () => {
<List sx={{ p: 0 }}>
{choreHistory.map((historyEntry, index) => (
<HistoryCard
+ onClick={() => {
+ setIsEditModalOpen(true)
+ setEditHistory(historyEntry)
+ }}
historyEntry={historyEntry}
performers={performers}
allHistory={choreHistory}
@@ -224,6 +235,46 @@ const ChoreHistory = () => {
))}
</List>
</Sheet>
+ <EditHistoryModal
+ config={{
+ isOpen: isEditModalOpen,
+ onClose: () => {
+ setIsEditModalOpen(false)
+ },
+ onSave: updated => {
+ UpdateChoreHistory(choreId, editHistory.id, {
+ completedAt: updated.completedAt,
+ dueDate: updated.dueDate,
+ notes: updated.notes,
+ }).then(res => {
+ if (!res.ok) {
+ console.error('Failed to update chore history:', res)
+ return
+ }
+
+ const newRecord = res.json().then(data => {
+ const newRecord = data.res
+ const newHistory = choreHistory.map(record =>
+ record.id === newRecord.id ? newRecord : record,
+ )
+ setChoresHistory(newHistory)
+ setEditHistory(newRecord)
+ setIsEditModalOpen(false)
+ })
+ })
+ },
+ onDelete: () => {
+ DeleteChoreHistory(choreId, editHistory.id).then(() => {
+ const newHistory = choreHistory.filter(
+ record => record.id !== editHistory.id,
+ )
+ setChoresHistory(newHistory)
+ setIsEditModalOpen(false)
+ })
+ },
+ }}
+ historyRecord={editHistory}
+ />
</Container>
)
}
diff --git a/src/views/History/HistoryCard.jsx b/src/views/History/HistoryCard.jsx
index 5e71f52..34a0b33 100644
--- a/src/views/History/HistoryCard.jsx
+++ b/src/views/History/HistoryCard.jsx
@@ -11,7 +11,13 @@ import {
} from '@mui/joy'
import moment from 'moment'
-const HistoryCard = ({ allHistory, performers, historyEntry, index }) => {
+const HistoryCard = ({
+ allHistory,
+ performers,
+ historyEntry,
+ index,
+ onClick,
+}) => {
function formatTimeDifference(startDate, endDate) {
const diffInMinutes = moment(startDate).diff(endDate, 'minutes')
let timeValue = diffInMinutes
@@ -64,7 +70,7 @@ const HistoryCard = ({ allHistory, performers, historyEntry, index }) => {
icon = <Timelapse />
} else {
text = 'No Due Date'
- color = 'info'
+ color = 'neutral'
icon = <CalendarViewDay />
}
@@ -77,7 +83,7 @@ const HistoryCard = ({ allHistory, performers, historyEntry, index }) => {
return (
<>
- <ListItem sx={{ gap: 1.5, alignItems: 'flex-start' }}>
+ <ListItem sx={{ gap: 1.5, alignItems: 'flex-start' }} onClick={onClick}>
{' '}
{/* Adjusted spacing and alignment */}
<ListItemDecorator>
@@ -98,7 +104,11 @@ const HistoryCard = ({ allHistory, performers, historyEntry, index }) => {
}}
>
<Typography level='body1' sx={{ fontWeight: 'md' }}>
- {moment(historyEntry.completedAt).format('ddd MM/DD/yyyy HH:mm')}
+ {historyEntry.completedAt
+ ? moment(historyEntry.completedAt).format(
+ 'ddd MM/DD/yyyy HH:mm',
+ )
+ : 'Skipped'}
</Typography>
{getCompletedChip(historyEntry)}
</Box>