Skip to content
Snippets Groups Projects
Unverified Commit c311d4a8 authored by Matiss Janis Aboltins's avatar Matiss Janis Aboltins Committed by GitHub
Browse files

:bug: fix recurring schedule datepicker - port to new Popover (#2766)

parent 1fc7c997
No related branches found
No related tags found
No related merge requests found
import React, { useEffect, useReducer, useState } from 'react'; import React, { useEffect, useReducer, useRef, useState } from 'react';
import { sendCatch } from 'loot-core/src/platform/client/fetch'; import { sendCatch } from 'loot-core/src/platform/client/fetch';
import * as monthUtils from 'loot-core/src/shared/months'; import * as monthUtils from 'loot-core/src/shared/months';
...@@ -9,12 +9,12 @@ import { SvgAdd, SvgSubtract } from '../../icons/v0'; ...@@ -9,12 +9,12 @@ import { SvgAdd, SvgSubtract } from '../../icons/v0';
import { theme } from '../../style'; import { theme } from '../../style';
import { Button } from '../common/Button'; import { Button } from '../common/Button';
import { Input } from '../common/Input'; import { Input } from '../common/Input';
import { Popover } from '../common/Popover';
import { Select } from '../common/Select'; import { Select } from '../common/Select';
import { Stack } from '../common/Stack'; import { Stack } from '../common/Stack';
import { Text } from '../common/Text'; import { Text } from '../common/Text';
import { View } from '../common/View'; import { View } from '../common/View';
import { Checkbox } from '../forms'; import { Checkbox } from '../forms';
import { useTooltip, Tooltip } from '../tooltips';
import { DateSelect } from './DateSelect'; import { DateSelect } from './DateSelect';
...@@ -48,19 +48,18 @@ function parsePatternValue(value) { ...@@ -48,19 +48,18 @@ function parsePatternValue(value) {
} }
function parseConfig(config) { function parseConfig(config) {
return ( return {
config || { start: monthUtils.currentDay(),
start: monthUtils.currentDay(), interval: 1,
interval: 1, frequency: 'monthly',
frequency: 'monthly', patterns: [createMonthlyRecurrence(monthUtils.currentDay())],
patterns: [createMonthlyRecurrence(monthUtils.currentDay())], skipWeekend: false,
skipWeekend: false, weekendSolveMode: 'before',
weekendSolveMode: 'before', endMode: 'never',
endMode: 'never', endOccurrences: '1',
endOccurrences: '1', endDate: monthUtils.currentDay(),
endDate: monthUtils.currentDay(), ...config,
} };
);
} }
function unparseConfig(parsed) { function unparseConfig(parsed) {
...@@ -309,12 +308,7 @@ function RecurringScheduleTooltip({ config: currentConfig, onClose, onSave }) { ...@@ -309,12 +308,7 @@ function RecurringScheduleTooltip({ config: currentConfig, onClose, onSave }) {
} }
return ( return (
<Tooltip <>
style={{ padding: 10, width: 380 }}
offset={1}
position="bottom-left"
onClose={onClose}
>
<div style={{ display: 'flex', alignItems: 'center', gap: 5 }}> <div style={{ display: 'flex', alignItems: 'center', gap: 5 }}>
<label htmlFor="start">From</label> <label htmlFor="start">From</label>
<DateSelect <DateSelect
...@@ -471,36 +465,45 @@ function RecurringScheduleTooltip({ config: currentConfig, onClose, onSave }) { ...@@ -471,36 +465,45 @@ function RecurringScheduleTooltip({ config: currentConfig, onClose, onSave }) {
Apply Apply
</Button> </Button>
</div> </div>
</Tooltip> </>
); );
} }
export function RecurringSchedulePicker({ value, buttonStyle, onChange }) { export function RecurringSchedulePicker({ value, buttonStyle, onChange }) {
const { isOpen, close, getOpenEvents } = useTooltip(); const triggerRef = useRef(null);
const [isOpen, setIsOpen] = useState(false);
const dateFormat = useDateFormat() || 'MM/dd/yyyy'; const dateFormat = useDateFormat() || 'MM/dd/yyyy';
function onSave(config) { function onSave(config) {
onChange(config); onChange(config);
close(); setIsOpen(false);
} }
return ( return (
<View> <View>
<Button <Button
{...getOpenEvents()} ref={triggerRef}
style={{ textAlign: 'left', ...buttonStyle }} style={{ textAlign: 'left', ...buttonStyle }}
onClick={() => setIsOpen(true)}
> >
{value {value
? getRecurringDescription(value, dateFormat) ? getRecurringDescription(value, dateFormat)
: 'No recurring date'} : 'No recurring date'}
</Button> </Button>
{isOpen && (
<Popover
triggerRef={triggerRef}
style={{ padding: 10, width: 380 }}
placement="bottom start"
isOpen={isOpen}
onOpenChange={() => setIsOpen(false)}
>
<RecurringScheduleTooltip <RecurringScheduleTooltip
config={value} config={value}
onClose={close} onClose={() => setIsOpen(false)}
onSave={onSave} onSave={onSave}
/> />
)} </Popover>
</View> </View>
); );
} }
---
category: Maintenance
authors: [MatissJanis]
---
Migrating recurring schedule `Tooltip` component to react-aria Tooltip/Popover (vol.5)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment