This commit is contained in:
Mo Tarbin 2025-02-12 22:26:32 -05:00
commit c06d5f1f30
4 changed files with 106 additions and 64 deletions

40
.github/workflows/build.yml vendored Normal file
View file

@ -0,0 +1,40 @@
name: Build validation
on:
push:
branches: [ "main", "develop" ]
pull_request:
branches: [ "main", "develop" ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [20.x, 22.x]
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- name: Install dependencies
run: npm i
- run: npm run build
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js 22
uses: actions/setup-node@v4
with:
node-version: 22
cache: 'npm'
- name: Install dependencies
run: npm i
# Lint currently reporting lots of preexisting issues
# - run: npm run lint

View file

@ -321,7 +321,7 @@ const ChoreEdit = () => {
// }, [userLabels, labelsV2]) // }, [userLabels, labelsV2])
useEffect(() => { useEffect(() => {
// if frequancy type change to somthing need a due date then set it to the current date: // if frequency type change to somthing need a due date then set it to the current date:
if (!NO_DUE_DATE_REQUIRED_TYPE.includes(frequencyType) && !dueDate) { if (!NO_DUE_DATE_REQUIRED_TYPE.includes(frequencyType) && !dueDate) {
setDueDate(moment(new Date()).format('YYYY-MM-DDTHH:mm:00')) setDueDate(moment(new Date()).format('YYYY-MM-DDTHH:mm:00'))
} }

View file

@ -22,7 +22,7 @@ import { UserContext } from '../../contexts/UserContext'
import { isPlusAccount } from '../../utils/Helpers' import { isPlusAccount } from '../../utils/Helpers'
import ThingTriggerSection from './ThingTriggerSection' import ThingTriggerSection from './ThingTriggerSection'
const FREQUANCY_TYPES_RADIOS = [ const FREQUENCY_TYPES_RADIOS = [
'daily', 'daily',
'weekly', 'weekly',
'monthly', 'monthly',
@ -37,23 +37,6 @@ const FREQUENCY_TYPE_MESSAGE = {
custom: 'This chore will be scheduled based on a custom frequency.', custom: 'This chore will be scheduled based on a custom frequency.',
} }
const REPEAT_ON_TYPE = ['interval', 'days_of_the_week', 'day_of_the_month'] const REPEAT_ON_TYPE = ['interval', 'days_of_the_week', 'day_of_the_month']
const FREQUANCY_TYPES = [
'once',
'daily',
'weekly',
'monthly',
'yearly',
'adaptive',
...REPEAT_ON_TYPE,
]
const MONTH_WITH_NO_31_DAYS = [
// TODO: Handle these months if day is 31
'february',
'april',
'june',
'september',
'november',
]
const MONTHS = [ const MONTHS = [
'january', 'january',
'february', 'february',
@ -93,7 +76,6 @@ const RepeatOnSections = ({
const [daysOfTheWeek, setDaysOfTheWeek] = useState({}) const [daysOfTheWeek, setDaysOfTheWeek] = useState({})
const [monthsOfTheYear, setMonthsOfTheYear] = useState({}) const [monthsOfTheYear, setMonthsOfTheYear] = useState({})
const [intervalUnit, setIntervalUnit] = useState('days') const [intervalUnit, setIntervalUnit] = useState('days')
const [frequancyMetadata, setFrequancyMetadata] = useState({})
const [time, setTime] = useState('18:00') const [time, setTime] = useState('18:00')
const timePickerComponent = ( const timePickerComponent = (
<Grid item sm={12} sx={{ display: 'flex', alignItems: 'center' }}> <Grid item sm={12} sx={{ display: 'flex', alignItems: 'center' }}>
@ -393,7 +375,7 @@ const RepeatSection = ({
'--ListItem-radius': '20px', '--ListItem-radius': '20px',
}} }}
> >
{FREQUANCY_TYPES_RADIOS.map((item, index) => ( {FREQUENCY_TYPES_RADIOS.map((item, index) => (
<ListItem key={item}> <ListItem key={item}>
<Checkbox <Checkbox
// disabled={index === 0} // disabled={index === 0}

View file

@ -7,6 +7,8 @@ import {
CircularProgress, CircularProgress,
Container, Container,
Divider, Divider,
FormControl,
FormHelperText,
Input, Input,
Typography, Typography,
} from '@mui/joy' } from '@mui/joy'
@ -28,6 +30,7 @@ import {
PutWebhookURL, PutWebhookURL,
UpdatePassword, UpdatePassword,
} from '../../utils/Fetcher' } from '../../utils/Fetcher'
import { isPlusAccount } from '../../utils/Helpers'
import PassowrdChangeModal from '../Modals/Inputs/PasswordChangeModal' import PassowrdChangeModal from '../Modals/Inputs/PasswordChangeModal'
import APITokenSettings from './APITokenSettings' import APITokenSettings from './APITokenSettings'
import NotificationSetting from './NotificationSetting' import NotificationSetting from './NotificationSetting'
@ -327,52 +330,69 @@ const Settings = () => {
services when events happen in your Circle. Use the webhook URL services when events happen in your Circle. Use the webhook URL
below to below to
</Typography> </Typography>
<Checkbox <FormControl sx={{ mt: 1 }}>
checked={webhookURL !== null} <Checkbox
onClick={() => { checked={webhookURL !== null}
if (webhookURL === null) {
setWebhookURL('')
} else {
setWebhookURL(null)
}
}}
variant='soft'
label={'Enable Webhook'}
/>
<>
{webhookURL !== null && (
<Typography level='title-sm'>
Webhook URL
<Input
value={webhookURL ? webhookURL : ''}
onChange={e => setWebhookURL(e.target.value)}
size='lg'
sx={{
width: '220px',
mb: 1,
}}
/>
<Typography level='body-sm' color='danger'>
{webhookError}
</Typography>
</Typography>
)}
<Button
variant='soft'
sx={{ width: '110px' }}
onClick={() => { onClick={() => {
PutWebhookURL(webhookURL).then(resp => { if (webhookURL === null) {
if (resp.ok) { setWebhookURL('')
alert('Webhook URL updated successfully.') } else {
} else { setWebhookURL(null)
alert('Failed to update webhook URL.') }
} }}
}) variant='soft'
label='Enable Webhook'
disabled={!isPlusAccount(userProfile)}
overlay
/>
<FormHelperText
sx={{
opacity: !isPlusAccount(userProfile) ? 0.5 : 1,
}} }}
> >
Save Enable webhook notifications for tasks and things updates.{' '}
</Button> {userProfile && !isPlusAccount(userProfile) && (
</> <Chip variant='soft' color='warning'>
Not available in Basic Plan
</Chip>
)}
</FormHelperText>
<>
{webhookURL !== null && (
<Typography level='title-sm'>
Webhook URL
<Input
value={webhookURL ? webhookURL : ''}
onChange={e => setWebhookURL(e.target.value)}
size='lg'
sx={{
width: '220px',
mb: 1,
}}
/>
<Typography level='body-sm' color='danger'>
{webhookError}
</Typography>
</Typography>
)}
<Button
variant='soft'
sx={{ width: '110px', mt: 1 }}
onClick={() => {
PutWebhookURL(webhookURL).then(resp => {
if (resp.ok) {
alert('Webhook URL updated successfully.')
} else {
alert('Failed to update webhook URL.')
}
})
}}
disabled={!isPlusAccount(userProfile)}
>
Save
</Button>
</>
</FormControl>
</> </>
)} )}
</div> </div>