diff --git a/src/views/ChoreEdit/ChoreView.jsx b/src/views/ChoreEdit/ChoreView.jsx
index 8b2d2ed..3347ed7 100644
--- a/src/views/ChoreEdit/ChoreView.jsx
+++ b/src/views/ChoreEdit/ChoreView.jsx
@@ -103,12 +103,13 @@ const ChoreView = () => {
}
}, [chore, performers])
const handleUpdatePriority = priority => {
- if (priority.value === 0) {
- setChorePriority(null)
- } else {
- setChorePriority(priority)
- }
- UpdateChorePriority(choreId, priority.value)
+ UpdateChorePriority(choreId, priority.value).then(response => {
+ if (response.ok) {
+ response.json().then(data => {
+ setChorePriority(priority)
+ })
+ }
+ })
}
const generateInfoCards = chore => {
const cards = [
@@ -265,7 +266,6 @@ const ChoreView = () => {
? `Due at ${moment(chore.nextDueDate).format('MM/DD/YYYY hh:mm A')}`
: 'N/A'}
- {/* show each label : */}
{chore?.labelsV2?.map((label, index) => (
{
const [activeUserId, setActiveUserId] = React.useState(0)
const [isChangeDueDateModalOpen, setIsChangeDueDateModalOpen] =
@@ -504,6 +506,13 @@ const ChoreCard = ({
? 'warning'
: 'neutral'
}
+ startDecorator={
+ Priorities.find(p => p.value === chore.priority)?.icon
+ }
+ onClick={e => {
+ e.stopPropagation()
+ onChipClick({ priority: chore.priority })
+ }}
>
P{chore.priority}
@@ -512,16 +521,22 @@ const ChoreCard = ({
return (
{
+ // e.stopPropagation()
+ // onChipClick({ label: l })
+ // }}
// startDecorator={getIconForLabel(label)}
>
@@ -719,7 +734,9 @@ const ChoreCard = ({
handleAssigneChange(selected.id)
}}
/>
-
+ {confirmModelConfig?.isOpen && (
+
+ )}
{
+ const [anchorEl, setAnchorEl] = useState(null)
+ const menuRef = useRef(null)
+
+ const handleMenuOpen = event => {
+ setAnchorEl(event.currentTarget)
+ }
+
+ const handleMenuClose = () => {
+ setAnchorEl(null)
+ }
+ useEffect(() => {
+ document.addEventListener('mousedown', handleMenuOutsideClick)
+ return () => {
+ document.removeEventListener('mousedown', handleMenuOutsideClick)
+ }
+ }, [anchorEl])
+
+ const handleMenuOutsideClick = event => {
+ if (menuRef.current && !menuRef.current.contains(event.target)) {
+ handleMenuClose()
+ }
+ }
+
+ return (
+ <>
+
+ {icon}
+
+
+
+ >
+ )
+}
+export default IconButtonWithMenu
diff --git a/src/views/Chores/MyChores.jsx b/src/views/Chores/MyChores.jsx
index cc7ab58..eb93df6 100644
--- a/src/views/Chores/MyChores.jsx
+++ b/src/views/Chores/MyChores.jsx
@@ -3,10 +3,12 @@ import {
CancelRounded,
EditCalendar,
FilterAlt,
- FilterAltOff,
+ PriorityHigh,
+ Style,
} from '@mui/icons-material'
import {
Box,
+ Button,
Chip,
Container,
IconButton,
@@ -23,9 +25,11 @@ import { useNavigate } from 'react-router-dom'
import { UserContext } from '../../contexts/UserContext'
import { useChores } from '../../queries/ChoreQueries'
import { GetAllUsers, GetUserProfile } from '../../utils/Fetcher'
+import Priorities from '../../utils/Priorities'
import LoadingComponent from '../components/Loading'
import { useLabels } from '../Labels/LabelQueries'
import ChoreCard from './ChoreCard'
+import IconButtonWithMenu from './IconButtonWithMenu'
const MyChores = () => {
const { userProfile, setUserProfile } = useContext(UserContext)
@@ -122,6 +126,28 @@ const MyChores = () => {
const handleFilterMenuClose = () => {
setAnchorEl(null)
}
+
+ const handleLabelFiltering = chipClicked => {
+ console.log('chipClicked', chipClicked)
+
+ if (chipClicked.label) {
+ const label = chipClicked.label
+ const labelFiltered = [...chores].filter(chore =>
+ chore.labelsV2.some(l => l.id === label.id),
+ )
+ console.log('labelFiltered', labelFiltered)
+ setFilteredChores(labelFiltered)
+ setSelectedFilter('Label: ' + label.name)
+ } else if (chipClicked.priority) {
+ const priority = chipClicked.priority
+ const priorityFiltered = chores.filter(
+ chore => chore.priority === priority,
+ )
+ setFilteredChores(priorityFiltered)
+ setSelectedFilter('Priority: ' + priority)
+ }
+ }
+
const handleChoreUpdated = (updatedChore, event) => {
const newChores = chores.map(chore => {
if (chore.id === updatedChore.id) {
@@ -175,13 +201,16 @@ const MyChores = () => {
chores.map(c => ({
...c,
raw_label: c.labelsV2
- .map(l => userLabels.find(x => (x.id = l.id)).name)
+ .map(l => userLabels.find(x => x.id === l.id).name)
.join(' '),
})),
searchOptions,
)
const handleSearchChange = e => {
+ if (selectedFilter !== 'All') {
+ setSelectedFilter('All')
+ }
const search = e.target.value
if (search === '') {
setFilteredChores(chores)
@@ -209,7 +238,6 @@ const MyChores = () => {
My Chores
*/}
{/* */}
-
{/* Search box to filter */}
{
justifyContent: 'space-between',
alignContent: 'center',
alignItems: 'center',
- gap: 1,
+ gap: 0.5,
}}
>
{
)
}
/>
+ }
+ options={Priorities}
+ selectedItem={selectedFilter}
+ onItemSelect={selected => {
+ handleLabelFiltering({ priority: selected.value })
+ }}
+ mouseClickHandler={handleMenuOutsideClick}
+ isActive={selectedFilter.startsWith('Priority: ')}
+ />
+ }
+ options={userLabels}
+ selectedItem={selectedFilter}
+ onItemSelect={selected => {
+ handleLabelFiltering({ label: selected })
+ }}
+ isActive={selectedFilter.startsWith('Label: ')}
+ mouseClickHandler={handleMenuOutsideClick}
+ useChips
+ />
+
{
borderRadius: 24,
}}
>
- {selectedFilter && selectedFilter != 'All' ? (
-
- ) : (
-
- )}
+
- {/* */}
-
))}
+ {selectedFilter.startsWith('Label: ') ||
+ (selectedFilter.startsWith('Priority: ') && (
+
+ ))}
-
+ {selectedFilter !== 'All' && (
+ {
+ setFilteredChores(chores)
+ setSelectedFilter('All')
+ }}
+ endDecorator={}
+ onClick={() => {
+ setFilteredChores(chores)
+ setSelectedFilter('All')
+ }}
+ >
+ Current Filter: {selectedFilter}
+
+ )}
{/* */}
{filteredChores.length === 0 && (
{
Nothing scheduled
+ {chores.length > 0 && (
+ <>
+
+ >
+ )}
)}
@@ -346,6 +425,7 @@ const MyChores = () => {
onChoreRemove={handleChoreDeleted}
performers={performers}
userLabels={userLabels}
+ onChipClick={handleLabelFiltering}
/>
))}
@@ -421,6 +501,13 @@ const FILTERS = {
)
})
},
+ 'Due Later': function (chores) {
+ return chores.filter(chore => {
+ return (
+ new Date(chore.nextDueDate) > new Date(Date.now() + 24 * 60 * 60 * 1000)
+ )
+ })
+ },
'Created By Me': function (chores, userID) {
return chores.filter(chore => {
return chore.createdBy === userID